From f11597102f01d7bba3b6bddf93c1a3f4f247b223 Mon Sep 17 00:00:00 2001 From: jtubau Date: Wed, 5 Mar 2025 11:32:31 +0100 Subject: [PATCH 01/10] feat: refs #8721 add ticket navigation and update route columns --- src/pages/Route/RouteList.vue | 13 +++++++++++++ src/pages/Route/RouteTickets.vue | 12 ++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/pages/Route/RouteList.vue b/src/pages/Route/RouteList.vue index 5723e2f0d..f06249de6 100644 --- a/src/pages/Route/RouteList.vue +++ b/src/pages/Route/RouteList.vue @@ -9,6 +9,7 @@ import VnTable from 'components/VnTable/VnTable.vue'; import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue'; import VnSection from 'src/components/common/VnSection.vue'; import VnSelectWorker from 'src/components/common/VnSelectWorker.vue'; +import RouteTickets from './RouteTickets.vue'; const { t } = useI18n(); const { viewSummary } = useSummaryDialog(); @@ -24,6 +25,12 @@ const routeFilter = { }, ], }; + +function redirectToTickets(id) { + const url = `#/route/${id}/tickets`; + window.open(url, '_blank'); +} + const columns = computed(() => [ { align: 'right', @@ -130,6 +137,12 @@ const columns = computed(() => [ align: 'right', name: 'tableActions', actions: [ + { + title: t('globals.pageTitles.tickets'), + icon: 'vn:ticket', + action: (row) => redirectToTickets(row?.id), + isPrimary: true, + }, { title: t('components.smartCard.viewSummary'), icon: 'preview', diff --git a/src/pages/Route/RouteTickets.vue b/src/pages/Route/RouteTickets.vue index adc7dfdaa..b17fb543f 100644 --- a/src/pages/Route/RouteTickets.vue +++ b/src/pages/Route/RouteTickets.vue @@ -37,9 +37,9 @@ const columns = computed(() => [ align: 'left', }, { - name: 'city', - label: t('City'), - field: (row) => row?.city, + name: 'client', + label: t('Client'), + field: (row) => row?.nickname, sortable: false, align: 'left', }, @@ -51,9 +51,9 @@ const columns = computed(() => [ align: 'center', }, { - name: 'client', - label: t('Client'), - field: (row) => row?.nickname, + name: 'city', + label: t('City'), + field: (row) => row?.city, sortable: false, align: 'left', }, From b9e5ed7346524b8ec31f49527180727d2cd8b978 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 11 Mar 2025 15:07:10 +0100 Subject: [PATCH 02/10] fix: fixed node fetching and adapted to back data --- src/pages/Zone/Card/ZoneLocationsTree.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/Zone/Card/ZoneLocationsTree.vue b/src/pages/Zone/Card/ZoneLocationsTree.vue index 5c87faf99..c460143a2 100644 --- a/src/pages/Zone/Card/ZoneLocationsTree.vue +++ b/src/pages/Zone/Card/ZoneLocationsTree.vue @@ -72,6 +72,7 @@ const onNodeExpanded = async (nodeKeysArray) => { const response = await axios.get(`Zones/${route.params.id}/getLeaves`, { params, }); + response.data = JSON.parse(response.data); if (response.data) { node.childs = response.data.map((n) => { if (n.sons > 0) n.childs = [{}]; @@ -125,14 +126,17 @@ watch( async (val) => { if (!val) return; // // Se triggerea cuando se actualiza el store.data, el cual es el resultado del fetch de la searchbar + val = JSON.parse(val); if (!nodes.value[0]) nodes.value = [defaultNode]; nodes.value[0].childs = [...val]; const fetchedNodeKeys = val.flatMap(getNodeIds); state.set('Tree', [...fetchedNodeKeys]); expanded.value = [null, ...fetchedNodeKeys]; + const fetchs = []; for (let n of state.get('Tree')) { - await fetchNodeLeaves(n); + fetchs.push(fetchNodeLeaves(n)); } + await Promise.all(fetchs); previousExpandedNodes.value = new Set(expanded.value); }, { immediate: true } From 2bcc0cdefecb88b3594291bf12fd139979942bd8 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 12 Mar 2025 09:46:02 +0100 Subject: [PATCH 03/10] test: fix selectOption wait to ariaControl is visible --- test/cypress/integration/client/clientBalance.spec.js | 3 ++- test/cypress/support/commands.js | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/test/cypress/integration/client/clientBalance.spec.js b/test/cypress/integration/client/clientBalance.spec.js index 56ce01692..0228d71bc 100644 --- a/test/cypress/integration/client/clientBalance.spec.js +++ b/test/cypress/integration/client/clientBalance.spec.js @@ -6,9 +6,10 @@ describe('Client balance', () => { cy.visit('#/customer/1101/balance'); }); it('Should create a mandate', () => { + cy.waitSpinner(); cy.get('.q-page-sticky > div > .q-btn').click(); cy.selectOption('[data-cy="paymentBank"]', 2); - cy.dataCy('paymentAmount_input').type('100'); + cy.dataCy('paymentAmount_input').clear().type('100'); cy.saveCard(); }); }); diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js index dfec341cd..c2dd1579f 100755 --- a/test/cypress/support/commands.js +++ b/test/cypress/support/commands.js @@ -92,6 +92,14 @@ Cypress.Commands.add('getValue', (selector) => { }); }); +Cypress.Commands.add('waitSpinner', () => { + cy.get('body').then(($body) => { + if ($body.find('[data-cy="loading-spinner"]').length) { + cy.get('[data-cy="loading-spinner"]').should('not.be.visible'); + } + }); +}); + // Fill Inputs Cypress.Commands.add('selectOption', (selector, option, timeout = 2500) => { cy.waitForElement(selector, timeout); @@ -109,6 +117,7 @@ Cypress.Commands.add('selectOption', (selector, option, timeout = 2500) => { function selectItem(selector, option, ariaControl, hasWrite = true) { if (!hasWrite) cy.wait(100); + cy.waitSpinner(); getItems(ariaControl).then((items) => { const matchingItem = items @@ -128,6 +137,7 @@ function getItems(ariaControl, startTime = Cypress._.now(), timeout = 2500) { .should('exist') .find('.q-item') .should('exist') + .should('be.visible') .then(($items) => { if (!$items?.length || $items.first().text().trim() === '') { if (Cypress._.now() - startTime > timeout) { From c47e46dc5d9c575da1be5077e7d9b396b36ddaa1 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 12 Mar 2025 11:04:26 +0100 Subject: [PATCH 04/10] test: updated pageLoadTimeout --- cypress.config.js | 2 +- test/cypress/integration/client/clientBalance.spec.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cypress.config.js b/cypress.config.js index 5cf075e2a..033aa35c7 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -30,7 +30,7 @@ export default defineConfig({ trashAssetsBeforeRuns: false, requestTimeout: 10000, responseTimeout: 30000, - pageLoadTimeout: 60000, + pageLoadTimeout: 120000, defaultBrowser: 'chromium', fixturesFolder: 'test/cypress/fixtures', screenshotsFolder: 'test/cypress/screenshots', diff --git a/test/cypress/integration/client/clientBalance.spec.js b/test/cypress/integration/client/clientBalance.spec.js index 0228d71bc..0d88a9e28 100644 --- a/test/cypress/integration/client/clientBalance.spec.js +++ b/test/cypress/integration/client/clientBalance.spec.js @@ -1,7 +1,6 @@ /// describe('Client balance', () => { beforeEach(() => { - cy.viewport(1280, 720); cy.login('developer'); cy.visit('#/customer/1101/balance'); }); From 7a36c101286385fcd8a802946cc811ec7b5e5610 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 12 Mar 2025 11:15:02 +0100 Subject: [PATCH 05/10] chore: try fix cypress bug --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 18b27528b..1fff85d2b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -122,7 +122,7 @@ pipeline { def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { - sh 'cypress run --browser chromium || true' + sh 'cypress run --browser chromium --disable-gpu || true' } } } From ee54b3827165cc04cc5d97a8f7400837c77d4246 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 12 Mar 2025 11:25:31 +0100 Subject: [PATCH 06/10] chore: try fix cypress bug --- Jenkinsfile | 2 +- docs/Dockerfile.dev | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1fff85d2b..18b27528b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -122,7 +122,7 @@ pipeline { def image = docker.build('lilium-dev', '-f docs/Dockerfile.dev docs') image.inside("--network ${env.COMPOSE_PROJECT}_default -e CI -e TZ --init") { - sh 'cypress run --browser chromium --disable-gpu || true' + sh 'cypress run --browser chromium || true' } } } diff --git a/docs/Dockerfile.dev b/docs/Dockerfile.dev index 29b194ffa..dca42e7c0 100644 --- a/docs/Dockerfile.dev +++ b/docs/Dockerfile.dev @@ -39,7 +39,7 @@ ENV PNPM_HOME="/home/app/.local/share/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN pnpm setup \ - && pnpm install --global cypress@13.6.6 \ + && pnpm install --global cypress@13.17.0 \ && cypress install WORKDIR /app diff --git a/package.json b/package.json index 1361d1fd8..e672ce42d 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@quasar/quasar-app-extension-testing-unit-vitest": "^0.4.0", "@vue/test-utils": "^2.4.4", "autoprefixer": "^10.4.14", - "cypress": "^13.6.6", + "cypress": "^13.17.0", "cypress-mochawesome-reporter": "^3.8.2", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", From 5cb17fa4c92fe3d461e104a0b981039a54bdcca9 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 12 Mar 2025 11:26:26 +0100 Subject: [PATCH 07/10] chore: try fix cypress bug --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31a01e69c..7abf5484d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,7 +71,7 @@ devDependencies: specifier: ^10.4.14 version: 10.4.20(postcss@8.5.1) cypress: - specifier: ^13.6.6 + specifier: ^13.17.0 version: 13.17.0 cypress-mochawesome-reporter: specifier: ^3.8.2 From 4900751bfc0863a000dd499553f79520b871aa12 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 12 Mar 2025 11:34:02 +0100 Subject: [PATCH 08/10] chore: try fix cypress bug --- docs/Dockerfile.dev | 4 +++- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/Dockerfile.dev b/docs/Dockerfile.dev index dca42e7c0..3117e2c20 100644 --- a/docs/Dockerfile.dev +++ b/docs/Dockerfile.dev @@ -25,6 +25,8 @@ RUN apt-get update \ libnss3 \ libxss1 \ libxtst6 \ + mesa-vulkan-drivers \ + vulkan-tools \ xauth \ xvfb \ && apt-get clean \ @@ -39,7 +41,7 @@ ENV PNPM_HOME="/home/app/.local/share/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN pnpm setup \ - && pnpm install --global cypress@13.17.0 \ + && pnpm install --global cypress@14.1.0 \ && cypress install WORKDIR /app diff --git a/package.json b/package.json index e672ce42d..63cdfab90 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@quasar/quasar-app-extension-testing-unit-vitest": "^0.4.0", "@vue/test-utils": "^2.4.4", "autoprefixer": "^10.4.14", - "cypress": "^13.17.0", + "cypress": "^14.1.0", "cypress-mochawesome-reporter": "^3.8.2", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7abf5484d..36d9c0644 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,11 +71,11 @@ devDependencies: specifier: ^10.4.14 version: 10.4.20(postcss@8.5.1) cypress: - specifier: ^13.17.0 - version: 13.17.0 + specifier: ^14.1.0 + version: 14.1.0 cypress-mochawesome-reporter: specifier: ^3.8.2 - version: 3.8.2(cypress@13.17.0)(mocha@11.0.1) + version: 3.8.2(cypress@14.1.0)(mocha@11.0.1) eslint: specifier: ^9.18.0 version: 9.18.0 @@ -3321,7 +3321,7 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - /cypress-mochawesome-reporter@3.8.2(cypress@13.17.0)(mocha@11.0.1): + /cypress-mochawesome-reporter@3.8.2(cypress@14.1.0)(mocha@11.0.1): resolution: {integrity: sha512-oJZkNzhNmN9ZD+LmZyFuPb8aWaIijyHyqYh52YOBvR6B6ckfJNCHP3A98a+/nG0H4t46CKTNwo+wNpMa4d2kjA==} engines: {node: '>=14'} hasBin: true @@ -3329,7 +3329,7 @@ packages: cypress: '>=6.2.0' dependencies: commander: 10.0.1 - cypress: 13.17.0 + cypress: 14.1.0 fs-extra: 10.1.0 mochawesome: 7.1.3(mocha@11.0.1) mochawesome-merge: 4.3.0 @@ -3338,9 +3338,9 @@ packages: - mocha dev: true - /cypress@13.17.0: - resolution: {integrity: sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + /cypress@14.1.0: + resolution: {integrity: sha512-pPPj8Uu9NwjaaiXAEcjYZZmgsq6v9Zs1Nw6a+zRF+ANgYSNhH4S32SjFRsvMcuOHR/8dp4GBJhBPqIPSs+TxaA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true requiresBuild: true dependencies: From 8f2865d7e236e8014ebd62822750e2f12ec31cf7 Mon Sep 17 00:00:00 2001 From: alexm Date: Wed, 12 Mar 2025 12:45:40 +0100 Subject: [PATCH 09/10] chore: reduce page load timeout in Cypress configuration --- cypress.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress.config.js b/cypress.config.js index 033aa35c7..5cf075e2a 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -30,7 +30,7 @@ export default defineConfig({ trashAssetsBeforeRuns: false, requestTimeout: 10000, responseTimeout: 30000, - pageLoadTimeout: 120000, + pageLoadTimeout: 60000, defaultBrowser: 'chromium', fixturesFolder: 'test/cypress/fixtures', screenshotsFolder: 'test/cypress/screenshots', From 22952befa99247dc31f329f3d06299d975a57d75 Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 12 Mar 2025 13:30:07 +0100 Subject: [PATCH 10/10] feat: update labels and add department selection in InvoiceOut filter and list --- src/pages/InvoiceOut/InvoiceOutFilter.vue | 38 ++++++++++++++++++----- src/pages/InvoiceOut/InvoiceOutList.vue | 21 +++++++++++++ src/pages/Item/ItemRequestFilter.vue | 4 +-- src/pages/Item/locale/en.yml | 2 +- src/pages/Item/locale/es.yml | 2 +- 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/pages/InvoiceOut/InvoiceOutFilter.vue b/src/pages/InvoiceOut/InvoiceOutFilter.vue index 648b8e4e6..99524e0d6 100644 --- a/src/pages/InvoiceOut/InvoiceOutFilter.vue +++ b/src/pages/InvoiceOut/InvoiceOutFilter.vue @@ -7,6 +7,7 @@ import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; import VnInput from 'src/components/common/VnInput.vue'; import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputNumber from 'src/components/common/VnInputNumber.vue'; +import VnSelect from 'src/components/common/VnSelect.vue'; const { t } = useI18n(); const props = defineProps({ @@ -30,7 +31,7 @@ const states = ref(); @@ -38,13 +39,17 @@ const states = ref(); - + @@ -88,14 +93,31 @@ const states = ref(); - + + + + + + diff --git a/src/pages/InvoiceOut/InvoiceOutList.vue b/src/pages/InvoiceOut/InvoiceOutList.vue index 034f416ed..49027d2bf 100644 --- a/src/pages/InvoiceOut/InvoiceOutList.vue +++ b/src/pages/InvoiceOut/InvoiceOutList.vue @@ -16,6 +16,7 @@ import VnRow from 'src/components/ui/VnRow.vue'; import VnRadio from 'src/components/common/VnRadio.vue'; import VnInput from 'src/components/common/VnInput.vue'; import CustomerDescriptorProxy from '../Customer/Card/CustomerDescriptorProxy.vue'; +import DepartmentDescriptorProxy from 'src/pages/Worker/Department/Card/DepartmentDescriptorProxy.vue'; import VnSection from 'src/components/common/VnSection.vue'; const { t } = useI18n(); @@ -86,6 +87,20 @@ const columns = computed(() => [ component: null, }, }, + { + align: 'left', + name: 'departmentFk', + label: t('globals.params.departmentFk'), + component: 'select', + attrs: { + url: 'Departments', + }, + create: true, + columnField: { + component: null, + }, + format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName), + }, { align: 'left', name: 'companyFk', @@ -229,6 +244,12 @@ watchEffect(selectedRows); +