feat: refs #7322 add address selection for ticket transfer
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Jose Antonio Tubau 2025-01-15 13:38:45 +01:00
parent 372a43b17e
commit 36473d979b
1 changed files with 73 additions and 10 deletions

View File

@ -41,6 +41,9 @@ const ticketSummary = useArrayData('TicketSummary');
const { ticket } = toRefs(props);
const ticketId = computed(() => props.ticket.id ?? currentRoute.value.params.id);
const client = ref();
const address = ref();
const addressesOptions = ref([]);
const selectedClient = ref();
const showTransferDialog = ref(false);
const showTurnDialog = ref(false);
const showChangeTimeDialog = ref(false);
@ -52,6 +55,45 @@ const weight = ref();
const hasDocuwareFile = ref();
const quasar = useQuasar();
const canRestoreTicket = ref(false);
const onClientSelected = async(clientId) =>{
await fetchClient(clientId);
await fetchAddresses(clientId);
};
const fetchClient = async (clientId) => {
const filter = {
include: {
relation: 'defaultAddress',
scope: {
fields: ['id', 'nickname'],
},
},
where: { id: clientId },
};
const params = { filter: JSON.stringify(filter) };
const { data } = await axios.get('Clients', { params });
const [client] = data;
selectedClient.value = client;
};
const fetchAddresses = async (clientId) => {
if (!clientId) return;
const filter = {
fields: ['nickname', 'street', 'city', 'id', 'isActive'],
order: ['isDefaultAddress DESC', 'isActive DESC', 'nickname ASC'],
};
const params = { filter: JSON.stringify(filter) };
const { data } = await axios.get(`Clients/${clientId}/addresses`, {
params,
});
addressesOptions.value = data;
const { defaultAddress } = selectedClient.value;
address.value = defaultAddress.id;
};
const actions = {
clone: async () => {
const opts = { message: t('Ticket cloned'), type: 'positive' };
@ -260,17 +302,14 @@ async function makeInvoice() {
window.location.reload();
}
async function transferClient(client) {
async function transferClient(client, address) {
const params = {
clientFk: client,
addressFk: address,
};
const { data } = await axios.patch(
`Tickets/${ticketId.value}/transferClient`,
params
);
if (data) window.location.reload();
await axios.patch( `Tickets/${ticketId.value}/transferClient`, params );
window.location.reload();
}
async function addTurn(day) {
@ -446,7 +485,7 @@ async function ticketToRestore() {
</QItem>
<QDialog ref="dialogRef" v-model="showTransferDialog">
<FormPopup
@on-submit="transferClient(client)"
@on-submit="transferClient(client, address)"
:title="t('Transfer client')"
:custom-submit-button-label="t('Transfer client')"
:default-cancel-button="false"
@ -454,10 +493,11 @@ async function ticketToRestore() {
<template #form-inputs>
<VnSelect
url="Clients"
:fields="['id', 'name']"
:fields="['id', 'name', 'defaultAddressFk']"
v-model="client"
:label="t('Client')"
auto-load
@update:model-value="() => onClientSelected(client)"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
@ -470,6 +510,28 @@ async function ticketToRestore() {
</QItem>
</template>
</VnSelect>
<VnSelect
:disable="!client"
:options="addressesOptions"
:fields="['id', 'nickname']"
option-value="id"
option-label="nickname"
v-model="address"
:label="t('ticketList.addressNickname')"
auto-load
:hint="!client ? t('Select a client to enable') : ''"
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>
{{ `#${scope.opt.id} - ` }}
{{ scope.opt.nickname }}
</QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelect>
</template>
</FormPopup>
</QDialog>
@ -814,4 +876,5 @@ es:
Are you sure you want to restore the ticket?: ¿Seguro que quieres restaurar el ticket?
You are going to restore this ticket: Vas a restaurar este ticket
Ticket restored: Ticket restaurado
Select a client to enable: Selecciona un cliente para habilitar
</i18n>