forked from verdnatura/salix-front
364 lines
14 KiB
Vue
364 lines
14 KiB
Vue
<script setup>
|
|
import { onMounted, ref } from 'vue';
|
|
import { useI18n } from 'vue-i18n';
|
|
|
|
import FetchData from 'components/FetchData.vue';
|
|
import FormModel from 'components/FormModel.vue';
|
|
import VnRow from 'components/ui/VnRow.vue';
|
|
import VnInputDate from 'components/common/VnInputDate.vue';
|
|
import VnSelectFilter from 'src/components/common/VnSelectFilter.vue';
|
|
import VnSelectCreate from 'src/components/common/VnSelectCreate.vue';
|
|
import CreateBankEntityForm from 'src/components/CreateBankEntityForm.vue';
|
|
import CustomerCreateNewPostcode from 'src/components/CreateNewPostcodeForm.vue';
|
|
import VnInput from 'src/components/common/VnInput.vue';
|
|
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
|
|
|
import { useUserConfig } from 'src/composables/useUserConfig';
|
|
|
|
const { t } = useI18n();
|
|
|
|
const workerConfigFilter = {
|
|
field: ['payMethodFk'],
|
|
};
|
|
|
|
const provincesFilter = {
|
|
fields: ['id', 'name', 'countryFk'],
|
|
};
|
|
|
|
const townsFilter = {
|
|
fields: ['id', 'name', 'provinceFk'],
|
|
};
|
|
|
|
const newWorkerForm = ref({
|
|
companyFk: null,
|
|
payMethodFk: null,
|
|
firstName: null,
|
|
lastNames: null,
|
|
birth: null,
|
|
fi: null,
|
|
code: null,
|
|
phone: null,
|
|
postcode: null,
|
|
provinceFk: null,
|
|
city: null,
|
|
street: null,
|
|
name: null,
|
|
email: null,
|
|
bossFk: null,
|
|
iban: null,
|
|
bankEntityFk: null,
|
|
});
|
|
|
|
const postcodeFetchDataRef = ref(null);
|
|
const provincesOptions = ref([]);
|
|
const townsOptions = ref([]);
|
|
const companiesOptions = ref([]);
|
|
const workersOptions = ref([]);
|
|
const payMethodsOptions = ref([]);
|
|
const bankEntitiesOptions = ref([]);
|
|
const postcodesOptions = ref([]);
|
|
|
|
const onFetchWorkerConfig = (workerConfig) => {
|
|
newWorkerForm.value.payMethodFk = workerConfig.payMethodFk;
|
|
};
|
|
|
|
const onBankEntityCreated = (data) => {
|
|
bankEntitiesOptions.value.push(data);
|
|
};
|
|
|
|
const onPostcodeCreated = async () => {
|
|
postcodeFetchDataRef.value.fetch();
|
|
};
|
|
|
|
onMounted(async () => {
|
|
const userInfo = await useUserConfig().fetch();
|
|
newWorkerForm.value = { companyFk: userInfo.companyFk };
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<FetchData
|
|
url="WorkerConfigs/findOne"
|
|
@on-fetch="(data) => onFetchWorkerConfig(data)"
|
|
:filter="workerConfigFilter"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
ref="postcodeFetchDataRef"
|
|
url="Postcodes/location"
|
|
@on-fetch="(data) => (postcodesOptions = data)"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
url="Provinces/location"
|
|
@on-fetch="(data) => (provincesOptions = data)"
|
|
:filter="provincesFilter"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
url="Towns/location"
|
|
@on-fetch="(data) => (townsOptions = data)"
|
|
:filter="townsFilter"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
url="Companies"
|
|
@on-fetch="(data) => (companiesOptions = data)"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
url="Workers/search"
|
|
@on-fetch="(data) => (workersOptions = data)"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
url="Paymethods"
|
|
@on-fetch="(data) => (payMethodsOptions = data)"
|
|
auto-load
|
|
/>
|
|
<FetchData
|
|
url="BankEntities"
|
|
@on-fetch="(data) => (bankEntitiesOptions = data)"
|
|
auto-load
|
|
/>
|
|
|
|
<QPage>
|
|
<VnSubToolbar />
|
|
<FormModel
|
|
url-create="Workers/new"
|
|
model="worker"
|
|
:form-initial-data="newWorkerForm"
|
|
>
|
|
<template #form="{ data, validate }">
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.firstName"
|
|
:label="t('worker.create.name')"
|
|
:rules="validate('Worker.firstName')"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.lastNames"
|
|
:label="t('worker.create.lastName')"
|
|
:rules="validate('Worker.lastNames')"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnInputDate
|
|
v-model="data.birth"
|
|
:label="t('worker.create.birth')"
|
|
:rules="validate('Worker.birth')"
|
|
/>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.fi"
|
|
:label="t('worker.create.fi')"
|
|
:rules="validate('Worker.fi')"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.code"
|
|
:label="t('worker.create.code')"
|
|
:rules="validate('Worker.code')"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.phone"
|
|
:label="t('worker.create.phone')"
|
|
:rules="validate('Worker.phone')"
|
|
/>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnSelectCreate
|
|
v-model="data.postcode"
|
|
:label="t('worker.create.postcode')"
|
|
:rules="validate('Worker.postcode')"
|
|
:roles-allowed-to-create="['deliveryAssistant']"
|
|
:options="postcodesOptions"
|
|
option-label="code"
|
|
option-value="code"
|
|
hide-selected
|
|
>
|
|
<template #form>
|
|
<CustomerCreateNewPostcode
|
|
@on-data-saved="onPostcodeCreated($event)"
|
|
/>
|
|
</template>
|
|
<template #option="scope">
|
|
<QItem v-bind="scope.itemProps">
|
|
<QItemSection v-if="scope.opt">
|
|
<QItemLabel>{{ scope.opt.code }}</QItemLabel>
|
|
<QItemLabel caption
|
|
>{{ scope.opt.code }} -
|
|
{{ scope.opt.town.name }} ({{
|
|
scope.opt.town.province.name
|
|
}},
|
|
{{
|
|
scope.opt.town.province.country.country
|
|
}})</QItemLabel
|
|
>
|
|
</QItemSection>
|
|
</QItem>
|
|
</template>
|
|
</VnSelectCreate>
|
|
</div>
|
|
<div class="col">
|
|
<VnSelectFilter
|
|
:label="t('worker.create.province')"
|
|
v-model="data.provinceFk"
|
|
:options="provincesOptions"
|
|
option-value="id"
|
|
option-label="name"
|
|
hide-selected
|
|
:rules="validate('Worker.provinceFk')"
|
|
/>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnSelectFilter
|
|
:label="t('worker.create.city')"
|
|
v-model="data.city"
|
|
:options="townsOptions"
|
|
option-value="name"
|
|
option-label="name"
|
|
hide-selected
|
|
:rules="validate('Worker.city')"
|
|
>
|
|
<template #option="scope">
|
|
<QItem v-bind="scope.itemProps">
|
|
<QItemSection>
|
|
<QItemLabel>{{ scope.opt.name }}</QItemLabel>
|
|
<QItemLabel caption
|
|
>{{ scope.opt.name }},
|
|
{{ scope.opt.province.name }} ({{
|
|
scope.opt.province.country.country
|
|
}})</QItemLabel
|
|
>
|
|
</QItemSection>
|
|
</QItem>
|
|
</template>
|
|
</VnSelectFilter>
|
|
</div>
|
|
<div class="col">
|
|
<VnInput
|
|
:label="t('worker.create.street')"
|
|
v-model="data.street"
|
|
:rules="validate('Worker.street')"
|
|
/>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.name"
|
|
:label="t('worker.create.webUser')"
|
|
:rules="validate('Worker.name')"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.email"
|
|
:label="t('worker.create.personalEmail')"
|
|
:rules="validate('Worker.email')"
|
|
/>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnSelectFilter
|
|
:label="t('worker.create.company')"
|
|
v-model="data.companyFk"
|
|
:options="companiesOptions"
|
|
option-value="id"
|
|
option-label="code"
|
|
hide-selected
|
|
:rules="validate('Worker.company')"
|
|
/>
|
|
</div>
|
|
<div class="col">
|
|
<VnSelectFilter
|
|
:label="t('worker.create.boss')"
|
|
v-model="data.bossFk"
|
|
:options="workersOptions"
|
|
option-value="id"
|
|
option-label="name"
|
|
hide-selected
|
|
:rules="validate('Worker.boss')"
|
|
>
|
|
<template #option="scope">
|
|
<QItem v-bind="scope.itemProps">
|
|
<QItemSection>
|
|
<QItemLabel>{{ scope.opt.name }}</QItemLabel>
|
|
<QItemLabel caption
|
|
>{{ scope.opt.nickname }},
|
|
{{ scope.opt.code }}
|
|
</QItemLabel>
|
|
</QItemSection>
|
|
</QItem>
|
|
</template>
|
|
</VnSelectFilter>
|
|
</div>
|
|
</VnRow>
|
|
<VnRow class="row q-gutter-md q-mb-md">
|
|
<div class="col">
|
|
<VnSelectFilter
|
|
:label="t('worker.create.payMethods')"
|
|
v-model="data.payMethodFk"
|
|
:options="payMethodsOptions"
|
|
option-value="id"
|
|
option-label="name"
|
|
map-options
|
|
hide-selected
|
|
:rules="validate('Worker.payMethodFk')"
|
|
/>
|
|
</div>
|
|
|
|
<div class="col">
|
|
<VnInput
|
|
v-model="data.iban"
|
|
:label="t('worker.create.iban')"
|
|
:rules="validate('Worker.iban')"
|
|
/>
|
|
</div>
|
|
<VnSelectCreate
|
|
:label="t('worker.create.bankEntity')"
|
|
v-model="data.bankEntityFk"
|
|
:options="bankEntitiesOptions"
|
|
option-label="name"
|
|
option-value="id"
|
|
hide-selected
|
|
:roles-allowed-to-create="['salesAssistant', 'hr']"
|
|
:rules="validate('Worker.bankEntity')"
|
|
>
|
|
<template #form>
|
|
<CreateBankEntityForm
|
|
@on-data-saved="onBankEntityCreated($event)"
|
|
/>
|
|
</template>
|
|
<template #option="scope">
|
|
<QItem v-bind="scope.itemProps">
|
|
<QItemSection v-if="scope.opt">
|
|
<QItemLabel
|
|
>{{ scope.opt.bic }}
|
|
{{ scope.opt.name }}</QItemLabel
|
|
>
|
|
</QItemSection>
|
|
</QItem>
|
|
</template>
|
|
</VnSelectCreate>
|
|
</VnRow>
|
|
</template>
|
|
</FormModel>
|
|
</QPage>
|
|
</template>
|