From 5d7714519a07bf3afbc847cbb582523ec86ecbf0 Mon Sep 17 00:00:00 2001 From: flfeders Date: Sun, 29 Sep 2024 19:02:35 +0200 Subject: [PATCH] Pushed Serial Invoices --- components/MainNav.vue | 4 + pages/createDocument/edit/[[id]].vue | 176 +++++++++++++++++++++++++-- pages/createDocument/index.vue | 10 +- 3 files changed, 173 insertions(+), 17 deletions(-) diff --git a/components/MainNav.vue b/components/MainNav.vue index df3846f..f8382b0 100644 --- a/components/MainNav.vue +++ b/components/MainNav.vue @@ -100,6 +100,10 @@ const links = computed(() => { label: "Ausgangsbelege", to: "/createDocument", icon: "i-heroicons-document-text" + },{ + label: "Serienvorlagen", + to: "/createDocument/serialInvoice", + icon: "i-heroicons-document-text" },{ label: "Eingangsbelege", to: "/incomingInvoices", diff --git a/pages/createDocument/edit/[[id]].vue b/pages/createDocument/edit/[[id]].vue index f984384..fd049a6 100644 --- a/pages/createDocument/edit/[[id]].vue +++ b/pages/createDocument/edit/[[id]].vue @@ -44,15 +44,25 @@ const itemInfo = ref({ contactPersonName: null, contactTel: null, contactEMail: null, + serialConfig: { + firstExecution: "", + intervall: "monatlich", + executionUntil: "", + active: true, + dateDirection: "Rückwirkend", + }, + letterhead: null }) const letterheads = ref([]) +const createdDocuments = ref([]) const setupPage = async () => { letterheads.value = (await useSupabaseSelect("letterheads","*")).filter(i => i.documentTypes.length === 0 || i.documentTypes.includes(itemInfo.value.type)) + createdDocuments.value = (await useSupabaseSelect("createddocuments","*")) if(route.params) { if(route.params.id) itemInfo.value = dataStore.getCreatedDocumentById(Number(route.params.id)) @@ -292,6 +302,13 @@ const findDocumentErrors = computed(() => { if(row.mode === "title" && !row.text) errors.push({message: `In Position ${row.pos} ist kein Titel hinterlegt ausgewählt`, type: "breaking"}) }) + if(itemInfo.value.type === "serialInvoices") { + if(!itemInfo.value.serialConfig.intervall) errors.push({message: `Kein Intervall für die Ausführung festgelegt`, type: "breaking"}) + if(!itemInfo.value.serialConfig.dateDirection) errors.push({message: `Kein Richtung für die Datierung festgelegt`, type: "breaking"}) + if(!itemInfo.value.serialConfig.firstExecution) errors.push({message: `Kein Datum für die erste Ausführung festgelegt`, type: "breaking"}) + if(!itemInfo.value.serialConfig.executionUntil) errors.push({message: `Kein Datum für die letzte Ausführung festgelegt`, type: "info"}) + } + return errors }) @@ -460,6 +477,37 @@ const setPosNumbers = () => { }) } +const saveSerialInvoice = async () => { + let createData = { + type: itemInfo.value.type, + state: 'Erstellt', + customer: itemInfo.value.customer, + contact: itemInfo.value.contact, + address: itemInfo.value.address, + project: itemInfo.value.project, + paymentDays: itemInfo.value.paymentDays, + deliveryDateType: itemInfo.value.deliveryDateType, + createdBy: itemInfo.value.createdBy, + title: itemInfo.value.title, + description: itemInfo.value.description, + startText: itemInfo.value.startText, + endText: itemInfo.value.endText, + rows: itemInfo.value.rows, + contactPerson: itemInfo.value.contactPerson, + serialConfig: itemInfo.value.serialConfig + } + + let data = null + + if(route.params.id) { + data = await dataStore.updateItem("createddocuments", {...createData, id: itemInfo.value.id}) + } else { + data = await dataStore.createNewItem("createddocuments", createData) + } + + await router.push(`/createDocument/edit/${data[0].id}`) +} + const saveDocument = async () => { let createData = { type: itemInfo.value.type, @@ -482,7 +530,8 @@ const saveDocument = async () => { startText: itemInfo.value.startText, endText: itemInfo.value.endText, rows: itemInfo.value.rows, - contactPerson: itemInfo.value.contactPerson + contactPerson: itemInfo.value.contactPerson, + linkedDocument: itemInfo.value.linkedDocument } let data = null @@ -547,15 +596,24 @@ setupPage() Entwurf Fertigstellen + + Serienrechnung + @@ -586,6 +644,29 @@ setupPage()
+ + + + + + + @@ -781,6 +862,7 @@ setupPage()
- - - - - - - @@ -936,6 +1014,82 @@ setupPage()
+
+ + Einstellungen für die Serienrechnung + + +
+
+ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
+ +
+ + + + @@ -969,7 +1123,7 @@ setupPage() {{option.name}} - {{option.text}}
@@ -1305,7 +1459,7 @@ setupPage() {{option.name}} - {{option.text}} diff --git a/pages/createDocument/index.vue b/pages/createDocument/index.vue index f0a88a9..2418f52 100644 --- a/pages/createDocument/index.vue +++ b/pages/createDocument/index.vue @@ -224,6 +224,9 @@ const templateTypes = [ }, { key: "deliveryNotes", label: "Lieferscheine" + }, { + key: "confirmationOrders", + label: "Auftragsbestätigungen" } ] const selectedTypes = ref(templateTypes) @@ -237,12 +240,6 @@ const selectItem = (item) => { } else if(item.state !== "Entwurf") { router.push(`/createDocument/show/${item.id}`) } - - - - - - } const displayCurrency = (value, currency = "€") => { @@ -255,6 +252,7 @@ const showDrafts = ref(false) const filteredRows = computed(() => { let temp = items.value.filter(i => types.value.find(x => x.key === i.type)) + temp = temp.filter(i => i.type !== "serialInvoices") /*if(showDrafts.value === true) { temp = temp.filter(i => i.state === "Entwurf")