fixed stocktake and warehouselocation

This commit is contained in:
2025-12-17 18:29:49 +01:00
parent 510cf384c6
commit 08e4fb7f71
8 changed files with 633 additions and 109 deletions
@@ -31,54 +31,67 @@ Vue.component('stocktake-progress-modal', {
<div v-else-if="stocktake" class="h-100 d-flex flex-column">
<!-- Stats Cards -->
<div class="row g-2 mb-3">
<div class="col-md-3">
<div class="col-md-2">
<div class="card stat-card card-primary h-100">
<div class="card-body">
<div class="card-body py-2">
<div class="d-flex justify-content-between align-items-center">
<div>
<h6 class="card-subtitle">Inventur</h6>
<h4 class="card-title">{{ stocktake.title }}</h4>
<h6 class="card-subtitle small">Inventur</h6>
<h5 class="card-title mb-0">{{ stocktake.title }}</h5>
</div>
<i class="fas fa-clipboard-list fa-2x"></i>
<i class="fas fa-clipboard-list fa-lg"></i>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="col-md-2">
<div class="card stat-card card-success h-100">
<div class="card-body">
<div class="card-body py-2">
<div class="d-flex justify-content-between align-items-center">
<div>
<h6 class="card-subtitle">Gescannte Artikel</h6>
<h4 class="card-title">{{ stocktake.totalScannedItems }}</h4>
<h6 class="card-subtitle small">Gescannte Artikel</h6>
<h5 class="card-title mb-0">{{ stocktake.totalScannedItems }}</h5>
</div>
<i class="fas fa-barcode fa-2x"></i>
<i class="fas fa-barcode fa-lg"></i>
</div>
</div>
</div>
</div>
<div class="col-md-2">
<div class="card stat-card card-info h-100">
<div class="card-body py-2">
<div class="d-flex justify-content-between align-items-center">
<div>
<h6 class="card-subtitle small">Lagerort</h6>
<h5 class="card-title mb-0">{{ stocktake.locationName }}</h5>
</div>
<i class="fas fa-warehouse fa-lg"></i>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card stat-card card-info h-100">
<div class="card-body">
<div class="card stat-card card-warning h-100">
<div class="card-body py-2">
<div class="d-flex justify-content-between align-items-center">
<div>
<h6 class="card-subtitle">Lagerort</h6>
<h4 class="card-title">{{ stocktake.locationName }}</h4>
<h6 class="card-subtitle small">Gesamtwert (Einkauf)</h6>
<h5 class="card-title mb-0">{{ formatCurrency(summary.totalValue) }}</h5>
</div>
<i class="fas fa-warehouse fa-2x"></i>
<i class="fas fa-euro-sign fa-lg"></i>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card stat-card h-100" :class="statusCardClass">
<div class="card-body">
<div class="card-body py-2">
<div class="d-flex justify-content-between align-items-center">
<div>
<h6 class="card-subtitle">Status</h6>
<h4 class="card-title">{{ statusText }}</h4>
<h6 class="card-subtitle small">Status</h6>
<h5 class="card-title mb-0">{{ statusText }}</h5>
</div>
<i class="fas fa-info-circle fa-2x"></i>
<i class="fas fa-info-circle fa-lg"></i>
</div>
</div>
</div>
@@ -111,24 +124,39 @@ Vue.component('stocktake-progress-modal', {
<tr>
<th style="width: 120px;">Artikel-Nr.</th>
<th>Artikel</th>
<th class="text-end" style="width: 100px;">Einzelpreis</th>
<th class="text-end" style="width: 80px;">Menge</th>
<th class="text-end" style="width: 110px;">Gesamtpreis</th>
<th style="width: 80px;">Regal</th>
<th style="width: 80px;">Fach</th>
<th style="width: 140px;">Gescannt am</th>
<th style="width: 130px;">Gescannt von</th>
<th style="width: 80px;">Status</th>
</tr>
</thead>
<tbody>
<tr v-for="item in items" :key="item.id">
<tr v-for="item in items" :key="item.id" :class="{ 'table-secondary text-decoration-line-through': item.isOverwritten }">
<td><code class="text-primary">{{ item.articleNumber }}</code></td>
<td>{{ item.articleTitle }}</td>
<td class="text-end">{{ formatCurrency(item.unitPrice) }}</td>
<td class="text-end"><strong class="text-success">{{ item.countedQuantity }}</strong></td>
<td class="text-end"><strong>{{ formatCurrency(item.lineTotal) }}</strong></td>
<td>{{ item.rack || '-' }}</td>
<td>{{ item.shelf || '-' }}</td>
<td class="text-nowrap">{{ item.scannedAt || '-' }}</td>
<td>{{ item.scannedBy || '-' }}</td>
<td>
<span v-if="item.isOverwritten" class="badge bg-warning text-dark">Überschrieben</span>
</td>
</tr>
</tbody>
<tfoot class="table-light">
<tr>
<th colspan="4" class="text-end">Summe:</th>
<th class="text-end text-primary">{{ formatCurrency(summary.totalValue) }}</th>
<th colspan="5"></th>
</tr>
</tfoot>
</table>
<!-- Empty State -->
@@ -151,6 +179,7 @@ Vue.component('stocktake-progress-modal', {
refreshing: false,
stocktake: null,
items: [],
summary: { totalValue: 0, totalQuantity: 0 },
refreshInterval: null,
countdownInterval: null,
countdown: 5,
@@ -216,6 +245,7 @@ Vue.component('stocktake-progress-modal', {
if (response.data.success) {
this.stocktake = response.data.stocktake;
this.items = response.data.items;
this.summary = response.data.summary || { totalValue: 0, totalQuantity: 0 };
}
} catch (error) {
console.error('Failed to load progress:', error);
@@ -252,6 +282,9 @@ Vue.component('stocktake-progress-modal', {
clearInterval(this.countdownInterval);
this.countdownInterval = null;
}
},
formatCurrency(value) {
return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(value || 0);
}
},
beforeDestroy() {