feat(frontend): Erweiterung der Benutzeroberfläche zur Lagerverwaltung

- Hinzufügen einer neuen Anzeige für den Fall, dass alle verfügbaren Lagertypen bereits vorhanden sind.
- Anpassung der Logik zur Überprüfung, ob neue Lagertypen hinzugefügt werden können.
- Aktualisierung der Übersetzungen in den Sprachdateien für die neuen Meldungen zur Lagerverwaltung.
This commit is contained in:
Torsten Schulz (local)
2025-08-31 22:25:19 +02:00
parent 224503b660
commit 3c07e0b5de
3 changed files with 56 additions and 5 deletions

View File

@@ -66,7 +66,8 @@
"addStock": "Lager hinzufügen", "addStock": "Lager hinzufügen",
"stockType": "Lagertyp", "stockType": "Lagertyp",
"selectStockType": "Lagertyp auswählen", "selectStockType": "Lagertyp auswählen",
"quantity": "Menge" "quantity": "Menge",
"allStocksAdded": "Alle verfügbaren Lagertypen sind bereits vorhanden"
}, },
"errorLoadingStockTypes": "Fehler beim Laden der Lagertypen.", "errorLoadingStockTypes": "Fehler beim Laden der Lagertypen.",
"errorAddingStock": "Fehler beim Hinzufügen des Lagers.", "errorAddingStock": "Fehler beim Hinzufügen des Lagers.",

View File

@@ -78,7 +78,8 @@
"addStock": "Add Warehouse", "addStock": "Add Warehouse",
"stockType": "Warehouse Type", "stockType": "Warehouse Type",
"selectStockType": "Select warehouse type", "selectStockType": "Select warehouse type",
"quantity": "Quantity" "quantity": "Quantity",
"allStocksAdded": "All available warehouse types are already present"
}, },
"errorLoadingStockTypes": "Error loading warehouse types.", "errorLoadingStockTypes": "Error loading warehouse types.",
"errorAddingStock": "Error adding warehouse.", "errorAddingStock": "Error adding warehouse.",

View File

@@ -67,11 +67,14 @@
<div v-else class="no-stocks"> <div v-else class="no-stocks">
{{ $t('admin.falukant.edituser.branches.noStocks') }} {{ $t('admin.falukant.edituser.branches.noStocks') }}
</div> </div>
<div class="add-stock-section"> <div v-if="canAddStock(branch)" class="add-stock-section">
<button @click="openAddStockDialog(branch.id)" class="add-stock-btn"> <button @click="openAddStockDialog(branch.id)" class="add-stock-btn">
{{ $t('admin.falukant.edituser.branches.addStock') }} {{ $t('admin.falukant.edituser.branches.addStock') }}
</button> </button>
</div> </div>
<div v-else-if="branch.stocks && branch.stocks.length > 0" class="all-stocks-added">
{{ $t('admin.falukant.edituser.branches.allStocksAdded') }}
</div>
</div> </div>
</div> </div>
<div v-if="!userBranches.length" class="no-branches"> <div v-if="!userBranches.length" class="no-branches">
@@ -91,7 +94,7 @@
<label>{{ $t('admin.falukant.edituser.branches.stockType') }}:</label> <label>{{ $t('admin.falukant.edituser.branches.stockType') }}:</label>
<select v-model="newStock.stockTypeId" class="form-select"> <select v-model="newStock.stockTypeId" class="form-select">
<option value="">{{ $t('admin.falukant.edituser.branches.selectStockType') }}</option> <option value="">{{ $t('admin.falukant.edituser.branches.selectStockType') }}</option>
<option v-for="stockType in stockTypes" :key="stockType.id" :value="stockType.id"> <option v-for="stockType in availableStockTypes" :key="stockType.id" :value="stockType.id">
{{ $t(`falukant.branch.stocktype.${stockType.labelTr}`) }} {{ $t(`falukant.branch.stocktype.${stockType.labelTr}`) }}
</option> </option>
</select> </select>
@@ -158,7 +161,26 @@ export default {
} }
}, },
computed: { computed: {
...mapState('falukant', ['user']) ...mapState('falukant', ['user']),
availableStockTypes() {
if (!this.newStock.branchId || !this.stockTypes.length) {
return this.stockTypes;
}
// Finde den aktuellen Branch
const currentBranch = this.userBranches.find(branch => branch.id === this.newStock.branchId);
if (!currentBranch || !currentBranch.stocks) {
return this.stockTypes;
}
// Erstelle eine Liste der bereits vorhandenen Stock-Type-IDs für diesen Branch
const existingStockTypeIds = currentBranch.stocks.map(stock => stock.stockTypeId);
// Filtere die Stock-Types, die noch nicht in diesem Branch vorhanden sind
return this.stockTypes.filter(stockType =>
!existingStockTypeIds.includes(stockType.id)
);
}
}, },
async mounted() { async mounted() {
const titlesResult = await apiClient.get('/api/falukant/nobility/titels'); const titlesResult = await apiClient.get('/api/falukant/nobility/titels');
@@ -287,6 +309,22 @@ export default {
console.error('Error adding stock:', error); console.error('Error adding stock:', error);
this.$root.$refs.errorDialog.open('tr:admin.falukant.edituser.errorAddingStock'); this.$root.$refs.errorDialog.open('tr:admin.falukant.edituser.errorAddingStock');
} }
},
canAddStock(branch) {
// Prüfe ob noch Stock-Types verfügbar sind, die für diesen Branch noch nicht existieren
if (!branch.stocks || !this.stockTypes.length) {
return true; // Wenn keine Stocks vorhanden sind, kann immer hinzugefügt werden
}
// Erstelle eine Liste der bereits vorhandenen Stock-Type-IDs für diesen Branch
const existingStockTypeIds = branch.stocks.map(stock => stock.stockTypeId);
// Prüfe ob es noch Stock-Types gibt, die nicht in diesem Branch vorhanden sind
const availableStockTypes = this.stockTypes.filter(stockType =>
!existingStockTypeIds.includes(stockType.id)
);
return availableStockTypes.length > 0;
} }
} }
} }
@@ -612,4 +650,15 @@ export default {
.add-stock-btn:hover { .add-stock-btn:hover {
background: #218838; background: #218838;
} }
.all-stocks-added {
margin-top: 15px;
padding: 10px;
background: #e8f5e8;
border: 1px solid #c3e6c3;
border-radius: 4px;
color: #2d5a2d;
font-size: 14px;
text-align: center;
}
</style> </style>