162 lines
4.9 KiB
Vue
162 lines
4.9 KiB
Vue
<script setup>
|
|
|
|
const dataStore = useDataStore()
|
|
const modal = useModal()
|
|
const router = useRouter()
|
|
const props = defineProps({
|
|
id: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
type: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
})
|
|
|
|
|
|
|
|
const emit = defineEmits(["updateNeeded","returnData"])
|
|
|
|
const documentTypeToUse = ref(props.type)
|
|
const documentTypeItems = computed(() => {
|
|
return Object.keys(dataStore.documentTypesForCreation).map((key) => ({
|
|
...dataStore.documentTypesForCreation[key],
|
|
key
|
|
}))
|
|
})
|
|
|
|
const selectedDocumentType = computed(() => {
|
|
return documentTypeItems.value.find((item) => item.key === documentTypeToUse.value) || null
|
|
})
|
|
|
|
const visibleImportKeys = computed(() => {
|
|
return Object.keys(optionsToImport.value).filter((key) => {
|
|
if (documentTypeToUse.value !== props.type) {
|
|
return !['startText', 'endText'].includes(key)
|
|
}
|
|
|
|
return true
|
|
})
|
|
})
|
|
|
|
const optionsToImport = ref({
|
|
taxType: true,
|
|
customer: true,
|
|
letterhead: true,
|
|
contact: true,
|
|
deliveryDateType: true,
|
|
deliveryDate: true,
|
|
deliveryDateEnd: true,
|
|
documentDate: false,
|
|
paymentDays: true,
|
|
customSurchargePercentage: true,
|
|
contactPerson: true,
|
|
plant: true,
|
|
project:true,
|
|
costcentre: true,
|
|
description: true,
|
|
startText: false,
|
|
rows: true,
|
|
endText: false,
|
|
})
|
|
|
|
const mappings = ref({
|
|
customer: "Kunde",
|
|
taxType: "Steuertyp",
|
|
letterhead: "Briefpapier",
|
|
contact: "Ansprechpartner",
|
|
deliveryDateType: "Lieferdatumsart",
|
|
deliveryDate: "Lieferdatum / Lieferzeitraum Start",
|
|
deliveryDateEnd: "Lieferzeitraum Ende",
|
|
documentDate: "Belegdatum",
|
|
paymentDays: "Zahlungsziel in Tagen",
|
|
customSurchargePercentage: "Individueller Aufschlag",
|
|
contactPerson: "Ansprechpartner Mitarbeiter",
|
|
plant: "Objekt",
|
|
project: "Projekt",
|
|
costcentre: "Kostenstelle",
|
|
description: "Beschreibung",
|
|
startText: "Einleitung",
|
|
rows: "Positionen",
|
|
endText: "Nachbemerkung",
|
|
})
|
|
|
|
const startImport = () => {
|
|
router.push(`/createDocument/edit/?createddocument=${props.id}&type=${documentTypeToUse.value}&optionsToImport=${encodeURIComponent(JSON.stringify(optionsToImport.value))}`)
|
|
modal.close()
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<UModal :ui="{ content: 'sm:max-w-2xl' }">
|
|
<template #content>
|
|
<div class="mx-auto flex max-h-[85vh] w-full max-w-2xl flex-col overflow-hidden rounded-2xl bg-default shadow-xl ring-1 ring-black/5">
|
|
<div class="border-b border-default px-6 py-5 sm:px-7">
|
|
<div class="flex items-start gap-4">
|
|
<div class="flex h-12 w-12 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary ring-1 ring-primary/15">
|
|
<UIcon name="i-heroicons-document-duplicate" class="h-6 w-6" />
|
|
</div>
|
|
<div class="min-w-0">
|
|
<h2 class="text-lg font-semibold text-highlighted">Erstelltes Dokument kopieren</h2>
|
|
<p class="mt-1 text-sm text-muted">Wähle den Zieltyp und welche Inhalte in das neue Dokument übernommen werden sollen.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex-1 space-y-6 overflow-y-auto px-6 py-5 sm:px-7">
|
|
<UFormField label="Dokumententyp" required class="w-full">
|
|
<USelectMenu
|
|
v-model="documentTypeToUse"
|
|
:items="documentTypeItems"
|
|
value-key="key"
|
|
label-key="labelSingle"
|
|
class="w-full"
|
|
size="lg"
|
|
:placeholder="selectedDocumentType?.labelSingle || 'Dokumententyp wählen'"
|
|
:search-input="{ placeholder: 'Dokumententyp suchen...' }"
|
|
:filter-fields="['labelSingle']"
|
|
>
|
|
<template #default>
|
|
<span class="block truncate">
|
|
{{ selectedDocumentType?.labelSingle || "Dokumententyp wählen" }}
|
|
</span>
|
|
</template>
|
|
</USelectMenu>
|
|
</UFormField>
|
|
|
|
<div class="space-y-3">
|
|
<div>
|
|
<h3 class="text-sm font-medium text-highlighted">Inhalte übernehmen</h3>
|
|
<p class="mt-1 text-sm text-muted">Nur die aktivierten Bereiche werden in das neue Dokument kopiert.</p>
|
|
</div>
|
|
|
|
<div class="grid gap-3 sm:grid-cols-2">
|
|
<UCheckbox
|
|
v-for="key in visibleImportKeys"
|
|
:key="key"
|
|
v-model="optionsToImport[key]"
|
|
:label="mappings[key]"
|
|
class="rounded-xl border border-default px-3 py-2"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex shrink-0 justify-end gap-2 border-t border-default px-6 py-4 sm:px-7">
|
|
<UButton color="neutral" variant="ghost" @click="modal.close()">
|
|
Abbrechen
|
|
</UButton>
|
|
<UButton @click="startImport">
|
|
Kopieren
|
|
</UButton>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</UModal>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|