feat: refs #6564 add agency & ticket list #1108
|
@ -14,6 +14,8 @@ 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';
|
||||
import TicketProblems from 'src/components/TicketProblems.vue';
|
||||
|
||||
const state = useState();
|
||||
const { t } = useI18n();
|
||||
|
@ -27,6 +29,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);
|
||||
|
@ -78,6 +90,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 +106,6 @@ const ticketColumns = computed(() => [
|
|||
align: 'left',
|
||||
sortable: true,
|
||||
headerClass: 'horizontal-separator',
|
||||
columnFilter: false,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
|
@ -110,11 +130,17 @@ const ticketColumns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('advanceTickets.futureId'),
|
||||
name: 'futureId',
|
||||
label: t('advanceTickets.problems'),
|
||||
name: 'totalProblems',
|
||||
headerClass: 'vertical-separator horizontal-separator',
|
||||
columnClass: 'vertical-separator',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('advanceTickets.futureId'),
|
||||
name: 'futureId',
|
||||
headerClass: 'horizontal-separator',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('advanceTickets.futureIpt'),
|
||||
|
@ -242,7 +268,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) {
|
||||
|
@ -267,7 +293,7 @@ const moveTicketsAdvance = async () => {
|
|||
vnTableRef.value.reload();
|
||||
selectedTickets.value = [];
|
||||
if (ticketsToMove.length) notify(t('advanceTickets.moveTicketSuccess'), 'positive');
|
||||
};
|
||||
}
|
||||
|
||||
const progressLength = ref(0);
|
||||
const progressPercentage = computed(() => {
|
||||
|
@ -285,12 +311,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) {
|
||||
|
@ -310,7 +336,7 @@ const splitTickets = async () => {
|
|||
} finally {
|
||||
vnTableRef.value.reload();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const resetProgressData = () => {
|
||||
if (cancelProgress.value) cancelProgress.value = false;
|
||||
|
@ -326,6 +352,32 @@ const handleCloseProgressDialog = () => {
|
|||
|
||||
const handleCancelProgress = () => (cancelProgress.value = true);
|
||||
|
||||
const confirmAction = (action) => {
|
||||
openConfirmationModal(actions[action].title, false, actions[action].cb, null, {
|
||||
component: QTable,
|
||||
props: {
|
||||
columns: [
|
||||
{
|
||||
align: 'left',
|
||||
label: t('advanceTickets.destination'),
|
||||
name: 'id',
|
||||
field: (row) => row.id,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('advanceTickets.origin'),
|
||||
name: 'futureId',
|
||||
field: (row) => row.futureId,
|
||||
},
|
||||
],
|
||||
rows: selectedTickets.value,
|
||||
class: 'full-width',
|
||||
dense: true,
|
||||
flat: true,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
watch(
|
||||
() => vnTableRef.value.tableRef?.$el,
|
||||
($el) => {
|
||||
|
@ -345,16 +397,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(
|
||||
|
@ -362,14 +414,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 },
|
||||
);
|
||||
</script>
|
||||
<template>
|
||||
|
@ -399,15 +451,7 @@ watch(
|
|||
color="primary"
|
||||
class="q-mr-sm"
|
||||
:disable="!selectedTickets.length"
|
||||
@click.stop="
|
||||
openConfirmationModal(
|
||||
t('advanceTickets.advanceTicketTitle'),
|
||||
t(`advanceTickets.advanceTitleSubtitle`, {
|
||||
selectedTickets: selectedTickets.length,
|
||||
}),
|
||||
moveTicketsAdvance
|
||||
)
|
||||
"
|
||||
@click.stop="confirmAction('advance')"
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('advanceTickets.advanceTickets') }}
|
||||
|
@ -417,15 +461,7 @@ watch(
|
|||
icon="alt_route"
|
||||
color="primary"
|
||||
:disable="!selectedTickets.length"
|
||||
@click.stop="
|
||||
openConfirmationModal(
|
||||
t('advanceTickets.advanceWithoutNegativeTitle'),
|
||||
t(`advanceTickets.advanceWithoutNegativeSubtitle`, {
|
||||
selectedTickets: selectedTickets.length,
|
||||
}),
|
||||
splitTickets
|
||||
)
|
||||
"
|
||||
@click.stop="confirmAction('advanceWithoutNegative')"
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('advanceTickets.advanceTicketsWithoutNegatives') }}
|
||||
|
@ -454,7 +490,7 @@ watch(
|
|||
}"
|
||||
v-model:selected="selectedTickets"
|
||||
:pagination="{ rowsPerPage: 0 }"
|
||||
:no-data-label="t('globals.noResults')"
|
||||
:no-data-label="$t('globals.noResults')"
|
||||
:right-search="false"
|
||||
auto-load
|
||||
:disable-option="{ card: true }"
|
||||
|
@ -521,6 +557,9 @@ watch(
|
|||
{{ toCurrency(row.totalWithVat || 0) }}
|
||||
</QBadge>
|
||||
</template>
|
||||
<template #column-problems="{ row }">
|
||||
<TicketProblems :row="row" />
|
||||
</template>
|
||||
<template #column-futureId="{ row }">
|
||||
<QBtn flat class="link" dense>
|
||||
{{ row.futureId }}
|
||||
|
|
|
@ -126,6 +126,7 @@ onMounted(async () => await getItemPackingTypes());
|
|||
v-model="params.scopeDays"
|
||||
:label="t('Days onward')"
|
||||
is-outlined
|
||||
:step="0"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
|
|
|
@ -54,6 +54,7 @@ advanceTickets:
|
|||
search: Search advance tickets
|
||||
searchInfo: Search advance tickets by ID or client ID
|
||||
clonedSales: Has turn lines
|
||||
problems: Problems
|
||||
futureTickets:
|
||||
problems: Problems
|
||||
shipped: Date
|
||||
|
|
|
@ -92,6 +92,7 @@ advanceTickets:
|
|||
search: Buscar por tickets adelantados
|
||||
searchInfo: Buscar tickets adelantados por el identificador o el identificador del cliente
|
||||
clonedSales: Tiene líneas de turno
|
||||
problems: Problemas
|
||||
futureTickets:
|
||||
problems: Problemas
|
||||
shipped: Fecha
|
||||
|
|
Loading…
Reference in New Issue