From 0bd894a61b9721b038a0623ca373c2eb9385b872 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Fri, 24 Jan 2025 15:24:53 +0100 Subject: [PATCH 01/26] Added Phases in Project Rendering --- components/columnRenderings/phase.vue | 14 ++++++++++++++ stores/data.js | 10 ++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 components/columnRenderings/phase.vue diff --git a/components/columnRenderings/phase.vue b/components/columnRenderings/phase.vue new file mode 100644 index 0000000..20d14bd --- /dev/null +++ b/components/columnRenderings/phase.vue @@ -0,0 +1,14 @@ + + + diff --git a/stores/data.js b/stores/data.js index fd697b7..1f1190f 100644 --- a/stores/data.js +++ b/stores/data.js @@ -31,6 +31,7 @@ import sellingPriceComposedTotal from "~/components/columnRenderings/sellingPric import startDate from "~/components/columnRenderings/startDate.vue" import endDate from "~/components/columnRenderings/endDate.vue" import serviceCategories from "~/components/columnRenderings/serviceCategories.vue" +import phase from "~/components/columnRenderings/phase.vue" import quantity from "~/components/helpRenderings/quantity.vue" import {useZipCheck} from "~/composables/useZipCheck.js"; @@ -736,7 +737,11 @@ export const useDataStore = defineStore('data', () => { default: true, "filterFunction": function (row) { if(row.phases && row.phases.length > 0) { - return row.phases.find(i => i.active).label !== "Abgeschlossen"; + return row.phases.find(i => i.active).label !== "Abgeschlossen" + + //return phase.label !== "Abgeschlossen"; + + } else { return true } @@ -772,7 +777,8 @@ export const useDataStore = defineStore('data', () => { } },{ key: "phase", - label: "Phase" + label: "Phase", + component: phase },{ key: "name", label: "Name", From 7dcddba40115576e6eb40f85c20818df4cebe161 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Fri, 24 Jan 2025 15:25:16 +0100 Subject: [PATCH 02/26] Changes in Dashboard Display Added Project Card Commented Graph Card --- components/displayOpenBalances.vue | 4 +-- components/displayProjectsInPhases.vue | 43 ++++++++++++++++++++++++++ pages/index.vue | 18 +++++++---- 3 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 components/displayProjectsInPhases.vue diff --git a/components/displayOpenBalances.vue b/components/displayOpenBalances.vue index 0e3f3ac..0ba1943 100644 --- a/components/displayOpenBalances.vue +++ b/components/displayOpenBalances.vue @@ -6,18 +6,16 @@ let draftInvoicesSum = ref(0) let draftInvoicesCount = ref(0) let unallocatedStatements = ref(0) const setupPage = async () => { - let documents = (await useSupabaseSelect("createddocuments","*, statementallocations(*), customer(id,name)")).filter(i => i.type === "invoices" ||i.type === "advanceInvoices").filter(i => !i.archived) + let documents = (await useSupabaseSelect("createddocuments","*, statementallocations(*), customer(id,name)")).filter(i => i.type === "invoices" ||i.type === "advanceInvoices"||i.type === "cancellationInvoices").filter(i => !i.archived) let draftDocuments = documents.filter(i => i.state === "Entwurf") let finalizedDocuments = documents.filter(i => i.state === "Gebucht") - console.log(finalizedDocuments) finalizedDocuments = finalizedDocuments.filter(i => i.statementallocations.reduce((n,{amount}) => n + amount, 0).toFixed(2) !== getDocumentSum(i).toFixed(2)) finalizedDocuments.forEach(i => { - console.log(getDocumentSum(i)) unpaidInvoicesSum.value += getDocumentSum(i) - i.statementallocations.reduce((n,{amount}) => n + amount, 0) }) unpaidInvoicesCount.value = finalizedDocuments.length diff --git a/components/displayProjectsInPhases.vue b/components/displayProjectsInPhases.vue new file mode 100644 index 0000000..18491f7 --- /dev/null +++ b/components/displayProjectsInPhases.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/pages/index.vue b/pages/index.vue index cd4d044..7e0346c 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -13,27 +13,33 @@ - + - - + --> + + + From ce4efeaf2de3e7f49f4e01fd9ccf4cbeeef0fb23 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Fri, 24 Jan 2025 15:25:27 +0100 Subject: [PATCH 03/26] Made Titel and Message Mandatory --- components/HelpSlideover.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/HelpSlideover.vue b/components/HelpSlideover.vue index 63a2f38..1693232 100644 --- a/components/HelpSlideover.vue +++ b/components/HelpSlideover.vue @@ -201,6 +201,7 @@ const resetContactRequest = () => { Senden @@ -208,6 +209,7 @@ const resetContactRequest = () => { type="reset" color="rose" variant="outline" + :disabled="!contactRequestData.title && !contactRequestData.message" > Zurücksetzen From 6139f12e0dd309bf79d69768387ba548974a6d0f Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Fri, 24 Jan 2025 15:25:40 +0100 Subject: [PATCH 04/26] Cahgned Buttons --- pages/createDocument/show/[id].vue | 58 +++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/pages/createDocument/show/[id].vue b/pages/createDocument/show/[id].vue index 4b21b4f..b351e42 100644 --- a/pages/createDocument/show/[id].vue +++ b/pages/createDocument/show/[id].vue @@ -68,11 +68,50 @@ const openEmail = () => { :to="dataStore.documents.find(i => i.createdDocument === itemInfo.id) ? dataStore.documents.find(i => i.createdDocument === itemInfo.id).url : ''" target="_blank" >In neuen Tab anzeigen--> - - Übernehmen - + + Angebot + + + + + Auftragsbestätigung + + + + + Lieferschein + + + + + Rechnung + + { @click="router.push(`/createDocument/edit/?linkedDocument=${itemInfo.id}&loadMode=storno`)" variant="outline" color="rose" + v-if="itemInfo.type === 'invoices' || itemInfo.type === 'advanceInvoices'" > Stornieren Projekt + + Kunde + From 3188409bac9d2cf773e7f6916208b3f78ed8fa23 Mon Sep 17 00:00:00 2001 From: florianfederspiel Date: Mon, 27 Jan 2025 18:14:03 +0100 Subject: [PATCH 05/26] Changes in Props --- components/HistoryDisplay.vue | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/components/HistoryDisplay.vue b/components/HistoryDisplay.vue index c9aa5c9..9128288 100644 --- a/components/HistoryDisplay.vue +++ b/components/HistoryDisplay.vue @@ -2,21 +2,21 @@ import dayjs from "dayjs" const props = defineProps({ type: { - type: String + type: String, + required: true }, elementId: { - type: String + type: String, + required: true }, renderHeadline: { - type: Boolean + type: Boolean, + default: false } }) -const { metaSymbol } = useShortcuts() const profileStore = useProfileStore() -const user = useSupabaseUser() const supabase = useSupabaseClient() const toast = useToast() -const {type, elementId} = props const showAddHistoryItemModal = ref(false) const colorMode = useColorMode() @@ -24,8 +24,8 @@ const items = ref([]) const setup = async () => { - if(type && elementId){ - items.value = (await supabase.from("historyitems").select().eq(type,elementId).order("created_at",{ascending: true})).data || [] + if(props.type && props.elementId){ + items.value = (await supabase.from("historyitems").select().eq(props.type,props.elementId).order("created_at",{ascending: true})).data || [] } else { items.value = (await supabase.from("historyitems").select().order("created_at",{ascending: true})).data || [] @@ -39,8 +39,8 @@ setup() const addHistoryItemData = ref({ text: "", config: { - type: type, - id: elementId + type: props.type, + id: props.elementId } }) @@ -48,7 +48,7 @@ const addHistoryItem = async () => { console.log(addHistoryItemData.value) addHistoryItemData.value.createdBy = profileStore.activeProfile.id - addHistoryItemData.value[type] = elementId + addHistoryItemData.value[props.type] = props.elementId const {data,error} = await supabase .from("historyitems") @@ -71,7 +71,7 @@ const addHistoryItem = async () => { profile: profiles.find(x => x.username === rawUsername).id, initiatingProfile: profileStore.activeProfile.id, title: "Sie wurden im Logbuch erwähnt", - link: `/${type}s/show/${elementId}`, + link: `/${props.type}s/show/${props.elementId}`, message: addHistoryItemData.value.text } }) @@ -129,7 +129,7 @@ const renderText = (text) => { { + Eintrag -
+

Logbuch {{items.length}}

Date: Mon, 27 Jan 2025 18:14:33 +0100 Subject: [PATCH 06/26] Changes in Statement Allocation and Open Sum Calc --- pages/banking/index.vue | 108 +------- pages/banking/statements/[mode]/[[id]].vue | 276 +++++++++++++-------- 2 files changed, 184 insertions(+), 200 deletions(-) diff --git a/pages/banking/index.vue b/pages/banking/index.vue index 51b5f87..928daad 100644 --- a/pages/banking/index.vue +++ b/pages/banking/index.vue @@ -11,32 +11,21 @@ defineShortcuts({ //console.log(searchinput) //searchinput.value.focus() document.getElementById("searchinput").focus() - }, - 'escape': () => { - //console.log(searchinput) - //searchinput.value.focus() - showStatementModal.value = false } }) -const dataStore = useDataStore() const profileStore = useProfileStore() const router = useRouter() const supabase = useSupabaseClient() const bankstatements = ref([]) - +const bankaccounts = ref([]) const setupPage = async () => { bankstatements.value = (await supabase.from("bankstatements").select("*, statementallocations(*)").eq('tenant', profileStore.currentTenant).order("date", {ascending:false})).data - + bankaccounts.value = await useSupabaseSelect("bankaccounts") } - - -const selectedStatement = ref(null) -const showStatementModal = ref(false) - const templateColumns = [ { key: "account", @@ -73,35 +62,23 @@ const columns = computed(() => templateColumns.filter((column) => selectedColumn const searchString = ref('') -const filterAccount = ref(dataStore.bankAccounts || []) +const filterAccount = ref(bankaccounts || []) const showOnlyNotAssigned = ref(true) const displayCurrency = (value, currency = "€") => { return `${Number(value).toFixed(2).replace(".",",")} ${currency}` } -const getDocumentSum = (doc) => { - let sum = 0 - doc.rows.forEach(row => { - if(row.mode === "normal" || row.mode === "service" || row.mode === "free") { - sum += row.quantity * row.price * (1 - row.discountPercent / 100) * (1 + row.taxPercent / 100) - } - }) - return sum -} + const calculateOpenSum = (statement) => { - let startingAmount = statement.amount || 0 + let startingAmount = 0 statement.statementallocations.forEach(item => { - if(item.cd_id) { - startingAmount = startingAmount - item.amount - } else if(item.ii_id) { - startingAmount = Number(startingAmount) + item.amount - } + startingAmount += Math.abs(item.amount) }) - return startingAmount.toFixed(2) + return (Math.abs(statement.amount) - startingAmount).toFixed(2) } @@ -134,11 +111,12 @@ setupPage()