diff --git a/src/components/FilterItemForm.vue b/src/components/FilterItemForm.vue index e031999e2..7af9adf93 100644 --- a/src/components/FilterItemForm.vue +++ b/src/components/FilterItemForm.vue @@ -1,7 +1,6 @@ @@ -68,6 +73,8 @@ defineExpose({ :class="{ required: $attrs.required }" @keyup.enter="onEnterPress()" :clearable="false" + :rules="[inputRules]" + :lazy-rules="true" > @@ -85,3 +92,9 @@ defineExpose({ + + en: + inputMin: Must be more than {value} + es: + inputMin: Debe ser mayor a {value} + diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index 0e27eeade..d8fb231f0 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -95,6 +95,10 @@ globals: agency: Agency workCenters: Work centers modes: Modes + zones: Zones + zonesList: Zones + deliveryList: Delivery days + upcomingList: Upcoming deliveries created: Created worker: Worker now: Now @@ -1137,6 +1141,7 @@ item: tax: Tax log: Log botanical: Botanical + shelving: Shelving itemTypeCreate: New item type family: Item Type lastEntries: Last entries diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index bc246a6cb..67e075935 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -95,6 +95,10 @@ globals: agency: Agencia workCenters: Centros de trabajo modes: Modos + zones: Zonas + zonesList: Zonas + deliveryList: Días de entrega + upcomingList: Próximos repartos created: Fecha creación worker: Trabajador now: Ahora @@ -1136,6 +1140,7 @@ item: botanical: 'Botánico' barcode: 'Código de barras' log: Historial + shelving: Carros itemTypeCreate: Nueva familia family: Familia lastEntries: Últimas entradas diff --git a/src/pages/Entry/Card/EntryBuysImport.vue b/src/pages/Entry/Card/EntryBuysImport.vue index 705f56b68..6d856f068 100644 --- a/src/pages/Entry/Card/EntryBuysImport.vue +++ b/src/pages/Entry/Card/EntryBuysImport.vue @@ -251,6 +251,7 @@ const redirectToBuysView = () => { > diff --git a/src/pages/Item/Card/CreateIntrastatForm.vue b/src/pages/Item/Card/CreateIntrastatForm.vue new file mode 100644 index 000000000..3fd1ffe22 --- /dev/null +++ b/src/pages/Item/Card/CreateIntrastatForm.vue @@ -0,0 +1,52 @@ + + + + + + + + + + + + diff --git a/src/pages/Item/Card/ItemBasicData.vue b/src/pages/Item/Card/ItemBasicData.vue index 334cf049d..7e8fa1d92 100644 --- a/src/pages/Item/Card/ItemBasicData.vue +++ b/src/pages/Item/Card/ItemBasicData.vue @@ -1 +1,233 @@ -Item basic data + + + (itemTypesOptions = data)" + auto-load + /> + (itemsWithNameOptions = data)" + auto-load + /> + (intrastatsOptions = data)" + auto-load + /> + (expensesOptions = data)" + auto-load + /> + + + + + + + + {{ scope.opt?.name }} + + {{ scope.opt?.category?.name }} + + + + + + + + + + + + + + + + + + + {{ scope.opt?.name }} + #{{ scope.opt?.id }} + + + + + + + + + + onIntrastatCreated(requestResponse, data) + " + /> + + + + + {{ scope.opt?.description }} + #{{ scope.opt?.id }} + + + + + + + + + + + + + + + + + + + + + + {{ t('basicData.isFragileTooltip') }} + + + + + + + + {{ t('basicData.isPhotoRequestedTooltip') }} + + + + + + + + + + diff --git a/src/pages/Item/Card/ItemShelving.vue b/src/pages/Item/Card/ItemShelving.vue new file mode 100644 index 000000000..7e7faab36 --- /dev/null +++ b/src/pages/Item/Card/ItemShelving.vue @@ -0,0 +1,279 @@ + + + + (parkingsOptions = data)" + /> + (shelvingsOptions = data)" + /> + + + + + + {{ t('shelvings.total') }} + + + + + {{ t('shelvings.totalLabels') }} + + : {{ totalLabels }} + + + + + + + {{ t('shelvings.removeLines') }} + + + + + + + + + + + + + + + + + + {{ row.longName }} + + + + + + diff --git a/src/pages/Item/locale/en.yml b/src/pages/Item/locale/en.yml index 2ffcd3661..c08c71f48 100644 --- a/src/pages/Item/locale/en.yml +++ b/src/pages/Item/locale/en.yml @@ -1,3 +1,17 @@ +shelvings: + created: Created + item: Item + concept: Concept + parking: Parking + shelving: Shelving + label: Label + packing: Packing + total: Total + totalLabels: Total labels + removeLines: Remove selected lines + shelvingsRemoved: ItemShelvings removed + removeConfirmTitle: Selected lines will be deleted + removeConfirmSubtitle: Are you sure you want to continue? itemDiary: date: Date id: Id @@ -11,6 +25,30 @@ itemDiary: showBefore: Show what's before the inventory since: Since warehouse: Warehouse +basicData: + type: Type + reference: Reference + relevancy: Relevancy + stems: Stems + multiplier: Multiplier + generic: Generic + intrastat: Intrastat + expense: Expense + weightByPiece: Weight/Piece + boxUnits: Units/Box + recycledPlastic: Recycled plastic + nonRecycledPlastic: Non recycled plastic + description: Description + isActive: Active + hasKgPrice: Price in kg + isFragile: Fragile + isFragileTooltip: Is shown at website, app that this item cannot travel (wreath, palms, ...) + isPhotoRequested: Do photo + isPhotoRequestedTooltip: This item does need a photo +createIntrastatForm: + title: New intrastat + identifier: Identifier + description: Description tax: country: Country class: Class diff --git a/src/pages/Item/locale/es.yml b/src/pages/Item/locale/es.yml index 3047239f2..9b6a51b8a 100644 --- a/src/pages/Item/locale/es.yml +++ b/src/pages/Item/locale/es.yml @@ -1,3 +1,17 @@ +shelvings: + created: Creado + item: Artículo + concept: Concepto + parking: Parking + shelving: Matrícula + label: Etiqueta + packing: Packing + total: Total + totalLabels: Total etiquetas + removeLines: Eliminar líneas seleccionadas + shelvingsRemoved: Carros eliminados + removeConfirmTitle: Las líneas seleccionadas serán eliminadas + removeConfirmSubtitle: ¿Seguro que quieres continuar? itemDiary: date: Fecha id: Id @@ -11,6 +25,30 @@ itemDiary: showBefore: Mostrar lo anterior al inventario since: Desde warehouse: Almacén +basicData: + type: Tipo + reference: Referencia + relevancy: Relevancia + stems: Tallos + multiplier: Multiplicador + generic: Genérico + intrastat: Intrastat + expense: Gasto + weightByPiece: Peso (gramos)/tallo + boxUnits: Unidades/caja + recycledPlastic: Plástico reciclado + nonRecycledPlastic: Plástico no reciclado + description: Descripción + isActive: Activo + hasKgPrice: Precio en kg + isFragile: Frágil + isFragileTooltip: Se muestra en la web app, que este artículo no puede viajar (coronas, palmas, ...) + isPhotoRequested: Hacer foto + isPhotoRequestedTooltip: Este artículo necesita una foto +createIntrastatForm: + title: Nuevo intrastat + identifier: Identificador + description: Descripción tax: country: País class: Clase diff --git a/src/pages/Worker/Card/WorkerBasicData.vue b/src/pages/Worker/Card/WorkerBasicData.vue index 3295a2234..4f1786a67 100644 --- a/src/pages/Worker/Card/WorkerBasicData.vue +++ b/src/pages/Worker/Card/WorkerBasicData.vue @@ -27,7 +27,6 @@ const workerFilter = { }, { relation: 'sip', scope: { fields: ['extension', 'secret'] } }, { relation: 'department', scope: { include: { relation: 'department' } } }, - { relation: 'client', scope: { fields: ['phone'] } }, ], }; const workersFilter = { @@ -87,11 +86,6 @@ const maritalStatus = [ :label="t('Mobile extension')" clearable /> - @@ -163,7 +157,6 @@ es: Last name: Apellidos Business phone: Teléfono de empresa Mobile extension: Extensión móvil - Personal phone: Teléfono personal Boss: Jefe Marital status: Estado civil Married: Casado/a diff --git a/src/pages/Worker/Card/WorkerCard.vue b/src/pages/Worker/Card/WorkerCard.vue index e0047bf9e..d76ef6f59 100644 --- a/src/pages/Worker/Card/WorkerCard.vue +++ b/src/pages/Worker/Card/WorkerCard.vue @@ -1,15 +1,12 @@ { }); const worker = ref(); -const filter = computed(() => { - return { where: { id: entityId.value } }; -}); +const filter = { + include: [ + { + relation: 'user', + scope: { + fields: ['email', 'name', 'nickname'], + }, + }, + { + relation: 'department', + scope: { + include: [ + { + relation: 'department', + }, + ], + }, + }, + { + relation: 'sip', + }, + ], +}; const sip = ref(null); @@ -62,7 +82,7 @@ const setData = (entity) => { { workerUrl.value = (await getUrl('')) + `worker/${entityId.value}/`; }); -const filter = computed(() => { - return { where: { id: entityId.value } }; -}); +const filter = { + include: [ + { + relation: 'user', + scope: { + fields: ['email', 'name', 'nickname', 'roleFk'], + include: { + relation: 'role', + scope: { + fields: ['name'], + }, + }, + }, + }, + { + relation: 'department', + scope: { + include: { + relation: 'department', + scope: { + fields: ['name'], + }, + }, + }, + }, + { + relation: 'boss', + }, + { + relation: 'client', + }, + { + relation: 'sip', + }, + ], +}; - + {{ entity.id }} - {{ entity.firstName }} {{ entity.lastName }} @@ -75,6 +103,12 @@ const filter = computed(() => { + + + {{ t('worker.summary.personalPhone') }} + + + diff --git a/src/pages/Zone/Card/ZoneBasicData.vue b/src/pages/Zone/Card/ZoneBasicData.vue new file mode 100644 index 000000000..5d57b920e --- /dev/null +++ b/src/pages/Zone/Card/ZoneBasicData.vue @@ -0,0 +1,103 @@ + + + + (agencyOptions = data)" + auto-load + url="agencies" + /> + (zoneOptions = data)" + auto-load + url="zones" + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +es: + Name: Nombre + Agency: Agencia + Max m³: Medida máxima + Maximum m³: M³ maximo + Traveling days: Dias de viaje + Closing: Cierre + Price: Precio + Bonus: Bonificación + Inflation: Inflación + Volumetric: Volumétrico + diff --git a/src/pages/Zone/Card/ZoneCalendar.vue b/src/pages/Zone/Card/ZoneCalendar.vue new file mode 100644 index 000000000..e69de29bb diff --git a/src/pages/Zone/Card/ZoneDescriptor.vue b/src/pages/Zone/Card/ZoneDescriptor.vue index 486e4f063..93e951801 100644 --- a/src/pages/Zone/Card/ZoneDescriptor.vue +++ b/src/pages/Zone/Card/ZoneDescriptor.vue @@ -5,7 +5,7 @@ import { useI18n } from 'vue-i18n'; import CardDescriptor from 'components/ui/CardDescriptor.vue'; import VnLv from 'src/components/ui/VnLv.vue'; -import ZoneDescriptorMenuItems from './ZoneDescriptorMenuItems.vue'; +import { toTimeFormat } from 'src/filters/date'; import useCardDescription from 'src/composables/useCardDescription'; @@ -40,13 +40,6 @@ const data = ref(useCardDescription()); const setData = (entity) => { data.value = useCardDescription(entity.ref, entity.id); }; - -function extractHour(dateTime) { - const date = new Date(dateTime); - const hours = date.getHours().toString().padStart(2, '0'); - const minutes = date.getMinutes().toString().padStart(2, '0'); - return `${hours}:${minutes}`; -} @@ -81,7 +74,7 @@ function extractHour(dateTime) { {{ console.log('entity', entity) }} - + diff --git a/src/pages/Zone/Card/ZoneLocations.vue b/src/pages/Zone/Card/ZoneLocations.vue new file mode 100644 index 000000000..e4305c898 --- /dev/null +++ b/src/pages/Zone/Card/ZoneLocations.vue @@ -0,0 +1 @@ +Zone Locations diff --git a/src/pages/Zone/Card/ZoneLog.vue b/src/pages/Zone/Card/ZoneLog.vue new file mode 100644 index 000000000..373d210b5 --- /dev/null +++ b/src/pages/Zone/Card/ZoneLog.vue @@ -0,0 +1,6 @@ + + + + diff --git a/src/pages/Zone/Card/ZoneWarehouses.vue b/src/pages/Zone/Card/ZoneWarehouses.vue new file mode 100644 index 000000000..7ff73a5e9 --- /dev/null +++ b/src/pages/Zone/Card/ZoneWarehouses.vue @@ -0,0 +1,53 @@ + + + + + + + + + + + + + {{ t('Remove row') }} + + + + + + + + + + + + es: + Remove row: Eliminar fila + diff --git a/src/pages/Zone/Delivery/ZoneDeliveryCreate.vue b/src/pages/Zone/Delivery/ZoneDeliveryCreate.vue new file mode 100644 index 000000000..a48eaf278 --- /dev/null +++ b/src/pages/Zone/Delivery/ZoneDeliveryCreate.vue @@ -0,0 +1,432 @@ + + + + + + + + + + + + + {{ + t('zone.warnings.minHeightBetweenTrays') + + zoneConfig.minHeightBetweenTrays + + ' cm' + }} + + {{ + t('zone.warnings.maxZoneHeight') + + zoneConfig.maxZoneHeight + + ' cm' + }} + + + + + + + + + + + + + + + + + + + + + + + + + + {{ t('zone.delivery.trayColor') }} + + + + + + + + + + + + + + + + + diff --git a/src/pages/Zone/Delivery/ZoneDeliveryList.vue b/src/pages/Zone/Delivery/ZoneDeliveryList.vue new file mode 100644 index 000000000..695388a9b --- /dev/null +++ b/src/pages/Zone/Delivery/ZoneDeliveryList.vue @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/Zone/Upcoming/ZoneUpcomingCreate.vue b/src/pages/Zone/Upcoming/ZoneUpcomingCreate.vue new file mode 100644 index 000000000..6bc04c428 --- /dev/null +++ b/src/pages/Zone/Upcoming/ZoneUpcomingCreate.vue @@ -0,0 +1,432 @@ + + + + + + + + + + + + + {{ + t('zone.warnings.minHeightBetweenTrays') + + zoneConfig.minHeightBetweenTrays + + ' cm' + }} + + {{ + t('zone.warnings.maxZoneHeight') + + zoneConfig.maxZoneHeight + + ' cm' + }} + + + + + + + + + + + + + + + + + + + + + + + + + + {{ t('zone.upcoming.trayColor') }} + + + + + + + + + + + + + + + + + diff --git a/src/pages/Zone/Upcoming/ZoneUpcomingList.vue b/src/pages/Zone/Upcoming/ZoneUpcomingList.vue new file mode 100644 index 000000000..2d3016f25 --- /dev/null +++ b/src/pages/Zone/Upcoming/ZoneUpcomingList.vue @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/Zone/ZoneCreate.vue b/src/pages/Zone/ZoneCreate.vue new file mode 100644 index 000000000..93ea9589b --- /dev/null +++ b/src/pages/Zone/ZoneCreate.vue @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ t('zone.warnings.noData') }} + + + + + + + + + + + + + + + + diff --git a/src/pages/Zone/ZoneDeliveryDays.vue b/src/pages/Zone/ZoneDeliveryDays.vue new file mode 100644 index 000000000..485500dba --- /dev/null +++ b/src/pages/Zone/ZoneDeliveryDays.vue @@ -0,0 +1 @@ +Zone Delivery days diff --git a/src/pages/Zone/ZoneFilterPanel.vue b/src/pages/Zone/ZoneFilterPanel.vue new file mode 100644 index 000000000..94765919d --- /dev/null +++ b/src/pages/Zone/ZoneFilterPanel.vue @@ -0,0 +1,55 @@ + + + + (agencies = data)" + auto-load + /> + + + + + + + + + + + + + + + + diff --git a/src/pages/Zone/ZoneList.vue b/src/pages/Zone/ZoneList.vue new file mode 100644 index 000000000..f260eb134 --- /dev/null +++ b/src/pages/Zone/ZoneList.vue @@ -0,0 +1,112 @@ + + + + (agencyOptions = data)" + :filter="{ fields: ['id', 'name'] }" + auto-load + /> + + + + + + + + + + + + + + + + + + + + + + + + + {{ t('zone.list.create') }} + + + + diff --git a/src/pages/Zone/ZoneMain.vue b/src/pages/Zone/ZoneMain.vue new file mode 100644 index 000000000..66ce78f23 --- /dev/null +++ b/src/pages/Zone/ZoneMain.vue @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/src/pages/Zone/ZoneUpcoming.vue b/src/pages/Zone/ZoneUpcoming.vue new file mode 100644 index 000000000..d405c95f6 --- /dev/null +++ b/src/pages/Zone/ZoneUpcoming.vue @@ -0,0 +1,53 @@ + + + + + + + + + + + + {{ t(`${getWeekDay(/*detail.shipped*/)}`) }} - + {{ t /*'detail.shipped'*/() }} + + + + diff --git a/src/pages/Zone/locale/en.yml b/src/pages/Zone/locale/en.yml new file mode 100644 index 000000000..e62111d57 --- /dev/null +++ b/src/pages/Zone/locale/en.yml @@ -0,0 +1,19 @@ +zone: + list: + volume: Volume + clone: Clone + id: Id + name: Name + agency: Agency + close: Close + price: Price + create: Create zone + openSummary: Details + create: + name: Name + agency: Agency + close: Close + price: Price + type: + submit: Save + reset: Reset diff --git a/src/pages/Zone/locale/es.yml b/src/pages/Zone/locale/es.yml new file mode 100644 index 000000000..5d7a265bf --- /dev/null +++ b/src/pages/Zone/locale/es.yml @@ -0,0 +1,19 @@ +zone: + list: + volume: Volumen + clone: Clonar + id: Id + name: Nombre + agency: Agencia + close: Cierre + price: Precio + create: Crear zona + openSummary: Detalles + create: + name: Nombre + agency: Agencia + close: Cierre + price: Precio + type: + submit: Guardar + reset: Reiniciar diff --git a/src/router/modules/item.js b/src/router/modules/item.js index 4db96a130..6e8659747 100644 --- a/src/router/modules/item.js +++ b/src/router/modules/item.js @@ -26,6 +26,7 @@ export default { 'ItemTax', 'ItemBotanical', 'ItemBarcode', + 'ItemShelving', 'ItemLastEntries', 'ItemTags', ], @@ -164,6 +165,15 @@ export default { }, component: () => import('src/pages/Item/Card/ItemBotanical.vue'), }, + { + path: 'shelving', + name: 'ItemShelving', + meta: { + title: 'shelving', + icon: 'vn:inventory', + }, + component: () => import('src/pages/Item/Card/ItemShelving.vue'), + }, { path: 'barcode', name: 'ItemBarcode', @@ -191,6 +201,15 @@ export default { }, 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'), + }, ], }, ],