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
Showing only changes of commit 36473d979b - Show all commits

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) => {
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 = {
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') : ''"
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>
</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>