mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 01:25:55 +02:00
Added possibility to search the info providers to update an existing part
This commit is contained in:
parent
73f6d79925
commit
3eeeb01ad1
5 changed files with 56 additions and 7 deletions
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
|
use App\Entity\Parts\Part;
|
||||||
use App\Exceptions\AttachmentDownloadException;
|
use App\Exceptions\AttachmentDownloadException;
|
||||||
use App\Form\InfoProviderSystem\PartSearchType;
|
use App\Form\InfoProviderSystem\PartSearchType;
|
||||||
use App\Form\Part\PartBaseType;
|
use App\Form\Part\PartBaseType;
|
||||||
|
@ -32,6 +33,7 @@ use App\Services\InfoProviderSystem\ProviderRegistry;
|
||||||
use App\Services\LogSystem\EventCommentHelper;
|
use App\Services\LogSystem\EventCommentHelper;
|
||||||
use App\Services\Parts\PartFormHelper;
|
use App\Services\Parts\PartFormHelper;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
@ -61,7 +63,8 @@ class InfoProviderController extends AbstractController
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route('/search', name: 'info_providers_search')]
|
#[Route('/search', name: 'info_providers_search')]
|
||||||
public function search(Request $request): Response
|
#[Route('/update/{target}', name: 'info_providers_update_part_search')]
|
||||||
|
public function search(Request $request, #[MapEntity(id: 'target')] ?Part $update_target): Response
|
||||||
{
|
{
|
||||||
$this->denyAccessUnlessGranted('@info_providers.create_parts');
|
$this->denyAccessUnlessGranted('@info_providers.create_parts');
|
||||||
|
|
||||||
|
@ -70,6 +73,12 @@ class InfoProviderController extends AbstractController
|
||||||
|
|
||||||
$results = null;
|
$results = null;
|
||||||
|
|
||||||
|
//When we are updating a part, use its name as keyword, to make searching easier
|
||||||
|
//However we can only do this, if the form was not submitted yet
|
||||||
|
if ($update_target !== null && !$form->isSubmitted()) {
|
||||||
|
$form->get('keyword')->setData($update_target->getName());
|
||||||
|
}
|
||||||
|
|
||||||
if ($form->isSubmitted() && $form->isValid()) {
|
if ($form->isSubmitted() && $form->isValid()) {
|
||||||
$keyword = $form->get('keyword')->getData();
|
$keyword = $form->get('keyword')->getData();
|
||||||
$providers = $form->get('providers')->getData();
|
$providers = $form->get('providers')->getData();
|
||||||
|
@ -80,6 +89,7 @@ class InfoProviderController extends AbstractController
|
||||||
return $this->render('info_providers/search/part_search.html.twig', [
|
return $this->render('info_providers/search/part_search.html.twig', [
|
||||||
'form' => $form,
|
'form' => $form,
|
||||||
'results' => $results,
|
'results' => $results,
|
||||||
|
'update_target' => $update_target
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -250,7 +250,7 @@ class PartController extends AbstractController
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route(path: '/{id}/from_info_provider/{providerKey}/{providerId}/update', requirements: ['providerId' => '.+'])]
|
#[Route(path: '/{id}/from_info_provider/{providerKey}/{providerId}/update', name: 'info_providers_update_part', requirements: ['providerId' => '.+'])]
|
||||||
public function updateFromInfoProvider(Part $part, Request $request, string $providerKey, string $providerId,
|
public function updateFromInfoProvider(Part $part, Request $request, string $providerKey, string $providerId,
|
||||||
PartInfoRetriever $infoRetriever, PartMerger $partMerger): Response
|
PartInfoRetriever $infoRetriever, PartMerger $partMerger): Response
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,16 +3,25 @@
|
||||||
{% import "info_providers/providers.macro.html.twig" as providers_macro %}
|
{% import "info_providers/providers.macro.html.twig" as providers_macro %}
|
||||||
{% import "helper.twig" as helper %}
|
{% import "helper.twig" as helper %}
|
||||||
|
|
||||||
{% block title %}{% trans %}info_providers.search.title{% endtrans %}{% endblock %}
|
{% block title %}
|
||||||
|
{% if update_target %}
|
||||||
|
{% trans %}info_providers.update_part.title{% endtrans %}
|
||||||
|
{% else %}
|
||||||
|
{% trans %}info_providers.search.title{% endtrans %}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block card_title %}
|
{% block card_title %}
|
||||||
<i class="fas fa-cloud-arrow-down"></i> {% trans %}info_providers.search.title{% endtrans %}
|
{% if update_target %} {# If update_target is set, we update an existing part #}
|
||||||
|
<i class="fas fa-cloud-arrow-down"></i> {% trans %}info_providers.update_part.title{% endtrans %}:
|
||||||
|
<a href="{{ entity_url(update_target) }}" target="_blank" class="text-bg-primary">{{ update_target.name }}</a>
|
||||||
|
{% else %} {# Create a fresh part #}
|
||||||
|
<i class="fas fa-cloud-arrow-down"></i> {% trans %}info_providers.search.title{% endtrans %}
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block card_content %}
|
{% block card_content %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{ form_start(form) }}
|
{{ form_start(form) }}
|
||||||
|
|
||||||
{{ form_row(form.keyword) }}
|
{{ form_row(form.keyword) }}
|
||||||
|
@ -86,7 +95,15 @@
|
||||||
<br>
|
<br>
|
||||||
<small class="text-muted">{{ result.provider_id }}</small>
|
<small class="text-muted">{{ result.provider_id }}</small>
|
||||||
<td>
|
<td>
|
||||||
<a class="btn btn-primary" href="{{ path('info_providers_create_part', {'providerKey': result.provider_key, 'providerId': result.provider_id}) }}"
|
{% if update_target %} {# We update an existing part #}
|
||||||
|
{% set href = path('info_providers_update_part',
|
||||||
|
{'providerKey': result.provider_key, 'providerId': result.provider_id, 'id': update_target.iD}) %}
|
||||||
|
{% else %} {# Create a fresh part #}
|
||||||
|
{% set href = path('info_providers_create_part',
|
||||||
|
{'providerKey': result.provider_key, 'providerId': result.provider_id}) %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<a class="btn btn-primary" href="{{ href }}"
|
||||||
target="_blank" title="{% trans %}part.create.btn{% endtrans %}">
|
target="_blank" title="{% trans %}part.create.btn{% endtrans %}">
|
||||||
<i class="fa-solid fa-plus-square"></i>
|
<i class="fa-solid fa-plus-square"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -30,6 +30,16 @@
|
||||||
{# Merge modal #}
|
{# Merge modal #}
|
||||||
{% include "parts/info/_merge_modal.html.twig" %}
|
{% include "parts/info/_merge_modal.html.twig" %}
|
||||||
|
|
||||||
|
{# Update part from info provider button #}
|
||||||
|
{% if is_granted('edit', part) and is_granted('@info_providers.create_parts') %}
|
||||||
|
<br>
|
||||||
|
<a class="btn btn-info mt-2" href="{{ path('info_providers_update_part_search', {'target': part.iD}) }}">
|
||||||
|
<i class="fas fa-cloud-arrow-down"></i>
|
||||||
|
{% trans %}part.update_part_from_info_provider.btn{% endtrans %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<form method="post" class="mt-2" action="{{ entity_url(part, 'delete') }}"
|
<form method="post" class="mt-2" action="{{ entity_url(part, 'delete') }}"
|
||||||
{{ stimulus_controller('elements/delete_btn') }} {{ stimulus_action('elements/delete_btn', "submit", "submit") }}
|
{{ stimulus_controller('elements/delete_btn') }} {{ stimulus_action('elements/delete_btn', "submit", "submit") }}
|
||||||
data-delete-title="{% trans with {'%name%': part.name|escape }%}part.delete.confirm_title{% endtrans %}"
|
data-delete-title="{% trans with {'%name%': part.name|escape }%}part.delete.confirm_title{% endtrans %}"
|
||||||
|
|
|
@ -12023,5 +12023,17 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
||||||
<target>Merge part</target>
|
<target>Merge part</target>
|
||||||
</segment>
|
</segment>
|
||||||
</unit>
|
</unit>
|
||||||
|
<unit id="efgWRwB" name="part.update_part_from_info_provider.btn">
|
||||||
|
<segment>
|
||||||
|
<source>part.update_part_from_info_provider.btn</source>
|
||||||
|
<target>Update part from info providers</target>
|
||||||
|
</segment>
|
||||||
|
</unit>
|
||||||
|
<unit id="n6_Ec0h" name="info_providers.update_part.title">
|
||||||
|
<segment>
|
||||||
|
<source>info_providers.update_part.title</source>
|
||||||
|
<target>Update existing part from info provider</target>
|
||||||
|
</segment>
|
||||||
|
</unit>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue