From 5803b8392b6821bb1fa1a9168aff7fea5fe505be Mon Sep 17 00:00:00 2001 From: jorgep Date: Fri, 15 Mar 2024 16:30:12 +0100 Subject: [PATCH 1/7] feat: refs #6951 clone ticket --- .../Ticket/Card/TicketDescriptorMenu.vue | 90 ++++++++++++------- .../ticket/ticketDescriptor.spec.js | 27 ++++++ 2 files changed, 87 insertions(+), 30 deletions(-) create mode 100644 test/cypress/integration/ticket/ticketDescriptor.spec.js diff --git a/src/pages/Ticket/Card/TicketDescriptorMenu.vue b/src/pages/Ticket/Card/TicketDescriptorMenu.vue index 95f6a94d9..61167d722 100644 --- a/src/pages/Ticket/Card/TicketDescriptorMenu.vue +++ b/src/pages/Ticket/Card/TicketDescriptorMenu.vue @@ -3,7 +3,7 @@ import axios from 'axios'; import { ref } from 'vue'; import { useQuasar } from 'quasar'; import { useI18n } from 'vue-i18n'; -import { useRouter, useRoute } from 'vue-router'; +import { useRouter } from 'vue-router'; import { usePrintService } from 'composables/usePrintService'; import SendEmailDialog from 'components/common/SendEmailDialog.vue'; import VnConfirm from 'components/ui/VnConfirm.vue'; @@ -17,13 +17,14 @@ const props = defineProps({ }, }); -const router = useRouter(); -const route = useRoute(); -const quasar = useQuasar(); +const { push, currentRoute } = useRouter(); +const { dialog, notify } = useQuasar(); const { t } = useI18n(); const { openReport, sendEmail } = usePrintService(); const ticket = ref(props.ticket); +const ticketId = currentRoute.value.params.id; +const actions = { remove: remove, clone: clone }; function openDeliveryNote(type = 'deliveryNote', documentType = 'pdf') { const path = `Tickets/${ticket.value.id}/delivery-note-${documentType}`; @@ -35,7 +36,7 @@ function openDeliveryNote(type = 'deliveryNote', documentType = 'pdf') { function sendDeliveryNoteConfirmation(type = 'deliveryNote', documentType = 'pdf') { const customer = ticket.value.client; - quasar.dialog({ + dialog({ component: SendEmailDialog, componentProps: { data: { @@ -67,7 +68,7 @@ function showSmsDialog(template, customData) { const address = ticket.value.address; const client = ticket.value.client; const phone = - route.params.phone || + currentRoute.value.params.phone || address.mobile || address.phone || client.mobile || @@ -82,7 +83,7 @@ function showSmsDialog(template, customData) { Object.assign(data, customData); } - quasar.dialog({ + dialog({ component: VnSmsDialog, componentProps: { phone: phone, @@ -95,43 +96,63 @@ function showSmsDialog(template, customData) { } async function showSmsDialogWithChanges() { - const query = `TicketLogs/${route.params.id}/getChanges`; + const query = `TicketLogs/${ticketId}/getChanges`; const response = await axios.get(query); showSmsDialog('orderChanges', { changes: response.data }); } async function sendSms(body) { - await axios.post(`Tickets/${route.params.id}/sendSms`, body); - quasar.notify({ + await axios.post(`Tickets/${ticketId}/sendSms`, body); + notify({ message: 'Notification sent', type: 'positive', }); } -function confirmDelete() { - quasar - .dialog({ - component: VnConfirm, - componentProps: { - promise: remove, - }, - }) - .onOk(async () => await router.push({ name: 'TicketList' })); +function openConfirmDialog(callback) { + dialog({ + component: VnConfirm, + componentProps: { + promise: actions[callback], + }, + }); +} + +async function clone() { + const opts = { message: t('Ticket cloned'), type: 'positive' }; + let clonedTicketId; + + try { + const { data } = await axios.post(`Tickets/${ticketId}/clone`, { + shipped: ticket.value.shipped, + }); + clonedTicketId = data; + } catch (e) { + opts.message = t('It was not able to clone the ticket'); + opts.type = 'negative'; + } finally { + notify(opts); + + if (clonedTicketId) + push({ name: 'TicketSummary', params: { id: clonedTicketId } }); + } } async function remove() { - const id = route.params.id; - await axios.post(`Tickets/${id}/setDeleted`); + try { + await axios.post(`Tickets/${ticketId}/setDeleted`); - quasar.notify({ - message: t('Ticket deleted'), - type: 'positive', - }); - quasar.notify({ - message: t('You can undo this action within the first hour'), - icon: 'info', - }); + notify({ message: t('Ticket deleted'), type: 'positive' }); + notify({ + message: t('You can undo this action within the first hour'), + icon: 'info', + }); + + push({ name: 'TicketList' }); + } catch (e) { + notify({ message: e.message, type: 'negative' }); + } }