All checks were successful
Build and Push Docker Images / build-website (push) Successful in 23s
Build and Push Docker Images / build-docs (push) Successful in 21s
Build and Push Docker Images / build-backend (push) Successful in 23s
Build and Push Docker Images / build-frontend (push) Successful in 1m12s
Build and Push Docker Images / build-central-services-api (push) Successful in 21s
Build and Push Docker Images / build-central-services-admin (push) Successful in 21s
167 lines
3.1 KiB
Vue
167 lines
3.1 KiB
Vue
<script setup>
|
|
const auth = useAuthStore()
|
|
|
|
const resources = {
|
|
customers: {
|
|
label: "Kunden"
|
|
},
|
|
vendors: {
|
|
label: "Lieferanten"
|
|
},
|
|
products: {
|
|
label: "Artikel"
|
|
},
|
|
spaces: {
|
|
label: "Lagerplätze"
|
|
},
|
|
customerspaces: {
|
|
label: "Kundenlagerplätze"
|
|
},
|
|
invoices: {
|
|
label: "Rechnungen"
|
|
},
|
|
quotes: {
|
|
label: "Angebote"
|
|
},
|
|
costEstimates: {
|
|
label: "Kostenschätzungen"
|
|
},
|
|
inventoryitems: {
|
|
label: "Inventarartikel"
|
|
},
|
|
customerinventoryitems: {
|
|
label: "Kundeninventarartikel"
|
|
},
|
|
projects: {
|
|
label: "Projekte"
|
|
},
|
|
confirmationOrders: {
|
|
label: "Auftragsbestätigungen"
|
|
},
|
|
deliveryNotes: {
|
|
label: "Lieferscheine"
|
|
},
|
|
packingSlips: {
|
|
label: "Packscheine"
|
|
},
|
|
costcentres: {
|
|
label: "Kostenstellen"
|
|
}
|
|
}
|
|
|
|
const createNumberRanges = (ranges = {}) => {
|
|
const freshRanges = structuredClone(ranges)
|
|
|
|
Object.keys(resources).forEach((key) => {
|
|
if (!freshRanges[key]) {
|
|
freshRanges[key] = {
|
|
prefix: "",
|
|
suffix: "",
|
|
nextNumber: 1000
|
|
}
|
|
}
|
|
})
|
|
|
|
return freshRanges
|
|
}
|
|
|
|
const numberRanges = ref({})
|
|
const loading = ref(true)
|
|
|
|
const loadNumberRanges = async () => {
|
|
loading.value = true
|
|
|
|
try {
|
|
const tenant = await useNuxtApp().$api("/api/tenant")
|
|
numberRanges.value = createNumberRanges(tenant?.numberRanges || {})
|
|
|
|
if (tenant?.id) {
|
|
auth.activeTenantData = tenant
|
|
}
|
|
} finally {
|
|
loading.value = false
|
|
}
|
|
}
|
|
|
|
onMounted(loadNumberRanges)
|
|
|
|
const updateNumberRanges = async (range) => {
|
|
const tenant = await useNuxtApp().$api(`/api/tenant/numberrange/${range}`,{
|
|
method: "PUT",
|
|
body: {
|
|
numberRange: numberRanges.value[range]
|
|
}
|
|
})
|
|
|
|
if (tenant?.id) {
|
|
auth.activeTenantData = tenant
|
|
numberRanges.value = createNumberRanges(tenant.numberRanges || {})
|
|
}
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
<template>
|
|
<UDashboardNavbar
|
|
title="Nummernkreise bearbeiten"
|
|
>
|
|
|
|
</UDashboardNavbar>
|
|
<UDashboardToolbar>
|
|
<UAlert
|
|
title="Änderungen an diesen Werten betreffen nur neu Erstellte Einträge."
|
|
color="error"
|
|
variant="outline"
|
|
icon="i-heroicons-exclamation-triangle"
|
|
/>
|
|
</UDashboardToolbar>
|
|
|
|
<UProgress
|
|
v-if="loading"
|
|
animation="carousel"
|
|
class="m-5 w-1/2"
|
|
/>
|
|
<table
|
|
v-else
|
|
class="m-3"
|
|
>
|
|
<tr class="text-left">
|
|
<th>Typ</th>
|
|
<th>Prefix</th>
|
|
<th>Nächste Nummer</th>
|
|
<th>Suffix</th>
|
|
</tr>
|
|
<tr
|
|
v-for="key in Object.keys(resources)"
|
|
:key="key"
|
|
>
|
|
<td>{{resources[key].label}}</td>
|
|
<td>
|
|
<UInput
|
|
v-model="numberRanges[key].prefix"
|
|
@change="updateNumberRanges(key)"
|
|
/>
|
|
</td>
|
|
<td>
|
|
<UInput
|
|
v-model="numberRanges[key].nextNumber"
|
|
@change="updateNumberRanges(key)"
|
|
type="number"
|
|
step="1"
|
|
/>
|
|
</td>
|
|
<td>
|
|
<UInput
|
|
v-model="numberRanges[key].suffix"
|
|
@change="updateNumberRanges(key)"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|