Merge branch 'dev' into beta

This commit is contained in:
2025-02-13 18:26:37 +01:00
5 changed files with 69 additions and 17 deletions

View File

@@ -130,7 +130,7 @@ const calendarOptionsTimeline = ref({
const loaded = ref(false)
const setupPage = async () => {
let tempData = await useSupabaseSelect("events", "*, vehicles(*), inventoryitems(*)")
let absencerequests = await useSupabaseSelect("absencerequests", "*")
let absencerequests = await useSupabaseSelect("absencerequests", "*, profile(*)")
let projects = await useSupabaseSelect("projects", "*")
let inventoryitems = await useSupabaseSelect("inventoryitems", "*")
let profiles = await useSupabaseSelect("profiles", "*")
@@ -198,9 +198,9 @@ const setupPage = async () => {
id: absence.id,
resourceId: absence.user,
resourceType: "person",
title: `${absence.reason} - ${absence.name}`,
start: dayjs(absence.start).toDate(),
end: dayjs(absence.end).add(1, 'day').toDate(),
title: `${absence.reason} - ${absence.profile.fullName}`,
start: dayjs(absence.startDate).toDate(),
end: dayjs(absence.endDate).add(1, 'day').toDate(),
allDay: true,
absencerequestId: absence.id,
entrytype: "absencerequest",
@@ -316,11 +316,11 @@ const setupPage = async () => {
absencerequests.forEach(absencerequest => {
let returnData = {
title: `${absencerequest.reason} - ${absencerequest.name}`,
title: `${absencerequest.reason}`,
backgroundColor: "black",
start: absencerequest.startDate,
end: absencerequest.endDate,
resourceIds: [absencerequest.profile],
resourceIds: [absencerequest.profile.id],
entrytype: "absencerequest",
allDay: true,
absencerequestId: absencerequest.id

View File

@@ -457,7 +457,7 @@ const findDocumentErrors = computed(() => {
if(itemInfo.value.project === null) errors.push({message: "Es ist kein Projekt ausgewählt", type: "info"})
if(['Lieferzeitraum','Leistungszeitraum'].includes(itemInfo.value.deliveryDateType)) {
if(['Lieferzeitraum','Leistungszeitraum'].includes(itemInfo.value.deliveryDateType) && itemInfo.value.type !== "serialInvoices") {
if(itemInfo.value.deliveryDateEnd === null) errors.push({message: `Es ist kein Enddatum für den ${itemInfo.value.deliveryDateType} angegeben`, type: "breaking"})
}
@@ -589,13 +589,18 @@ const documentTotal = computed(() => {
const processDieselPosition = () => {
let agricultureData = {
dieselUsageTotal: 0,
dieselPriceTotal: 0
dieselPriceTotal: 0,
adblueUsageTotal: 0,
adbluePriceTotal: 0
}
itemInfo.value.rows.forEach(row => {
if(row.agriculture && row.agriculture.dieselUsage) {
agricultureData.dieselUsageTotal += Number(row.agriculture.dieselUsage)
agricultureData.dieselPriceTotal += Number(row.agriculture.dieselPrice) * Number(row.agriculture.dieselUsage)
agricultureData.dieselPriceTotal += Number(row.agriculture.dieselPrice || 0) * Number(row.agriculture.dieselUsage)
agricultureData.adblueUsageTotal += Number(row.agriculture.dieselUsage * 0.04)
agricultureData.adbluePriceTotal += Number(row.agriculture.dieselPrice || 0) * Number(row.agriculture.dieselUsage * 0.04)
}
})
@@ -610,10 +615,18 @@ const processDieselPosition = () => {
text: `${agricultureData.dieselUsageTotal} L Diesel`,
}
let existingAdblueIndex = itemInfo.value.rows.findIndex(i => i.key === "adbluePos")
itemInfo.value.rows[existingAdblueIndex] = {
...itemInfo.value.rows[existingAdblueIndex],
price: agricultureData.adbluePriceTotal,
text: `${agricultureData.adblueUsageTotal} L Diesel`,
}
} else {
itemInfo.value.rows.push({
mode: "free",
text: `${agricultureData.dieselUsageTotal} L Diesel`,
text: `${(agricultureData.dieselUsageTotal).toFixed(2).replace(".",",")} L Diesel`,
quantity: 1,
unit: 10,
price: agricultureData.dieselPriceTotal,
@@ -622,6 +635,17 @@ const processDieselPosition = () => {
key: "dieselPos"
})
itemInfo.value.rows.push({
mode: "free",
text: `${(agricultureData.adblueUsageTotal).toFixed(2).replace(".",",")} L AdBlue`,
quantity: 1,
unit: 10,
price: agricultureData.adbluePriceTotal,
taxPercent: 19,
discountPercent: 0,
key: "adbluePos"
})
setPosNumbers()
}
}
@@ -751,11 +775,11 @@ const getDocumentData = () => {
content: customerData.customerNumber,
},{
label: "Belegdatum",
content: dayjs(itemInfo.value.documentDate).format("DD.MM.YYYY"),
content: itemInfo.value.documentDate ? dayjs(itemInfo.value.documentDate).format("DD.MM.YYYY") : "XXXX",
},
... itemInfo.value.deliveryDateType !== "Kein Lieferdatum anzeigen" ? [{
label: itemInfo.value.deliveryDateType,
content: !['Lieferzeitraum','Leistungszeitraum'].includes(itemInfo.value.deliveryDateType) ? dayjs(itemInfo.value.deliveryDate).format("DD.MM.YYYY") : `${dayjs(itemInfo.value.deliveryDate).format("DD.MM.YYYY")} - ${dayjs(itemInfo.value.deliveryDateEnd).format("DD.MM.YYYY")}`,
content: !['Lieferzeitraum','Leistungszeitraum'].includes(itemInfo.value.deliveryDateType) ? (itemInfo.value.deliveryDate ? dayjs(itemInfo.value.deliveryDate).format("DD.MM.YYYY") : "XXXX") : `${itemInfo.value.deliveryDate ? dayjs(itemInfo.value.deliveryDate).format("DD.MM.YYYY") : "XXXX"} - ${itemInfo.value.deliveryDateEnd ? dayjs(itemInfo.value.deliveryDateEnd).format("DD.MM.YYYY") : "XXXX"}`,
}] : [],
/*{
label: itemInfo.value.deliveryDateType,

View File

@@ -69,6 +69,13 @@ const closeTicket = async () => {
console.log(error)
} else {
console.log(data)
addEntryData.value.type = "Notiz"
addEntryData.value.internal = false
addEntryData.value.content = `Ticket durch ${profileStore.activeProfile.fullName} geschlossen`
addEntry()
}
setup()
@@ -161,7 +168,7 @@ const closeTicket = async () => {
v-for="item in itemInfo.ticketmessages.filter(i => !i.internal)"
:description="item.content"
:avatar="{ alt: item.profile.fullName}"
:title="item.profile.fullName"
:title="`${item.type} - ${item.profile.fullName}`"
class="mb-3"
:color="item.profile.tenant === 5 ? 'primary' : 'white'"
variant="outline"

View File

@@ -6,21 +6,33 @@ const router = useRouter()
const tickets = ref([])
const showClosedTickets = ref(false)
const setup = async () => {
if(profileStore.currentTenant === 5) {
tickets.value = (await supabase.from("tickets").select("*,created_by(*), ticketmessages(*), tenant(*)")).data
tickets.value = (await supabase.from("tickets").select("*,created_by(*), ticketmessages(*), tenant(*)").order("created_at", {ascending: false})).data
} else {
tickets.value = (await supabase.from("tickets").select("*,created_by(*), ticketmessages(*)").eq("tenant",profileStore.currentTenant)).data
tickets.value = (await supabase.from("tickets").select("*,created_by(*), ticketmessages(*)").eq("tenant",profileStore.currentTenant).order("created_at", {ascending: false})).data
}
}
setup()
const filteredRows = computed(() => {
if(showClosedTickets.value) {
return tickets.value
} else {
return tickets.value.filter(i => i.status !== "Geschlossen")
}
})
</script>
<template>
<UDashboardNavbar
title="Suport Tickets"
title="Support Tickets"
>
<template #right>
<UButton
@@ -30,8 +42,16 @@ setup()
</UButton>
</template>
</UDashboardNavbar>
<UDashboardToolbar>
<template #left>
<UCheckbox
label="Geschlossene Tickets anzeigen"
v-model="showClosedTickets"
/>
</template>
</UDashboardToolbar>
<UTable
:rows="tickets"
:rows="filteredRows"
:empty-state="{ icon: 'i-heroicons-circle-stack-20-solid', label: `Keine Tickets anzuzeigen` }"
@select="(i) => router.push(`/support/${i.id}`)"
:columns="[{key:'created_at',label:'Datum'}, ...profileStore.currentTenant === 5 ? [{key:'tenant',label:'Tenant'}] : [],{key:'status',label:'Status'},{key:'title',label:'Titel'},{key:'created_by',label:'Ersteller'},{key:'ticketmessages',label:'Nachrichten'}]"

View File

@@ -599,6 +599,7 @@ export const useDataStore = defineStore('data', () => {
{label:"unbezahlter Urlaub"},
{label:"Überstundenausgleich"},
{label:"Sonderurlaub(bezahlt)"},
{label:"Schulung"},
{label:"Mutterschutz"},
{label:"Krankheit ab 2. Tag (mit Attest)"},
{label:"Krankheit 1 Tag (mit Attest)"},