diff --git a/src/components/CreateBankEntityForm.vue b/src/components/CreateBankEntityForm.vue index 2d098beb07..4acc7b749d 100644 --- a/src/components/CreateBankEntityForm.vue +++ b/src/components/CreateBankEntityForm.vue @@ -3,7 +3,7 @@ import { reactive, ref, onMounted, nextTick } from 'vue'; import { useI18n } from 'vue-i18n'; import VnInput from 'src/components/common/VnInput.vue'; -import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; +import VnSelect from 'src/components/common/VnSelect.vue'; import FetchData from 'components/FetchData.vue'; import VnRow from 'components/ui/VnRow.vue'; import FormModelPopup from './FormModelPopup.vue'; @@ -78,7 +78,7 @@ onMounted(async () => {
- {
- { - +
{{ t('Or') }}
- {
- { />
- { />
- {
- { />
- {
- {
- { />
- {
- { {{ ` ${rows.length} ` }} {{ t('buy(s)') }} - { />
- { />
- { />
- {

{{ t('Filter travels') }}

- { />
- { />
- diff --git a/src/components/ItemsFilterPanel.vue b/src/components/ItemsFilterPanel.vue index f7f07a5b03..94adfe0ff1 100644 --- a/src/components/ItemsFilterPanel.vue +++ b/src/components/ItemsFilterPanel.vue @@ -5,7 +5,7 @@ import { useI18n } from 'vue-i18n'; import VnInput from 'components/common/VnInput.vue'; import FetchData from 'components/FetchData.vue'; import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; -import VnSelectFilter from 'components/common/VnSelectFilter.vue'; +import VnSelect from 'components/common/VnSelect.vue'; import VnFilterPanelChip from 'components/ui/VnFilterPanelChip.vue'; import axios from 'axios'; @@ -207,7 +207,7 @@ const removeTag = (index, params, search) => { - { - + @@ -246,7 +246,7 @@ const removeTag = (index, params, search) => { class="q-mt-md filter-value" > - { /> - {
- { - +
- {
- { - +
-
- - + > + + - - - - - - - - - + diff --git a/src/components/common/VnSelectFilter.vue b/src/components/common/VnSelect.vue similarity index 100% rename from src/components/common/VnSelectFilter.vue rename to src/components/common/VnSelect.vue diff --git a/src/components/common/VnSelectDialog.vue b/src/components/common/VnSelectDialog.vue index 95d6a44fe4..3726691af9 100644 --- a/src/components/common/VnSelectDialog.vue +++ b/src/components/common/VnSelectDialog.vue @@ -1,7 +1,7 @@ - + + + + + +en: + params: + search: General search + categoryFk: Category + typeFk: Type + buyerFk: Buyer + supplierFk: Supplier + tags: Tags + tag: Tag + value: Value + isFloramondo: Floramondo + isActive: Active + description: Description + name: Name + id: Id +es: + More fields: Más campos + params: + search: Búsqueda general + categoryFk: Reino + typeFk: Tipo + buyerFk: Comprador + supplierFk: Proveedor + tags: Etiquetas + tag: Etiqueta + value: Valor + isFloramondo: Floramondo + isActive: Activo + description: Descripción + name: Nombre + id: Id + diff --git a/src/pages/Item/ItemRequest.vue b/src/pages/Item/ItemRequest.vue new file mode 100644 index 0000000000..1872ad8597 --- /dev/null +++ b/src/pages/Item/ItemRequest.vue @@ -0,0 +1,360 @@ + + + + + +es: + Discard: Descartar + You can search by Id or alias: Buscar peticiones por identificador o alias + Denied: Denegada + Accepted: Aceptada + Pending: Pendiente + diff --git a/src/pages/Item/ItemRequestDenyForm.vue b/src/pages/Item/ItemRequestDenyForm.vue new file mode 100644 index 0000000000..f26edb845e --- /dev/null +++ b/src/pages/Item/ItemRequestDenyForm.vue @@ -0,0 +1,57 @@ + + + + + +es: + Specify the reasons to deny this request: Especifica las razones para descartar la petición + diff --git a/src/pages/Item/ItemRequestFilter.vue b/src/pages/Item/ItemRequestFilter.vue new file mode 100644 index 0000000000..e142c28d3c --- /dev/null +++ b/src/pages/Item/ItemRequestFilter.vue @@ -0,0 +1,318 @@ + + + + + +en: + params: + search: General search + ticketFk: Ticket id + attenderFk: Atender + clientFk: Client id + warehouseFk: Warehouse + requesterFk: Salesperson + from: From + to: To + scopeDays: Days onward + mine: For me + state: State + dateFiltersTooltip: Cannot choose a range of dates and days onward at the same time + denied: Denied + accepted: Accepted + pending: Pending + +es: + params: + search: Búsqueda general + ticketFk: Id ticket + attenderFk: Comprador + clientFk: Id cliente + warehouseFk: Almacén + requesterFk: Comercial + from: Desde + to: Hasta + scopeDays: Días adelante + mine: Para mi + state: Estado + dateFiltersTooltip: No se puede seleccionar un rango de fechas y días en adelante a la vez + denied: Denegada + accepted: Aceptada + pending: Pendiente + diff --git a/src/pages/Order/Card/OrderCatalogFilter.vue b/src/pages/Order/Card/OrderCatalogFilter.vue index 402df1173f..04748a8c82 100644 --- a/src/pages/Order/Card/OrderCatalogFilter.vue +++ b/src/pages/Order/Card/OrderCatalogFilter.vue @@ -7,7 +7,7 @@ import axios from 'axios'; import VnInput from 'components/common/VnInput.vue'; import FetchData from 'components/FetchData.vue'; import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; -import VnSelectFilter from 'components/common/VnSelectFilter.vue'; +import VnSelect from 'components/common/VnSelect.vue'; import VnFilterPanelChip from 'components/ui/VnFilterPanelChip.vue'; const { t } = useI18n(); @@ -238,7 +238,7 @@ const getCategoryClass = (category, params) => { - { - + - { - { - { is-outlined class="filter-input" /> - - - - + @@ -160,7 +160,7 @@ const sourceList = ref(null); -
- - +
- - +
@@ -208,7 +208,7 @@ const orderFilter = {
- - +
diff --git a/src/pages/Parking/Card/ParkingBasicData.vue b/src/pages/Parking/Card/ParkingBasicData.vue index b03b7be7c3..c1a9dcee81 100644 --- a/src/pages/Parking/Card/ParkingBasicData.vue +++ b/src/pages/Parking/Card/ParkingBasicData.vue @@ -6,7 +6,7 @@ import VnRow from 'components/ui/VnRow.vue'; import FetchData from 'src/components/FetchData.vue'; import VnInput from 'src/components/common/VnInput.vue'; import FormModel from 'components/FormModel.vue'; -import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; +import VnSelect from 'src/components/common/VnSelect.vue'; const { t } = useI18n(); const route = useRoute(); @@ -38,7 +38,7 @@ const filter = {
- - { - { - { - { - + @@ -192,7 +196,11 @@ const exprBuilder = (param, value) => { - + diff --git a/src/pages/Route/Card/RouteFilter.vue b/src/pages/Route/Card/RouteFilter.vue index bbd71df490..050e7c71d7 100644 --- a/src/pages/Route/Card/RouteFilter.vue +++ b/src/pages/Route/Card/RouteFilter.vue @@ -3,7 +3,7 @@ import { ref } from 'vue'; import { useI18n } from 'vue-i18n'; import FetchData from 'components/FetchData.vue'; import VnFilterPanel from 'components/ui/VnFilterPanel.vue'; -import VnSelectFilter from 'components/common/VnSelectFilter.vue'; +import VnSelect from 'components/common/VnSelect.vue'; import VnInputDate from 'components/common/VnInputDate.vue'; import VnInput from 'components/common/VnInput.vue'; @@ -63,7 +63,7 @@ const warehouseList = ref([]); - + - - - { - +
- {
- props.layout === 'dialog'); />
- {
- { - +
{ />
- +
diff --git a/src/pages/Route/Roadmap/RoadmapFilter.vue b/src/pages/Route/Roadmap/RoadmapFilter.vue index b3fb7bf349..04c5c96960 100644 --- a/src/pages/Route/Roadmap/RoadmapFilter.vue +++ b/src/pages/Route/Roadmap/RoadmapFilter.vue @@ -3,7 +3,7 @@ import { ref } from 'vue'; import { useI18n } from 'vue-i18n'; import FetchData from 'components/FetchData.vue'; import VnFilterPanel from 'components/ui/VnFilterPanel.vue'; -import VnSelectFilter from 'components/common/VnSelectFilter.vue'; +import VnSelect from 'components/common/VnSelect.vue'; import VnInputDate from 'components/common/VnInputDate.vue'; import VnInput from 'components/common/VnInput.vue'; @@ -90,7 +90,7 @@ const exprBuilder = (param, value) => { - { -
+ diff --git a/src/pages/Route/RouteList.vue b/src/pages/Route/RouteList.vue index 773b4f773b..c0888a2255 100644 --- a/src/pages/Route/RouteList.vue +++ b/src/pages/Route/RouteList.vue @@ -4,7 +4,7 @@ import { useStateStore } from 'stores/useStateStore'; import { useI18n } from 'vue-i18n'; import { computed, onMounted, onUnmounted, ref } from 'vue'; import { dashIfEmpty, toHour } from 'src/filters'; -import VnSelectFilter from 'components/common/VnSelectFilter.vue'; +import VnSelect from 'components/common/VnSelect.vue'; import FetchData from 'components/FetchData.vue'; import { useValidator } from 'composables/useValidator'; import VnInputDate from 'components/common/VnInputDate.vue'; @@ -213,7 +213,7 @@ const openTicketsDialog = (id) => { - {{ t('Clone') }} + {{ t('globals.clone') }} @@ -287,7 +287,7 @@ const openTicketsDialog = (id) => { > - + - +
@@ -197,7 +196,7 @@ const redirectToTicketList = (_, { id }) => {
- {
-
-
-
- { />
- {
- { />
- { - { - { - { - { - {
- {
- { />
- { - - + - - - - - + diff --git a/src/pages/Worker/Card/WorkerPda.vue b/src/pages/Worker/Card/WorkerPda.vue index ef8c3fe8e3..5e7c893264 100644 --- a/src/pages/Worker/Card/WorkerPda.vue +++ b/src/pages/Worker/Card/WorkerPda.vue @@ -4,7 +4,7 @@ import { useRoute } from 'vue-router'; import { onMounted, ref, computed } from 'vue'; import FetchData from 'components/FetchData.vue'; import FormModel from 'components/FormModel.vue'; -import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; +import VnSelect from 'src/components/common/VnSelect.vue'; import useNotify from 'src/composables/useNotify.js'; import axios from 'axios'; import { useRole } from 'src/composables/useRole'; @@ -107,7 +107,7 @@ onMounted(async () => await fetchCurrentDeviceRef.value.fetch()); - await fetchCurrentDeviceRef.value.fetch()); - + diff --git a/src/pages/Worker/Card/WorkerTimeForm.vue b/src/pages/Worker/Card/WorkerTimeForm.vue index d6c893ad1c..0a58a04ca3 100644 --- a/src/pages/Worker/Card/WorkerTimeForm.vue +++ b/src/pages/Worker/Card/WorkerTimeForm.vue @@ -3,7 +3,7 @@ import { reactive, ref, computed, onBeforeMount } from 'vue'; import { useI18n } from 'vue-i18n'; import { useRoute } from 'vue-router'; -import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; +import VnSelect from 'src/components/common/VnSelect.vue'; import FormModelPopup from 'components/FormModelPopup.vue'; import VnInputTime from 'components/common/VnInputTime.vue'; @@ -84,7 +84,7 @@ onBeforeMount(() => { :required="true" :is-clearable="false" /> - {
- { />
- { - +
- import('src/pages/Agency/Card/AgencyCard.vue'), + redirect: { name: 'AgencySummary' }, + children: [ + { + name: 'AgencySummary', + path: 'summary', + meta: { + title: 'summary', + icon: 'view_list', + }, + component: () => import('src/pages/Agency/Card/AgencySummary.vue'), + }, + { + name: 'AgencyBasicData', + path: 'basic-data', + meta: { + title: 'basicData', + icon: 'vn:settings', + }, + component: () => import('pages/Agency/Card/AgencyBasicData.vue'), + }, + { + path: 'workCenter', + name: 'AgencyWorkCenterCard', + redirect: { name: 'AgencyWorkCenters' }, + children: [ + { + path: '', + name: 'AgencyWorkCenters', + meta: { + icon: 'apartment', + title: 'workCenters', + }, + component: () => + import('src/pages/Agency/Card/AgencyWorkcenter.vue'), + }, + ], + }, + { + path: 'modes', + name: 'AgencyModesCard', + redirect: { name: 'AgencyModes' }, + children: [ + { + path: '', + name: 'AgencyModes', + meta: { + icon: 'format_list_bulleted', + title: 'modes', + }, + component: () => + import('src/pages/Agency/Card/AgencyModes.vue'), + }, + ], + }, + { + name: 'AgencyLog', + path: 'log', + meta: { + title: 'log', + icon: 'history', + }, + component: () => import('src/pages/Agency/Card/AgencyLog.vue'), + }, + ], + }, + ], +}; diff --git a/src/router/modules/index.js b/src/router/modules/index.js index 302ba7fe0b..6f4b0b35ef 100644 --- a/src/router/modules/index.js +++ b/src/router/modules/index.js @@ -15,6 +15,7 @@ import Department from './department'; import Entry from './entry'; import roadmap from './roadmap'; import Parking from './parking'; +import Agency from './agency'; export default [ Item, @@ -34,4 +35,5 @@ export default [ Entry, roadmap, Parking, + Agency, ]; diff --git a/src/router/modules/item.js b/src/router/modules/item.js index 2a8e87194d..bc1e72a948 100644 --- a/src/router/modules/item.js +++ b/src/router/modules/item.js @@ -6,12 +6,21 @@ export default { meta: { title: 'items', icon: 'vn:item', + moduleName: 'Item', }, component: RouterView, redirect: { name: 'ItemMain' }, menus: { - main: ['ItemList', 'WasteBreakdown', 'ItemFixedPrice'], - card: ['ItemBasicData'], + main: ['ItemList', 'WasteBreakdown', 'ItemFixedPrice', 'ItemRequest'], + card: [ + 'ItemBasicData', + 'ItemLog', + 'ItemDiary', + 'ItemTags', + 'ItemTax', + 'ItemBotanical', + 'ItemBarcode', + ], }, children: [ { @@ -59,6 +68,15 @@ export default { 'https://grafana.verdnatura.es/d/TTNXQAxVk'; }, }, + { + path: 'request', + name: 'ItemRequest', + meta: { + title: 'buyRequest', + icon: 'vn:buyrequest', + }, + component: () => import('src/pages/Item/ItemRequest.vue'), + }, ], }, { @@ -76,24 +94,6 @@ export default { }, component: () => import('src/pages/Item/Card/ItemSummary.vue'), }, - { - path: 'diary', - name: 'ItemDiary', - meta: { - title: 'diary', - icon: 'vn:transaction', - }, - component: () => import('src/pages/Item/Card/ItemDiary.vue'), - }, - { - path: 'tags', - name: 'ItemTags', - meta: { - title: 'Tags', - icon: 'vn:tags', - }, - component: () => import('src/pages/Item/Card/ItemTags.vue'), - }, { path: 'basic-data', name: 'ItemBasicData', @@ -103,6 +103,60 @@ export default { }, component: () => import('src/pages/Item/Card/ItemBasicData.vue'), }, + { + path: 'tags', + name: 'ItemTags', + meta: { + title: 'tags', + icon: 'vn:tags', + }, + component: () => import('src/pages/Item/Card/ItemTags.vue'), + }, + { + path: 'tax', + name: 'ItemTax', + meta: { + title: 'tax', + icon: 'vn:tax', + }, + component: () => import('src/pages/Item/Card/ItemTax.vue'), + }, + { + path: 'barcode', + name: 'ItemBarcode', + meta: { + title: 'barcode', + icon: 'vn:barcode', + }, + component: () => import('src/pages/Item/Card/ItemBarcode.vue'), + }, + { + path: 'diary', + name: 'ItemDiary', + meta: { + title: 'basicData', + icon: 'vn:settings', + }, + component: () => import('src/pages/Item/Card/ItemDiary.vue'), + }, + { + path: 'log', + name: 'ItemLog', + meta: { + title: 'log', + icon: 'history', + }, + component: () => import('src/pages/Item/Card/ItemLog.vue'), + }, + { + path: 'botanical', + name: 'ItemBotanical', + meta: { + title: 'botanical', + icon: 'vn:botanical', + }, + component: () => import('src/pages/Item/Card/ItemBotanical.vue'), + }, ], }, ], diff --git a/src/router/modules/route.js b/src/router/modules/route.js index f8ededf554..8e08d7222b 100644 --- a/src/router/modules/route.js +++ b/src/router/modules/route.js @@ -11,7 +11,7 @@ export default { component: RouterView, redirect: { name: 'RouteMain' }, menus: { - main: ['RouteList', 'RouteAutonomous', 'RouteRoadmap', 'CmrList'], + main: ['RouteList', 'RouteAutonomous', 'RouteRoadmap', 'CmrList', 'AgencyList'], card: ['RouteBasicData', 'RouteTickets', 'RouteLog'], }, children: [ @@ -75,6 +75,21 @@ export default { }, component: () => import('src/pages/Route/Cmr/CmrList.vue'), }, + { + path: '/agency', + redirect: { name: 'AgencyList' }, + children: [ + { + path: 'list', + name: 'AgencyList', + meta: { + title: 'agencyList', + icon: 'view_list', + }, + component: () => import('src/pages/Agency/AgencyList.vue'), + }, + ], + }, ], }, { diff --git a/src/router/routes.js b/src/router/routes.js index 51e726a62f..ca52441e7c 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -15,6 +15,7 @@ import order from 'src/router/modules/order'; import entry from 'src/router/modules/entry'; import roadmap from 'src/router/modules/roadmap'; import parking from 'src/router/modules/parking'; +import agency from 'src/router/modules/agency'; const routes = [ { @@ -71,6 +72,7 @@ const routes = [ roadmap, entry, parking, + agency, { path: '/:catchAll(.*)*', name: 'NotFound', diff --git a/test/cypress/integration/agency/agencyWorkCenter.spec.js b/test/cypress/integration/agency/agencyWorkCenter.spec.js new file mode 100644 index 0000000000..ff3c53214a --- /dev/null +++ b/test/cypress/integration/agency/agencyWorkCenter.spec.js @@ -0,0 +1,50 @@ +describe('AgencyWorkCenter', () => { + beforeEach(() => { + cy.viewport(1920, 1080); + cy.login('developer'); + cy.visit(`/#/agency`); + }); + + it('assign workCenter', () => { + cy.visit(`/#/agency`); + cy.get(':nth-child(1) > :nth-child(1) > .card-list-body > .list-items').click(); + cy.get('[href="#/agency/11/workCenter"] > .q-item__section--main').click(); + cy.get('.q-page-sticky > div > .q-btn > .q-btn__content > .q-icon').click(); + cy.get( + '.vn-row > .q-field > .q-field__inner > .q-field__control > .q-field__control-container' + ).type('workCenterOne{enter}'); + cy.get('.q-btn--standard > .q-btn__content > .block').click(); + cy.get('.q-notification__message').should('have.text', 'Data created'); + }); + + it('delete workCenter', () => { + cy.get(':nth-child(1) > :nth-child(1) > .card-list-body > .list-items').click(); + cy.get('[href="#/agency/11/workCenter"] > .q-item__section--main').click(); + cy.get('.q-item__section--side > .q-btn > .q-btn__content > .q-icon').click(); + cy.get('.q-notification__message').should( + 'have.text', + 'WorkCenter removed successfully' + ); + }); + + it('error on duplicate workCenter', () => { + cy.visit(`/#/agency`); + cy.get(':nth-child(1) > :nth-child(1) > .card-list-body > .list-items').click(); + cy.get('[href="#/agency/11/workCenter"] > .q-item__section--main').click(); + cy.get('.q-page-sticky > div > .q-btn > .q-btn__content > .q-icon').click(); + cy.get( + '.vn-row > .q-field > .q-field__inner > .q-field__control > .q-field__control-container' + ).type('workCenterOne{enter}'); + cy.get('.q-btn--standard > .q-btn__content > .block').click(); + cy.get('.q-notification__message').should('have.text', 'Data created'); + cy.get('.q-page-sticky > div > .q-btn > .q-btn__content > .q-icon').click(); + cy.get( + '.vn-row > .q-field > .q-field__inner > .q-field__control > .q-field__control-container' + ).type('workCenterOne{enter}'); + cy.get('.q-btn--standard > .q-btn__content > .block').click(); + + cy.get( + ':nth-child(2) > .q-notification__wrapper > .q-notification__content > .q-notification__message' + ).should('have.text', 'This workCenter is already assigned to this agency'); + }); +}); diff --git a/test/vitest/__tests__/pages/Claims/ClaimLinesImport.spec.js b/test/vitest/__tests__/pages/Claims/ClaimLinesImport.spec.js index 085118b142..d93c961323 100644 --- a/test/vitest/__tests__/pages/Claims/ClaimLinesImport.spec.js +++ b/test/vitest/__tests__/pages/Claims/ClaimLinesImport.spec.js @@ -5,7 +5,6 @@ import ClaimLinesImport from 'pages/Claim/Card/ClaimLinesImport.vue'; describe('ClaimLinesImport', () => { let vm; - beforeAll(() => { vm = createWrapper(ClaimLinesImport, { global: { @@ -13,7 +12,7 @@ describe('ClaimLinesImport', () => { mocks: { fetch: vi.fn(), }, - } + }, }).vm; }); @@ -26,25 +25,23 @@ describe('ClaimLinesImport', () => { vi.spyOn(axios, 'post').mockResolvedValue({ data: true }); vi.spyOn(vm.quasar, 'notify'); - vm.selected = [ - { id: 1, saleFk: 1, claimFk: 1, quantity: 10 } - ] + vm.selected = [{ id: 1, saleFk: 1, claimFk: 1 }]; - vm.route.params.id = 1 + vm.route.params.id = 1; await vm.importLines(); - const expectedData = [{ saleFk: 1, claimFk: 1, quantity: 10 }] + const expectedData = [{ saleFk: 1, claimFk: 1 }]; expect(axios.post).toHaveBeenCalledWith('ClaimBeginnings', expectedData, { - signal: expect.any(Object) - }) + signal: expect.any(Object), + }); expect(vm.quasar.notify).toHaveBeenCalledWith( expect.objectContaining({ message: 'Lines added to claim', - type: 'positive' + type: 'positive', }) ); - expect(vm.canceller).toEqual(null) + expect(vm.canceller).toEqual(null); }); }); }); diff --git a/test/vitest/setup-file.js b/test/vitest/setup-file.js index 4992049811..288f80bebc 100644 --- a/test/vitest/setup-file.js +++ b/test/vitest/setup-file.js @@ -1 +1 @@ -// This file will be run before each test file +// This file will be run before each test file, don't delete or vitest will not work.