This commit is contained in:
2024-12-31 18:02:15 +01:00
parent cacdb442ca
commit 4ef7d410f4
10 changed files with 198 additions and 28 deletions

View File

@@ -59,9 +59,9 @@ const setupCreate = () => {
if(datapoint.inputType === "editor") {
if(datapoint.key.includes(".")){
item[datapoint.key.split(".")[0]][datapoint.key.split(".")[1]] = {}
item.value[datapoint.key.split(".")[0]][datapoint.key.split(".")[1]] = {}
} else {
item[datapoint.key] = {}
item.value[datapoint.key] = {}
}
@@ -76,9 +76,9 @@ const setupQuery = () => {
Object.keys(route.query).forEach(key => {
if(["customer","contract","plant","contact"].includes(key)){
item[key] = Number(route.query[key])
item.value[key] = Number(route.query[key])
} else {
item[key] = route.query[key]
item.value[key] = route.query[key]
}
})
}
@@ -251,6 +251,24 @@ const contentChanged = (content, datapoint) => {
/>
</template>
</UPopover>
<UPopover :popper="{ placement: 'bottom-start' }" v-else-if="datapoint.inputType === 'datetime'">
<UButton
icon="i-heroicons-calendar-days-20-solid"
:label="item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]] ? dayjs(item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]]).format('DD.MM.YY HH:mm') : 'Datum auswählen'"
variant="outline"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
/>
<template #panel="{ close }">
<LazyDatePicker
@change="datapoint.inputChangeFunction ? datapoint.inputChangeFunction(item,loadedOptions) : null"
v-model="item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]]" @close="close"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
mode="datetime"
/>
</template>
</UPopover>
<!-- TODO: DISABLED FOR TIPTAP -->
<Tiptap
v-else-if="datapoint.inputType === 'editor'"
@@ -317,6 +335,24 @@ const contentChanged = (content, datapoint) => {
/>
</template>
</UPopover>
<UPopover :popper="{ placement: 'bottom-start' }" v-else-if="datapoint.inputType === 'datetime'">
<UButton
icon="i-heroicons-calendar-days-20-solid"
:label="item[datapoint.key] ? dayjs(item[datapoint.key]).format('DD.MM.YY HH:mm') : 'Datum auswählen'"
variant="outline"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
/>
<template #panel="{ close }">
<LazyDatePicker
@change="datapoint.inputChangeFunction ? datapoint.inputChangeFunction(item,loadedOptions) : null"
v-model="item[datapoint.key]"
@close="close"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
mode="datetime"
/>
</template>
</UPopover>
<Tiptap
v-else-if="datapoint.inputType === 'editor'"
@updateContent="(i) => contentChanged(i,datapoint)"
@@ -351,7 +387,7 @@ const contentChanged = (content, datapoint) => {
</div>
</div>
<UFormGroup
v-for="datapoint in dataType.templateColumns.filter(i => i.inputType)"
v-for="datapoint in dataType.templateColumns.filter(i => i.inputType && i.inputColumn === columnName)"
:label="datapoint.label"
>
<template #help>
@@ -420,6 +456,24 @@ const contentChanged = (content, datapoint) => {
/>
</template>
</UPopover>
<UPopover :popper="{ placement: 'bottom-start' }" v-else-if="datapoint.inputType === 'datetime'">
<UButton
icon="i-heroicons-calendar-days-20-solid"
:label="item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]] ? dayjs(item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]]).format('DD.MM.YY HH:mm') : 'Datum auswählen'"
variant="outline"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
/>
<template #panel="{ close }">
<LazyDatePicker
@change="datapoint.inputChangeFunction ? datapoint.inputChangeFunction(item,loadedOptions) : null"
v-model="item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]]" @close="close"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
mode="datetime"
/>
</template>
</UPopover>
<!-- TODO: DISABLED FOR TIPTAP -->
<Tiptap
v-else-if="datapoint.inputType === 'editor'"
@@ -486,6 +540,24 @@ const contentChanged = (content, datapoint) => {
/>
</template>
</UPopover>
<UPopover :popper="{ placement: 'bottom-start' }" v-else-if="datapoint.inputType === 'datetime'">
<UButton
icon="i-heroicons-calendar-days-20-solid"
:label="item[datapoint.key] ? dayjs(item[datapoint.key]).format('DD.MM.YY HH:mm') : 'Datum auswählen'"
variant="outline"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
/>
<template #panel="{ close }">
<LazyDatePicker
@change="datapoint.inputChangeFunction ? datapoint.inputChangeFunction(item,loadedOptions) : null"
v-model="item[datapoint.key]"
@close="close"
:disabled="datapoint.disabledFunction ? datapoint.disabledFunction(item) : false"
mode="datetime"
/>
</template>
</UPopover>
<Tiptap
v-else-if="datapoint.inputType === 'editor'"
@updateContent="(i) => contentChanged(i,datapoint)"

View File

@@ -180,7 +180,7 @@ const changeActivePhase = async (key) => {
>
<td>{{datapoint.label}}:</td>
<td>
<component v-if="datapoint.component" :is="datapoint.component" :row="props.item"></component>
<component v-if="datapoint.component" :is="datapoint.component" :row="props.item" :in-show="true"></component>
<div v-else>
<span v-if="datapoint.key.includes('.')">{{props.item[datapoint.key.split('.')[0]][datapoint.key.split('.')[1]]}}{{datapoint.unit}}</span>
<span v-else>{{props.item[datapoint.key]}} {{datapoint.unit}}</span>
@@ -381,6 +381,51 @@ const changeActivePhase = async (key) => {
</template>
</UAccordion>
</UCard>
</div><div v-else-if="item.label === 'Ausgangsbelege'">
<UCard class="mt-5">
<Toolbar>
<UButton
@click="router.push('/createDocument/edit/?type=quotes')"
>
+ Angebot
</UButton>
<UButton
@click="router.push('/createDocument/edit/?type=confirmationOrders')"
>
+ Auftragsbestätigung
</UButton>
<UButton
@click="router.push('/createDocument/edit/?type=deliveryNotes')"
>
+ Lieferschein
</UButton>
<UButton
@click="router.push('/createDocument/edit/?type=advanceInvoices')"
>
+ Abschlagsrechnung
</UButton>
<UButton
@click="router.push('/createDocument/edit/?type=invoices')"
>
+ Rechnung
</UButton>
</Toolbar>
<UTable
:rows="props.item.createddocuments"
:columns="[{key:'documentNumber',label: 'Nummer'},{key:'documentDate',label: 'Datum'},{key:'type',label: 'Typ'},{key:'state',label: 'Status'}]"
@select="(i) => router.push(i.state === 'Entwurf' ? `/createDocument/edit/${i.id}`:`/createDocument/show/${i.id}`)"
>
<template #documentDate-data="{row}">
{{dayjs(row.documentDate).format("DD.MM.YY HH:mm")}}
</template>
<template #type-data="{row}">
{{dataStore.documentTypesForCreation[row.type].labelSingle}}
</template>
</UTable>
</UCard>
</div>
</div>
@@ -403,6 +448,6 @@ td {
.scroll {
height: 80vh;
overflow-y: scroll;
padding: 1em;
padding: 0.3em;
}
</style>

View File

@@ -4,10 +4,16 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
</script>
<template>
<span>{{props.row.contact ? props.row.contact.name : ''}}</span>
</template>
<div v-if="props.row.contact">
<nuxt-link v-if="props.inShow" :to="`/standardEntity/contacts/show/${props.row.contact.id}`">{{props.row.contact ? props.row.contact.name : ''}}</nuxt-link>
<span v-else>{{props.row.contact ? props.row.contact.name : ''}}</span>
</div></template>

View File

@@ -4,10 +4,17 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
</script>
<template>
<span>{{props.row.customer ? props.row.customer.name : ''}}</span>
<div v-if="props.row.customer">
<nuxt-link v-if="props.inShow" :to="`/standardEntity/customers/show/${props.row.customer.id}`">{{props.row.customer ? props.row.customer.name : ''}}</nuxt-link>
<span v-else>{{props.row.customer ? props.row.customer.name : ''}}</span>
</div>
</template>

View File

@@ -4,10 +4,17 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
</script>
<template>
<span>{{props.row.plant ? props.row.plant.name : ''}}</span>
<div v-if="props.row.plant">
<nuxt-link v-if="props.inShow " :to="`/standardEntity/plants/show/${props.row.plant.id}`">{{props.row.plant ? props.row.plant.name : ''}}</nuxt-link>
<span v-else>{{props.row.plant ? props.row.plant.name : ''}}</span>
</div>
</template>

View File

@@ -4,6 +4,10 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
@@ -14,5 +18,10 @@ const profiles = computed(() => props.row.profiles.map(id => profileStore.getPro
</script>
<template>
<span>{{props.row.profiles ? profiles : ''}}</span>
<div v-if="props.row.profiles">
<div v-if="props.inShow">
<nuxt-link v-for="(profileId, index) in props.row.profiles" :to="`/profiles/show/${profileId}`">{{profileStore.getProfileById(profileId).fullName}}{{index < props.row.profiles.length - 1 ? "," : ""}}</nuxt-link>
</div>
<span v-else>{{props.row.profiles ? profiles : ''}}</span>
</div>
</template>

View File

@@ -4,10 +4,16 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
</script>
<template>
<span>{{props.row.project ? props.row.project.name : ''}}</span>
</template>
<div v-if="props.row.project">
<nuxt-link v-if="props.inShow" :to="`/standardEntity/projects/show/${props.row.project.id}`">{{props.row.project ? props.row.project.name : ''}}</nuxt-link>
<span v-else>{{props.row.project ? props.row.project.name : ''}}</span>
</div></template>

View File

@@ -4,10 +4,19 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
</script>
<template>
<span v-if="props.row.vehicle">{{props.row.vehicle.id ? props.row.vehicle.licensePlate : ''}}</span>
<div v-if="props.row.vehicle">
<nuxt-link v-if="props.inShow" :to="`/standardEntity/vehicles/show/${props.row.vehicle.id}`">
{{ props.row.vehicle ? props.row.vehicle.name : '' }}
</nuxt-link>
<span v-else>{{ props.row.vehicle ? props.row.vehicle.name : '' }}</span>
</div>
</template>

View File

@@ -4,10 +4,17 @@ const props = defineProps({
type: Object,
required: true,
default: {}
},
inShow: {
type: Boolean,
default: false
}
})
</script>
<template>
<span>{{props.row.vendor ? props.row.vendor.name : ''}}</span>
<div v-if="props.row.vendor">
<nuxt-link v-if="props.inShow" :to="`/standardEntity/vendors/show/${props.row.vendor.id}`">{{props.row.vendor ? props.row.vendor.name : ''}}</nuxt-link>
<span v-else>{{props.row.vendor ? props.row.vendor.name : ''}}</span>
</div>
</template>

View File

@@ -122,7 +122,7 @@ export const useDataStore = defineStore('data', () => {
numberRangeHolder: "customerNumber",
historyItemHolder: "customer",
supabaseSortColumn: "customerNumber",
supabaseSelectWithInformation: "*, projects(*), plants(*), contracts(*), contacts(*)",
supabaseSelectWithInformation: "*, projects(*), plants(*), contracts(*), contacts(*), createddocuments(*)",
filters: [],
templateColumns: [
{
@@ -228,7 +228,7 @@ export const useDataStore = defineStore('data', () => {
component: profiles
},
],
showTabs: [{label: 'Informationen'},{label: 'Dokumente'},{label: 'Projekte'},{label: 'Objekte'},{label: 'Verträge'}]
showTabs: [{label: 'Informationen'},{label: 'Dokumente'},{label: 'Ausgangsbelege'},{label: 'Projekte'},{label: 'Objekte'},{label: 'Verträge'}]
},
contacts: {
label: "Kontakte",
@@ -307,7 +307,7 @@ export const useDataStore = defineStore('data', () => {
inputType: "text",
},
{
key: "birtday",
key: "birthday",
label: "Geburtstag",
inputType: "date",
},
@@ -593,7 +593,7 @@ export const useDataStore = defineStore('data', () => {
redirect:true,
historyItemHolder: "project",
numberRangeHolder: "projectNumber",
supabaseSelectWithInformation: "*, customer(name), plant(name), projecttype(name, id), tasks(*), documents(*)",
supabaseSelectWithInformation: "*, customer(id,name), plant(id,name), projecttype(name, id), tasks(*), documents(*), createddocuments(*)",
supabaseSortColumn: "projectNumber",
filters: [
{
@@ -642,13 +642,7 @@ export const useDataStore = defineStore('data', () => {
selectDataType: "customers",
selectOptionAttribute: "name",
selectSearchAttributes: ['name'],
},
{
key: "notes",
label: "Notizen",
inputType: "textarea"
},
{
},{
key: "plant",
label: "Objekt",
component: plant,
@@ -656,6 +650,10 @@ export const useDataStore = defineStore('data', () => {
selectDataType: "plants",
selectOptionAttribute: "name",
selectSearchAttributes: ['name'],
},{
key: "notes",
label: "Notizen",
inputType: "textarea"
},
{
key: "profiles",
@@ -681,6 +679,8 @@ export const useDataStore = defineStore('data', () => {
},{
key: "documents",
label: "Dokumente"
},{
label: "Ausgangsbelege"
}/*,{
key: "timetracking",
label: "Zeiterfassung"
@@ -1260,10 +1260,12 @@ export const useDataStore = defineStore('data', () => {
{
key: "startDate",
label: "Start",
inputType: "datetime",
},
{
key: "endDate",
label: "Ende"
label: "Ende",
inputType: "datetime",
},/*{
key: "eventtype",
label: "Typ",