diff --git a/VERSION b/VERSION
index eca07e4c..ccbccc3d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.2
+2.2.0
diff --git a/composer.lock b/composer.lock
index a825af62..1970868e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4022,16 +4022,16 @@
},
{
"name": "dompdf/dompdf",
- "version": "v3.1.1",
+ "version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
- "reference": "794ec856134a73d2a69a474c5d4faa47e1e645b1"
+ "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/794ec856134a73d2a69a474c5d4faa47e1e645b1",
- "reference": "794ec856134a73d2a69a474c5d4faa47e1e645b1",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/b3493e35d31a5e76ec24c3b64a29b0034b2f32a6",
+ "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6",
"shasum": ""
},
"require": {
@@ -4080,9 +4080,9 @@
"homepage": "https://github.com/dompdf/dompdf",
"support": {
"issues": "https://github.com/dompdf/dompdf/issues",
- "source": "https://github.com/dompdf/dompdf/tree/v3.1.1"
+ "source": "https://github.com/dompdf/dompdf/tree/v3.1.2"
},
- "time": "2025-09-20T17:30:31+00:00"
+ "time": "2025-09-23T03:06:41+00:00"
},
{
"name": "dompdf/php-font-lib",
@@ -4945,16 +4945,16 @@
},
{
"name": "jbtronics/dompdf-font-loader-bundle",
- "version": "v1.1.4",
+ "version": "v1.1.5",
"source": {
"type": "git",
"url": "https://github.com/jbtronics/dompdf-font-loader-bundle.git",
- "reference": "1b41014a2dd9e82ba6a62e61deeebe3cdc1eaf1f"
+ "reference": "83a0e50ecceefea0a63915dae758e00788fd067e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jbtronics/dompdf-font-loader-bundle/zipball/1b41014a2dd9e82ba6a62e61deeebe3cdc1eaf1f",
- "reference": "1b41014a2dd9e82ba6a62e61deeebe3cdc1eaf1f",
+ "url": "https://api.github.com/repos/jbtronics/dompdf-font-loader-bundle/zipball/83a0e50ecceefea0a63915dae758e00788fd067e",
+ "reference": "83a0e50ecceefea0a63915dae758e00788fd067e",
"shasum": ""
},
"require": {
@@ -4994,22 +4994,22 @@
],
"support": {
"issues": "https://github.com/jbtronics/dompdf-font-loader-bundle/issues",
- "source": "https://github.com/jbtronics/dompdf-font-loader-bundle/tree/v1.1.4"
+ "source": "https://github.com/jbtronics/dompdf-font-loader-bundle/tree/v1.1.5"
},
- "time": "2025-07-07T20:39:34+00:00"
+ "time": "2025-07-25T20:29:05+00:00"
},
{
"name": "jbtronics/settings-bundle",
- "version": "v3.1.0",
+ "version": "v3.1.1",
"source": {
"type": "git",
"url": "https://github.com/jbtronics/settings-bundle.git",
- "reference": "7f19bac5a66533c6974948a484871087301b2a2e"
+ "reference": "1067dd3d816cd0a6be7ac3d3989587ea05040bd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/7f19bac5a66533c6974948a484871087301b2a2e",
- "reference": "7f19bac5a66533c6974948a484871087301b2a2e",
+ "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/1067dd3d816cd0a6be7ac3d3989587ea05040bd4",
+ "reference": "1067dd3d816cd0a6be7ac3d3989587ea05040bd4",
"shasum": ""
},
"require": {
@@ -5070,7 +5070,7 @@
],
"support": {
"issues": "https://github.com/jbtronics/settings-bundle/issues",
- "source": "https://github.com/jbtronics/settings-bundle/tree/v3.1.0"
+ "source": "https://github.com/jbtronics/settings-bundle/tree/v3.1.1"
},
"funding": [
{
@@ -5082,7 +5082,7 @@
"type": "github"
}
],
- "time": "2025-09-19T06:54:58+00:00"
+ "time": "2025-09-22T22:00:15+00:00"
},
{
"name": "jfcherng/php-color-output",
@@ -7588,24 +7588,26 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v3.0.0",
+ "version": "v3.1.1",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
+ "reference": "5e9b582660b997de205a84c02a3aac7c060900c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
- "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/5e9b582660b997de205a84c02a3aac7c060900c9",
+ "reference": "5e9b582660b997de205a84c02a3aac7c060900c9",
"shasum": ""
},
"require": {
"php": "^8"
},
"require-dev": {
- "phpunit/phpunit": "^9",
- "vimeo/psalm": "^4|^5"
+ "infection/infection": "^0",
+ "nikic/php-fuzzer": "^0",
+ "phpunit/phpunit": "^9|^10|^11",
+ "vimeo/psalm": "^4|^5|^6"
},
"type": "library",
"autoload": {
@@ -7651,7 +7653,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2024-05-08T12:36:18+00:00"
+ "time": "2025-09-22T21:00:33+00:00"
},
{
"name": "paragonie/random_compat",
@@ -18870,16 +18872,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.39",
+ "version": "11.5.40",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "ad5597f79d8489d2870073ac0bc0dd0ad1fa9931"
+ "reference": "4102b2f9250d6dd57d1a1c8c4132b1c744b14b1c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad5597f79d8489d2870073ac0bc0dd0ad1fa9931",
- "reference": "ad5597f79d8489d2870073ac0bc0dd0ad1fa9931",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4102b2f9250d6dd57d1a1c8c4132b1c744b14b1c",
+ "reference": "4102b2f9250d6dd57d1a1c8c4132b1c744b14b1c",
"shasum": ""
},
"require": {
@@ -18903,7 +18905,7 @@
"sebastian/comparator": "^6.3.2",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.1",
- "sebastian/exporter": "^6.3.0",
+ "sebastian/exporter": "^6.3.1",
"sebastian/global-state": "^7.0.2",
"sebastian/object-enumerator": "^6.0.1",
"sebastian/type": "^5.1.3",
@@ -18951,7 +18953,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.39"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.40"
},
"funding": [
{
@@ -18975,7 +18977,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-14T06:20:41+00:00"
+ "time": "2025-09-23T06:23:40+00:00"
},
{
"name": "rector/rector",
diff --git a/src/Controller/PartListsController.php b/src/Controller/PartListsController.php
index b2df18c1..8ea218f4 100644
--- a/src/Controller/PartListsController.php
+++ b/src/Controller/PartListsController.php
@@ -154,12 +154,17 @@ class PartListsController extends AbstractController
$filter_changer($filter);
}
- $filterForm = $this->createForm(PartFilterType::class, $filter, ['method' => 'GET']);
- if($form_changer !== null) {
- $form_changer($filterForm);
- }
+ //If we are in a post request for the tables, we only have to apply the filter form if the submit query param was set
+ //This saves us some time from creating this complicated term on simple list pages, where no special filter is applied
+ $filterForm = null;
+ if ($request->getMethod() !== 'POST' || $request->query->has('part_filter')) {
+ $filterForm = $this->createForm(PartFilterType::class, $filter, ['method' => 'GET']);
+ if ($form_changer !== null) {
+ $form_changer($filterForm);
+ }
- $filterForm->handleRequest($formRequest);
+ $filterForm->handleRequest($formRequest);
+ }
$table = $this->dataTableFactory->createFromType(PartsDataTable::class, array_merge(
['filter' => $filter], $additional_table_vars),
@@ -186,7 +191,7 @@ class PartListsController extends AbstractController
return $this->render($template, array_merge([
'datatable' => $table,
- 'filterForm' => $filterForm->createView(),
+ 'filterForm' => $filterForm?->createView(),
], $additonal_template_vars));
}
diff --git a/src/Entity/Base/AbstractCompany.php b/src/Entity/Base/AbstractCompany.php
index 947d1339..57a3f722 100644
--- a/src/Entity/Base/AbstractCompany.php
+++ b/src/Entity/Base/AbstractCompany.php
@@ -81,7 +81,7 @@ abstract class AbstractCompany extends AbstractPartsContainingDBElement
/**
* @var string The website of the company
*/
- #[Assert\Url]
+ #[Assert\Url(requireTld: false)]
#[Groups(['full', 'company:read', 'company:write', 'import', 'extended'])]
#[ORM\Column(type: Types::STRING)]
#[Assert\Length(max: 255)]
diff --git a/src/Entity/Parts/PartTraits/ManufacturerTrait.php b/src/Entity/Parts/PartTraits/ManufacturerTrait.php
index 5d7f8749..911a0806 100644
--- a/src/Entity/Parts/PartTraits/ManufacturerTrait.php
+++ b/src/Entity/Parts/PartTraits/ManufacturerTrait.php
@@ -49,7 +49,7 @@ trait ManufacturerTrait
/**
* @var string The url to the part on the manufacturer's homepage
*/
- #[Assert\Url]
+ #[Assert\Url(requireTld: false)]
#[Groups(['full', 'import', 'part:read', 'part:write'])]
#[ORM\Column(type: Types::TEXT)]
protected string $manufacturer_product_url = '';
diff --git a/src/Entity/PriceInformations/Orderdetail.php b/src/Entity/PriceInformations/Orderdetail.php
index 3709b37d..8ed76a46 100644
--- a/src/Entity/PriceInformations/Orderdetail.php
+++ b/src/Entity/PriceInformations/Orderdetail.php
@@ -124,7 +124,7 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N
/**
* @var string The URL to the product on the supplier's website
*/
- #[Assert\Url]
+ #[Assert\Url(requireTld: false)]
#[Groups(['full', 'import', 'orderdetail:read', 'orderdetail:write'])]
#[ORM\Column(type: Types::TEXT)]
protected string $supplier_product_url = '';
diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf
index 66f8fb31..06326a21 100644
--- a/translations/messages.de.xlf
+++ b/translations/messages.de.xlf
@@ -8924,6 +8924,12 @@ Element 1 -> Element 1.2
Bauteil ändern
+
+
+ part_list.action.scrollable_hint
+ Scrollen Sie, um alle Aktionen anzuzeigen
+
+ part_list.action.action.title
@@ -9314,6 +9320,72 @@ Element 1 -> Element 1.2
Name des Anhangs
+
+
+ filter.bulk_import_job.label
+ Massenimport-Auftrag
+
+
+
+
+ filter.bulk_import_job.job_status
+ Auftragsstatus
+
+
+
+
+ filter.bulk_import_job.part_status_in_job
+ Bauteile-Status in Auftrag
+
+
+
+
+ filter.bulk_import_job.status.pending
+ Ausstehend
+
+
+
+
+ filter.bulk_import_job.status.in_progress
+ In Bearbeitung
+
+
+
+
+ filter.bulk_import_job.status.completed
+ Abgeschlossen
+
+
+
+
+ filter.bulk_import_job.status.stopped
+ Angehalten
+
+
+
+
+ filter.bulk_import_job.status.failed
+ Fehlgeschlagen
+
+
+
+
+ filter.bulk_import_job.part_status.pending
+ Ausstehend
+
+
+
+
+ filter.bulk_import_job.part_status.completed
+ Abgeschlossen
+
+
+
+
+ filter.bulk_import_job.part_status.skipped
+ Übersprungen
+
+ filter.choice_constraint.operator.ANY
@@ -10886,6 +10958,12 @@ Element 1 -> Element 1.2
Export als XML
+
+
+ part_list.action.export_xlsx
+ Export als Excel
+
+ parts.import.title
@@ -13481,5 +13559,635 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön
Min. Vorschaubild-Breite (px)
+
+
+ info_providers.bulk_import.step1.title
+ Massenimport von Datenquellen – Schritt 1
+
+
+
+
+ info_providers.bulk_import.parts_selected
+ Bauteile ausgewählt
+
+
+
+
+ info_providers.bulk_import.step1.global_mapping_description
+ Konfigurieren Sie Feldzuordnungen, die auf alle ausgewählten Teile angewendet werden sollen. Beispiel: „MPN → LCSC + Mouser” bedeutet, dass die Anbieter LCSC und Mouser anhand des MPN-Feldes jedes Teils durchsucht werden.
+
+
+
+
+ info_providers.bulk_import.selected_parts
+ Ausgewählte Bauteile
+
+
+
+
+ info_providers.bulk_import.field_mappings
+ Feldzuordnungen
+
+
+
+
+ info_providers.bulk_import.field_mappings_help
+ Legen Sie fest, welche Bauteilefelder mit welchen Informationsanbietern durchsucht werden sollen. Mehrere Zuordnungen werden kombiniert.
+
+
+
+
+ info_providers.bulk_import.add_mapping
+ Zuordnung hinzufügen
+
+
+
+
+ info_providers.bulk_import.search_results.title
+ Suchergebnisse
+
+
+
+
+ info_providers.bulk_import.errors
+ Fehler
+
+
+
+
+ info_providers.bulk_import.results_found
+ %count% Ergebnisse gefunden
+
+
+
+
+ info_providers.bulk_import.source_field
+ Bauteilefeld
+
+
+
+
+ info_providers.bulk_import.view_existing
+ Existierendes ansehen
+
+
+
+
+ info_providers.bulk_search.search_field
+ Suchfeld
+
+
+
+
+ info_providers.bulk_search.providers
+ Datenquellen
+
+
+
+
+ info_providers.bulk_import.actions.label
+ Aktionen
+
+
+
+
+ info_providers.bulk_search.providers.help
+ Wählen Sie aus, welche Datenquellen durchsucht werden sollen, wenn Bauteile dieses Feld haben.
+
+
+
+
+ info_providers.bulk_search.submit
+ Alle Bauteile suchen
+
+
+
+
+ info_providers.bulk_search.field.select
+ Wählen Sie ein Feld zum Suchen aus
+
+
+
+
+ info_providers.bulk_search.field.mpn
+ Herstellernummer (MPN)
+
+
+
+
+ info_providers.bulk_search.field.name
+ Bauteile Name
+
+
+
+
+ part_list.action.action.info_provider
+ Datenquellen
+
+
+
+
+ part_list.action.bulk_info_provider_import
+ Massenimport von Datenquellen
+
+
+
+
+ info_providers.bulk_import.step1.spn_recommendation
+ Lieferantenteilenummer (SPN) wird für bessere Ergebnisse empfohlen. Fügen Sie für jeden Lieferanten eine Zuordnung hinzu, damit dessen SPNs verwendet werden können.
+
+
+
+
+ info_providers.bulk_import.update_part
+ Bauteil aktualisieren
+
+
+
+
+ info_providers.bulk_import.prefetch_details
+ Vorabruf der Bauteiledetails
+
+
+
+
+ info_providers.bulk_import.prefetch_details_help
+ Details für alle Ergebnisse vorab abrufen. Dies dauert zwar länger, beschleunigt jedoch den Arbeitsablauf für die Aktualisierung von Bauteilen.
+
+
+
+
+ info_providers.bulk_import.step2.title
+ Massenimport von Informationsquellen
+
+
+
+
+ info_providers.bulk_import.step2.card_title
+ Massenimport für %count% Bauteile – %date%
+
+
+
+
+ info_providers.bulk_import.parts
+ Bauteile
+
+
+
+
+ info_providers.bulk_import.results
+ Ergebnisse
+
+
+
+
+ info_providers.bulk_import.created_at
+ Erstellt am
+
+
+
+
+ info_providers.bulk_import.status.in_progress
+ In Bearbeitung
+
+
+
+
+ info_providers.bulk_import.status.completed
+ Abgeschlossen
+
+
+
+
+ info_providers.bulk_import.status.failed
+ Fehlgeschlagen
+
+
+
+
+ info_providers.bulk_import.table.name
+ Name
+
+
+
+
+ info_providers.bulk_import.table.description
+ Beschreibung
+
+
+
+
+ info_providers.bulk_import.table.manufacturer
+ Hersteller
+
+
+
+
+ info_providers.bulk_import.table.provider
+ Quelle
+
+
+
+
+ info_providers.bulk_import.table.source_field
+ Bauteilefeld
+
+
+
+
+ info_providers.bulk_import.back
+ Zurück
+
+
+
+
+ info_providers.bulk_import.progress
+ Fortschritt:
+
+
+
+
+ info_providers.bulk_import.status.pending
+ Ausstehend
+
+
+
+
+ info_providers.bulk_import.completed
+ abgeschlossen
+
+
+
+
+ info_providers.bulk_import.skipped
+ übersprungen
+
+
+
+
+ info_providers.bulk_import.mark_completed
+ Als abgeschlossen markieren
+
+
+
+
+ info_providers.bulk_import.mark_skipped
+ Als übersprungen markieren
+
+
+
+
+ info_providers.bulk_import.mark_pending
+ Als ausstehend markieren
+
+
+
+
+ info_providers.bulk_import.skip_reason
+ Grund des Überspringens
+
+
+
+
+ info_providers.bulk_import.editing_part
+ Bearbeite Bauteil als Teil des Massenimports
+
+
+
+
+ info_providers.bulk_import.complete
+ Abgeschlossen
+
+
+
+
+ info_providers.bulk_import.existing_jobs
+ Existierende Aufträge
+
+
+
+
+ info_providers.bulk_import.job_name
+ Auftragsname
+
+
+
+
+ info_providers.bulk_import.parts_count
+ Bauteileanzahl
+
+
+
+
+ info_providers.bulk_import.results_count
+ Ergebnisanzahl
+
+
+
+
+ info_providers.bulk_import.progress_label
+ Fortschritt: %current%/%total%
+
+
+
+
+ info_providers.bulk_import.manage_jobs
+ Massenimportaufträge verwalten
+
+
+
+
+ info_providers.bulk_import.view_results
+ Ergebnisse anzeigen
+
+
+
+
+ info_providers.bulk_import.status
+ Status
+
+
+
+
+ info_providers.bulk_import.manage_jobs_description
+ Alle Ihre Massenimportaufträge anzeigen und verwalten. Um einen neuen Auftrag zu erstellen, wählen Sie Bauteile aus und klicken Sie auf „Massenimport von Informationsanbietern”.
+
+
+
+
+ info_providers.bulk_import.no_jobs_found
+ Es wurden keine Massenimportaufträge gefunden.
+
+
+
+
+ info_providers.bulk_import.create_first_job
+ Erstellen Sie Ihren ersten Massenimportauftrag, indem Sie mehrere Bauteile in einer Bauteiletabelle auswählen und die Option „Massenimport aus Informationsanbieter“ auswählen.
+
+
+
+
+ info_providers.bulk_import.confirm_delete_job
+ Möchten Sie diesen Auftrag wirklich löschen?
+
+
+
+
+ info_providers.bulk_import.job_name_template
+ Massenimport für %count% Teile
+
+
+
+
+ info_providers.bulk_import.step2.instructions.title
+ So verwenden Sie den Massenimport
+
+
+
+
+ info_providers.bulk_import.step2.instructions.description
+ Befolgen Sie diese Schritte, um Ihre Teile effizient zu aktualisieren:
+
+
+
+
+ info_providers.bulk_import.step2.instructions.step1
+ Klicken Sie auf „Teil aktualisieren“, um ein Teil aus den Informationsquellen zu aktualisieren.
+
+
+
+
+ info_providers.bulk_import.step2.instructions.step2
+ Überprüfen und ändern Sie die Teileinformationen nach Bedarf. Hinweis: Sie müssen zweimal auf „Speichern“ klicken, um die Änderungen zu speichern.
+
+
+
+
+ info_providers.bulk_import.step2.instructions.step3
+ Klicken Sie auf „Abgeschlossen“, um den Teil als erledigt zu markieren und zu dieser Übersicht zurückzukehren.
+
+
+
+
+ info_providers.bulk_import.created_by
+ Erstellt von
+
+
+
+
+ info_providers.bulk_import.completed_at
+ Abgeschlossen am
+
+
+
+
+ info_providers.bulk_import.action.label
+ Aktion
+
+
+
+
+ info_providers.bulk_import.action.delete
+ Löschen
+
+
+
+
+ info_providers.bulk_import.status.active
+ Aktiv
+
+
+
+
+ info_providers.bulk_import.progress.title
+ Fortschritt
+
+
+
+
+ info_providers.bulk_import.progress.completed_text
+ %completed%/%total% abgeschlossen
+
+
+
+
+ info_providers.bulk_import.status.stopped
+ Angehalten
+
+
+
+
+ info_providers.bulk_import.action.stop
+ Stop
+
+
+
+
+ info_providers.bulk_import.confirm_stop_job
+ Sind sie sicher, dass sie diesen Auftrag anhalten wollen?
+
+
+
+
+ part.filter.in_bulk_import_job
+ Im Massenimport-Auftrag
+
+
+
+
+ part.filter.bulk_import_job_status
+ Status des Massenimportauftrags
+
+
+
+
+ part.filter.bulk_import_part_status
+ Status des Bauteils im Massenimport
+
+
+
+
+ part.edit.tab.bulk_import
+ Massenimportauftrag
+
+
+
+
+ bulk_import.status.pending
+ Ausstehend
+
+
+
+
+ bulk_import.status.in_progress
+ In Bearbeitung
+
+
+
+
+ bulk_import.status.completed
+ Abgeschlossen
+
+
+
+
+ bulk_import.status.stopped
+ Angehalten
+
+
+
+
+ bulk_import.status.failed
+ Fehlgeschlagen
+
+
+
+
+ bulk_import.part_status.pending
+ Ausstehend
+
+
+
+
+ bulk_import.part_status.completed
+ Abgeschlossen
+
+
+
+
+ bulk_import.part_status.skipped
+ Übersprungen
+
+
+
+
+ bulk_import.part_status.failed
+ Fehlgeschlagen
+
+
+
+
+ bulk_info_provider_import_job.label
+ Massenimport von Informationquellen
+
+
+
+
+ bulk_info_provider_import_job_part.label
+ Massenimportauftrag Bauteil
+
+
+
+
+ info_providers.bulk_search.priority
+ Priorität
+
+
+
+
+ info_providers.bulk_search.priority.help
+ Niedrigere Zahlen = höhere Priorität. Gleiche Priorität = Ergebnisse kombinieren. Unterschiedliche Prioritäten = zuerst die höchste versuchen, bei fehlenden Ergebnissen auf die niedrigere zurückgreifen.
+
+
+
+
+ info_providers.bulk_import.priority_system.title
+ Prioritätssystem
+
+
+
+
+ info_providers.bulk_import.priority_system.description
+ Lower numbers = higher priority. Same priority = combine results. Different priorities = try highest first, fallback if no results.
+
+
+
+
+ info_providers.bulk_import.priority_system.example
+ Beispiel: Priorität 1: „LCSC SPN → LCSC“, Priorität 2: „MPN → LCSC + Mouser“, Priorität 3: „Name → Alle Anbieter“
+
+
+
+
+ info_providers.bulk_import.search.submit
+ Datenquellen
+
+
+
+
+ info_providers.bulk_import.research.title
+ Bauteile erneut suchen
+
+
+
+
+ info_providers.bulk_import.research.description
+ Erneute Suche nach Teilen unter Verwendung aktualisierter Informationen (z. B. neue MPNs). Verwendet dieselben Feldzuordnungen wie die ursprüngliche Suche.
+
+
+
+
+ info_providers.bulk_import.research.all_pending
+ Alle ausstehenden Teile erneut suchen
+
+
+
+
+ info_providers.bulk_import.research.part
+ Erneut suchen
+
+
+
+
+ info_providers.bulk_import.research.part_tooltip
+ Dieses Bauteil mit aktualisierten Informationen erneut suchen
+
+
+
+
+ info_providers.bulk_import.max_mappings_reached
+ Maximale Anzahl von Zuordnungen erreicht
+
+
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf
index b109eb6f..a2ec2f65 100644
--- a/translations/messages.en.xlf
+++ b/translations/messages.en.xlf
@@ -9339,12 +9339,6 @@ Element 1 -> Element 1.2
Part Status in Job
-
-
- filter.bulk_import_job.status.any
- Any Status
-
- filter.bulk_import_job.status.pending
@@ -9375,12 +9369,6 @@ Element 1 -> Element 1.2
Failed
-
-
- filter.bulk_import_job.part_status.any
- Any Part Status
-
- filter.bulk_import_job.part_status.pending
@@ -12404,7 +12392,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.ips.element14.apiKey.help
- https://partner.element14.com/.]]>
+ You can register for an API key on <a href="https://partner.element14.com/">https://partner.element14.com/</a>.
@@ -12416,7 +12404,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.ips.element14.storeId.help
- here for a list of valid domains.]]>
+ The store domain to retrieve the data from. This decides the language and currency of results. See <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">here</a> for a list of valid domains.
@@ -12434,7 +12422,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.ips.tme.token.help
- https://developers.tme.eu/en/.]]>
+ You can get an API token and secret on <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a>.
@@ -12482,7 +12470,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.ips.mouser.apiKey.help
- https://eu.mouser.com/api-hub/.]]>
+ You can register for an API key on <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a>.
@@ -12560,7 +12548,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.system.attachments
-
+ Attachments & Files
@@ -12584,7 +12572,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.system.attachments.allowDownloads.help
- Attention: This can be a security issue, as it might allow users to access intranet ressources via Part-DB!]]>
+ With this option users can download external files into Part-DB by providing an URL. <b>Attention: This can be a security issue, as it might allow users to access intranet ressources via Part-DB!</b>
@@ -12758,8 +12746,8 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.system.localization.base_currency_description
- Please note that the currencies are not converted, when changing this value. So changing the default currency after you already added price information, will result in wrong prices!]]>
+ The currency that is used to store price information and exchange rates in. This currency is assumed, when no currency is set for a price information.
+<b>Please note that the currencies are not converted, when changing this value. So changing the default currency after you already added price information, will result in wrong prices!</b>
@@ -12789,7 +12777,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.misc.kicad_eda.category_depth.help
- 0 to show more levels. Set to -1, to show all parts of Part-DB inside a sigle cnategory in KiCad.]]>
+ This value determines the depth of the category tree, that is visible inside KiCad. 0 means that only the top level categories are visible. Set to a value > 0 to show more levels. Set to -1, to show all parts of Part-DB inside a sigle cnategory in KiCad.
@@ -12807,7 +12795,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.behavior.sidebar.items.help
-
+ The menus which appear at the sidebar by default. Order of items can be changed via drag & drop.
@@ -12855,7 +12843,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.behavior.table.parts_default_columns.help
-
+ The columns to show by default in part tables. Order of items can be changed via drag & drop.
@@ -12909,7 +12897,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
settings.ips.oemsecrets.sortMode.M
-
+ Completeness & Manufacturer name
@@ -13638,12 +13626,6 @@ Please note, that you can not impersonate a disabled user. If you try you will g
Source Field
-
-
- info_providers.bulk_import.create_part
- Create Part
-
- info_providers.bulk_import.view_existing
@@ -13710,18 +13692,6 @@ Please note, that you can not impersonate a disabled user. If you try you will g
Bulk Info Provider Import
-
-
- info_providers.bulk_import.clear_selections
- Clear All Selections
-
-
-
-
- info_providers.bulk_import.clear_row
- Clear this row's selections
-
- info_providers.bulk_import.step1.spn_recommendation
@@ -13824,126 +13794,18 @@ Please note, that you can not impersonate a disabled user. If you try you will g
Source Field
-
-
- info_providers.bulk_import.table.action
- Action
-
-
-
-
- info_providers.bulk_import.action.select
- Select
-
-
-
-
- info_providers.bulk_import.action.deselect
- Deselect
-
-
-
-
- info_providers.bulk_import.action.view_details
- View Details
-
-
-
-
- info_providers.bulk_import.no_results
- No results found
-
-
-
-
- info_providers.bulk_import.processing
- Processing...
-
-
-
-
- info_providers.bulk_import.error
- Error occurred during import
-
-
-
-
- info_providers.bulk_import.success
- Import completed successfully
-
-
-
-
- info_providers.bulk_import.partial_success
- Import completed with some errors
-
-
-
-
- info_providers.bulk_import.retry
- Retry
-
-
-
-
- info_providers.bulk_import.cancel
- Cancel
-
-
-
-
- info_providers.bulk_import.confirm
- Confirm Import
-
- info_providers.bulk_import.backBack
-
-
- info_providers.bulk_import.next
- Next
-
-
-
-
- info_providers.bulk_import.finish
- Finish
-
- info_providers.bulk_import.progressProgress:
-
-
- info_providers.bulk_import.time_remaining
- Estimated time remaining: %time%
-
-
-
-
- info_providers.bulk_import.details_modal.title
- Part Details
-
-
-
-
- info_providers.bulk_import.details_modal.close
- Close
-
-
-
-
- info_providers.bulk_import.details_modal.select_this_part
- Select This Part
-
- info_providers.bulk_import.status.pending
@@ -14148,24 +14010,6 @@ Please note, that you can not impersonate a disabled user. If you try you will g
%completed% / %total% completed
-
-
- info_providers.bulk_import.error.deleting_job
- Error deleting job
-
-
-
-
- info_providers.bulk_import.error.unknown
- Unknown error
-
-
-
-
- info_providers.bulk_import.error.deleting_job_with_details
- Error deleting job: %error%
-
- info_providers.bulk_import.status.stopped
@@ -14190,18 +14034,6 @@ Please note, that you can not impersonate a disabled user. If you try you will g
In Bulk Import Job
-
-
- part.filter.in_bulk_import_job.yes
- Yes
-
-
-
-
- part.filter.in_bulk_import_job.no
- No
-
- part.filter.bulk_import_job_status
@@ -14274,20 +14106,14 @@ Please note, that you can not impersonate a disabled user. If you try you will g
Failed
-
-
- filter.operator
- Operator
-
-
-
+ bulk_info_provider_import_job.labelBulk info provider import
-
+ bulk_info_provider_import_job_part.labelBulk Import Job Part
@@ -14328,12 +14154,6 @@ Please note, that you can not impersonate a disabled user. If you try you will g
Search Providers
-
-
- info_providers.bulk_import.searching
- Searching
-
- info_providers.bulk_import.research.title
@@ -14365,7 +14185,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g
-
+ info_providers.bulk_import.max_mappings_reachedMaximum number of mappings reached