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.back Back - - - info_providers.bulk_import.next - Next - - - - - info_providers.bulk_import.finish - Finish - - info_providers.bulk_import.progress Progress: - - - 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.label Bulk info provider import - + bulk_info_provider_import_job_part.label Bulk 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_reached Maximum number of mappings reached