diff --git a/components/displayOpenBalances.vue b/components/displayOpenBalances.vue
index a21f401..70245e3 100644
--- a/components/displayOpenBalances.vue
+++ b/components/displayOpenBalances.vue
@@ -12,7 +12,7 @@ let unpaidOverdueInvoicesCount = ref(0)
let draftInvoicesSum = ref(0)
let draftInvoicesCount = ref(0)
-let countUnfinishedOpenIncomingInvoices = ref(0)
+let countPreparedOpenIncomingInvoices = ref(0)
const setupPage = async () => {
let items = (await useSupabaseSelect("createddocuments","*, statementallocations(*), customer(id,name), linkedDocument(*)")).filter(i => !i.archived)
@@ -45,8 +45,7 @@ const setupPage = async () => {
})
draftInvoicesCount.value = draftDocuments.length
- let filetype = (await supabase.from("filetags").select().eq("tenant",profileStore.currentTenant).eq("incomingDocumentType","invoices").single()).data.id
- countUnfinishedOpenIncomingInvoices.value = (await supabase.from("files").select("id").eq("tenant",profileStore.currentTenant).eq("type", filetype).is("incominginvoice",null)).data.length
+ countPreparedOpenIncomingInvoices.value = (await supabase.from("incominginvoices").select("id").eq("tenant",profileStore.currentTenant).eq("state", "Vorbereitet")).data.length
}
@@ -84,9 +83,9 @@ setupPage()
| ToDo Eingangsrechnungsrechnungen: |
{{countUnfinishedOpenIncomingInvoices}} Stk |
+ >{{countPreparedOpenIncomingInvoices}} Stk
0 Stk |
diff --git a/pages/incomingInvoices/edit/[id].vue b/pages/incomingInvoices/edit/[id].vue
index 97b0e12..f7ae24e 100644
--- a/pages/incomingInvoices/edit/[id].vue
+++ b/pages/incomingInvoices/edit/[id].vue
@@ -125,14 +125,43 @@ const totalCalculated = computed(() => {
})
-const updateIncomingInvoice = async () => {
+const updateIncomingInvoice = async (setBooked = false) => {
let item = itemInfo.value
delete item.files
+ if(item.state === "Vorbereitet" && !setBooked) {
+ item.state = "Entwurf"
+ } else if(item.state === "Vorbereitet" && setBooked) {
+ item.state = "Gebucht"
+ }
+
const data = await dataStore.updateItem('incominginvoices',item)
}
+const findIncomingInvoiceErrors = computed(() => {
+ let errors = []
+
+ if(itemInfo.value.vendor === null) errors.push({message: "Es ist kein Lieferant ausgewählt", type: "breaking"})
+ if(itemInfo.value.reference === null) errors.push({message: "Es ist keine Referenz angegeben", type: "breaking"})
+ if(itemInfo.value.date === null) errors.push({message: "Es ist kein Datum ausgewählt", type: "breaking"})
+ if(itemInfo.value.dueDate === null) errors.push({message: "Es ist kein Fälligkeitsdatum ausgewählt", type: "breaking"})
+ if(itemInfo.value.paymentType === null) errors.push({message: "Es ist keine Zahlart ausgewählt", type: "breaking"})
+ if(itemInfo.value.description === null) errors.push({message: "Es ist keine Beschreibung angegeben", type: "info"})
+
+
+ itemInfo.value.accounts.forEach(account => {
+ if(account.account === null) errors.push({message: "Es ist keine Kategorie ausgewählt", type: "breaking"})
+ if(account.amountNet === null) errors.push({message: "Es ist kein Nettobetrag angegeben", type: "breaking"})
+ if(account.taxType === null) errors.push({message: "Es ist kein Steuertyp ausgewählt", type: "breaking"})
+ if(account.costCentre === null) errors.push({message: "Es ist keine Kostenstelle ausgewählt", type: "info"})
+
+ })
+
+
+ return errors.sort((a,b) => (a.type === "breaking") ? -1 : 1)
+})
+
@@ -144,6 +173,12 @@ const updateIncomingInvoice = async () => {
>
Speichern
+
+ Speichern & Buchen
+
@@ -158,7 +193,22 @@ const updateIncomingInvoice = async () => {
/>
+
+
+
+ -
+ {{error.message}}
+
+
+
+
@@ -470,7 +520,7 @@ const updateIncomingInvoice = async () => {
overflow-y: scroll;
padding-left: 1em;
padding-right: 1em;
- height: 75vh;
+ height: 70vh;
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
diff --git a/pages/incomingInvoices/index.vue b/pages/incomingInvoices/index.vue
index da3570e..8d7ea0e 100644
--- a/pages/incomingInvoices/index.vue
+++ b/pages/incomingInvoices/index.vue
@@ -93,7 +93,10 @@ const columns = computed(() => templateColumns.filter((column) => selectedColumn
const searchString = ref('')
const filteredRows = computed(() => {
- return useSearch(searchString.value, items.value)
+ let filteredItems = useSearch(searchString.value, items.value)
+
+ return [...filteredItems.filter(i => i.state === "Vorbereitet"), ...filteredItems.filter(i => i.state !== "Vorbereitet")]
+
})
@@ -115,6 +118,16 @@ const isPaid = (item) => {
return Math.abs(amountPaid) === Math.abs(Number(getInvoiceSum(item)))
}
+const selectIncomingInvoice = (invoice) => {
+ if(invoice.state === "Vorbereitet") {
+ router.push(`/incomingInvoices/edit/${invoice.id}`)
+ } else {
+ router.push(`/incomingInvoices/show/${invoice.id}`)
+ }
+
+
+}
+
@@ -162,13 +175,18 @@ const isPaid = (item) => {
:columns="columns"
class="w-full"
:ui="{ divide: 'divide-gray-200 dark:divide-gray-800' }"
- @select="(i) => router.push(`/incomingInvoices/show/${i.id}`) "
+ @select="(i) => selectIncomingInvoice(i) "
:empty-state="{ icon: 'i-heroicons-circle-stack-20-solid', label: 'Keine Belege anzuzeigen' }"
>
{{row.reference}}
{{row.reference}}
+
+ {{row.state}}
+ {{row.state}}
+ {{row.state}}
+
{{dayjs(row.date).format("DD.MM.YYYY")}}
diff --git a/pages/incomingInvoices/show/[id].vue b/pages/incomingInvoices/show/[id].vue
index a177b20..4aea25c 100644
--- a/pages/incomingInvoices/show/[id].vue
+++ b/pages/incomingInvoices/show/[id].vue
@@ -71,6 +71,15 @@ setupPage()
+
+
+ Übersicht
+
+