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 { toDateFormat } from 'src/filters/date.js';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||||
|
import { QTable } from 'quasar';
|
||||||
|
import TicketProblems from 'src/components/TicketProblems.vue';
|
||||||
|
|
||||||
const state = useState();
|
const state = useState();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -27,6 +29,16 @@ const selectedTickets = ref([]);
|
||||||
const vnTableRef = ref({});
|
const vnTableRef = ref({});
|
||||||
const originElRef = ref(null);
|
const originElRef = ref(null);
|
||||||
const destinationElRef = 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();
|
let today = Date.vnNew().toISOString();
|
||||||
const tomorrow = new Date(today);
|
const tomorrow = new Date(today);
|
||||||
tomorrow.setDate(tomorrow.getDate() + 1);
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
||||||
|
@ -78,6 +90,15 @@ const ticketColumns = computed(() => [
|
||||||
headerClass: 'horizontal-separator',
|
headerClass: 'horizontal-separator',
|
||||||
hidden: true,
|
hidden: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: t('globals.agency'),
|
||||||
|
name: 'agency',
|
||||||
|
field: 'agency',
|
||||||
|
align: 'left',
|
||||||
|
sortable: true,
|
||||||
|
headerClass: 'horizontal-separator',
|
||||||
|
columnFilter: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: t('advanceTickets.preparation'),
|
label: t('advanceTickets.preparation'),
|
||||||
name: 'preparation',
|
name: 'preparation',
|
||||||
|
@ -85,7 +106,6 @@ const ticketColumns = computed(() => [
|
||||||
align: 'left',
|
align: 'left',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
headerClass: 'horizontal-separator',
|
headerClass: 'horizontal-separator',
|
||||||
columnFilter: false,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
|
@ -110,11 +130,17 @@ const ticketColumns = computed(() => [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
label: t('advanceTickets.futureId'),
|
label: t('advanceTickets.problems'),
|
||||||
name: 'futureId',
|
name: 'totalProblems',
|
||||||
headerClass: 'vertical-separator horizontal-separator',
|
headerClass: 'vertical-separator horizontal-separator',
|
||||||
columnClass: 'vertical-separator',
|
columnClass: 'vertical-separator',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
label: t('advanceTickets.futureId'),
|
||||||
|
name: 'futureId',
|
||||||
|
headerClass: 'horizontal-separator',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
label: t('advanceTickets.futureIpt'),
|
label: t('advanceTickets.futureIpt'),
|
||||||
|
@ -242,7 +268,7 @@ const requestComponentUpdate = async (ticket, isWithoutNegatives) => {
|
||||||
return { query, params };
|
return { query, params };
|
||||||
};
|
};
|
||||||
|
|
||||||
const moveTicketsAdvance = async () => {
|
async function moveTicketsAdvance() {
|
||||||
let ticketsToMove = [];
|
let ticketsToMove = [];
|
||||||
for (const ticket of selectedTickets.value) {
|
for (const ticket of selectedTickets.value) {
|
||||||
if (!ticket.id) {
|
if (!ticket.id) {
|
||||||
|
@ -267,7 +293,7 @@ const moveTicketsAdvance = async () => {
|
||||||
vnTableRef.value.reload();
|
vnTableRef.value.reload();
|
||||||
selectedTickets.value = [];
|
selectedTickets.value = [];
|
||||||
if (ticketsToMove.length) notify(t('advanceTickets.moveTicketSuccess'), 'positive');
|
if (ticketsToMove.length) notify(t('advanceTickets.moveTicketSuccess'), 'positive');
|
||||||
};
|
}
|
||||||
|
|
||||||
const progressLength = ref(0);
|
const progressLength = ref(0);
|
||||||
const progressPercentage = computed(() => {
|
const progressPercentage = computed(() => {
|
||||||
|
@ -285,12 +311,12 @@ const progressAdd = () => {
|
||||||
t('advanceTickets.moveTicketSuccess', {
|
t('advanceTickets.moveTicketSuccess', {
|
||||||
ticketsNumber: progressLength.value - splitErrors.value.length,
|
ticketsNumber: progressLength.value - splitErrors.value.length,
|
||||||
}),
|
}),
|
||||||
'positive'
|
'positive',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const splitTickets = async () => {
|
async function splitTickets() {
|
||||||
try {
|
try {
|
||||||
showProgressDialog.value = true;
|
showProgressDialog.value = true;
|
||||||
for (const ticket of selectedTickets.value) {
|
for (const ticket of selectedTickets.value) {
|
||||||
|
@ -310,7 +336,7 @@ const splitTickets = async () => {
|
||||||
} finally {
|
} finally {
|
||||||
vnTableRef.value.reload();
|
vnTableRef.value.reload();
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
const resetProgressData = () => {
|
const resetProgressData = () => {
|
||||||
if (cancelProgress.value) cancelProgress.value = false;
|
if (cancelProgress.value) cancelProgress.value = false;
|
||||||
|
@ -326,6 +352,32 @@ const handleCloseProgressDialog = () => {
|
||||||
|
|
||||||
const handleCancelProgress = () => (cancelProgress.value = true);
|
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(
|
watch(
|
||||||
() => vnTableRef.value.tableRef?.$el,
|
() => vnTableRef.value.tableRef?.$el,
|
||||||
($el) => {
|
($el) => {
|
||||||
|
@ -345,16 +397,16 @@ watch(
|
||||||
originElRef.value.setAttribute('colspan', '9');
|
originElRef.value.setAttribute('colspan', '9');
|
||||||
|
|
||||||
destinationElRef.value.textContent = `${t(
|
destinationElRef.value.textContent = `${t(
|
||||||
'advanceTickets.destination'
|
'advanceTickets.destination',
|
||||||
)} ${toDateFormat(vnTableRef.value.params.dateToAdvance)}`;
|
)} ${toDateFormat(vnTableRef.value.params.dateToAdvance)}`;
|
||||||
originElRef.value.textContent = `${t('advanceTickets.origin')} ${toDateFormat(
|
originElRef.value.textContent = `${t('advanceTickets.origin')} ${toDateFormat(
|
||||||
vnTableRef.value.params.dateFuture
|
vnTableRef.value.params.dateFuture,
|
||||||
)}`;
|
)}`;
|
||||||
|
|
||||||
newRow.append(destinationElRef.value, originElRef.value);
|
newRow.append(destinationElRef.value, originElRef.value);
|
||||||
head.insertBefore(newRow, firstRow);
|
head.insertBefore(newRow, firstRow);
|
||||||
},
|
},
|
||||||
{ once: true, inmmediate: true }
|
{ once: true, inmmediate: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
|
@ -362,14 +414,14 @@ watch(
|
||||||
() => {
|
() => {
|
||||||
if (originElRef.value && destinationElRef.value) {
|
if (originElRef.value && destinationElRef.value) {
|
||||||
destinationElRef.value.textContent = `${t(
|
destinationElRef.value.textContent = `${t(
|
||||||
'advanceTickets.destination'
|
'advanceTickets.destination',
|
||||||
)} ${toDateFormat(vnTableRef.value.params.dateToAdvance)}`;
|
)} ${toDateFormat(vnTableRef.value.params.dateToAdvance)}`;
|
||||||
originElRef.value.textContent = `${t('advanceTickets.origin')} ${toDateFormat(
|
originElRef.value.textContent = `${t('advanceTickets.origin')} ${toDateFormat(
|
||||||
vnTableRef.value.params.dateFuture
|
vnTableRef.value.params.dateFuture,
|
||||||
)}`;
|
)}`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true },
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
@ -399,15 +451,7 @@ watch(
|
||||||
color="primary"
|
color="primary"
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
:disable="!selectedTickets.length"
|
:disable="!selectedTickets.length"
|
||||||
@click.stop="
|
@click.stop="confirmAction('advance')"
|
||||||
openConfirmationModal(
|
|
||||||
t('advanceTickets.advanceTicketTitle'),
|
|
||||||
t(`advanceTickets.advanceTitleSubtitle`, {
|
|
||||||
selectedTickets: selectedTickets.length,
|
|
||||||
}),
|
|
||||||
moveTicketsAdvance
|
|
||||||
)
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('advanceTickets.advanceTickets') }}
|
{{ t('advanceTickets.advanceTickets') }}
|
||||||
|
@ -417,15 +461,7 @@ watch(
|
||||||
icon="alt_route"
|
icon="alt_route"
|
||||||
color="primary"
|
color="primary"
|
||||||
:disable="!selectedTickets.length"
|
:disable="!selectedTickets.length"
|
||||||
@click.stop="
|
@click.stop="confirmAction('advanceWithoutNegative')"
|
||||||
openConfirmationModal(
|
|
||||||
t('advanceTickets.advanceWithoutNegativeTitle'),
|
|
||||||
t(`advanceTickets.advanceWithoutNegativeSubtitle`, {
|
|
||||||
selectedTickets: selectedTickets.length,
|
|
||||||
}),
|
|
||||||
splitTickets
|
|
||||||
)
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('advanceTickets.advanceTicketsWithoutNegatives') }}
|
{{ t('advanceTickets.advanceTicketsWithoutNegatives') }}
|
||||||
|
@ -454,7 +490,7 @@ watch(
|
||||||
}"
|
}"
|
||||||
v-model:selected="selectedTickets"
|
v-model:selected="selectedTickets"
|
||||||
:pagination="{ rowsPerPage: 0 }"
|
:pagination="{ rowsPerPage: 0 }"
|
||||||
:no-data-label="t('globals.noResults')"
|
:no-data-label="$t('globals.noResults')"
|
||||||
:right-search="false"
|
:right-search="false"
|
||||||
auto-load
|
auto-load
|
||||||
:disable-option="{ card: true }"
|
:disable-option="{ card: true }"
|
||||||
|
@ -521,6 +557,9 @@ watch(
|
||||||
{{ toCurrency(row.totalWithVat || 0) }}
|
{{ toCurrency(row.totalWithVat || 0) }}
|
||||||
</QBadge>
|
</QBadge>
|
||||||
</template>
|
</template>
|
||||||
|
<template #column-problems="{ row }">
|
||||||
|
<TicketProblems :row="row" />
|
||||||
|
</template>
|
||||||
<template #column-futureId="{ row }">
|
<template #column-futureId="{ row }">
|
||||||
<QBtn flat class="link" dense>
|
<QBtn flat class="link" dense>
|
||||||
{{ row.futureId }}
|
{{ row.futureId }}
|
||||||
|
|
|
@ -126,6 +126,7 @@ onMounted(async () => await getItemPackingTypes());
|
||||||
v-model="params.scopeDays"
|
v-model="params.scopeDays"
|
||||||
:label="t('Days onward')"
|
:label="t('Days onward')"
|
||||||
is-outlined
|
is-outlined
|
||||||
|
:step="0"
|
||||||
/>
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
|
|
|
@ -54,6 +54,7 @@ advanceTickets:
|
||||||
search: Search advance tickets
|
search: Search advance tickets
|
||||||
searchInfo: Search advance tickets by ID or client ID
|
searchInfo: Search advance tickets by ID or client ID
|
||||||
clonedSales: Has turn lines
|
clonedSales: Has turn lines
|
||||||
|
problems: Problems
|
||||||
futureTickets:
|
futureTickets:
|
||||||
problems: Problems
|
problems: Problems
|
||||||
shipped: Date
|
shipped: Date
|
||||||
|
|
|
@ -92,6 +92,7 @@ advanceTickets:
|
||||||
search: Buscar por tickets adelantados
|
search: Buscar por tickets adelantados
|
||||||
searchInfo: Buscar tickets adelantados por el identificador o el identificador del cliente
|
searchInfo: Buscar tickets adelantados por el identificador o el identificador del cliente
|
||||||
clonedSales: Tiene líneas de turno
|
clonedSales: Tiene líneas de turno
|
||||||
|
problems: Problemas
|
||||||
futureTickets:
|
futureTickets:
|
||||||
problems: Problemas
|
problems: Problemas
|
||||||
shipped: Fecha
|
shipped: Fecha
|
||||||
|
|
Loading…
Reference in New Issue