feat: refs #7322 add address selection for ticket transfer #1224

Open
jtubau wants to merge 1 commits from 7322-addSelectAddressOnTicketTransfer into dev
1 changed files with 73 additions and 10 deletions

View File

@ -41,6 +41,9 @@ const ticketSummary = useArrayData('TicketSummary');
const { ticket } = toRefs(props); const { ticket } = toRefs(props);
const ticketId = computed(() => props.ticket.id ?? currentRoute.value.params.id); const ticketId = computed(() => props.ticket.id ?? currentRoute.value.params.id);
const client = ref(); const client = ref();
const address = ref();
const addressesOptions = ref([]);
const selectedClient = ref();
const showTransferDialog = ref(false); const showTransferDialog = ref(false);
const showTurnDialog = ref(false); const showTurnDialog = ref(false);
const showChangeTimeDialog = ref(false); const showChangeTimeDialog = ref(false);
@ -52,6 +55,45 @@ const weight = ref();
const hasDocuwareFile = ref(); const hasDocuwareFile = ref();
const quasar = useQuasar(); const quasar = useQuasar();
const canRestoreTicket = ref(false); const canRestoreTicket = ref(false);
const onClientSelected = async(clientId) =>{
await fetchClient(clientId);
await fetchAddresses(clientId);
};
const fetchClient = async (clientId) => {
Review

Misma solución que para fetchAddresses

Revisar también el arrow function fetchAvailableAgencies que se repite en 3 ocasiones (TicketCreate, TicketCreateDialog y TicketList)

Misma solución que para fetchAddresses Revisar también el arrow function fetchAvailableAgencies que se repite en 3 ocasiones (TicketCreate, TicketCreateDialog y TicketList)
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) => {
Review

@jsegarra esta estructura ya la tenemos con esta 3 veces, y necesitaria su test, pero serian 3 test idénticos, como hacemos para tener esta funcion disponible en el proyecto en algun sitio comun solo testeada una vez? (que por cierto ahora no esta ninguna)

@jsegarra esta estructura ya la tenemos con esta 3 veces, y necesitaria su test, pero serian 3 test idénticos, como hacemos para tener esta funcion disponible en el proyecto en algun sitio comun solo testeada una vez? (que por cierto ahora no esta ninguna)
Review

La idea seria crear un composable en el directorio de customer (src/pages/Customer/composables) que haga el tema de la gestion de consignatarios

La idea seria crear un composable en el directorio de customer (src/pages/Customer/composables) que haga el tema de la gestion de consignatarios
Review

Esto se consideraría refactor y lo abordaria dentro de esta tarea porque al añadir funcionalidad se genera esta situación.

Esto se consideraría refactor y lo abordaria dentro de esta tarea porque al añadir funcionalidad se genera esta situación.
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 = { const actions = {
clone: async () => { clone: async () => {
const opts = { message: t('Ticket cloned'), type: 'positive' }; const opts = { message: t('Ticket cloned'), type: 'positive' };
@ -260,17 +302,14 @@ async function makeInvoice() {
window.location.reload(); window.location.reload();
} }
async function transferClient(client) { async function transferClient(client, address) {
const params = { const params = {
clientFk: client, clientFk: client,
addressFk: address,
}; };
const { data } = await axios.patch( await axios.patch( `Tickets/${ticketId.value}/transferClient`, params );
`Tickets/${ticketId.value}/transferClient`, window.location.reload();
params
);
if (data) window.location.reload();
} }
async function addTurn(day) { async function addTurn(day) {
@ -446,7 +485,7 @@ async function ticketToRestore() {
</QItem> </QItem>
<QDialog ref="dialogRef" v-model="showTransferDialog"> <QDialog ref="dialogRef" v-model="showTransferDialog">
<FormPopup <FormPopup
@on-submit="transferClient(client)" @on-submit="transferClient(client, address)"
:title="t('Transfer client')" :title="t('Transfer client')"
:custom-submit-button-label="t('Transfer client')" :custom-submit-button-label="t('Transfer client')"
:default-cancel-button="false" :default-cancel-button="false"
@ -454,10 +493,11 @@ async function ticketToRestore() {
<template #form-inputs> <template #form-inputs>
<VnSelect <VnSelect
url="Clients" url="Clients"
:fields="['id', 'name']" :fields="['id', 'name', 'defaultAddressFk']"
v-model="client" v-model="client"
:label="t('Client')" :label="t('Client')"
auto-load auto-load
@update:model-value="() => onClientSelected(client)"
> >
<template #option="scope"> <template #option="scope">
<QItem v-bind="scope.itemProps"> <QItem v-bind="scope.itemProps">
@ -470,6 +510,28 @@ async function ticketToRestore() {
</QItem> </QItem>
</template> </template>
</VnSelect> </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') : ''"
Review

trabaja el proyecto con la interfaz en español para detectar que posiblement aquí falte la traduccion

trabaja el proyecto con la interfaz en español para detectar que posiblement aquí falte la traduccion
Review

la traducción en español esta entre las etiquetas i18n de todas formas, es una traducción de una feat nueva que tenia que preguntarte si se autoriza su uso

la traducción en español esta entre las etiquetas i18n de todas formas, es una traducción de una feat nueva que tenia que preguntarte si se autoriza su uso
>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>
{{ `#${scope.opt.id} - ` }}
{{ scope.opt.nickname }}
</QItemLabel>
</QItemSection>
</QItem>
</template>
</VnSelect>
</template> </template>
</FormPopup> </FormPopup>
</QDialog> </QDialog>
@ -762,7 +824,7 @@ async function ticketToRestore() {
en: en:
addTurn: Add turn addTurn: Add turn
invoiceIds: "Invoices have been generated with the following ids: {invoiceIds}" invoiceIds: "Invoices have been generated with the following ids: {invoiceIds}"
es: es:
Show Delivery Note...: Ver albarán... Show Delivery Note...: Ver albarán...
Send Delivery Note...: Enviar albarán... Send Delivery Note...: Enviar albarán...
@ -814,4 +876,5 @@ es:
Are you sure you want to restore the ticket?: ¿Seguro que quieres restaurar el ticket? 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 You are going to restore this ticket: Vas a restaurar este ticket
Ticket restored: Ticket restaurado Ticket restored: Ticket restaurado
Select a client to enable: Selecciona un cliente para habilitar
</i18n> </i18n>