From aa3810a4c0bcb24c4a9411c639cb2005a239500f Mon Sep 17 00:00:00 2001 From: jorgep Date: Wed, 18 Dec 2024 11:24:12 +0100 Subject: [PATCH 01/11] feat: refs #6564 add agency & ticket list --- src/pages/Ticket/TicketAdvance.vue | 36 +++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/pages/Ticket/TicketAdvance.vue b/src/pages/Ticket/TicketAdvance.vue index 9b6669acb..25401f1ad 100644 --- a/src/pages/Ticket/TicketAdvance.vue +++ b/src/pages/Ticket/TicketAdvance.vue @@ -78,6 +78,15 @@ const ticketColumns = computed(() => [ headerClass: 'horizontal-separator', hidden: true, }, + { + label: t('globals.agency'), + name: 'agency', + field: 'agency', + align: 'left', + sortable: true, + headerClass: 'horizontal-separator', + columnFilter: false, + }, { label: t('advanceTickets.preparation'), name: 'preparation', @@ -85,7 +94,6 @@ const ticketColumns = computed(() => [ align: 'left', sortable: true, headerClass: 'horizontal-separator', - columnFilter: false, }, { align: 'left', @@ -327,6 +335,22 @@ const handleCloseProgressDialog = () => { const handleCancelProgress = () => (cancelProgress.value = true); +const getMessage = (type) => { + const locale = + type === 'advance' ? 'advanceTitleSubtitle' : 'advanceWithoutNegativeSubtitle'; + + let message = t(`advanceTickets.${locale}`, { + selectedTickets: selectedTickets.value.length, + }); + + // message += ''; + return message; +}; + watch( () => vnTableRef.value.tableRef?.$el, ($el) => { @@ -402,10 +426,8 @@ watch( :disable="!selectedTickets.length" @click.stop=" openConfirmationModal( - t('advanceTickets.advanceTicketTitle'), - t(`advanceTickets.advanceTitleSubtitle`, { - selectedTickets: selectedTickets.length, - }), + t('advanceTickets.advanceTickets'), + getMessage('advance'), moveTicketsAdvance ) " @@ -421,9 +443,7 @@ watch( @click.stop=" openConfirmationModal( t('advanceTickets.advanceWithoutNegativeTitle'), - t(`advanceTickets.advanceWithoutNegativeSubtitle`, { - selectedTickets: selectedTickets.length, - }), + getMessage('split'), splitTickets ) " From 82fa3b46487ad0b296cafbff47f28e5925751c86 Mon Sep 17 00:00:00 2001 From: jorgep Date: Wed, 18 Dec 2024 12:10:33 +0100 Subject: [PATCH 02/11] feat: refs #6564 add 0 step --- src/pages/Ticket/TicketAdvanceFilter.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/Ticket/TicketAdvanceFilter.vue b/src/pages/Ticket/TicketAdvanceFilter.vue index 6d5c7726e..2be1369a9 100644 --- a/src/pages/Ticket/TicketAdvanceFilter.vue +++ b/src/pages/Ticket/TicketAdvanceFilter.vue @@ -126,6 +126,7 @@ onMounted(async () => await getItemPackingTypes()); v-model="params.scopeDays" :label="t('Days onward')" is-outlined + :step="0" /> From 498e8c385ea976f9814a119f8bada11df98bfbdc Mon Sep 17 00:00:00 2001 From: jorgep Date: Mon, 3 Feb 2025 17:35:36 +0100 Subject: [PATCH 03/11] feat: refs #6564 enhance ticket advance functionality with confirmation actions and improved UI interactions --- src/pages/Ticket/TicketAdvance.vue | 87 ++++++++++++++++-------------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/src/pages/Ticket/TicketAdvance.vue b/src/pages/Ticket/TicketAdvance.vue index 35bd5cc0f..b223d260c 100644 --- a/src/pages/Ticket/TicketAdvance.vue +++ b/src/pages/Ticket/TicketAdvance.vue @@ -14,6 +14,7 @@ import { useState } from 'src/composables/useState'; import { toDateFormat } from 'src/filters/date.js'; import axios from 'axios'; import VnTable from 'src/components/VnTable/VnTable.vue'; +import { QTable } from 'quasar'; const state = useState(); const { t } = useI18n(); @@ -27,6 +28,16 @@ const selectedTickets = ref([]); const vnTableRef = ref({}); const originElRef = ref(null); const destinationElRef = ref(null); +const actions = { + advance: { + title: t('advanceTickets.advanceTickets'), + cb: moveTicketsAdvance, + }, + advanceWithoutNegative: { + title: t('advanceTickets.advanceTicketsWithoutNegatives'), + cb: splitTickets, + }, +}; let today = Date.vnNew().toISOString(); const tomorrow = new Date(today); tomorrow.setDate(tomorrow.getDate() + 1); @@ -250,7 +261,7 @@ const requestComponentUpdate = async (ticket, isWithoutNegatives) => { return { query, params }; }; -const moveTicketsAdvance = async () => { +async function moveTicketsAdvance() { let ticketsToMove = []; for (const ticket of selectedTickets.value) { if (!ticket.id) { @@ -275,7 +286,7 @@ const moveTicketsAdvance = async () => { vnTableRef.value.reload(); selectedTickets.value = []; if (ticketsToMove.length) notify(t('advanceTickets.moveTicketSuccess'), 'positive'); -}; +} const progressLength = ref(0); const progressPercentage = computed(() => { @@ -293,12 +304,12 @@ const progressAdd = () => { t('advanceTickets.moveTicketSuccess', { ticketsNumber: progressLength.value - splitErrors.value.length, }), - 'positive' + 'positive', ); } }; -const splitTickets = async () => { +async function splitTickets() { try { showProgressDialog.value = true; for (const ticket of selectedTickets.value) { @@ -318,7 +329,7 @@ const splitTickets = async () => { } finally { vnTableRef.value.reload(); } -}; +} const resetProgressData = () => { if (cancelProgress.value) cancelProgress.value = false; @@ -334,20 +345,30 @@ const handleCloseProgressDialog = () => { const handleCancelProgress = () => (cancelProgress.value = true); -const getMessage = (type) => { - const locale = - type === 'advance' ? 'advanceTitleSubtitle' : 'advanceWithoutNegativeSubtitle'; - - let message = t(`advanceTickets.${locale}`, { - selectedTickets: selectedTickets.value.length, +const confirmAction = (action) => { + openConfirmationModal(actions[action].title, false, actions[action].cb, null, { + component: QTable, + props: { + columns: [ + { + align: 'center', + label: t('advanceTickets.destination'), + name: 'id', + field: (row) => row.id, + }, + { + align: 'center', + label: t('advanceTickets.origin'), + name: 'futureId', + field: (row) => row.futureId, + }, + ], + rows: selectedTickets.value, + class: 'full-width', + dense: true, + flat: true, + }, }); - - // message += '
    '; - // for (const ticket of selectedTickets.value) { - // message += `
  • ${ticket.futureId} << ${ticket.id}
  • `; - // } - // message += '
'; - return message; }; watch( @@ -369,16 +390,16 @@ watch( originElRef.value.setAttribute('colspan', '9'); destinationElRef.value.textContent = `${t( - 'advanceTickets.destination' + 'advanceTickets.destination', )} ${toDateFormat(vnTableRef.value.params.dateToAdvance)}`; originElRef.value.textContent = `${t('advanceTickets.origin')} ${toDateFormat( - vnTableRef.value.params.dateFuture + vnTableRef.value.params.dateFuture, )}`; newRow.append(destinationElRef.value, originElRef.value); head.insertBefore(newRow, firstRow); }, - { once: true, inmmediate: true } + { once: true, inmmediate: true }, ); watch( @@ -386,14 +407,14 @@ watch( () => { if (originElRef.value && destinationElRef.value) { destinationElRef.value.textContent = `${t( - 'advanceTickets.destination' + 'advanceTickets.destination', )} ${toDateFormat(vnTableRef.value.params.dateToAdvance)}`; originElRef.value.textContent = `${t('advanceTickets.origin')} ${toDateFormat( - vnTableRef.value.params.dateFuture + vnTableRef.value.params.dateFuture, )}`; } }, - { deep: true } + { deep: true }, ); +