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/CrudModel.vue b/src/components/CrudModel.vue
index 940b72ff0..58b4146bf 100644
--- a/src/components/CrudModel.vue
+++ b/src/components/CrudModel.vue
@@ -1,6 +1,6 @@
diff --git a/src/components/ui/VnPaginate.vue b/src/components/ui/VnPaginate.vue
index 0111366f5..655f37059 100644
--- a/src/components/ui/VnPaginate.vue
+++ b/src/components/ui/VnPaginate.vue
@@ -78,6 +78,10 @@ const props = defineProps({
type: String,
default: '',
},
+ keyData: {
+ type: String,
+ default: undefined,
+ },
});
const emit = defineEmits(['onFetch', 'onPaginate', 'onChange']);
@@ -255,7 +259,7 @@ defineExpose({
:disable="disableInfiniteScroll || !store.hasMoreData"
v-bind="$attrs"
>
-
+
diff --git a/src/composables/useArrayData.js b/src/composables/useArrayData.js
index d7838d58e..3268939de 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,24 @@ 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 (!str) return [];
+ 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 +297,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 9abf1a818..ce402541d 100644
--- a/src/pages/Customer/Card/CustomerDescriptor.vue
+++ b/src/pages/Customer/Card/CustomerDescriptor.vue
@@ -188,14 +188,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/Card/CustomerUnpaid.vue b/src/pages/Customer/Card/CustomerUnpaid.vue
index 18b12c60c..f76e35821 100644
--- a/src/pages/Customer/Card/CustomerUnpaid.vue
+++ b/src/pages/Customer/Card/CustomerUnpaid.vue
@@ -50,7 +50,8 @@ const filterClientFindOne = {
>
-
+
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/Defaulter/CustomerDefaulter.vue b/src/pages/Customer/Defaulter/CustomerDefaulter.vue
index 7b9cb67f7..eca2ad596 100644
--- a/src/pages/Customer/Defaulter/CustomerDefaulter.vue
+++ b/src/pages/Customer/Defaulter/CustomerDefaulter.vue
@@ -11,14 +11,14 @@ import VnInput from 'src/components/common/VnInput.vue';
import CustomerDefaulterAddObservation from './CustomerDefaulterAddObservation.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
import VnTable from 'src/components/VnTable/VnTable.vue';
+import { useArrayData } from 'src/composables/useArrayData';
const { t } = useI18n();
const quasar = useQuasar();
const dataRef = ref(null);
-const balanceDueTotal = ref(0);
const selected = ref([]);
-
+const arrayData = useArrayData('CustomerDefaulter');
const columns = computed(() => [
{
align: 'left',
@@ -165,26 +165,37 @@ const viewAddObservation = (rowsSelected) => {
});
};
-const onFetch = async (data) => {
- balanceDueTotal.value = data.reduce((acc, { amount = 0 }) => acc + amount, 0);
-};
-
function exprBuilder(param, value) {
switch (param) {
- case 'clientFk':
- return { [`d.${param}`]: value };
- case 'creditInsurance':
- case 'amount':
- case 'workerFk':
- case 'departmentFk':
- case 'countryFk':
- case 'payMethod':
case 'salesPersonFk':
+ case 'creditInsurance':
+ case 'countryFk':
+ return { [`c.${param}`]: value };
+ case 'payMethod':
+ return { [`c.payMethodFk`]: value };
+ case 'workerFk':
+ return { [`co.${param}`]: value };
+ case 'departmentFk':
+ return { [`wd.${param}`]: value };
+ case 'amount':
+ case 'clientFk':
return { [`d.${param}`]: value };
case 'created':
return { 'd.created': { between: dateRange(value) } };
case 'defaulterSinced':
return { 'd.defaulterSinced': { between: dateRange(value) } };
+ case 'isWorker': {
+ if (value == undefined) return;
+ const search = value ? 'worker' : { neq: 'worker' };
+ return { 'c.businessTypeFk': search };
+ }
+ case 'hasRecovery': {
+ if (value == undefined) return;
+ const search = value ? null : { neq: null };
+ return { 'r.finished': search };
+ }
+ case 'observation':
+ return { 'co.text': { like: `%${value}%` } };
}
}
@@ -192,7 +203,7 @@ function exprBuilder(param, value) {
-
+
diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue
index 7685c55bc..10d5107e2 100644
--- a/src/pages/Customer/components/CustomerAddressEdit.vue
+++ b/src/pages/Customer/components/CustomerAddressEdit.vue
@@ -2,7 +2,7 @@
import { onBeforeMount, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
-
+import { useQuasar } from 'quasar';
import axios from 'axios';
import VnLocation from 'src/components/common/VnLocation.vue';
import FetchData from 'components/FetchData.vue';
@@ -13,11 +13,12 @@ import VnSelect from 'src/components/common/VnSelect.vue';
import VnSelectDialog from 'src/components/common/VnSelectDialog.vue';
import CustomerNewCustomsAgent from 'src/pages/Customer/components/CustomerNewCustomsAgent.vue';
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
+import VnConfirm from 'components/ui/VnConfirm.vue';
const { t } = useI18n();
const route = useRoute();
const router = useRouter();
-
+const quasar = useQuasar();
const urlUpdate = ref('');
const agencyModes = ref([]);
const incoterms = ref([]);
@@ -83,8 +84,26 @@ const deleteNote = (id, index) => {
notes.value.splice(index, 1);
};
-const onDataSaved = async () => {
- let payload = {
+const updateAddress = async (data) => {
+ await axios.patch(urlUpdate.value, data);
+};
+
+const updateAddressTicket = async () => {
+ urlUpdate.value += '?updateObservations=true';
+};
+
+const updateObservations = async (payload) => {
+ await axios.post('AddressObservations/crud', payload);
+ notes.value = [];
+ deletes.value = [];
+ toCustomerAddress();
+};
+async function updateAll({ data, payload }) {
+ await updateObservations(payload);
+ await updateAddress(data);
+}
+function getPayload() {
+ return {
creates: notes.value.filter((note) => note.$isNew),
deletes: deletes.value,
updates: notes.value
@@ -101,14 +120,40 @@ const onDataSaved = async () => {
where: { id: note.id },
})),
};
+}
- await axios.post('AddressObservations/crud', payload);
- notes.value = [];
- deletes.value = [];
- toCustomerAddress();
-};
+async function handleDialog(data) {
+ const payload = getPayload();
+ const body = { data, payload };
+ if (payload.updates.length) {
+ quasar
+ .dialog({
+ component: VnConfirm,
+ componentProps: {
+ title: t(
+ 'confirmTicket'
+ ),
+ message: t('confirmDeletionMessage'),
+ },
+ })
+ .onOk(async () => {
+ await updateAddressTicket();
+ await updateAll(body);
+ toCustomerAddress();
+ })
+ .onCancel(async () => {
+ await updateAll(body);
+ toCustomerAddress();
+ });
+ } else {
+ updateAll(body);
+ toCustomerAddress();
+ }
+}
const toCustomerAddress = () => {
+ notes.value = [];
+ deletes.value = [];
router.push({
name: 'CustomerAddress',
params: {
@@ -143,7 +188,7 @@ function handleLocation(data, location) {
:observe-form-changes="false"
:url-update="urlUpdate"
:url="`Addresses/${route.params.addressId}`"
- @on-data-saved="onDataSaved()"
+ :save-fn="handleDialog"
auto-load
>
@@ -336,4 +381,9 @@ es:
Remove note: Eliminar nota
Longitude: Longitud
Latitude: Latitud
+ confirmTicket: ¿Desea modificar también los estados de todos los tickets que están a punto de ser servidos?
+ confirmDeletionMessage: Si le das a aceptar, se modificaran todas las notas de los ticket a futuro
+en:
+ confirmTicket: Do you also want to modify the states of all the tickets that are about to be served?
+ confirmDeletionMessage: If you click accept, all the notes of the future tickets will be modified
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 = () => {
{
+ afterEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('should fetch addresses with correct parameters for a valid clientId', async () => {
+ const clientId = '12345';
+
+ await getAddresses(clientId);
+
+ expect(axios.get).toHaveBeenCalledWith(`Clients/${clientId}/addresses`, {
+ params: {
+ filter: JSON.stringify({
+ fields: ['nickname', 'street', 'city', 'id'],
+ where: { isActive: true },
+ order: 'nickname ASC',
+ }),
+ },
+ });
+ });
+
+ it('should return undefined when clientId is not provided', async () => {
+ await getAddresses(undefined);
+
+ expect(axios.get).not.toHaveBeenCalled();
+ });
+});
\ No newline at end of file
diff --git a/src/pages/Customer/composables/__tests__/getClient.spec.js b/src/pages/Customer/composables/__tests__/getClient.spec.js
new file mode 100644
index 000000000..a83d3d89f
--- /dev/null
+++ b/src/pages/Customer/composables/__tests__/getClient.spec.js
@@ -0,0 +1,41 @@
+import { describe, it, expect, vi, afterEach } from 'vitest';
+import axios from 'axios';
+import { getClient } from 'src/pages/Customer/composables/getClient';
+
+vi.mock('axios');
+
+describe('getClient', () => {
+ afterEach(() => {
+ vi.clearAllMocks();
+ });
+
+ const generateParams = (clientId) => ({
+ params: {
+ filter: JSON.stringify({
+ include: {
+ relation: 'defaultAddress',
+ scope: {
+ fields: ['id', 'agencyModeFk'],
+ },
+ },
+ where: { id: clientId },
+ }),
+ },
+ });
+
+ it('should fetch client data with correct parameters for a valid clientId', async () => {
+ const clientId = '12345';
+
+ await getClient(clientId);
+
+ expect(axios.get).toHaveBeenCalledWith('Clients', generateParams(clientId));
+ });
+
+ it('should return undefined when clientId is not provided', async () => {
+ const clientId = undefined;
+
+ await getClient(clientId);
+
+ expect(axios.get).toHaveBeenCalledWith('Clients', generateParams(clientId));
+ });
+});
diff --git a/src/pages/Customer/composables/getAddresses.js b/src/pages/Customer/composables/getAddresses.js
new file mode 100644
index 000000000..eecc0150b
--- /dev/null
+++ b/src/pages/Customer/composables/getAddresses.js
@@ -0,0 +1,14 @@
+import axios from 'axios';
+
+export async function getAddresses(clientId) {
+ if (!clientId) return;
+ const filter = {
+ fields: ['nickname', 'street', 'city', 'id'],
+ where: { isActive: true },
+ order: 'nickname ASC',
+ };
+ const params = { filter: JSON.stringify(filter) };
+ return await axios.get(`Clients/${clientId}/addresses`, {
+ params,
+ });
+};
\ No newline at end of file
diff --git a/src/pages/Customer/composables/getClient.js b/src/pages/Customer/composables/getClient.js
new file mode 100644
index 000000000..ecacc67c0
--- /dev/null
+++ b/src/pages/Customer/composables/getClient.js
@@ -0,0 +1,15 @@
+import axios from 'axios';
+
+export async function getClient(clientId) {
+ const filter = {
+ include: {
+ relation: 'defaultAddress',
+ scope: {
+ fields: ['id', 'agencyModeFk'],
+ },
+ },
+ where: { id: clientId },
+ };
+ const params = { filter: JSON.stringify(filter) };
+ return await axios.get('Clients', { params });
+};
\ No newline at end of file
diff --git a/src/pages/Entry/Card/EntryDescriptor.vue b/src/pages/Entry/Card/EntryDescriptor.vue
index f4bf42f57..dafc58394 100644
--- a/src/pages/Entry/Card/EntryDescriptor.vue
+++ b/src/pages/Entry/Card/EntryDescriptor.vue
@@ -148,7 +148,7 @@ es:
Supplier card: Ficha del proveedor
All travels with current agency: Todos los envíos con la agencia actual
All entries with current supplier: Todas las entradas con el proveedor actual
- Go to module index: Ir al índice del modulo
+ Show entry report: Ver informe del pedido
Inventory entry: Es inventario
Virtual entry: Es una redada
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/InvoiceIn/Card/InvoiceInBasicData.vue b/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
index 90aa50af7..498e67303 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
@@ -268,7 +268,7 @@ function deleteFile(dmsFk) {
-import VnCard from 'components/common/VnCard.vue';
+import VnCardBeta from 'components/common/VnCardBeta.vue';
import InvoiceInDescriptor from './InvoiceInDescriptor.vue';
-import InvoiceInFilter from '../InvoiceInFilter.vue';
-import InvoiceInSearchbar from '../InvoiceInSearchbar.vue';
-import { onBeforeRouteUpdate } from 'vue-router';
-import { setRectificative } from '../composables/setRectificative';
const filter = {
include: [
@@ -39,20 +35,13 @@ const filter = {
},
],
};
-
-onBeforeRouteUpdate(async (to) => await setRectificative(to));
+
-
-
-
-
-
+ :user-filter="filter"
+ />
diff --git a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
index 9198e07e8..da7bd4426 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
@@ -105,7 +105,7 @@ async function setInvoiceCorrection(id) {
if (correctingData[0]) invoiceInCorrection.corrected = correctingData[0].correctedFk;
invoiceInCorrection.correcting = correctedData.map(
- (corrected) => corrected.correctingFk
+ (corrected) => corrected.correctingFk,
);
}
@@ -123,13 +123,13 @@ async function setInvoiceCorrection(id) {
-
+
-
-
+
+
{{ entity?.supplier?.nickname }}
@@ -146,7 +146,7 @@ async function setInvoiceCorrection(id) {
color="primary"
:to="routes.getSupplier(entity.supplierFk)"
>
- {{ t('invoicein.list.supplier') }}
+ {{ t('globals.supplier') }}
- {{ t('Entry') }}
+ {{ t('globals.entry') }}
- {{ t('InvoiceOut.card.ticketList') }}
+ {{ t('globals.ticketList') }}
- {{ t('invoicein.descriptorMenu.toBook') }}
+ {{ t('invoiceIn.descriptorMenu.toBook') }}
@@ -197,7 +197,7 @@ const createInvoiceInCorrection = async () => {
@click="triggerMenu('unbook')"
>
- {{ t('invoicein.descriptorMenu.toUnbook') }}
+ {{ t('invoiceIn.descriptorMenu.toUnbook') }}
{
clickable
@click="triggerMenu('delete')"
>
- {{ t('invoicein.descriptorMenu.deleteInvoice') }}
+ {{ t('invoiceIn.descriptorMenu.deleteInvoice') }}
- {{ t('invoicein.descriptorMenu.cloneInvoice') }}
+ {{ t('invoiceIn.descriptorMenu.cloneInvoice') }}
{{
- t('invoicein.descriptorMenu.showAgriculturalPdf')
+ t('invoiceIn.descriptorMenu.showAgriculturalPdf')
}}
{{ t('invoicein.descriptorMenu.sendAgriculturalPdf') }}...{{ t('invoiceIn.descriptorMenu.sendAgriculturalPdf') }}...
{
@click="triggerMenu('correct')"
>
{{ t('invoicein.descriptorMenu.createCorrective') }}...{{ t('invoiceIn.descriptorMenu.createCorrective') }}...
@@ -272,7 +272,6 @@ const createInvoiceInCorrection = async () => {
>
- {{ console.log('opt: ', opt) }}
{{ opt.id }} -
@@ -311,11 +310,11 @@ const createInvoiceInCorrection = async () => {
en:
- isNotLinked: The entry {bookEntry} has been deleted with {accountingEntries} entries
- isLinked: The entry has been linked to Sage. Please contact administration for further information
+ isNotLinked: The entry {bookEntry} has been deleted with {accountingEntries} entries
+ isLinked: The entry has been linked to Sage. Please contact administration for further information
assertAction: Are you sure you want to {action} this invoice?
es:
- isNotLinked: Se ha eliminado el asiento nº {bookEntry} con {accountingEntries} apuntes
- isLinked: El asiento fue enlazado a Sage, por favor contacta con administración
+ isNotLinked: Se ha eliminado el asiento nº {bookEntry} con {accountingEntries} apuntes
+ isLinked: El asiento fue enlazado a Sage, por favor contacta con administración
assertAction: Estas seguro de querer {action} esta factura?
diff --git a/src/pages/InvoiceIn/Card/InvoiceInSummary.vue b/src/pages/InvoiceIn/Card/InvoiceInSummary.vue
index eca0c7af1..e546638f2 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInSummary.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInSummary.vue
@@ -27,14 +27,14 @@ const intrastatTotals = ref({ amount: 0, net: 0, stems: 0 });
const vatColumns = ref([
{
name: 'expense',
- label: 'invoicein.summary.expense',
+ label: 'invoiceIn.summary.expense',
field: (row) => row.expenseFk,
sortable: true,
align: 'left',
},
{
name: 'landed',
- label: 'invoicein.summary.taxableBase',
+ label: 'invoiceIn.summary.taxableBase',
field: (row) => row.taxableBase,
format: (value) => toCurrency(value),
sortable: true,
@@ -42,7 +42,7 @@ const vatColumns = ref([
},
{
name: 'vat',
- label: 'invoicein.summary.sageVat',
+ label: 'invoiceIn.summary.sageVat',
field: (row) => {
if (row.taxTypeSage) return `#${row.taxTypeSage.id} : ${row.taxTypeSage.vat}`;
},
@@ -52,7 +52,7 @@ const vatColumns = ref([
},
{
name: 'transaction',
- label: 'invoicein.summary.sageTransaction',
+ label: 'invoiceIn.summary.sageTransaction',
field: (row) => {
if (row.transactionTypeSage)
return `#${row.transactionTypeSage.id} : ${row.transactionTypeSage?.transaction}`;
@@ -63,7 +63,7 @@ const vatColumns = ref([
},
{
name: 'rate',
- label: 'invoicein.summary.rate',
+ label: 'invoiceIn.summary.rate',
field: (row) => taxRate(row.taxableBase, row.taxTypeSage?.rate),
format: (value) => toCurrency(value),
sortable: true,
@@ -71,7 +71,7 @@ const vatColumns = ref([
},
{
name: 'currency',
- label: 'invoicein.summary.currency',
+ label: 'invoiceIn.summary.currency',
field: (row) => row.foreignValue,
format: (val) => val && toCurrency(val, currency.value),
sortable: true,
@@ -82,21 +82,21 @@ const vatColumns = ref([
const dueDayColumns = ref([
{
name: 'date',
- label: 'invoicein.summary.dueDay',
+ label: 'invoiceIn.summary.dueDay',
field: (row) => toDate(row.dueDated),
sortable: true,
align: 'left',
},
{
name: 'bank',
- label: 'invoicein.summary.bank',
+ label: 'invoiceIn.summary.bank',
field: (row) => row.bank.bank,
sortable: true,
align: 'left',
},
{
name: 'amount',
- label: 'invoicein.list.amount',
+ label: 'invoiceIn.list.amount',
field: (row) => row.amount,
format: (value) => toCurrency(value),
sortable: true,
@@ -104,7 +104,7 @@ const dueDayColumns = ref([
},
{
name: 'landed',
- label: 'invoicein.summary.foreignValue',
+ label: 'invoiceIn.summary.foreignValue',
field: (row) => row.foreignValue,
format: (val) => val && toCurrency(val, currency.value),
sortable: true,
@@ -115,7 +115,7 @@ const dueDayColumns = ref([
const intrastatColumns = ref([
{
name: 'code',
- label: 'invoicein.summary.code',
+ label: 'invoiceIn.summary.code',
field: (row) => {
return `${row.intrastat.id}: ${row.intrastat?.description}`;
},
@@ -124,21 +124,21 @@ const intrastatColumns = ref([
},
{
name: 'amount',
- label: 'invoicein.list.amount',
+ label: 'invoiceIn.list.amount',
field: (row) => toCurrency(row.amount),
sortable: true,
align: 'left',
},
{
name: 'net',
- label: 'invoicein.summary.net',
+ label: 'invoiceIn.summary.net',
field: (row) => row.net,
sortable: true,
align: 'left',
},
{
name: 'stems',
- label: 'invoicein.summary.stems',
+ label: 'invoiceIn.summary.stems',
field: (row) => row.stems,
format: (value) => value,
sortable: true,
@@ -146,7 +146,7 @@ const intrastatColumns = ref([
},
{
name: 'landed',
- label: 'invoicein.summary.country',
+ label: 'invoiceIn.summary.country',
field: (row) => row.country?.code,
format: (value) => value,
sortable: true,
@@ -214,7 +214,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
/>
@@ -225,14 +225,14 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
-
+
`#/invoice-in/${entityId.value}/${param}`;
@@ -272,18 +272,18 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
/>
-
+
@@ -294,11 +294,11 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
-
+
`#/invoice-in/${entityId.value}/${param}`;
:color="amountsNotMatch ? 'negative' : 'transparent'"
:title="
amountsNotMatch
- ? t('invoicein.summary.noMatch')
- : t('invoicein.summary.dueTotal')
+ ? t('invoiceIn.summary.noMatch')
+ : t('invoiceIn.summary.dueTotal')
"
>
{{ toCurrency(entity.totals.totalDueDay) }}
@@ -318,7 +318,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
-
+
`#/invoice-in/${entityId.value}/${param}`;
-
+
@@ -404,7 +404,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
{
@@ -97,10 +97,10 @@ const redirectToInvoiceInBasicData = (__, { id }) => {
map-options
hide-selected
:required="true"
- :rules="validate('invoicein.companyFk')"
+ :rules="validate('invoiceIn.companyFk')"
/>
diff --git a/src/pages/InvoiceIn/InvoiceInFilter.vue b/src/pages/InvoiceIn/InvoiceInFilter.vue
index 31a611936..43b91c93f 100644
--- a/src/pages/InvoiceIn/InvoiceInFilter.vue
+++ b/src/pages/InvoiceIn/InvoiceInFilter.vue
@@ -164,7 +164,7 @@ function handleDaysAgo(params, daysAgo) {
[
{
align: 'left',
name: 'isBooked',
- label: t('invoicein.isBooked'),
+ label: t('invoiceIn.isBooked'),
columnFilter: false,
},
{
@@ -41,7 +41,7 @@ const cols = computed(() => [
{
align: 'left',
name: 'supplierFk',
- label: t('invoicein.list.supplier'),
+ label: t('invoiceIn.list.supplier'),
columnFilter: {
component: 'select',
attrs: {
@@ -55,16 +55,16 @@ const cols = computed(() => [
{
align: 'left',
name: 'supplierRef',
- label: t('invoicein.list.supplierRef'),
+ label: t('invoiceIn.list.supplierRef'),
},
{
align: 'left',
name: 'serial',
- label: t('invoicein.serial'),
+ label: t('invoiceIn.serial'),
},
{
align: 'left',
- label: t('invoicein.list.issued'),
+ label: t('invoiceIn.list.issued'),
name: 'issued',
component: null,
columnFilter: {
@@ -74,7 +74,7 @@ const cols = computed(() => [
},
{
align: 'left',
- label: t('invoicein.list.dueDated'),
+ label: t('invoiceIn.list.dueDated'),
name: 'dueDated',
component: null,
columnFilter: {
@@ -86,12 +86,12 @@ const cols = computed(() => [
{
align: 'left',
name: 'awbCode',
- label: t('invoicein.list.awb'),
+ label: t('invoiceIn.list.awb'),
},
{
align: 'left',
name: 'amount',
- label: t('invoicein.list.amount'),
+ label: t('invoiceIn.list.amount'),
format: ({ amount }) => toCurrency(amount),
cardVisible: true,
},
@@ -130,71 +130,84 @@ const cols = computed(() => [
},
]);
+
(companies = data)" auto-load />
-
-
-
-
-
-
-
-
-
- {{ row.supplierName }}
-
-
+
+
-
-
+
-
-
-
- {{ scope.opt?.nickname }}
- #{{ scope.opt?.id }}, {{ scope.opt?.name }}
-
-
+
+
+ {{ row.supplierName }}
+
+
-
-
-
-
+
+
+
+
+
+ {{ scope.opt?.nickname }}
+
+ #{{ scope.opt?.id }}, {{ scope.opt?.name }}
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/pages/InvoiceIn/InvoiceInSearchbar.vue b/src/pages/InvoiceIn/InvoiceInSearchbar.vue
deleted file mode 100644
index f2731b005..000000000
--- a/src/pages/InvoiceIn/InvoiceInSearchbar.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-es:
- Search invoice: Buscar factura recibida
- Search invoices in by id or supplier fiscal name: Buscar facturas recibidas por id o por nombre fiscal del proveedor
-
diff --git a/src/pages/InvoiceIn/locale/en.yml b/src/pages/InvoiceIn/locale/en.yml
index 94db50066..6b21b316b 100644
--- a/src/pages/InvoiceIn/locale/en.yml
+++ b/src/pages/InvoiceIn/locale/en.yml
@@ -1,4 +1,6 @@
-invoicein:
+invoiceIn:
+ search: Search invoice
+ searchInfo: Search incoming invoices by ID or supplier fiscal name
serial: Serial
isBooked: Is booked
list:
diff --git a/src/pages/InvoiceIn/locale/es.yml b/src/pages/InvoiceIn/locale/es.yml
index bcb9c0551..3f27c895c 100644
--- a/src/pages/InvoiceIn/locale/es.yml
+++ b/src/pages/InvoiceIn/locale/es.yml
@@ -1,4 +1,6 @@
-invoicein:
+invoiceIn:
+ search: Buscar factura recibida
+ searchInfo: Buscar facturas recibidas por ID o nombre fiscal del proveedor
serial: Serie
isBooked: Contabilizada
list:
@@ -63,6 +65,7 @@ invoicein:
params:
search: Id o nombre proveedor
correctedFk: Rectificada
+ isBooked: Contabilizada
account: Cuenta contable
correctingFk: Rectificativa
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 }}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+