From a6a27237341f27db158378a45d064b6458d33139 Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 27 Jan 2025 14:21:09 +0100 Subject: [PATCH 01/33] feat: refs #8463 cardDescriptorBeta --- src/components/common/VnCardBeta.vue | 75 +++-- src/components/ui/CardDescriptorBeta.vue | 262 ++++++++++++++++++ src/pages/Order/Card/OrderCard.vue | 30 ++ src/pages/Order/Card/OrderDescriptor.vue | 45 +-- src/pages/Order/Card/OrderDescriptorProxy.vue | 7 +- src/pages/Order/Card/OrderSummary.vue | 3 +- 6 files changed, 358 insertions(+), 64 deletions(-) create mode 100644 src/components/ui/CardDescriptorBeta.vue diff --git a/src/components/common/VnCardBeta.vue b/src/components/common/VnCardBeta.vue index a1f07ff1730..2579bf623fb 100644 --- a/src/components/common/VnCardBeta.vue +++ b/src/components/common/VnCardBeta.vue @@ -1,5 +1,5 @@ diff --git a/src/components/ui/CardDescriptorBeta.vue b/src/components/ui/CardDescriptorBeta.vue new file mode 100644 index 00000000000..b2bac234d55 --- /dev/null +++ b/src/components/ui/CardDescriptorBeta.vue @@ -0,0 +1,262 @@ + + + + + + + diff --git a/src/pages/Order/Card/OrderCard.vue b/src/pages/Order/Card/OrderCard.vue index 823815f59b9..b371509c62a 100644 --- a/src/pages/Order/Card/OrderCard.vue +++ b/src/pages/Order/Card/OrderCard.vue @@ -1,12 +1,42 @@ diff --git a/src/pages/Order/Card/OrderDescriptor.vue b/src/pages/Order/Card/OrderDescriptor.vue index 0d5f0146f7b..4c2384f9207 100644 --- a/src/pages/Order/Card/OrderDescriptor.vue +++ b/src/pages/Order/Card/OrderDescriptor.vue @@ -6,10 +6,11 @@ import { toCurrency, toDate } from 'src/filters'; import { useState } from 'src/composables/useState'; import useCardDescription from 'src/composables/useCardDescription'; -import CardDescriptor from 'components/ui/CardDescriptor.vue'; import VnLv from 'src/components/ui/VnLv.vue'; import FetchData from 'components/FetchData.vue'; import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue'; +import OrderCard from './OrderCard.vue'; +import CardDescriptorBeta from 'src/components/ui/CardDescriptorBeta.vue'; const DEFAULT_ITEMS = 0; @@ -26,37 +27,13 @@ const state = useState(); const { t } = useI18n(); const data = ref(useCardDescription()); const getTotalRef = ref(); +const total = ref(0); const entityId = computed(() => { return $props.id || route.params.id; }); -const filter = { - include: [ - { relation: 'agencyMode', scope: { fields: ['name'] } }, - { - relation: 'address', - scope: { fields: ['nickname'] }, - }, - { relation: 'rows', scope: { fields: ['id'] } }, - { - relation: 'client', - scope: { - fields: [ - 'salesPersonFk', - 'name', - 'isActive', - 'isFreezed', - 'isTaxDataChecked', - ], - include: { - relation: 'salesPersonUser', - scope: { fields: ['id', 'name'] }, - }, - }, - }, - ], -}; +const orderTotal = computed(() => state.get('orderTotal') ?? 0); const setData = (entity) => { if (!entity) return; @@ -68,9 +45,6 @@ const setData = (entity) => { const getConfirmationValue = (isConfirmed) => { return t(isConfirmed ? 'globals.confirmed' : 'order.summary.notConfirmed'); }; - -const orderTotal = computed(() => state.get('orderTotal') ?? 0); -const total = ref(0); diff --git a/src/pages/Order/Card/OrderDescriptorProxy.vue b/src/pages/Order/Card/OrderDescriptorProxy.vue index 04ebb054a23..7b3d1a8713f 100644 --- a/src/pages/Order/Card/OrderDescriptorProxy.vue +++ b/src/pages/Order/Card/OrderDescriptorProxy.vue @@ -12,6 +12,11 @@ const $props = defineProps({ diff --git a/src/pages/Order/Card/OrderSummary.vue b/src/pages/Order/Card/OrderSummary.vue index a289688e47e..bef97bc0fde 100644 --- a/src/pages/Order/Card/OrderSummary.vue +++ b/src/pages/Order/Card/OrderSummary.vue @@ -13,6 +13,7 @@ import FetchedTags from 'components/ui/FetchedTags.vue'; import VnTitle from 'src/components/common/VnTitle.vue'; import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue'; import OrderDescriptorMenu from 'pages/Order/Card/OrderDescriptorMenu.vue'; +import OrderDescriptorProxy from './OrderDescriptorProxy.vue'; const { t } = useI18n(); const route = useRoute(); @@ -106,7 +107,7 @@ async function handleConfirm() { From ee3ebc51f1866efd0fc5b7db8facb3250c1bfc29 Mon Sep 17 00:00:00 2001 From: jtubau Date: Tue, 25 Feb 2025 15:27:01 +0100 Subject: [PATCH 02/33] test: refs #8621 add e2e tests for cmrList --- .../integration/route/cmr/cmrList.spec.js | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 test/cypress/integration/route/cmr/cmrList.spec.js diff --git a/test/cypress/integration/route/cmr/cmrList.spec.js b/test/cypress/integration/route/cmr/cmrList.spec.js new file mode 100644 index 00000000000..fc437f21809 --- /dev/null +++ b/test/cypress/integration/route/cmr/cmrList.spec.js @@ -0,0 +1,87 @@ +describe('Cmr list', () => { + const getLinkSelector = (colField) => + `tr:first-child > [data-col-field="${colField}"] > .no-padding > .link`; + + const selectors = { + ticket: getLinkSelector('ticketFk'), + client: getLinkSelector('clientFk'), + lastRowSelectCheckBox: + '.q-virtual-scroll__content > tr:last-child > :nth-child(1) > .q-checkbox', + downloadBtn: '#subToolbar > .q-btn', + viewCmr: 'tableAction-0', + summaryPopupBtn: '.header > :nth-child(2) > .q-btn__content > .q-icon', + summaryPopupHeader: '.summaryHeader > :nth-child(2)', + summaryHeader: '.summaryHeader', + descriptorId: '.q-item > .q-item__label', + descriptorTitle: '.q-item__label--header > .title > span', + summaryGoToSummaryBtn: '.header > .q-icon', + descriptorGoToSummaryBtn: '.descriptor > .header > a[href] > .q-btn', + }; + + const data = { + ticket: '2', + client: 'Bruce Wayne', + }; + + beforeEach(() => { + cy.viewport(1920, 1080); + cy.login('developer'); + cy.visit('/#/route/cmr'); + cy.typeSearchbar('{enter}'); + }); + + it('Should download selected cmr', () => { + const downloadsFolder = Cypress.config('downloadsFolder'); + cy.get(selectors.lastRowSelectCheckBox).click(); + cy.get(selectors.downloadBtn).click(); + cy.wait(3000); + + const fileName = 'cmrs.zip'; + cy.readFile(`${downloadsFolder}/${fileName}`).should('exist'); + }); + + it('Should open selected cmr pdf', () => { + cy.window().then((win) => { + cy.stub(win, 'open').as('windowOpen'); + }); + cy.get(selectors.lastRowSelectCheckBox).click(); + cy.dataCy(selectors.viewCmr).last().click(); + cy.get('@windowOpen').should('be.calledWithMatch', '\/api\/Cmrs\/3'); + }); + + describe('Ticket pop-ups', () => { + it('Should redirect to the ticket summary from the ticket descriptor pop-up', () => { + cy.get(selectors.ticket).click(); + cy.get(selectors.descriptorId).should('contain', data.ticket); + cy.get(selectors.descriptorGoToSummaryBtn).click(); + cy.get(selectors.summaryHeader).should('contain', data.client); + }); + + it('Should redirect to the ticket summary from summary pop-up from the ticket descriptor pop-up', () => { + cy.get(selectors.ticket).click(); + cy.get(selectors.descriptorId).should('contain', data.ticket); + cy.get(selectors.summaryPopupBtn).click(); + cy.get(selectors.summaryPopupHeader).should('contain', data.client); + cy.get(selectors.summaryGoToSummaryBtn).click(); + cy.get(selectors.summaryHeader).should('contain', data.client); + }); + }); + + describe('Client pop-ups', () => { + it('Should redirect to the client summary from the client descriptor pop-up', () => { + cy.get(selectors.client).click(); + cy.get(selectors.descriptorTitle).should('contain', data.client); + cy.get(selectors.descriptorGoToSummaryBtn).click(); + cy.get(selectors.summaryHeader).should('contain', data.client); + }); + + it('Should redirect to the client summary from summary pop-up from the client descriptor pop-up', () => { + cy.get(selectors.client).click(); + cy.get(selectors.descriptorTitle).should('contain', data.client); + cy.get(selectors.summaryPopupBtn).click(); + cy.get(selectors.summaryHeader).should('contain', data.client); + cy.get(selectors.summaryGoToSummaryBtn).click(); + cy.get(selectors.summaryHeader).should('contain', data.client); + }); + }); +}); From 083e68c291d97d83fe9f08e1fe028c9db6fd5dd9 Mon Sep 17 00:00:00 2001 From: jtubau Date: Wed, 26 Feb 2025 09:09:19 +0100 Subject: [PATCH 03/33] test: refs #8621 add functionality to remove filters in cmrList e2e tests --- test/cypress/integration/route/cmr/cmrList.spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/cypress/integration/route/cmr/cmrList.spec.js b/test/cypress/integration/route/cmr/cmrList.spec.js index fc437f21809..6bcbfc84205 100644 --- a/test/cypress/integration/route/cmr/cmrList.spec.js +++ b/test/cypress/integration/route/cmr/cmrList.spec.js @@ -16,6 +16,7 @@ describe('Cmr list', () => { descriptorTitle: '.q-item__label--header > .title > span', summaryGoToSummaryBtn: '.header > .q-icon', descriptorGoToSummaryBtn: '.descriptor > .header > a[href] > .q-btn', + removeFilter: '.q-chip__icon--remove', }; const data = { @@ -28,6 +29,7 @@ describe('Cmr list', () => { cy.login('developer'); cy.visit('/#/route/cmr'); cy.typeSearchbar('{enter}'); + cy.get(selectors.removeFilter).click(); }); it('Should download selected cmr', () => { From 15e44174badf8fcd351dfff19747589c579f9b39 Mon Sep 17 00:00:00 2001 From: jtubau Date: Wed, 26 Feb 2025 12:08:40 +0100 Subject: [PATCH 04/33] refactor: refs #8621 update column names in RouteList and add formatting for agency and vehicle fields --- src/pages/Route/RouteList.vue | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/Route/RouteList.vue b/src/pages/Route/RouteList.vue index 9dad8ba22b5..899b3b8c356 100644 --- a/src/pages/Route/RouteList.vue +++ b/src/pages/Route/RouteList.vue @@ -56,8 +56,9 @@ const columns = computed(() => [ }, { align: 'left', - name: 'agencyName', + name: 'agencyModeFk', label: t('route.Agency'), + format: (row) => row?.agencyName, cardVisible: true, component: 'select', attrs: { @@ -74,8 +75,9 @@ const columns = computed(() => [ }, { align: 'left', - name: 'vehiclePlateNumber', + name: 'vehicleFk', label: t('route.Vehicle'), + format: (row) => row?.vehiclePlateNumber, cardVisible: true, component: 'select', attrs: { @@ -155,6 +157,7 @@ const columns = computed(() => [ - + \ No newline at end of file From 6a0c58631c4e8d997b93f9f7ebaecdfd7bb53ff5 Mon Sep 17 00:00:00 2001 From: jtubau Date: Wed, 12 Mar 2025 12:34:03 +0100 Subject: [PATCH 05/33] fix: refs #8621 test for date input selector --- src/pages/Route/RouteList.vue | 30 +++++++------------ .../route/routeExtendedList.spec.js | 2 +- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/pages/Route/RouteList.vue b/src/pages/Route/RouteList.vue index db52dcf6d98..f8234c7db84 100644 --- a/src/pages/Route/RouteList.vue +++ b/src/pages/Route/RouteList.vue @@ -39,28 +39,24 @@ const columns = computed(() => [ width: '25px', }, { - name: 'workerFk', - label: t('gloabls.worker'), - component: markRaw(VnSelectWorker), - create: true, - format: (row, dashIfEmpty) => dashIfEmpty(row.travelRef), - columnFilter: false, - width: '100px', - }, - { + align: 'left', name: 'workerFk', label: t('globals.worker'), - visible: false, + component: markRaw(VnSelectWorker), + create: true, cardVisible: true, + format: (row, dashIfEmpty) => dashIfEmpty(row.travelRef), + columnFilter: false, }, { - name: 'agencyName', + align: 'left', + name: 'agencyModeFk', label: t('globals.agency'), - visible: false, + format: (row) => row?.agencyName, cardVisible: true, }, { - label: t('globals.Agency'), + label: t('globals.agency'), name: 'agencyModeFk', component: 'select', attrs: { @@ -78,17 +74,13 @@ const columns = computed(() => [ { align: 'left', name: 'vehicleFk', - label: t('route.Vehicle'), + label: t('globals.vehicle'), format: (row) => row?.vehiclePlateNumber, cardVisible: true, }, - { - name: 'vehiclePlateNumber', - label: t('globals.vehicle'), - }, { name: 'vehicleFk', - label: t('globals.Vehicle'), + label: t('globals.vehicle'), cardVisible: true, component: 'select', attrs: { diff --git a/test/cypress/integration/route/routeExtendedList.spec.js b/test/cypress/integration/route/routeExtendedList.spec.js index 237729107de..b46ce3ba257 100644 --- a/test/cypress/integration/route/routeExtendedList.spec.js +++ b/test/cypress/integration/route/routeExtendedList.spec.js @@ -120,7 +120,7 @@ describe('Route extended list', () => { it('Should clone selected route', () => { cy.get(selectors.lastRowSelectCheckBox).click(); cy.get(selectors.cloneBtn).click(); - cy.dataCy('route.Starting date_inputDate').type('10-05-2001'); + cy.dataCy('Starting date_inputDate').type('10-05-2001'); cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click(); cy.validateContent(selectors.date, '05/10/2001'); }); From 4d8fb8eb5beaa82573170c8d278f4c351fff4d2f Mon Sep 17 00:00:00 2001 From: alexm Date: Thu, 13 Mar 2025 09:01:15 +0100 Subject: [PATCH 06/33] refactor: refs #8463 simplify creating VnDescriptor --- src/components/common/VnCard.vue | 26 +- src/components/ui/CardDescriptorBeta.vue | 256 ++----------------- src/components/ui/VnDescriptor.vue | 298 +++++++++++++++++++++++ src/pages/Order/Card/OrderDescriptor.vue | 9 +- 4 files changed, 333 insertions(+), 256 deletions(-) create mode 100644 src/components/ui/VnDescriptor.vue diff --git a/src/components/common/VnCard.vue b/src/components/common/VnCard.vue index 620dc2ad2cb..dfa51c8c486 100644 --- a/src/components/common/VnCard.vue +++ b/src/components/common/VnCard.vue @@ -1,12 +1,15 @@ diff --git a/src/components/ui/CardDescriptorBeta.vue b/src/components/ui/CardDescriptorBeta.vue index b2bac234d55..86f756a7b08 100644 --- a/src/components/ui/CardDescriptorBeta.vue +++ b/src/components/ui/CardDescriptorBeta.vue @@ -1,262 +1,38 @@ - - - - + " + /> + + + + diff --git a/src/components/ui/VnDescriptor.vue b/src/components/ui/VnDescriptor.vue new file mode 100644 index 00000000000..0aad3544849 --- /dev/null +++ b/src/components/ui/VnDescriptor.vue @@ -0,0 +1,298 @@ + + + + + + + + + en: + globals: + copyId: Copy ID + es: + globals: + copyId: Copiar ID + diff --git a/src/pages/Order/Card/OrderDescriptor.vue b/src/pages/Order/Card/OrderDescriptor.vue index 133d328c044..15e8cf070c2 100644 --- a/src/pages/Order/Card/OrderDescriptor.vue +++ b/src/pages/Order/Card/OrderDescriptor.vue @@ -4,8 +4,6 @@ import { useRoute } from 'vue-router'; import { useI18n } from 'vue-i18n'; import { toCurrency, toDate } from 'src/filters'; import { useState } from 'src/composables/useState'; -import filter from './OrderFilter.js'; -import CardDescriptor from 'components/ui/CardDescriptor.vue'; import VnLv from 'src/components/ui/VnLv.vue'; import FetchData from 'components/FetchData.vue'; import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue'; @@ -57,14 +55,11 @@ const getConfirmationValue = (isConfirmed) => { />