Merge branch 'dev' into beta
This commit is contained in:
@@ -130,7 +130,7 @@ const calendarOptionsTimeline = ref({
|
|||||||
const loaded = ref(false)
|
const loaded = ref(false)
|
||||||
const setupPage = async () => {
|
const setupPage = async () => {
|
||||||
let tempData = await useSupabaseSelect("events", "*, vehicles(*), inventoryitems(*)")
|
let tempData = await useSupabaseSelect("events", "*, vehicles(*), inventoryitems(*)")
|
||||||
let absencerequests = await useSupabaseSelect("absencerequests", "*")
|
let absencerequests = await useSupabaseSelect("absencerequests", "*, profile(*)")
|
||||||
let projects = await useSupabaseSelect("projects", "*")
|
let projects = await useSupabaseSelect("projects", "*")
|
||||||
let inventoryitems = await useSupabaseSelect("inventoryitems", "*")
|
let inventoryitems = await useSupabaseSelect("inventoryitems", "*")
|
||||||
let profiles = await useSupabaseSelect("profiles", "*")
|
let profiles = await useSupabaseSelect("profiles", "*")
|
||||||
@@ -198,9 +198,9 @@ const setupPage = async () => {
|
|||||||
id: absence.id,
|
id: absence.id,
|
||||||
resourceId: absence.user,
|
resourceId: absence.user,
|
||||||
resourceType: "person",
|
resourceType: "person",
|
||||||
title: `${absence.reason} - ${absence.name}`,
|
title: `${absence.reason} - ${absence.profile.fullName}`,
|
||||||
start: dayjs(absence.start).toDate(),
|
start: dayjs(absence.startDate).toDate(),
|
||||||
end: dayjs(absence.end).add(1, 'day').toDate(),
|
end: dayjs(absence.endDate).add(1, 'day').toDate(),
|
||||||
allDay: true,
|
allDay: true,
|
||||||
absencerequestId: absence.id,
|
absencerequestId: absence.id,
|
||||||
entrytype: "absencerequest",
|
entrytype: "absencerequest",
|
||||||
@@ -316,11 +316,11 @@ const setupPage = async () => {
|
|||||||
|
|
||||||
absencerequests.forEach(absencerequest => {
|
absencerequests.forEach(absencerequest => {
|
||||||
let returnData = {
|
let returnData = {
|
||||||
title: `${absencerequest.reason} - ${absencerequest.name}`,
|
title: `${absencerequest.reason}`,
|
||||||
backgroundColor: "black",
|
backgroundColor: "black",
|
||||||
start: absencerequest.startDate,
|
start: absencerequest.startDate,
|
||||||
end: absencerequest.endDate,
|
end: absencerequest.endDate,
|
||||||
resourceIds: [absencerequest.profile],
|
resourceIds: [absencerequest.profile.id],
|
||||||
entrytype: "absencerequest",
|
entrytype: "absencerequest",
|
||||||
allDay: true,
|
allDay: true,
|
||||||
absencerequestId: absencerequest.id
|
absencerequestId: absencerequest.id
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ const findDocumentErrors = computed(() => {
|
|||||||
|
|
||||||
if(itemInfo.value.project === null) errors.push({message: "Es ist kein Projekt ausgewählt", type: "info"})
|
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"})
|
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 = () => {
|
const processDieselPosition = () => {
|
||||||
let agricultureData = {
|
let agricultureData = {
|
||||||
dieselUsageTotal: 0,
|
dieselUsageTotal: 0,
|
||||||
dieselPriceTotal: 0
|
dieselPriceTotal: 0,
|
||||||
|
adblueUsageTotal: 0,
|
||||||
|
adbluePriceTotal: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
itemInfo.value.rows.forEach(row => {
|
itemInfo.value.rows.forEach(row => {
|
||||||
if(row.agriculture && row.agriculture.dieselUsage) {
|
if(row.agriculture && row.agriculture.dieselUsage) {
|
||||||
agricultureData.dieselUsageTotal += Number(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`,
|
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 {
|
} else {
|
||||||
itemInfo.value.rows.push({
|
itemInfo.value.rows.push({
|
||||||
mode: "free",
|
mode: "free",
|
||||||
text: `${agricultureData.dieselUsageTotal} L Diesel`,
|
text: `${(agricultureData.dieselUsageTotal).toFixed(2).replace(".",",")} L Diesel`,
|
||||||
quantity: 1,
|
quantity: 1,
|
||||||
unit: 10,
|
unit: 10,
|
||||||
price: agricultureData.dieselPriceTotal,
|
price: agricultureData.dieselPriceTotal,
|
||||||
@@ -622,6 +635,17 @@ const processDieselPosition = () => {
|
|||||||
key: "dieselPos"
|
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()
|
setPosNumbers()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -751,11 +775,11 @@ const getDocumentData = () => {
|
|||||||
content: customerData.customerNumber,
|
content: customerData.customerNumber,
|
||||||
},{
|
},{
|
||||||
label: "Belegdatum",
|
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" ? [{
|
... itemInfo.value.deliveryDateType !== "Kein Lieferdatum anzeigen" ? [{
|
||||||
label: itemInfo.value.deliveryDateType,
|
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,
|
label: itemInfo.value.deliveryDateType,
|
||||||
|
|||||||
@@ -69,6 +69,13 @@ const closeTicket = async () => {
|
|||||||
console.log(error)
|
console.log(error)
|
||||||
} else {
|
} else {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
|
|
||||||
|
addEntryData.value.type = "Notiz"
|
||||||
|
addEntryData.value.internal = false
|
||||||
|
addEntryData.value.content = `Ticket durch ${profileStore.activeProfile.fullName} geschlossen`
|
||||||
|
|
||||||
|
addEntry()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setup()
|
setup()
|
||||||
@@ -161,7 +168,7 @@ const closeTicket = async () => {
|
|||||||
v-for="item in itemInfo.ticketmessages.filter(i => !i.internal)"
|
v-for="item in itemInfo.ticketmessages.filter(i => !i.internal)"
|
||||||
:description="item.content"
|
:description="item.content"
|
||||||
:avatar="{ alt: item.profile.fullName}"
|
:avatar="{ alt: item.profile.fullName}"
|
||||||
:title="item.profile.fullName"
|
:title="`${item.type} - ${item.profile.fullName}`"
|
||||||
class="mb-3"
|
class="mb-3"
|
||||||
:color="item.profile.tenant === 5 ? 'primary' : 'white'"
|
:color="item.profile.tenant === 5 ? 'primary' : 'white'"
|
||||||
variant="outline"
|
variant="outline"
|
||||||
|
|||||||
@@ -6,21 +6,33 @@ const router = useRouter()
|
|||||||
|
|
||||||
const tickets = ref([])
|
const tickets = ref([])
|
||||||
|
|
||||||
|
const showClosedTickets = ref(false)
|
||||||
|
|
||||||
const setup = async () => {
|
const setup = async () => {
|
||||||
if(profileStore.currentTenant === 5) {
|
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 {
|
} 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()
|
setup()
|
||||||
|
|
||||||
|
const filteredRows = computed(() => {
|
||||||
|
|
||||||
|
if(showClosedTickets.value) {
|
||||||
|
return tickets.value
|
||||||
|
} else {
|
||||||
|
return tickets.value.filter(i => i.status !== "Geschlossen")
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<UDashboardNavbar
|
<UDashboardNavbar
|
||||||
title="Suport Tickets"
|
title="Support Tickets"
|
||||||
>
|
>
|
||||||
<template #right>
|
<template #right>
|
||||||
<UButton
|
<UButton
|
||||||
@@ -30,8 +42,16 @@ setup()
|
|||||||
</UButton>
|
</UButton>
|
||||||
</template>
|
</template>
|
||||||
</UDashboardNavbar>
|
</UDashboardNavbar>
|
||||||
|
<UDashboardToolbar>
|
||||||
|
<template #left>
|
||||||
|
<UCheckbox
|
||||||
|
label="Geschlossene Tickets anzeigen"
|
||||||
|
v-model="showClosedTickets"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</UDashboardToolbar>
|
||||||
<UTable
|
<UTable
|
||||||
:rows="tickets"
|
:rows="filteredRows"
|
||||||
:empty-state="{ icon: 'i-heroicons-circle-stack-20-solid', label: `Keine Tickets anzuzeigen` }"
|
:empty-state="{ icon: 'i-heroicons-circle-stack-20-solid', label: `Keine Tickets anzuzeigen` }"
|
||||||
@select="(i) => router.push(`/support/${i.id}`)"
|
@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'}]"
|
: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'}]"
|
||||||
|
|||||||
@@ -599,6 +599,7 @@ export const useDataStore = defineStore('data', () => {
|
|||||||
{label:"unbezahlter Urlaub"},
|
{label:"unbezahlter Urlaub"},
|
||||||
{label:"Überstundenausgleich"},
|
{label:"Überstundenausgleich"},
|
||||||
{label:"Sonderurlaub(bezahlt)"},
|
{label:"Sonderurlaub(bezahlt)"},
|
||||||
|
{label:"Schulung"},
|
||||||
{label:"Mutterschutz"},
|
{label:"Mutterschutz"},
|
||||||
{label:"Krankheit ab 2. Tag (mit Attest)"},
|
{label:"Krankheit ab 2. Tag (mit Attest)"},
|
||||||
{label:"Krankheit 1 Tag (mit Attest)"},
|
{label:"Krankheit 1 Tag (mit Attest)"},
|
||||||
|
|||||||
Reference in New Issue
Block a user