diff --git a/.gitignore b/.gitignore
index 213384ef5..617169f6f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,5 +29,5 @@ yarn-error.log*
*.sln
# Cypress directories and files
-/tests/cypress/videos
-/tests/cypress/screenshots
\ No newline at end of file
+/test/cypress/videos
+/test/cypress/screenshots
diff --git a/src/components/common/VnCardBeta.vue b/src/components/common/VnCardBeta.vue
index 349956be9..a1f07ff17 100644
--- a/src/components/common/VnCardBeta.vue
+++ b/src/components/common/VnCardBeta.vue
@@ -12,6 +12,7 @@ const props = defineProps({
baseUrl: { type: String, default: undefined },
customUrl: { type: String, default: undefined },
filter: { type: Object, default: () => {} },
+ userFilter: { type: Object, default: () => {} },
descriptor: { type: Object, required: true },
filterPanel: { type: Object, default: undefined },
searchDataKey: { type: String, default: undefined },
@@ -32,6 +33,7 @@ const url = computed(() => {
const arrayData = useArrayData(props.dataKey, {
url: url.value,
filter: props.filter,
+ userFilter: props.userFilter,
});
onBeforeMount(async () => {
diff --git a/src/components/common/__tests__/VnDms.spec.js b/src/components/common/__tests__/VnDms.spec.js
new file mode 100644
index 000000000..03028aee7
--- /dev/null
+++ b/src/components/common/__tests__/VnDms.spec.js
@@ -0,0 +1,146 @@
+import { createWrapper, axios } from 'app/test/vitest/helper';
+import { vi, afterEach, beforeEach, beforeAll, describe, expect, it } from 'vitest';
+import VnDms from 'src/components/common/VnDms.vue';
+
+class MockFormData {
+ constructor() {
+ this.entries = {};
+ }
+
+ append(key, value) {
+ if (!key) {
+ throw new Error('Key is required for FormData.append');
+ }
+ this.entries[key] = value;
+ }
+
+ get(key) {
+ return this.entries[key] || null;
+ }
+
+ getAll() {
+ return this.entries;
+ }
+}
+
+global.FormData = MockFormData;
+
+describe('VnDms', () => {
+ let wrapper;
+ let vm;
+ let postMock;
+
+ const postResponseMock = { data: { success: true } };
+
+ const data = {
+ hasFile: true,
+ hasFileAttached: true,
+ reference: 'DMS-test',
+ warehouseFk: 1,
+ companyFk: 2,
+ dmsTypeFk: 3,
+ description: 'This is a test description',
+ files: { name: 'example.txt', content: new Blob(['file content'], { type: 'text/plain' })},
+ };
+
+ const expectedBody = {
+ hasFile: true,
+ hasFileAttached: true,
+ reference: 'DMS-test',
+ warehouseId: 1,
+ companyId: 2,
+ dmsTypeId: 3,
+ description: 'This is a test description',
+ };
+
+ beforeAll(() => {
+ wrapper = createWrapper(VnDms, {
+ propsData: {
+ url: '/test',
+ formInitialData: { id: 1, reference: 'test' },
+ model: 'Worker',
+ }
+ });
+ wrapper = wrapper.wrapper;
+ vm = wrapper.vm;
+ vi.spyOn(vm, '$emit');
+ });
+
+ beforeEach(() => {
+ postMock = vi.spyOn(axios, 'post').mockResolvedValue(postResponseMock);
+ vm.dms = data;
+ });
+
+ afterEach(() => {
+ vi.clearAllMocks();
+ });
+
+ describe('mapperDms', () => {
+ it('should map DMS data correctly and add file to FormData', () => {
+ const [formData, params] = vm.mapperDms(data);
+
+ expect(formData.get('example.txt')).toBe(data.files);
+ expect(expectedBody).toEqual(params.params);
+ });
+
+ it('should map DMS data correctly without file', () => {
+ delete data.files;
+
+ const [formData, params] = vm.mapperDms(data);
+
+ expect(formData.getAll()).toEqual({});
+ expect(expectedBody).toEqual(params.params);
+ });
+ });
+
+ describe('getUrl', () => {
+ it('should returns prop url when is set', async () => {
+ expect(vm.getUrl()).toBe('/test');
+ });
+
+ it('should returns url dms/"props.formInitialData.id"/updateFile when prop url is null', async () => {
+ await wrapper.setProps({ url: null });
+ expect(vm.getUrl()).toBe('dms/1/updateFile');
+ });
+
+ it('should returns url "props.model"/"route.params.id"/uploadFile when formInitialData is null', async () => {
+ await wrapper.setProps({ formInitialData: null });
+ vm.route.params.id = '123';
+ expect(vm.getUrl()).toBe('Worker/123/uploadFile');
+ });
+ });
+
+ describe('save', () => {
+ it('should save data correctly', async () => {
+ await vm.save();
+ expect(postMock).toHaveBeenCalledWith(vm.getUrl(), expect.any(FormData), { params: expectedBody });
+ expect(wrapper.emitted('onDataSaved')).toBeTruthy();
+ });
+ });
+
+ describe('defaultData', () => {
+ it('should set dms with formInitialData', async () => {
+ const testData = {
+ hasFile: false,
+ hasFileAttached: false,
+ reference: 'defaultData-test',
+ warehouseFk: 2,
+ companyFk: 3,
+ dmsTypeFk: 2,
+ description: 'This is a test description'
+ }
+ await wrapper.setProps({ formInitialData: testData });
+ vm.defaultData();
+
+ expect(vm.dms).toEqual(testData);
+ });
+
+ it('should add reference with "route.params.id" to dms if formInitialData is null', async () => {
+ await wrapper.setProps({ formInitialData: null });
+ vm.route.params.id= '111';
+ vm.defaultData();
+
+ expect(vm.dms.reference).toBe('111');
+ });
+ });
+});
\ No newline at end of file
diff --git a/src/components/ui/CatalogItem.vue b/src/components/ui/CatalogItem.vue
index 9670d9b68..7806562b2 100644
--- a/src/components/ui/CatalogItem.vue
+++ b/src/components/ui/CatalogItem.vue
@@ -41,7 +41,7 @@ const card = toRef(props, 'item');
-
+
{{ card.name }}
diff --git a/src/components/ui/VnFilterPanel.vue b/src/components/ui/VnFilterPanel.vue
index aba797678..93f069cc6 100644
--- a/src/components/ui/VnFilterPanel.vue
+++ b/src/components/ui/VnFilterPanel.vue
@@ -190,7 +190,10 @@ const getLocale = (label) => {
const globalLocale = `globals.params.${param}`;
if (te(globalLocale)) return t(globalLocale);
else if (te(t(`params.${param}`)));
- else return t(`${route.meta.moduleName.toLowerCase()}.params.${param}`);
+ else {
+ const camelCaseModuleName = route.meta.moduleName.charAt(0).toLowerCase() + route.meta.moduleName.slice(1);
+ return t(`${camelCaseModuleName}.params.${param}`);
+ }
};
diff --git a/src/composables/useArrayData.js b/src/composables/useArrayData.js
index d7838d58e..89d4dee5c 100644
--- a/src/composables/useArrayData.js
+++ b/src/composables/useArrayData.js
@@ -170,10 +170,9 @@ export function useArrayData(key, userOptions) {
async function addOrder(field, direction = 'ASC') {
const newOrder = field + ' ' + direction;
- let order = store.order || [];
- if (typeof order == 'string') order = [order];
+ const order = toArray(store.order);
- let index = order.findIndex((o) => o.split(' ')[0] === field);
+ let index = getOrderIndex(order, field);
if (index > -1) {
order[index] = newOrder;
} else {
@@ -190,16 +189,23 @@ export function useArrayData(key, userOptions) {
}
async function deleteOrder(field) {
- let order = store.order ?? [];
- if (typeof order == 'string') order = [order];
-
- const index = order.findIndex((o) => o.split(' ')[0] === field);
+ const order = toArray(store.order);
+ const index = getOrderIndex(order, field);
if (index > -1) order.splice(index, 1);
store.order = order;
fetch({});
}
+ function getOrderIndex(order, field) {
+ return order.findIndex((o) => o.split(' ')[0] === field);
+ }
+
+ function toArray(str = []) {
+ if (Array.isArray(str)) return str;
+ if (typeof str === 'string') return str.split(',').map((item) => item.trim());
+ }
+
function sanitizerParams(params, exprBuilder) {
for (const param in params) {
if (params[param] === '' || params[param] === null) {
@@ -290,8 +296,7 @@ export function useArrayData(key, userOptions) {
Object.assign(params, store.userParams);
if (params.filter) params.filter.skip = store.skip;
- if (store?.order && typeof store?.order == 'string') store.order = [store.order];
- if (store.order?.length) params.filter.order = [...store.order];
+ if (store.order) params.filter.order = toArray(store.order);
else delete params.filter.order;
return { filter, params, limit: filter.limit };
diff --git a/src/css/app.scss b/src/css/app.scss
index 69aa7c6bd..7296b079f 100644
--- a/src/css/app.scss
+++ b/src/css/app.scss
@@ -312,11 +312,11 @@ input::-webkit-inner-spin-button {
}
.q-item > .q-item__section:has(.q-checkbox) {
- max-width: min-content;
+ max-width: fit-content;
}
.row > .column:has(.q-checkbox) {
- max-width: min-content;
+ max-width: fit-content;
}
.q-field__inner {
.q-field__control {
diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index 1e22a07d4..8e458df97 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -1,10 +1,11 @@
globals:
lang:
es: Spanish
- en: English
- quantity: Quantity
+ en: English
language: Language
+ quantity: Quantity
entity: Entity
+ preview: Preview
user: User
details: Details
collapseMenu: Collapse lateral menu
@@ -36,7 +37,6 @@ globals:
confirm: Confirm
assign: Assign
back: Back
- downloadPdf: Download PDF
yes: 'Yes'
no: 'No'
noChanges: No changes to save
@@ -60,6 +60,7 @@ globals:
downloadCSVSuccess: CSV downloaded successfully
reference: Reference
agency: Agency
+ entry: Entry
warehouseOut: Warehouse Out
warehouseIn: Warehouse In
landed: Landed
@@ -68,11 +69,11 @@ globals:
amount: Amount
packages: Packages
download: Download
+ downloadPdf: Download PDF
selectRows: 'Select all { numberRows } row(s)'
allRows: 'All { numberRows } row(s)'
markAll: Mark all
requiredField: Required field
- valueCantBeEmpty: Value cannot be empty
class: clase
type: Type
reason: reason
@@ -82,6 +83,9 @@ globals:
warehouse: Warehouse
company: Company
fieldRequired: Field required
+ valueCantBeEmpty: Value cannot be empty
+ Value can't be blank: Value cannot be blank
+ Value can't be null: Value cannot be null
allowedFilesText: 'Allowed file types: { allowedContentTypes }'
smsSent: SMS sent
confirmDeletion: Confirm deletion
@@ -131,6 +135,26 @@ globals:
medium: Medium
big: Big
email: Email
+ supplier: Supplier
+ ticketList: Ticket List
+ created: Created
+ worker: Worker
+ now: Now
+ name: Name
+ new: New
+ comment: Comment
+ observations: Observations
+ goToModuleIndex: Go to module index
+ createInvoiceIn: Create invoice in
+ myAccount: My account
+ noOne: No one
+ maxTemperature: Max
+ minTemperature: Min
+ changePass: Change password
+ deleteConfirmTitle: Delete selected elements
+ changeState: Change state
+ raid: 'Raid {daysInForward} days'
+ isVies: Vies
pageTitles:
logIn: Login
addressEdit: Update address
@@ -152,13 +176,14 @@ globals:
subRoles: Subroles
inheritedRoles: Inherited Roles
customers: Customers
+ customerCreate: New customer
+ createCustomer: Create customer
+ createOrder: New order
list: List
webPayments: Web Payments
extendedList: Extended list
notifications: Notifications
defaulter: Defaulter
- customerCreate: New customer
- createOrder: New order
fiscalData: Fiscal data
billingData: Billing data
consignees: Consignees
@@ -194,27 +219,28 @@ globals:
claims: Claims
claimCreate: New claim
lines: Lines
- photos: Photos
development: Development
+ photos: Photos
action: Action
invoiceOuts: Invoice out
negativeBases: Negative Bases
globalInvoicing: Global invoicing
invoiceOutCreate: Create invoice out
+ order: Orders
+ orderList: List
+ orderCreate: New order
+ catalog: Catalog
+ volume: Volume
shelving: Shelving
shelvingList: Shelving List
shelvingCreate: New shelving
invoiceIns: Invoices In
invoiceInCreate: Create invoice in
vat: VAT
+ labeler: Labeler
dueDay: Due day
intrastat: Intrastat
corrective: Corrective
- order: Orders
- orderList: List
- orderCreate: New order
- catalog: Catalog
- volume: Volume
workers: Workers
workerCreate: New worker
department: Department
@@ -227,10 +253,10 @@ globals:
wagonsList: Wagons List
wagonCreate: Create wagon
wagonEdit: Edit wagon
+ wagonCounter: Trolley counter
typesList: Types List
typeCreate: Create type
typeEdit: Edit type
- wagonCounter: Trolley counter
roadmap: Roadmap
stops: Stops
routes: Routes
@@ -239,21 +265,16 @@ globals:
routeCreate: New route
RouteRoadmap: Roadmaps
RouteRoadmapCreate: Create roadmap
+ RouteExtendedList: Router
autonomous: Autonomous
suppliers: Suppliers
supplier: Supplier
- expedition: Expedition
- services: Service
- components: Components
- pictures: Pictures
- packages: Packages
- tracking: Tracking
- labeler: Labeler
supplierCreate: New supplier
accounts: Accounts
addresses: Addresses
agencyTerm: Agency agreement
travel: Travels
+ create: Create
extraCommunity: Extra community
travelCreate: New travel
history: Log
@@ -261,14 +282,13 @@ globals:
items: Items
diary: Diary
tags: Tags
- create: Create
- buyRequest: Buy requests
fixedPrice: Fixed prices
+ buyRequest: Buy requests
wasteBreakdown: Waste breakdown
itemCreate: New item
- barcode: Barcodes
tax: Tax
botanical: Botanical
+ barcode: Barcodes
itemTypeCreate: New item type
family: Item Type
lastEntries: Last entries
@@ -284,13 +304,20 @@ globals:
formation: Formation
locations: Locations
warehouses: Warehouses
- saleTracking: Sale tracking
roles: Roles
connections: Connections
acls: ACLs
mailForwarding: Mail forwarding
mailAlias: Mail alias
privileges: Privileges
+ observation: Notes
+ expedition: Expedition
+ saleTracking: Sale tracking
+ services: Service
+ tracking: Tracking
+ components: Components
+ pictures: Pictures
+ packages: Packages
ldap: LDAP
samba: Samba
twoFactor: Two factor
@@ -301,27 +328,12 @@ globals:
serial: Serial
medical: Mutual
pit: IRPF
- RouteExtendedList: Router
wasteRecalc: Waste recaclulate
operator: Operator
parking: Parking
- supplier: Supplier
- created: Created
- worker: Worker
- now: Now
- name: Name
- new: New
- comment: Comment
- observations: Observations
- goToModuleIndex: Go to module index
unsavedPopup:
title: Unsaved changes will be lost
subtitle: Are you sure exit without saving?
- createInvoiceIn: Create invoice in
- myAccount: My account
- noOne: No one
- maxTemperature: Max
- minTemperature: Min
params:
clientFk: Client id
salesPersonFk: Sales person
@@ -339,19 +351,13 @@ globals:
supplierFk: Supplier
supplierRef: Supplier ref
serial: Serial
- amount: Importe
+ amount: Amount
awbCode: AWB
correctedFk: Rectified
correctingFk: Rectificative
daysOnward: Days onward
countryFk: Country
companyFk: Company
- changePass: Change password
- setPass: Set password
- deleteConfirmTitle: Delete selected elements
- changeState: Change state
- raid: 'Raid {daysInForward} days'
- isVies: Vies
errors:
statusUnauthorized: Access denied
statusInternalServerError: An internal server error has ocurred
@@ -491,21 +497,6 @@ invoiceOut:
comercial: Comercial
errors:
downloadCsvFailed: CSV download failed
-shelving:
- list:
- parking: Parking
- priority: Priority
- newShelving: New Shelving
- summary:
- recyclable: Recyclable
-parking:
- pickingOrder: Picking order
- sector: Sector
- row: Row
- column: Column
- searchBar:
- info: You can search by parking code
- label: Search parking...
department:
chat: Chat
bossDepartment: Boss Department
@@ -697,6 +688,9 @@ supplier:
consumption:
entry: Entry
travel:
+ search: Search travel
+ searchInfo: You can search by travel id or name
+ id: Id
travelList:
tableVisibleColumns:
ref: Reference
@@ -727,62 +721,6 @@ travel:
destination: Destination
thermograph: Thermograph
travelFileDescription: 'Travel id { travelId }'
-item:
- descriptor:
- buyer: Buyer
- color: Color
- category: Category
- available: Available
- warehouseText: 'Calculated on the warehouse of { warehouseName }'
- itemDiary: Item diary
- list:
- id: Identifier
- stems: Stems
- category: Category
- typeName: Type
- isActive: Active
- userName: Buyer
- weightByPiece: Weight/Piece
- stemMultiplier: Multiplier
- fixedPrice:
- itemFk: Item ID
- groupingPrice: Grouping price
- packingPrice: Packing price
- hasMinPrice: Has min price
- minPrice: Min price
- started: Started
- ended: Ended
- create:
- priority: Priority
- buyRequest:
- requester: Requester
- requested: Requested
- attender: Atender
- achieved: Achieved
- concept: Concept
- summary:
- otherData: Other data
- tax: Tax
- botanical: Botanical
- barcode: Barcode
- completeName: Complete name
- family: Familiy
- stems: Stems
- multiplier: Multiplier
- buyer: Buyer
- doPhoto: Do photo
- intrastatCode: Intrastat code
- ref: Reference
- relevance: Relevance
- weight: Weight (gram)/stem
- units: Units/box
- expense: Expense
- generic: Generic
- recycledPlastic: Recycled plastic
- nonRecycledPlastic: Non recycled plastic
- minSalesQuantity: Min sales quantity
- genus: Genus
- specie: Specie
components:
topbar: {}
itemsFilterPanel:
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index 0d308bd84..f59821f28 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -5,6 +5,7 @@ globals:
language: Idioma
quantity: Cantidad
entity: Entidad
+ preview: Vista previa
user: Usuario
details: Detalles
collapseMenu: Contraer menú lateral
@@ -54,11 +55,12 @@ globals:
today: Hoy
yesterday: Ayer
dateFormat: es-ES
- noSelectedRows: No tienes ninguna línea seleccionada
microsip: Abrir en MicroSIP
+ noSelectedRows: No tienes ninguna línea seleccionada
downloadCSVSuccess: Descarga de CSV exitosa
reference: Referencia
agency: Agencia
+ entry: Entrada
warehouseOut: Alm. salida
warehouseIn: Alm. entrada
landed: F. entrega
@@ -133,6 +135,26 @@ globals:
medium: Mediano/a
big: Grande
email: Correo
+ supplier: Proveedor
+ ticketList: Listado de tickets
+ created: Fecha creación
+ worker: Trabajador
+ now: Ahora
+ name: Nombre
+ new: Nuevo
+ comment: Comentario
+ observations: Observaciones
+ goToModuleIndex: Ir al índice del módulo
+ createInvoiceIn: Crear factura recibida
+ myAccount: Mi cuenta
+ noOne: Nadie
+ maxTemperature: Máx
+ minTemperature: Mín
+ changePass: Cambiar contraseña
+ deleteConfirmTitle: Eliminar los elementos seleccionados
+ changeState: Cambiar estado
+ raid: 'Redada {daysInForward} días'
+ isVies: Vies
pageTitles:
logIn: Inicio de sesión
addressEdit: Modificar consignatario
@@ -155,17 +177,17 @@ globals:
inheritedRoles: Roles heredados
customers: Clientes
customerCreate: Nuevo cliente
+ createCustomer: Crear cliente
createOrder: Nuevo pedido
list: Listado
webPayments: Pagos Web
extendedList: Listado extendido
notifications: Notificaciones
defaulter: Morosos
- createCustomer: Crear cliente
fiscalData: Datos fiscales
billingData: Forma de pago
consignees: Consignatarios
- 'address-create': Nuevo consignatario
+ address-create: Nuevo consignatario
notes: Notas
credits: Créditos
greuges: Greuges
@@ -231,10 +253,10 @@ globals:
wagonsList: Listado vagones
wagonCreate: Crear tipo
wagonEdit: Editar tipo
+ wagonCounter: Contador de carros
typesList: Listado tipos
typeCreate: Crear tipo
typeEdit: Editar tipo
- wagonCounter: Contador de carros
roadmap: Troncales
stops: Paradas
routes: Rutas
@@ -243,8 +265,8 @@ globals:
routeCreate: Nueva ruta
RouteRoadmap: Troncales
RouteRoadmapCreate: Crear troncal
- autonomous: Autónomos
RouteExtendedList: Enrutador
+ autonomous: Autónomos
suppliers: Proveedores
supplier: Proveedor
supplierCreate: Nuevo proveedor
@@ -309,23 +331,9 @@ globals:
wasteRecalc: Recalcular mermas
operator: Operario
parking: Parking
- supplier: Proveedor
- created: Fecha creación
- worker: Trabajador
- now: Ahora
- name: Nombre
- new: Nuevo
- comment: Comentario
- observations: Observaciones
- goToModuleIndex: Ir al índice del módulo
unsavedPopup:
title: Los cambios que no haya guardado se perderán
subtitle: ¿Seguro que quiere salir sin guardar?
- createInvoiceIn: Crear factura recibida
- myAccount: Mi cuenta
- noOne: Nadie
- maxTemperature: Máx
- minTemperature: Mín
params:
clientFk: Id cliente
salesPersonFk: Comercial
@@ -348,12 +356,6 @@ globals:
packing: ITP
countryFk: País
companyFk: Empresa
- changePass: Cambiar contraseña
- setPass: Establecer contraseña
- deleteConfirmTitle: Eliminar los elementos seleccionados
- changeState: Cambiar estado
- raid: 'Redada {daysInForward} días'
- isVies: Vies
errors:
statusUnauthorized: Acceso denegado
statusInternalServerError: Ha ocurrido un error interno del servidor
@@ -448,11 +450,15 @@ ticket:
attender: Consignatario
create:
address: Dirección
-invoiceOut:
- card:
- issued: Fecha emisión
- customerCard: Ficha del cliente
- ticketList: Listado de tickets
+order:
+ field:
+ salesPersonFk: Comercial
+ form:
+ clientFk: Cliente
+ addressFk: Dirección
+ agencyModeFk: Agencia
+ list:
+ newOrder: Nuevo Pedido
summary:
issued: Fecha
dued: Fecha límite
@@ -463,47 +469,6 @@ invoiceOut:
fee: Cuota
tickets: Tickets
totalWithVat: Importe
- globalInvoices:
- errors:
- chooseValidClient: Selecciona un cliente válido
- chooseValidCompany: Selecciona una empresa válida
- chooseValidPrinter: Selecciona una impresora válida
- chooseValidSerialType: Selecciona una tipo de serie válida
- fillDates: La fecha de la factura y la fecha máxima deben estar completas
- invoiceDateLessThanMaxDate: La fecha de la factura no puede ser menor que la fecha máxima
- invoiceWithFutureDate: Existe una factura con una fecha futura
- noTicketsToInvoice: No existen tickets para facturar
- criticalInvoiceError: Error crítico en la facturación proceso detenido
- invalidSerialTypeForAll: El tipo de serie debe ser global cuando se facturan todos los clientes
- table:
- addressId: Id dirección
- streetAddress: Dirección fiscal
- statusCard:
- percentageText: '{getPercentage}% {getAddressNumber} de {getNAddresses}'
- pdfsNumberText: '{nPdfs} de {totalPdfs} PDFs'
- negativeBases:
- clientId: Id cliente
- base: Base
- active: Activo
- hasToInvoice: Facturar
- verifiedData: Datos comprobados
- comercial: Comercial
- errors:
- downloadCsvFailed: Error al descargar CSV
-shelving:
- list:
- parking: Parking
- priority: Prioridad
- newShelving: Nuevo Carro
- summary:
- recyclable: Reciclable
-parking:
- pickingOrder: Orden de recogida
- row: Fila
- column: Columna
- searchBar:
- info: Puedes buscar por código de parking
- label: Buscar parking...
department:
chat: Chat
bossDepartment: Jefe de departamento
@@ -693,6 +658,9 @@ supplier:
consumption:
entry: Entrada
travel:
+ search: Buscar envío
+ searchInfo: Buscar envío por id o nombre
+ id: Id
travelList:
tableVisibleColumns:
ref: Referencia
@@ -723,62 +691,6 @@ travel:
destination: Destino
thermograph: Termógrafo
travelFileDescription: 'Id envío { travelId }'
-item:
- descriptor:
- buyer: Comprador
- color: Color
- category: Categoría
- available: Disponible
- warehouseText: 'Calculado sobre el almacén de { warehouseName }'
- itemDiary: Registro de compra-venta
- list:
- id: Identificador
- stems: Tallos
- category: Reino
- typeName: Tipo
- isActive: Activo
- weightByPiece: Peso (gramos)/tallo
- userName: Comprador
- stemMultiplier: Multiplicador
- fixedPrice:
- itemFk: ID Artículo
- groupingPrice: Precio grouping
- packingPrice: Precio packing
- hasMinPrice: Tiene precio mínimo
- minPrice: Precio min
- started: Inicio
- ended: Fin
- create:
- priority: Prioridad
- summary:
- otherData: Otros datos
- tax: IVA
- botanical: Botánico
- barcode: Código de barras
- completeName: Nombre completo
- family: Familia
- stems: Tallos
- multiplier: Multiplicador
- buyer: Comprador
- doPhoto: Hacer foto
- intrastatCode: Código intrastat
- ref: Referencia
- relevance: Relevancia
- weight: Peso (gramos)/tallo
- units: Unidades/caja
- expense: Gasto
- generic: Genérico
- recycledPlastic: Plástico reciclado
- nonRecycledPlastic: Plástico no reciclado
- minSalesQuantity: Cantidad mínima de venta
- genus: Genus
- specie: Specie
- buyRequest:
- requester: Solicitante
- requested: Solicitado
- attender: Comprador
- achieved: Conseguido
- concept: Concepto
components:
topbar: {}
itemsFilterPanel:
diff --git a/src/pages/Customer/Card/CustomerConsumption.vue b/src/pages/Customer/Card/CustomerConsumption.vue
index 640e37ed3..f0d8dea47 100644
--- a/src/pages/Customer/Card/CustomerConsumption.vue
+++ b/src/pages/Customer/Card/CustomerConsumption.vue
@@ -152,7 +152,8 @@ const updateDateParams = (value, params) => {
v-if="campaignList"
data-key="CustomerConsumption"
url="Clients/consumption"
- :order="['itemTypeFk', 'itemName', 'itemSize', 'description']"
+ :order="['itemTypeFk', 'itemName', 'itemSize', 'description']"
+ :filter="{ where: { clientFk: route.params.id } }"
:columns="columns"
search-url="consumption"
:user-params="userParams"
diff --git a/src/pages/Customer/Card/CustomerDescriptor.vue b/src/pages/Customer/Card/CustomerDescriptor.vue
index cb49109d0..4a064843a 100644
--- a/src/pages/Customer/Card/CustomerDescriptor.vue
+++ b/src/pages/Customer/Card/CustomerDescriptor.vue
@@ -187,14 +187,18 @@ const debtWarning = computed(() => {
- {{ t('Go to user') }}
+ {{ t('globals.pageTitles.createOrder') }}
{
};
const clientFk = {
ticket: 'clientId',
- order: 'clientFk',
};
const key = clientFk[type];
if (!key) return;
@@ -70,11 +69,6 @@ const openCreateForm = (type) => {
{{ t('globals.pageTitles.createTicket') }}
-
-
- {{ t('globals.pageTitles.createOrder') }}
-
-
{{ t('Send SMS') }}
diff --git a/src/pages/Customer/CustomerList.vue b/src/pages/Customer/CustomerList.vue
index f6458fd64..f345fcda3 100644
--- a/src/pages/Customer/CustomerList.vue
+++ b/src/pages/Customer/CustomerList.vue
@@ -408,7 +408,7 @@ function handleLocation(data, location) {
order: ['id DESC'],
}"
>
-
+
diff --git a/src/pages/Customer/components/CustomerSamplesCreate.vue b/src/pages/Customer/components/CustomerSamplesCreate.vue
index 665e136e4..754693672 100644
--- a/src/pages/Customer/components/CustomerSamplesCreate.vue
+++ b/src/pages/Customer/components/CustomerSamplesCreate.vue
@@ -214,7 +214,7 @@ const toCustomerSamples = () => {
diff --git a/src/pages/Entry/EntryList.vue b/src/pages/Entry/EntryList.vue
index 641042156..3172c6d0e 100644
--- a/src/pages/Entry/EntryList.vue
+++ b/src/pages/Entry/EntryList.vue
@@ -205,7 +205,7 @@ const columns = computed(() => [
userFilter: entryFilter,
}"
>
-
+
@@ -231,7 +231,7 @@ const columns = computed(() => [
>
{{
t(
- 'entry.list.tableVisibleColumns.isExcludedFromAvailable'
+ 'entry.list.tableVisibleColumns.isExcludedFromAvailable',
)
}}
diff --git a/src/pages/InvoiceOut/Card/InvoiceOutCard.vue b/src/pages/InvoiceOut/Card/InvoiceOutCard.vue
index 17b4216da..93e3fe042 100644
--- a/src/pages/InvoiceOut/Card/InvoiceOutCard.vue
+++ b/src/pages/InvoiceOut/Card/InvoiceOutCard.vue
@@ -1,19 +1,11 @@
-
diff --git a/src/pages/InvoiceOut/InvoiceOutList.vue b/src/pages/InvoiceOut/InvoiceOutList.vue
index 09873642d..b121bc6ea 100644
--- a/src/pages/InvoiceOut/InvoiceOutList.vue
+++ b/src/pages/InvoiceOut/InvoiceOutList.vue
@@ -3,7 +3,6 @@ import { ref, computed, watchEffect } from 'vue';
import { useI18n } from 'vue-i18n';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnInputDate from 'src/components/common/VnInputDate.vue';
-import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
import { usePrintService } from 'src/composables/usePrintService';
@@ -12,12 +11,12 @@ import InvoiceOutSummary from './Card/InvoiceOutSummary.vue';
import { toCurrency, toDate } from 'src/filters/index';
import { QBtn } from 'quasar';
import axios from 'axios';
-import RightMenu from 'src/components/common/RightMenu.vue';
import InvoiceOutFilter from './InvoiceOutFilter.vue';
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 VnSection from 'src/components/common/VnSection.vue';
const { t } = useI18n();
const { viewSummary } = useSummaryDialog();
@@ -30,9 +29,11 @@ const MODEL = 'InvoiceOuts';
const { openReport } = usePrintService();
const addressOptions = ref([]);
const selectedOption = ref('ticket');
+const dataKey = 'InvoiceOutList';
+
async function fetchClientAddress(id) {
const { data } = await axios.get(
- `Clients/${id}/addresses?filter[order]=isActive DESC`
+ `Clients/${id}/addresses?filter[order]=isActive DESC`,
);
addressOptions.value = data;
}
@@ -180,223 +181,239 @@ watchEffect(selectedRows);
-
-
-
-
-
-
-
-
-
- {{ t('downloadPdf') }}
-
-
-
-
-
-
- {{ row.clientSocialName }}
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+ {{ t('globals.downloadPdf') }}
+
+
+
+
+
+
+ {{ row.clientSocialName }}
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+ #{{ scope.opt?.id }} -
+ {{ scope.opt?.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ `${
+ !scope.opt
+ ?.isActive
+ ? t(
+ 'inactive',
+ )
+ : ''
+ } `
+ }}
+ {{
+ scope.opt?.nickname
+ }}
+
+ ,
+ {{
+ scope.opt?.street
+ }},
+ {{ scope.opt?.city }},
+ {{
+ scope.opt
+ ?.province
+ ?.name
+ }}
+ -
+ {{
+ scope.opt
+ ?.agencyMode
+ ?.name
+ }}
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
- #{{ scope.opt?.id }} -
- {{ scope.opt?.name }}
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
- {{
- `${
- !scope.opt?.isActive
- ? t('inactive')
- : ''
- } `
- }}
- {{
- scope.opt?.nickname
- }}
-
- , {{ scope.opt?.street }},
- {{ scope.opt?.city }},
- {{
- scope.opt?.province?.name
- }}
- -
- {{
- scope.opt?.agencyMode
- ?.name
- }}
-
-
-
-
-
-
-
+ class="q-my-none q-mr-md"
+ />
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+ {{ scope.opt?.code }} -
+ {{ scope.opt?.description }}
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
- {{ scope.opt?.code }} -
- {{ scope.opt?.description }}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+