mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-03-01 12:59:36 +00:00
Statistik-Bereich um Tab für Projekte/Baugruppen erweitern
This commit is contained in:
parent
74513b748d
commit
d67e93064c
18 changed files with 754 additions and 1 deletions
45
assets/controllers/pages/statistics_assembly_controller.js
Normal file
45
assets/controllers/pages/statistics_assembly_controller.js
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
export default class extends Controller {
|
||||
static values = {
|
||||
url: String,
|
||||
confirmMsg: String,
|
||||
successMsg: String,
|
||||
errorMsg: String
|
||||
}
|
||||
|
||||
static targets = ["count"]
|
||||
|
||||
async cleanup(event) {
|
||||
event.preventDefault();
|
||||
|
||||
if (!confirm(this.confirmMsgValue)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(this.urlValue, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
}
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
alert(this.successMsgValue.replace('%count%', data.count));
|
||||
// Update the count displayed in the UI
|
||||
if (this.hasCountTarget) {
|
||||
this.countTarget.innerText = '0';
|
||||
}
|
||||
// Reload page to reflect changes if needed, or just let the user see 0
|
||||
window.location.reload();
|
||||
} else {
|
||||
alert(this.errorMsgValue);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Cleanup failed:', error);
|
||||
alert(this.errorMsgValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -42,7 +42,10 @@ declare(strict_types=1);
|
|||
namespace App\Controller;
|
||||
|
||||
use App\Services\Tools\StatisticsHelper;
|
||||
use App\Entity\AssemblySystem\AssemblyBOMEntry;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
|
|
@ -57,4 +60,33 @@ class StatisticsController extends AbstractController
|
|||
'helper' => $helper,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route(path: '/statistics/cleanup-assembly-bom-entries', name: 'statistics_cleanup_assembly_bom_entries', methods: ['POST'])]
|
||||
public function cleanupAssemblyBOMEntries(EntityManagerInterface $em): JsonResponse
|
||||
{
|
||||
$this->denyAccessUnlessGranted('@tools.statistics');
|
||||
|
||||
$qb = $em->createQueryBuilder();
|
||||
$qb->select('be', 'IDENTITY(be.part) AS part_id')
|
||||
->from(AssemblyBOMEntry::class, 'be')
|
||||
->leftJoin('be.part', 'p')
|
||||
->where('be.part IS NOT NULL')
|
||||
->andWhere('p.id IS NULL');
|
||||
|
||||
$results = $qb->getQuery()->getResult();
|
||||
$count = count($results);
|
||||
|
||||
foreach ($results as $result) {
|
||||
/** @var AssemblyBOMEntry $entry */
|
||||
$entry = $result[0];
|
||||
$part_id = $result['part_id'] ?? 'unknown';
|
||||
|
||||
$entry->setPart(null);
|
||||
$entry->setName(sprintf('part-id=%s not found', $part_id));
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
|
||||
return new JsonResponse(['success' => true, 'count' => $count]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,8 +41,10 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Services\Tools;
|
||||
|
||||
use App\Entity\AssemblySystem\AssemblyBOMEntry;
|
||||
use App\Entity\Attachments\Attachment;
|
||||
use App\Entity\Attachments\AttachmentType;
|
||||
use App\Entity\AssemblySystem\Assembly;
|
||||
use App\Entity\ProjectSystem\Project;
|
||||
use App\Entity\Parts\Category;
|
||||
use App\Entity\Parts\Footprint;
|
||||
|
|
@ -79,6 +81,14 @@ class StatisticsHelper
|
|||
return $this->part_repo->count([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the count of distinct projects.
|
||||
*/
|
||||
public function getDistinctProjectsCount(): int
|
||||
{
|
||||
return $this->em->getRepository(Project::class)->count([]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the summed instocked over all parts (only parts without a measurement unit).
|
||||
*
|
||||
|
|
@ -116,6 +126,7 @@ class StatisticsHelper
|
|||
'storelocation' => StorageLocation::class,
|
||||
'supplier' => Supplier::class,
|
||||
'currency' => Currency::class,
|
||||
'assembly' => Assembly::class,
|
||||
];
|
||||
|
||||
if (!isset($arr[$type])) {
|
||||
|
|
@ -164,4 +175,19 @@ class StatisticsHelper
|
|||
{
|
||||
return $this->attachment_repo->getUserUploadedAttachments();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the count of BOM entries which point to a non-existent part ID.
|
||||
*/
|
||||
public function getInvalidPartBOMEntriesCount(): int
|
||||
{
|
||||
$qb = $this->em->createQueryBuilder();
|
||||
$qb->select('COUNT(be.id)')
|
||||
->from(AssemblyBOMEntry::class, 'be')
|
||||
->leftJoin('be.part', 'p')
|
||||
->where('be.part IS NOT NULL')
|
||||
->andWhere('p.id IS NULL');
|
||||
|
||||
return (int) $qb->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,16 @@
|
|||
{% trans %}statistics.parts{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="assemblies-tab" data-bs-toggle="tab" href="#assemblies" role="tab" aria-controls="assemblies" aria-selected="false">
|
||||
{% trans %}statistics.assemblies{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="projects-tab" data-bs-toggle="tab" href="#projects" role="tab" aria-controls="projects" aria-selected="false">
|
||||
{% trans %}statistics.projects{% endtrans %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="data_structures-tab" data-bs-toggle="tab" href="#data_structures" role="tab" aria-controls="profile" aria-selected="false">
|
||||
{% trans %}statistics.data_structures{% endtrans %}
|
||||
|
|
@ -52,6 +62,58 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade" id="assemblies" role="tabpanel" aria-labelledby="assemblies-tab"
|
||||
{{ stimulus_controller('pages/statistics_assembly', {
|
||||
url: path('statistics_cleanup_assembly_bom_entries'),
|
||||
confirmMsg: 'statistics.cleanup_assembly_bom_entries.confirm'|trans,
|
||||
successMsg: 'statistics.cleanup_assembly_bom_entries.success'|trans,
|
||||
errorMsg: 'statistics.cleanup_assembly_bom_entries.error'|trans
|
||||
}) }}
|
||||
>
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}statistics.property{% endtrans %}</th>
|
||||
<th>{% trans %}statistics.value{% endtrans %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{% trans %}statistics.distinct_assemblies_count{% endtrans %}</td>
|
||||
<td>{{ helper.dataStructuresCount("assembly") }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{% trans %}statistics.invalid_part_bom_entries_count{% endtrans %}</td>
|
||||
<td>
|
||||
<span {{ stimulus_target('pages/statistics_assembly', 'count') }}>{{ helper.invalidPartBOMEntriesCount }}</span>
|
||||
{% if helper.invalidPartBOMEntriesCount > 0 %}
|
||||
<button class="btn btn-sm btn-outline-danger ms-2" {{ stimulus_action('pages/statistics_assembly', 'cleanup') }}>
|
||||
<i class="fas fa-magic"></i> {% trans %}statistics.cleanup_assembly_bom_entries.button{% endtrans %}
|
||||
</button>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade" id="projects" role="tabpanel" aria-labelledby="projects-tab">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans %}statistics.property{% endtrans %}</th>
|
||||
<th>{% trans %}statistics.value{% endtrans %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{% trans %}statistics.distinct_projects_count{% endtrans %}</td>
|
||||
<td>{{ helper.distinctProjectsCount }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade" id="data_structures" role="tabpanel" aria-labelledby="data_structures-tab">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
|
|
@ -131,4 +193,4 @@
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
|||
|
|
@ -1845,6 +1845,48 @@ Související prvky budou přesunuty nahoru.</target>
|
|||
<target>Projekty</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Při čištění došlo k chybě.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% položek bylo úspěšně vyčištěno.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Chcete vyčistit všechny neplatné položky kusovníku? Odkaz na díl bude odstraněn a název nastaven na "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Vyčistit</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Neplatné položky kusovníku (díl nenalezen)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Počet [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Počet [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1803,6 +1803,48 @@ Underelementer vil blive flyttet opad.</target>
|
|||
<target>Projekter</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Der opstod en fejl under oprydningen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% poster blev ryddet op.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Vil du rydde op i alle ugyldige stykliste-poster? Forbindelsen til delen vil blive slettet, og navnet sat til "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Ryd op</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Ugyldige stykliste-poster (del ikke fundet)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Antal [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Antal [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1808,6 +1808,48 @@ Subelemente werden beim Löschen nach oben verschoben.</target>
|
|||
<target>Projekte</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Anzahl [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Anzahl [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Ungültige Stücklisteneinträge (Teil nicht gefunden)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Bereinigen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Möchten Sie alle ungültigen Stücklisteneinträge bereinigen? Die Verknüpfung zum Teil wird gelöscht und der Name auf "part-id=id not found" gesetzt.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% Einträge wurden erfolgreich bereinigt.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Bei der Bereinigung ist ein Fehler aufgetreten.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="a2idAxu" name="statistics.data_structures">
|
||||
<notes>
|
||||
<note priority="1">new</note>
|
||||
|
|
|
|||
|
|
@ -1883,5 +1883,47 @@
|
|||
<target>Έργα</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Παρουσιάστηκε σφάλμα κατά την εκκαθάριση.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% εγγραφές εκκαθαρίστηκαν με επιτυχία.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Θέλετε να εκκαθαρίσετε όλες τις μη έγκυρες εγγραφές BOM; Ο σύνδεσμος προς το εξάρτημα θα διαγραφεί και το όνομα θα οριστεί σε "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Εκκαθάριση</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Μη έγκυρες εγγραφές BOM (το εξάρτημα δεν βρέθηκε)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Αριθμός [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Αριθμός [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
|
|||
|
|
@ -1809,6 +1809,48 @@ Sub elements will be moved upwards.</target>
|
|||
<target>Projects</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Number of [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Number of [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Invalid BOM entries (part not found)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Cleanup</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Do you want to cleanup all invalid BOM entries? The link to the part will be removed and the name set to "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% entries were successfully cleaned up.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>An error occurred during cleanup.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="a2idAxu" name="statistics.data_structures">
|
||||
<notes>
|
||||
<note priority="1">new</note>
|
||||
|
|
|
|||
|
|
@ -1845,6 +1845,48 @@ Subelementos serán desplazados hacia arriba.</target>
|
|||
<target>Proyectos</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Ocurrió un error durante la limpieza.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% entradas se limpiaron con éxito.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>¿Desea limpiar todas las entradas de lista de materiales no válidas? El enlace a la pieza se eliminará y el nombre se establecerá en "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Limpiar</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Entradas de lista de materiales no válidas (pieza no encontrada)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Número de [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Número de [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1828,6 +1828,48 @@ Show/Hide sidebar</target>
|
|||
<target>Projets</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Une erreur est survenue lors du nettoyage.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% entrées ont été nettoyées avec succès.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Voulez-vous nettoyer toutes les entrées de nomenclature non valides ? Le lien vers la pièce sera supprimé et le nom sera défini sur "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Nettoyer</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Entrées de nomenclature non valides (pièce non trouvée)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Nombre de [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Nombre de [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1756,6 +1756,48 @@
|
|||
<target>Projektek</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Hiba történt a tisztítás során.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% tétel sikeresen törölve.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Szeretné törölni az összes érvénytelen darabjegyzék tételt? Az alkatrészre mutató hivatkozás törlődik, a név pedig "part-id=id not found" lesz.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Tisztítás</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Érvénytelen darabjegyzék tételek (alkatrész nem található)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>[[Project]] száma</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>[[Assembly]] száma</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1845,6 +1845,48 @@ I sub elementi saranno spostati verso l'alto.</target>
|
|||
<target>Progetti</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Si è verificato un errore durante la pulizia.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% voci sono state pulite con successo.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Vuoi pulire tutte le voci della distinta base non valide? Il collegamento alla parte verrà rimosso e il nome impostato su "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Pulisci</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Voci della distinta base non valide (parte non trovata)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Numero di [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Numero di [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1828,6 +1828,48 @@
|
|||
<target>プロジェクト</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>クリーンアップ中にエラーが発生しました。</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% 個のエントリが正常にクリーンアップされました。</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>すべての無効な部品表エントリをクリーンアップしますか?部品へのリンクは削除され、名前は "part-id=id not found" に設定されます。</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>クリーンアップ</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>無効な部品表エントリ (部品が見つかりません)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>[[Project]]の数</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>[[Assembly]]の数</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1560,5 +1560,47 @@
|
|||
<target>Projecten</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Er is een fout opgetreden tijdens het opschonen.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% regels zijn succesvol opgeschoond.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Wilt u alle ongeldige stuklijstregels opschonen? De koppeling naar het onderdeel wordt verwijderd en de naam wordt ingesteld op "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Opschonen</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Ongeldige stuklijstregels (onderdeel niet gevonden)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Aantal [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Aantal [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
|
|||
|
|
@ -1842,6 +1842,48 @@ Po usunięciu pod elementy zostaną przeniesione na górę.</target>
|
|||
<target>Projekty</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Wystąpił błąd podczas czyszczenia.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>Pomyślnie wyczyszczono %count% wpisów.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Czy chcesz wyczyścić wszystkie nieprawidłowe wpisy w zestawieniu? Link do części zostanie usunięty, a nazwa ustawiona na "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Wyczyść</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Nieprawidłowe wpisy w zestawieniu (nie znaleziono części)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Liczba [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Liczba [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1846,6 +1846,48 @@
|
|||
<target>Проекты</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>Произошла ошибка при очистке.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>%count% записей успешно очищено.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>Вы хотите очистить все неверные записи в спецификации? Ссылка на деталь будет удалена, а имя установлено в "part-id=id not found".</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>Очистить</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>Недопустимые записи в спецификации (деталь не найдена)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>Количество [[Project]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>Количество [[Assembly]]</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
|
|
@ -1845,6 +1845,48 @@
|
|||
<target>项目</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_error" name="statistics.cleanup_assembly_bom_entries.error">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.error</source>
|
||||
<target>清理过程中发生错误。</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_success" name="statistics.cleanup_assembly_bom_entries.success">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.success</source>
|
||||
<target>成功清理了 %count% 条条目。</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_confirm" name="statistics.cleanup_assembly_bom_entries.confirm">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.confirm</source>
|
||||
<target>您想清理所有无效的物料清单条目吗?部件链接将被删除,名称将设置为 "part-id=id not found"。</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_cleanup_bom_btn" name="statistics.cleanup_assembly_bom_entries.button">
|
||||
<segment state="translated">
|
||||
<source>statistics.cleanup_assembly_bom_entries.button</source>
|
||||
<target>清理</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_invalid_bom_count" name="statistics.invalid_part_bom_entries_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.invalid_part_bom_entries_count</source>
|
||||
<target>无效的物料清单条目(找不到部件)</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="statistics.distinct_projects_count" name="statistics.distinct_projects_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_projects_count</source>
|
||||
<target>[[Project]] 数量</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="stats_assemblies_count" name="statistics.distinct_assemblies_count">
|
||||
<segment state="translated">
|
||||
<source>statistics.distinct_assemblies_count</source>
|
||||
<target>[[Assembly]] 数量</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="bd7zT1d" name="statistics.assemblies">
|
||||
<segment state="translated">
|
||||
<source>statistics.assemblies</source>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue