diff --git a/package.json b/package.json index 88f430d7b..8398eb3f3 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@intlify/unplugin-vue-i18n": "^0.8.1", "@pinia/testing": "^0.1.2", "@quasar/app-vite": "^1.7.3", + "@quasar/quasar-app-extension-qcalendar": "4.0.0-beta.15", "@quasar/quasar-app-extension-testing-unit-vitest": "^0.4.0", "@vue/test-utils": "^2.4.4", "autoprefixer": "^10.4.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3fe7df55..bdff559cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,6 +49,9 @@ devDependencies: '@quasar/app-vite': specifier: ^1.7.3 version: 1.7.3(eslint@8.56.0)(pinia@2.1.7)(quasar@2.14.5)(vue-router@4.2.5)(vue@3.4.19) + '@quasar/quasar-app-extension-qcalendar': + specifier: 4.0.0-beta.15 + version: 4.0.0-beta.15 '@quasar/quasar-app-extension-testing-unit-vitest': specifier: ^0.4.0 version: 0.4.0(@vue/test-utils@2.4.4)(quasar@2.14.5)(vite@5.1.4)(vitest@0.31.4)(vue@3.4.19) @@ -912,6 +915,13 @@ packages: resolution: {integrity: sha512-SlOhwzXyPQHWgQIS2ncyDdYdksCJvUYNtgsDQqzAKEG3r3d/ejOxvThle79HTK3Q6HB+gQWFG21Ux00Osr5XSw==} dev: false + /@quasar/quasar-app-extension-qcalendar@4.0.0-beta.15: + resolution: {integrity: sha512-i6hQkcP70LXLfVMPZMKQjSg3681gjZmASV3vq6ULzc0LhtBiPneLdVNNtH2itkWxAmaUj+1heQDI5Pa0F7VKLQ==} + engines: {node: '>= 10.0.0', npm: '>= 5.6.0', yarn: '>= 1.6.0'} + dependencies: + '@quasar/quasar-ui-qcalendar': 4.0.0-beta.19 + dev: true + /@quasar/quasar-app-extension-testing-unit-vitest@0.4.0(@vue/test-utils@2.4.4)(quasar@2.14.5)(vite@5.1.4)(vitest@0.31.4)(vue@3.4.19): resolution: {integrity: sha512-eyzdUdmZiCueNS+5nedjMmzdbpCetSrtdGIwW6KplW1dTzRbLiNvYUjpBOxQGmJCgEhWy9zuswJ7MZ/bTql24Q==} engines: {node: '>= 12.22.1', npm: '>= 6.14.12', yarn: '>= 1.17.3'} @@ -939,6 +949,10 @@ packages: - vite dev: true + /@quasar/quasar-ui-qcalendar@4.0.0-beta.19: + resolution: {integrity: sha512-BT0G2JjgKl1bqNrY5utcYeoy8gK+U9k3Pz1YDi1OB265W/jHU6nFoWMEUdY3JdvMccwkXTL2DLVyl3eqAUyLyg==} + dev: true + /@quasar/render-ssr-error@1.0.3: resolution: {integrity: sha512-A8RF99q6/sOSe1Ighnh5syEIbliD3qUYEJd2HyfFyBPSMF+WYGXon5dmzg4nUoK662NgOggInevkDyBDJcZugg==} engines: {node: '>= 16'} diff --git a/quasar.extensions.json b/quasar.extensions.json index e5c5cbfaa..867769090 100644 --- a/quasar.extensions.json +++ b/quasar.extensions.json @@ -1,7 +1,6 @@ { - "@quasar/testing-unit-vitest": { - "options": [ - "scripts" - ] - } -} \ No newline at end of file + "@quasar/testing-unit-vitest": { + "options": ["scripts"] + }, + "@quasar/qcalendar": {} +} diff --git a/src/boot/i18n.js b/src/boot/i18n.js index ede8f5114..b23b6d5fd 100644 --- a/src/boot/i18n.js +++ b/src/boot/i18n.js @@ -1,7 +1,6 @@ import { boot } from 'quasar/wrappers'; import { createI18n } from 'vue-i18n'; import messages from 'src/i18n'; -import { locales } from 'src/i18n/handle'; const i18n = createI18n({ locale: navigator.language || navigator.userLanguage, @@ -13,9 +12,8 @@ const i18n = createI18n({ legacy: false, }); -export default boot(async ({ app }) => { +export default boot(({ app }) => { // Set i18n instance on app - await locales(); app.use(i18n); }); diff --git a/src/components/ui/QCalendarMonthWrapper.vue b/src/components/ui/QCalendarMonthWrapper.vue new file mode 100644 index 000000000..e87d9c4c9 --- /dev/null +++ b/src/components/ui/QCalendarMonthWrapper.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/composables/useSession.js b/src/composables/useSession.js index d397d7ed9..8583e10d4 100644 --- a/src/composables/useSession.js +++ b/src/composables/useSession.js @@ -3,31 +3,29 @@ import { useRole } from './useRole'; import { useUserConfig } from './useUserConfig'; import axios from 'axios'; import useNotify from './useNotify'; +const TOKEN_MULTIMEDIA = 'tokenMultimedia'; +const TOKEN = 'token'; export function useSession() { const { notify } = useNotify(); function getToken() { - const localToken = localStorage.getItem('token'); - const sessionToken = sessionStorage.getItem('token'); + const localToken = localStorage.getItem(TOKEN); + const sessionToken = sessionStorage.getItem(TOKEN); return localToken || sessionToken || ''; } function getTokenMultimedia() { - const localTokenMultimedia = localStorage.getItem('token'); // Temporal - const sessionTokenMultimedia = sessionStorage.getItem('token'); // Temporal + const localTokenMultimedia = localStorage.getItem(TOKEN_MULTIMEDIA); + const sessionTokenMultimedia = sessionStorage.getItem(TOKEN_MULTIMEDIA); return localTokenMultimedia || sessionTokenMultimedia || ''; } function setToken(data) { - if (data.keepLogin) { - localStorage.setItem('token', data.token); - localStorage.setItem('tokenMultimedia', data.tokenMultimedia); - } else { - sessionStorage.setItem('token', data.token); - sessionStorage.setItem('tokenMultimedia', data.tokenMultimedia); - } + const storage = data.keepLogin ? localStorage : sessionStorage; + storage.setItem(TOKEN, data.token); + storage.setItem(TOKEN_MULTIMEDIA, data.tokenMultimedia); } async function destroyToken(url, storage, key) { if (storage.getItem(key)) { @@ -71,8 +69,8 @@ export function useSession() { } function isLoggedIn() { - const localToken = localStorage.getItem('token'); - const sessionToken = sessionStorage.getItem('token'); + const localToken = localStorage.getItem(TOKEN); + const sessionToken = sessionStorage.getItem(TOKEN); return !!(localToken || sessionToken); } diff --git a/src/css/app.scss b/src/css/app.scss index b36036df4..c6848ff63 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -1,5 +1,6 @@ // app global css in SCSS form @import './icons.scss'; +@import '@quasar/quasar-ui-qcalendar/src/QCalendarMonth.sass'; body.body--light { --font-color: black; @@ -159,4 +160,15 @@ input::-webkit-inner-spin-button { appearance: none; -webkit-appearance: none; -moz-appearance: none; -} \ No newline at end of file +} + +// Clases para modificar el color de fecha seleccionada en componente QCalendarMonth +.q-dark div .q-calendar-mini .q-calendar-month__day.q-selected .q-calendar__button { + background-color: $primary !important; + color: white !important; +} + +.q-calendar-mini .q-calendar-month__day.q-selected .q-calendar__button { + background-color: $primary !important; + color: white !important; +} diff --git a/src/i18n/handle.js b/src/i18n/handle.js deleted file mode 100644 index 331b60b71..000000000 --- a/src/i18n/handle.js +++ /dev/null @@ -1,17 +0,0 @@ -const modules = import.meta.glob(`../pages/**/locale/**.yml`); -import translations from './index'; -const LOCALE_EXTENSION = '.yml'; - -export async function locales() { - for await (const module of Object.keys(modules)) { - const splittedFile = module.split('/'); - const lang = splittedFile.pop().split(LOCALE_EXTENSION)[0]; - const moduleFiles = splittedFile.join('/') + '/' + lang + LOCALE_EXTENSION; - import(moduleFiles).then((t) => { - Object.assign(translations[lang], t.default); - }); - } - return translations; -} - -export default translations; diff --git a/src/i18n/index.js b/src/i18n/index.js index d94f77bb2..aa25fcc14 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -1,10 +1,23 @@ const files = import.meta.glob(`./locale/*.yml`); +const modules = import.meta.glob(`../pages/**/locale/*.yml`); + const translations = {}; for (const file in files) { const lang = file.split('/').at(2).split('.')[0]; - import(file).then((t) => { - translations[lang] = t.default; + + files[file]() + .then((g) => { + translations[lang] = g.default; + }) + .finally(() => { + const actualLang = lang + '.yml'; + for (const module in modules) { + if (!module.endsWith(actualLang)) continue; + modules[module]().then((t) => { + Object.assign(translations[lang], t.default); + }) + } }); } diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index 06885375e..db34b393c 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -788,6 +788,7 @@ worker: dms: My documentation pbx: Private Branch Exchange log: Log + calendar: Calendar list: name: Name email: Email @@ -1094,6 +1095,7 @@ item: list: List diary: Diary tags: Tags + wasteBreakdown: Waste breakdown itemCreate: New item descriptor: item: Item @@ -1122,6 +1124,13 @@ item: stemMultiplier: Multiplier producer: Producer landed: Landed + create: + name: Name + tag: Tag + priority: Priority + type: Type + intrastat: Intrastat + origin: Origin components: topbar: {} userPanel: @@ -1148,3 +1157,24 @@ components: VnLv: copyText: '{copyValue} has been copied to the clipboard' iban_tooltip: 'IBAN: ES21 1234 5678 90 0123456789' +weekdays: + sun: Sunday + mon: Monday + tue: Tuesday + wed: Wednesday + thu: Thursday + fri: Friday + sat: Saturday +months: + jan: January + feb: February + mar: March + apr: April + may: May + jun: June + jul: July + aug: August + sep: September + oct: October + nov: November + dec: December diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index 92ae714c2..cb5876dd3 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -1,1149 +1,1179 @@ globals: - lang: - es: Español - en: Inglés - language: Idioma - entity: Entidad - user: Usuario - details: Detalles - collapseMenu: Contraer menú lateral - backToDashboard: Volver al tablón - notifications: Notificaciones - userPanel: Panel de usuario - modules: Módulos - pinnedModules: Módulos fijados - darkMode: Modo oscuro - logOut: Cerrar sesión - date: Fecha - dataSaved: Datos guardados - dataDeleted: Datos eliminados - search: Buscar - changes: Cambios - dataCreated: Datos creados - add: Añadir - create: Crear - edit: Modificar - save: Guardar - remove: Eliminar - reset: Restaurar - close: Cerrar - cancel: Cancelar - confirm: Confirmar - assign: Asignar - back: Volver - yes: Si - no: No - noChanges: Sin cambios que guardar - changesToSave: Tienes cambios pendientes de guardar - confirmRemove: Vas a eliminar este registro. ¿Continuar? - rowAdded: Fila añadida - rowRemoved: Fila eliminada - pleaseWait: Por favor espera... - noPinnedModules: No has fijado ningún módulo - summary: - basicData: Datos básicos - today: Hoy - yesterday: Ayer - dateFormat: es-ES - noSelectedRows: No tienes ninguna línea seleccionada - microsip: Abrir en MicroSIP - downloadCSVSuccess: Descarga de CSV exitosa - reference: Referencia - agency: Agencia - wareHouseOut: Alm. salida - wareHouseIn: Alm. entrada - landed: F. entrega - shipped: F. envío - totalEntries: Ent. totales - amount: Importe - packages: Bultos - download: Descargar - selectRows: 'Seleccionar las { numberRows } filas(s)' - allRows: 'Todo { numberRows } filas(s)' - markAll: Marcar todo - requiredField: Campo obligatorio - class: clase - type: Tipo - reason: motivo - noResults: Sin resultados - system: Sistema - warehouse: Almacén - company: Empresa - fieldRequired: Campo requerido - allowedFilesText: 'Tipos de archivo permitidos: { allowedContentTypes }' - smsSent: SMS enviado - confirmDeletion: Confirmar eliminación - confirmDeletionMessage: ¿Seguro que quieres eliminar? - description: Descripción - id: Id - order: Orden - original: Original - file: Fichero - selectFile: Seleccione un fichero - copyClipboard: Copiar en portapapeles - salesPerson: Comercial - code: Código - pageTitles: - summary: Resumen - basicData: Datos básicos - log: Historial - parkingList: Listado de parkings - created: Fecha creación - worker: Trabajador -errors: - statusUnauthorized: Acceso denegado - statusInternalServerError: Ha ocurrido un error interno del servidor - statusBadGateway: Parece ser que el servidor ha caído - statusGatewayTimeout: No se ha podido contactar con el servidor - userConfig: Error al obtener configuración de usuario - writeRequest: No se pudo completar la operación solicitada -login: - title: Inicio de sesión - username: Nombre de usuario - password: Contraseña - submit: Iniciar sesión - keepLogin: Mantener sesión iniciada - loginSuccess: Inicio de sesión correcto - loginError: Nombre de usuario o contraseña incorrectos - fieldRequired: Este campo es obligatorio - twoFactorRequired: Verificación de doble factor requerida - pageTitles: - logIn: Inicio de sesión -twoFactor: - code: Código - validate: Validar - insert: Introduce el código de verificación - explanation: Por favor introduce el código de verificación que te hemos enviado a tu email en los próximos 5 minutos - pageTitles: - twoFactor: Doble factor -verifyEmail: - pageTitles: - verifyEmail: Verificación de correo -dashboard: - pageTitles: - dashboard: Tablón -customer: - pageTitles: - customers: Clientes - customerCreate: Nuevo cliente - list: Listado - webPayments: Pagos Web - extendedList: Listado extendido - notifications: Notificaciones - defaulter: Morosos - createCustomer: Crear cliente - summary: Resumen - basicData: Datos básicos - fiscalData: Datos fiscales - billingData: Forma de pago - consignees: Consignatarios - notes: Notas - credits: Créditos - greuges: Greuges - balance: Balance - recoveries: Recobros - webAccess: Acceso web - log: Historial - sms: Sms - creditManagement: Gestión de crédito - creditContracts: Contratos de crédito - creditOpinion: Opinión de crédito - others: Otros - list: - phone: Teléfono - email: Email - customerOrders: Mostrar órdenes del cliente - moreOptions: Más opciones - card: - customerId: ID cliente - salesPerson: Comercial - credit: Crédito - securedCredit: Crédito asegurado - payMethod: Método de pago - debt: Riesgo - isDisabled: El cliente está desactivado - isFrozen: El cliente está congelado - hasDebt: El cliente tiene riesgo - notChecked: El cliente no está comprobado - noWebAccess: El acceso web está desactivado - businessTypeFk: Tipo de negocio - summary: - basicData: Datos básicos - fiscalAddress: Dirección fiscal - fiscalData: Datos fiscales - billingData: Datos de facturación - consignee: Consignatario pred. - businessData: Datos comerciales - financialData: Datos financieros - customerId: ID cliente - name: Nombre - contact: Contacto - phone: Teléfono - mobile: Móvil - email: Email - salesPerson: Comercial - contactChannel: Canal de contacto - socialName: Razón social - fiscalId: NIF/CIF - postcode: Código postal - province: Provincia - country: País - street: Calle - isEqualizated: Recargo de equivalencia - isActive: Activo - invoiceByAddress: Facturar por consignatario - verifiedData: Datos verificados - hasToInvoice: Facturar - notifyByEmail: Notificar por email - vies: VIES - payMethod: Método de pago - bankAccount: Cuenta bancaria - dueDay: Día de pago - hasLcr: Recibido LCR - hasCoreVnl: Recibido core VNL - hasB2BVnl: Recibido B2B VNL - addressName: Nombre de la dirección - addressCity: Ciudad - addressStreet: Calle - username: Usuario - webAccess: Acceso web - totalGreuge: Greuge total - mana: Maná - priceIncreasingRate: Ratio de incremento de precio - averageInvoiced: Facturación media - claimRate: Ratio de reclamaciones - risk: Riesgo - riskInfo: Facturas menos recibos mas pedidos sin facturar - credit: Crédito - creditInfo: Riesgo máximo asumido por la empresa - securedCredit: Crédito asegurado - securedCreditInfo: Riesgo máximo asumido por Solunion - balance: Balance - balanceInfo: Facturas menos recibos - balanceDue: Saldo vencido - balanceDueInfo: Facturas fuera de plazo menos recibos - recoverySince: Recobro desde - businessType: Tipo de negocio - city: Población - rating: Clasificación - recommendCredit: Crédito recomendado - basicData: - socialName: Nombre fiscal - businessType: Tipo de negocio - contact: Contacto - email: Email - phone: Teléfono - mobile: Móvil - salesPerson: Comercial - contactChannel: Canal de contacto - extendedList: - tableVisibleColumns: - id: Identificador - name: Nombre - fi: NIF / CIF - salesPersonFk: Comercial - credit: Crédito - creditInsurance: Crédito asegurado - phone: Teléfono - mobile: Móvil - street: Dirección fiscal - countryFk: País - provinceFk: Provincia - city: Población - postcode: Código postal - email: Email - created: Fecha creación - businessTypeFk: Tipo de negocio - payMethodFk: Forma de pago - sageTaxTypeFk: Tipo de impuesto Sage - sageTransactionTypeFk: Tipo tr. sage - isActive: Activo - isVies: Vies - isTaxDataChecked: Datos comprobados - isEqualizated: Recargo de equivalencias - isFreezed: Congelado - hasToInvoice: Factura - hasToInvoiceByAddress: Factura por consigna - isToBeMailed: Env. emails - hasLcr: Recibido LCR - hasCoreVnl: Recibido core VNL - hasSepaVnl: Recibido B2B VNL -entry: - pageTitles: - entries: Entradas - list: Listado - summary: Resumen - basicData: Datos básicos - buys: Compras - notes: Notas - dms: Gestión documental - log: Historial - entryCreate: Nueva entrada - latestBuys: Últimas compras - list: - newEntry: Nueva entrada - landed: F. entrega - invoiceNumber: Núm. factura - supplier: Proveedor - booked: Asentado - confirmed: Confirmado - ordered: Pedida - summary: - commission: Comisión - currency: Moneda - company: Empresa - reference: Referencia - invoiceNumber: Núm. factura - ordered: Pedida - confirmed: Confirmada - booked: Contabilizada - raid: Redada - excludedFromAvailable: Inventario - travelReference: Referencia - travelAgency: Agencia - travelShipped: F. envio - travelWarehouseOut: Alm. salida - travelDelivered: Enviada - travelLanded: F. entrega - travelWarehouseIn: Alm. entrada - travelReceived: Recibida - buys: Compras - quantity: Cantidad - stickers: Etiquetas - package: Embalaje - weight: Peso - packing: Packing - grouping: Grouping - buyingValue: Coste - import: Importe - pvp: PVP - item: Artículo - basicData: - supplier: Proveedor - travel: Envío - reference: Referencia - invoiceNumber: Núm. factura - company: Empresa - currency: Moneda - observation: Observación - commission: Comisión - ordered: Pedida - confirmed: Confirmado - booked: Asentado - raid: Redada - excludedFromAvailable: Inventario - agency: Agencia - warehouseOut: Alm. salida - warehouseIn: Alm. entrada - shipped: F. envío - landed: F. entrega - id: ID - buys: - groupingPrice: Precio grouping - packingPrice: Precio packing - reference: Referencia - observations: Observaciónes - item: Artículo - size: Medida - packing: Packing - grouping: Grouping - buyingValue: Coste - packagingFk: Embalaje - file: Fichero - name: Nombre - producer: Productor - type: Tipo - color: Color - id: ID - notes: - observationType: Tipo de observación - descriptor: - agency: Agencia - landed: F. entrega - warehouseOut: Alm. salida - latestBuys: - picture: Foto - itemFk: ID Artículo - packing: Packing - grouping: Grouping - quantity: Cantidad - size: Medida - tags: Etiquetas - type: Tipo - intrastat: Intrastat - origin: Origen - weightByPiece: Peso (gramos)/tallo - isActive: Activo - family: Familia - entryFk: Entrada - buyingValue: Coste - freightValue: Porte - comissionValue: Comisión - packageValue: Embalaje - isIgnored: Ignorado - price2: Grouping - price3: Packing - minPrice: Min - ektFk: Ekt - weight: Peso - packagingFk: Embalaje - packingOut: Embalaje envíos - landing: Llegada -ticket: - pageTitles: - tickets: Tickets - list: Listado - ticketCreate: Nuevo ticket - summary: Resumen - basicData: Datos básicos - boxing: Encajado - sms: Sms - notes: Notas - list: - nickname: Alias - state: Estado - shipped: Enviado - landed: Entregado - salesPerson: Comercial - total: Total - card: - ticketId: ID ticket - state: Estado - customerId: ID cliente - salesPerson: Comercial - agency: Agencia - shipped: Enviado - warehouse: Almacén - customerCard: Ficha del cliente - alias: Alias - boxing: - expedition: Expedición - item: Artículo - created: Creado - worker: Trabajador - selectTime: 'Seleccionar hora:' - selectVideo: 'Seleccionar vídeo:' - notFound: No hay vídeos disponibles - summary: - state: Estado - salesPerson: Comercial - agency: Agencia - zone: Zona - warehouse: Almacén - route: Ruta - invoice: Factura - shipped: Enviado - landed: Entregado - consigneePhone: Tel. consignatario - consigneeMobile: Móv. consignatario - clientPhone: Tel. cliente - clientMobile: Móv. cliente - consignee: Consignatario - subtotal: Subtotal - vat: IVA - total: Total - saleLines: Líneas del pedido - item: Artículo - visible: Visible - available: Disponible - quantity: Cantidad - price: Precio - discount: Descuento - packing: Encajado - hasComponentLack: Faltan componentes - itemShortage: No visible - claim: Reclamación - reserved: Reservado - created: Fecha creación - package: Embalaje - taxClass: Tipo IVA - services: Servicios - changeState: Cambiar estado - requester: Solicitante - atender: Comprador - request: Petición de compra - weight: Peso - goTo: Ir a - summaryAmount: Resumen -claim: - pageTitles: - claims: Reclamaciones - list: Listado - claimCreate: Crear reclamación - summary: Resumen - basicData: Datos básicos - lines: Líneas - development: Trazabilidad - photos: Fotos - log: Historial - notes: Notas - action: Acción - list: - customer: Cliente - assignedTo: Asignada a - created: Creada - state: Estado - rmaList: - code: Código - records: registros - card: - claimId: ID reclamación - assignedTo: Asignada a - created: Creada - state: Estado - ticketId: ID ticket - customerSummary: Resumen del cliente - claimedTicket: Ticket reclamado - saleTracking: Líneas preparadas - ticketTracking: Estados del ticket - commercial: Comercial - province: Provincia - zone: Zona - customerId: ID del cliente - summary: - customer: Cliente - assignedTo: Asignada a - attendedBy: Atendida por - created: Creada - state: Estado + lang: + es: Español + en: Inglés + language: Idioma + entity: Entidad + user: Usuario details: Detalles - item: Artículo - landed: Entregado - quantity: Cantidad - claimed: Reclamado - price: Precio - discount: Descuento - total: Total - actions: Acciones - responsibility: Responsabilidad - company: Empresa - person: Comercial/Cliente - notes: Observaciones - photos: Fotos - development: Trazabilidad - reason: Motivo - result: Consecuencias - responsible: Responsable - worker: Trabajador - redelivery: Devolución - basicData: - customer: Cliente - assignedTo: Asignada a - created: Creada - state: Estado - pickup: Recogida - null: No - agency: Agencia - delivery: Reparto - photo: - fileDescription: 'Reclamacion ID {claimId} del cliente {clientName} id {clientId}' - noData: No hay imágenes/videos haz click aquí o arrastra y suelta el archivo - dragDrop: Arrástralo y sueltalo aquí -invoiceOut: - pageTitles: - invoiceOuts: Fact. emitidas - list: Listado - negativeBases: Bases Negativas - globalInvoicing: Facturación global - invoiceOutCreate: Crear fact. emitida - summary: Resumen - basicData: Datos básicos - list: - ref: Referencia - issued: Fecha emisión - shortIssued: F. emisión - client: Cliente - created: Fecha creación - shortCreated: F. creación - company: Empresa - dued: Fecha vencimineto - shortDued: F. vencimiento - amount: Importe - card: - issued: Fecha emisión - client: Cliente - company: Empresa - customerCard: Ficha del cliente - ticketList: Listado de tickets - summary: - issued: Fecha - created: Fecha creación - dued: Vencimiento - booked: Contabilizada - company: Empresa - taxBreakdown: Desglose impositivo - type: Tipo - taxableBase: Base imp. - rate: Tarifa - fee: Cuota - tickets: Tickets - ticketId: Id ticket - nickname: Alias - shipped: F. envío - totalWithVat: Importe - globalInvoices: - errors: - chooseValidClient: Selecciona un cliente válido - chooseValidCompany: Selecciona una empresa válida - chooseValidPrinter: Selecciona una impresora 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 - table: - client: Cliente - addressId: Id dirección - streetAddress: Dirección fiscal - statusCard: - percentageText: '{getPercentage}% {getAddressNumber} de {getNAddresses}' - pdfsNumberText: '{nPdfs} de {totalPdfs} PDFs' - negativeBases: - from: Desde - to: Hasta - company: Empresa - country: País - clientId: Id cliente - client: Cliente - amount: Importe - base: Base - ticketId: Id ticket - active: Activo - hasToInvoice: Facturar - verifiedData: Datos comprobados - comercial: Comercial - errors: - downloadCsvFailed: Error al descargar CSV -order: - pageTitles: - order: Cesta - orderList: Listado - orderCreate: Nueva orden - summary: Resumen - basicData: Datos básicos - catalog: Catálogo - volume: Volumen - lines: Líneas - field: - salesPersonFk: Comercial - clientFk: Cliente - isConfirmed: Confirmada - created: Creado - landed: F. entrega - hour: Hora - agency: Agencia - total: Total - form: - clientFk: Cliente - addressFk: Dirección - landed: F. entrega - agencyModeFk: Agencia - list: - newOrder: Nuevo Pedido - summary: - basket: Cesta - nickname: Alias - company: Empresa - confirmed: Confirmada - notConfirmed: No confirmada - created: Creado - landed: F. entrega - phone: Teléfono - createdFrom: Creado desde - address: Dirección - notes: Notas - subtotal: Subtotal - total: Total - vat: IVA - state: Estado - alias: Alias - items: Items - orderTicketList: Tickets del pedido - details: Detalles - item: Item - quantity: Cantidad - price: Precio - amount: Monto -shelving: - pageTitles: - shelving: Carros - shelvingList: Listado de carros - shelvingCreate: Nuevo carro - summary: Resumen - basicData: Datos básicos - log: Historial - list: - parking: Parking - priority: Prioridad - newShelving: Nuevo Carro - summary: - code: Código - parking: Parking - priority: Prioridad - worker: Trabajador - recyclable: Reciclable - basicData: - code: Código - parking: Parking - priority: Prioridad - recyclable: Reciclable -parking: - pickingOrder: Orden de recogida - row: Fila - column: Columna - pageTitles: - parking: Parking - searchBar: - info: Puedes buscar por código de parking - label: Buscar parking... -invoiceIn: - pageTitles: - invoiceIns: Fact. recibidas - list: Listado - invoiceInCreate: Crear fact. recibida - summary: Resumen - basicData: Datos básicos - vat: IVA - dueDay: Vencimiento - intrastat: Intrastat - corrective: Rectificativa - log: Historial - list: - ref: Referencia - supplier: Proveedor - supplierRef: Ref. proveedor - serialNumber: Num. serie - shortIssued: F. emisión - serial: Serie - file: Fichero - issued: Fecha emisión - isBooked: Conciliada - awb: AWB - amount: Importe - card: - issued: Fecha emisión - amount: Importe - client: Cliente - company: Empresa - customerCard: Ficha del cliente - ticketList: Listado de tickets - vat: Iva - dueDay: Fecha de vencimiento - summary: - supplier: Proveedor - supplierRef: Ref. proveedor - currency: Divisa - docNumber: Número documento - issued: Fecha de expedición - operated: Fecha operación - bookEntried: Fecha asiento - bookedDate: Fecha contable - sage: Retención sage - vat: Iva no deducible - company: Empresa - booked: Contabilizada - expense: Gasto - taxableBase: Base imp. - rate: Tasa - sageTransaction: Sage transación - dueDay: Fecha - bank: Caja - amount: Importe - foreignValue: Divisa - dueTotal: Vencimiento - code: Código - net: Neto - stems: Tallos - country: País -department: - pageTitles: - basicData: Basic data - department: Departamentos - summary: Resumen - name: Nombre - code: Código - chat: Chat - bossDepartment: Jefe de departamento - email: Email - selfConsumptionCustomer: Cliente autoconsumo - telework: Teletrabaja - notifyOnErrors: Notificar errores - worksInProduction: Pertenece a producción - hasToRefill: Completar días sin registros físicos - hasToSendMail: Enviar fichadas por mail - departmentRemoved: Departamento eliminado -worker: - pageTitles: - workers: Trabajadores - list: Listado - basicData: Datos básicos - summary: Resumen + collapseMenu: Contraer menú lateral + backToDashboard: Volver al tablón notifications: Notificaciones - workerCreate: Nuevo trabajador - department: Departamentos - pda: PDA - notes: Notas - dms: Mi documentación - pbx: Centralita - log: Historial - list: - name: Nombre - email: Email - phone: Teléfono - mobile: Móvil - active: Activo - department: Departamento - schedule: Horario - newWorker: Nuevo trabajador - card: - workerId: ID Trabajador - name: Nombre - email: Email - phone: Teléfono - mobile: Móvil - active: Activo - warehouse: Almacén - agency: Empresa - salesPerson: Comercial - summary: - basicData: Datos básicos - boss: Jefe - phoneExtension: Extensión de teléfono - entPhone: Teléfono de empresa - personalPhone: Teléfono personal - noBoss: Sin jefe - userData: Datos de usuario - userId: ID del usuario - role: Rol - sipExtension: Extensión - locker: Taquilla - notificationsManager: - activeNotifications: Notificaciones activas - availableNotifications: Notificaciones disponibles - subscribed: Se ha suscrito a la notificación - unsubscribed: Se ha dado de baja de la notificación - pda: - newPDA: Nueva PDA - currentPDA: PDA Actual - model: Modelo - serialNumber: Número de serie - removePDA: Desasignar PDA - create: - name: Nombre - lastName: Apellido - birth: Fecha de nacimiento - fi: DNI/NIF/NIE - code: Código de trabajador - phone: Teléfono - postcode: Código postal - province: Provincia - city: Población - street: Dirección - webUser: Usuario Web - personalEmail: Correo personal - company: Empresa - boss: Jefe - payMethods: Método de pago - iban: IBAN - bankEntity: Swift / BIC - imageNotFound: No se ha encontrado la imagen -wagon: - pageTitles: - wagons: Vagones - wagonsList: Listado vagones - wagonCreate: Crear tipo - wagonEdit: Editar tipo - typesList: Listado tipos - typeCreate: Crear tipo - typeEdit: Editar tipo - wagonCounter: Contador de carros - type: - name: Nombre - submit: Guardar - reset: Deshacer cambios - trayColor: Color de la bandeja - removeItem: Tipo de vagón borrado correctamente - list: - plate: Matrícula - volume: Volumen - type: Tipo - remove: Borrar - removeItem: Vagón borrado correctamente - create: - plate: Matrícula - volume: Volumen - type: Tipo - label: Etiqueta - warnings: - noData: Sin datos disponibles - nameNotEmpty: El nombre no puede estar vacío - labelNotEmpty: La etiqueta no puede estar vacía - plateNotEmpty: La matrícula no puede estar vacía - volumeNotEmpty: El volumen no puede estar vacío - typeNotEmpty: El tipo no puede estar vacío - maxTrays: Has alcanzado el número máximo de bandejas - minHeightBetweenTrays: 'La distancia mínima entre bandejas es ' - maxWagonHeight: 'La altura máxima del vagón es ' - uncompleteTrays: Hay bandejas sin completar -route/roadmap: - pageTitles: - roadmap: Troncales - summary: Resumen - basicData: Datos básicos - stops: Paradas -roadmap: - pageTitles: - roadmap: Troncales - summary: Resumen - basicData: Datos básicos - stops: Paradas -route: - pageTitles: - routes: Rutas - cmrsList: Listado de CMRs externos - RouteList: Listado - routeCreate: Nueva ruta - basicData: Datos básicos - summary: Resumen - RouteRoadmap: Troncales - RouteRoadmapCreate: Crear troncal - tickets: Tickets - log: Historial - autonomous: Autónomos - cmr: - list: - results: resultados - cmrFk: Id CMR - hasCmrDms: Adjuntado en gestdoc - 'true': Sí - 'false': 'No' - ticketFk: Id ticket - routeFk: Id ruta - country: País - clientFk: Id cliente - shipped: Fecha preparación - viewCmr: Ver CMR - downloadCmrs: Descargar CMRs -supplier: - pageTitles: - suppliers: Proveedores - supplier: Proveedor - list: Listado - supplierCreate: Nuevo proveedor - summary: Resumen - basicData: Datos básicos - fiscalData: Datos fiscales - billingData: Forma de pago - log: Historial - accounts: Cuentas - contacts: Contactos - addresses: Direcciones - consumption: Consumo - agencyTerm: Acuerdo agencia - dms: Gestión documental - list: - payMethod: Método de pago - payDeadline: Plazo de pago - payDay: Día de pago - account: Cuenta - newSupplier: Nuevo proveedor - summary: - responsible: Responsable - notes: Notas - verified: Verificado - isActive: Está activo - billingData: Forma de pago - payMethod: Método de pago - payDeadline: Plazo de pago - payDay: Día de pago - account: Cuenta - fiscalData: Datos fiscales - sageTaxType: Tipo de impuesto Sage - sageTransactionType: Tipo de transacción Sage - sageWithholding: Retención sage - supplierActivity: Actividad proveedor - healthRegister: Pasaporte sanitario - fiscalAddress: Dirección fiscal - socialName: Razón social - taxNumber: NIF/CIF - street: Dirección - city: Población - postCode: Código postal - province: Provincia - country: País - create: - supplierName: Nombre del proveedor - basicData: - alias: Alias - workerFk: Responsable - isSerious: Verificado - isActive: Activo - isPayMethodChecked: Método de pago validado - note: Notas - fiscalData: - name: Razón social * - nif: NIF/CIF * - account: Cuenta - sageTaxTypeFk: Tipo de impuesto sage - sageWithholdingFk: Retención sage - sageTransactionTypeFk: Tipo de transacción sage - supplierActivityFk: Actividad proveedor - healthRegister: Pasaporte sanitario - street: Calle - postcode: Código postal - city: Población * - provinceFk: Provincia - country: País - isTrucker: Transportista - isVies: Vies - billingData: - payMethodFk: Forma de pago - payDemFk: Plazo de pago - payDay: Día de pago - accounts: - iban: Iban - bankEntity: Entidad bancaria - beneficiary: Beneficiario - contacts: - name: Nombre - phone: Teléfono - mobile: Móvil - email: Email - observation: Notas - addresses: - street: Dirección - postcode: Código postal - phone: Teléfono - name: Nombre - city: Población - province: Provincia - mobile: Móvil - agencyTerms: - agencyFk: Agencia - minimumM3: M3 mínimos - packagePrice: Precio bulto - kmPrice: Precio Km - m3Price: Precio M3 - routePrice: Precio ruta - minimumKm: Km mínimos - addRow: Añadir fila - consumption: - entry: Entrada - date: Fecha - reference: Referencia -travel: - pageTitles: - travel: Envíos - list: Listado - create: Crear - summary: Resumen - extraCommunity: Extra comunitarios - travelCreate: Nuevo envío - basicData: Datos básicos - history: Historial - thermographs: Termógrafos - summary: - confirmed: Confirmado - entryId: Id entrada - freight: Porte - package: Embalaje - delivered: Enviada - received: Recibida - entries: Entradas - cloneShipping: Clonar envío - CloneTravelAndEntries: Clonar travel y sus entradas - deleteTravel: Eliminar envío - AddEntry: Añadir entrada - thermographs: Termógrafos - hb: HB - variables: - search: Id/Referencia - agencyModeFk: Agencia - warehouseInFk: Alm. entrada - warehouseOutFk: ' Alm. salida' - landedFrom: Llegada desde - landedTo: Llegada hasta - continent: Cont. Salida - totalEntries: Ent. totales - basicData: - reference: Referencia - agency: Agencia - shipped: F. Envío - landed: F. entrega - warehouseOut: Alm. salida - warehouseIn: Alm. entrada - delivered: Enviada - received: Recibida - thermographs: - code: Código - temperature: Temperatura - state: Estado - destination: Destino - created: Fecha creación - thermograph: Termógrafo - reference: Referencia - type: Tipo - company: Empresa - warehouse: Almacén - travelFileDescription: 'Id envío { travelId }' - file: Fichero -item: - pageTitles: - items: Artículos - list: Listado - diary: Histórico - tags: Etiquetas - itemCreate: Nuevo artículo - descriptor: - item: Artículo - buyer: Comprador - color: Color - category: Categoría - stems: Tallos - visible: Visible - available: Disponible - warehouseText: 'Calculado sobre el almacén de { warehouseName }' - itemDiary: Registro de compra-venta - list: - id: Identificador - grouping: Grouping - packing: Packing - description: Descripción - stems: Tallos - category: Reino - typeName: Tipo - intrastat: Intrastat - isActive: Activo - size: Medida - origin: Origen - weightByPiece: Peso (gramos)/tallo - userName: Comprador - stemMultiplier: Multiplicador - producer: Productor - landed: F. entrega -components: - topbar: {} - userPanel: - copyToken: Token copiado al portapapeles - settings: Configuración + userPanel: Panel de usuario + modules: Módulos + pinnedModules: Módulos fijados + darkMode: Modo oscuro logOut: Cerrar sesión - localWarehouse: Almacén local - localBank: Banco local - localCompany: Empresa local - userWarehouse: Almacén del usuario - userCompany: Empresa del usuario - smartCard: - downloadFile: Descargar archivo - clone: Clonar - openCard: Ficha - openSummary: Detalles - cardDescriptor: - mainList: Listado principal - summary: Resumen - moreOptions: 'Más opciones' - leftMenu: - addToPinned: Añadir a fijados - removeFromPinned: Eliminar de fijados - VnLv: - copyText: '{copyValue} se ha copiado al portapepeles' - iban_tooltip: 'IBAN: ES21 1234 5678 90 0123456789' + date: Fecha + dataSaved: Datos guardados + dataDeleted: Datos eliminados + search: Buscar + changes: Cambios + dataCreated: Datos creados + add: Añadir + create: Crear + edit: Modificar + save: Guardar + remove: Eliminar + reset: Restaurar + close: Cerrar + cancel: Cancelar + confirm: Confirmar + assign: Asignar + back: Volver + yes: Si + no: No + noChanges: Sin cambios que guardar + changesToSave: Tienes cambios pendientes de guardar + confirmRemove: Vas a eliminar este registro. ¿Continuar? + rowAdded: Fila añadida + rowRemoved: Fila eliminada + pleaseWait: Por favor espera... + noPinnedModules: No has fijado ningún módulo + summary: + basicData: Datos básicos + today: Hoy + yesterday: Ayer + dateFormat: es-ES + noSelectedRows: No tienes ninguna línea seleccionada + microsip: Abrir en MicroSIP + downloadCSVSuccess: Descarga de CSV exitosa + reference: Referencia + agency: Agencia + wareHouseOut: Alm. salida + wareHouseIn: Alm. entrada + landed: F. entrega + shipped: F. envío + totalEntries: Ent. totales + amount: Importe + packages: Bultos + download: Descargar + selectRows: 'Seleccionar las { numberRows } filas(s)' + allRows: 'Todo { numberRows } filas(s)' + markAll: Marcar todo + requiredField: Campo obligatorio + class: clase + type: Tipo + reason: motivo + noResults: Sin resultados + system: Sistema + warehouse: Almacén + company: Empresa + fieldRequired: Campo requerido + allowedFilesText: 'Tipos de archivo permitidos: { allowedContentTypes }' + smsSent: SMS enviado + confirmDeletion: Confirmar eliminación + confirmDeletionMessage: ¿Seguro que quieres eliminar? + description: Descripción + id: Id + order: Orden + original: Original + file: Fichero + selectFile: Seleccione un fichero + copyClipboard: Copiar en portapapeles + salesPerson: Comercial + code: Código + pageTitles: + summary: Resumen + basicData: Datos básicos + log: Historial + parkingList: Listado de parkings + created: Fecha creación + worker: Trabajador +errors: + statusUnauthorized: Acceso denegado + statusInternalServerError: Ha ocurrido un error interno del servidor + statusBadGateway: Parece ser que el servidor ha caído + statusGatewayTimeout: No se ha podido contactar con el servidor + userConfig: Error al obtener configuración de usuario + writeRequest: No se pudo completar la operación solicitada +login: + title: Inicio de sesión + username: Nombre de usuario + password: Contraseña + submit: Iniciar sesión + keepLogin: Mantener sesión iniciada + loginSuccess: Inicio de sesión correcto + loginError: Nombre de usuario o contraseña incorrectos + fieldRequired: Este campo es obligatorio + twoFactorRequired: Verificación de doble factor requerida + pageTitles: + logIn: Inicio de sesión +twoFactor: + code: Código + validate: Validar + insert: Introduce el código de verificación + explanation: Por favor introduce el código de verificación que te hemos enviado a tu email en los próximos 5 minutos + pageTitles: + twoFactor: Doble factor +verifyEmail: + pageTitles: + verifyEmail: Verificación de correo +dashboard: + pageTitles: + dashboard: Tablón +customer: + pageTitles: + customers: Clientes + customerCreate: Nuevo cliente + list: Listado + webPayments: Pagos Web + extendedList: Listado extendido + notifications: Notificaciones + defaulter: Morosos + createCustomer: Crear cliente + summary: Resumen + basicData: Datos básicos + fiscalData: Datos fiscales + billingData: Forma de pago + consignees: Consignatarios + notes: Notas + credits: Créditos + greuges: Greuges + balance: Balance + recoveries: Recobros + webAccess: Acceso web + log: Historial + sms: Sms + creditManagement: Gestión de crédito + creditContracts: Contratos de crédito + creditOpinion: Opinión de crédito + others: Otros + list: + phone: Teléfono + email: Email + customerOrders: Mostrar órdenes del cliente + moreOptions: Más opciones + card: + customerId: ID cliente + salesPerson: Comercial + credit: Crédito + securedCredit: Crédito asegurado + payMethod: Método de pago + debt: Riesgo + isDisabled: El cliente está desactivado + isFrozen: El cliente está congelado + hasDebt: El cliente tiene riesgo + notChecked: El cliente no está comprobado + noWebAccess: El acceso web está desactivado + businessTypeFk: Tipo de negocio + summary: + basicData: Datos básicos + fiscalAddress: Dirección fiscal + fiscalData: Datos fiscales + billingData: Datos de facturación + consignee: Consignatario pred. + businessData: Datos comerciales + financialData: Datos financieros + customerId: ID cliente + name: Nombre + contact: Contacto + phone: Teléfono + mobile: Móvil + email: Email + salesPerson: Comercial + contactChannel: Canal de contacto + socialName: Razón social + fiscalId: NIF/CIF + postcode: Código postal + province: Provincia + country: País + street: Calle + isEqualizated: Recargo de equivalencia + isActive: Activo + invoiceByAddress: Facturar por consignatario + verifiedData: Datos verificados + hasToInvoice: Facturar + notifyByEmail: Notificar por email + vies: VIES + payMethod: Método de pago + bankAccount: Cuenta bancaria + dueDay: Día de pago + hasLcr: Recibido LCR + hasCoreVnl: Recibido core VNL + hasB2BVnl: Recibido B2B VNL + addressName: Nombre de la dirección + addressCity: Ciudad + addressStreet: Calle + username: Usuario + webAccess: Acceso web + totalGreuge: Greuge total + mana: Maná + priceIncreasingRate: Ratio de incremento de precio + averageInvoiced: Facturación media + claimRate: Ratio de reclamaciones + risk: Riesgo + riskInfo: Facturas menos recibos mas pedidos sin facturar + credit: Crédito + creditInfo: Riesgo máximo asumido por la empresa + securedCredit: Crédito asegurado + securedCreditInfo: Riesgo máximo asumido por Solunion + balance: Balance + balanceInfo: Facturas menos recibos + balanceDue: Saldo vencido + balanceDueInfo: Facturas fuera de plazo menos recibos + recoverySince: Recobro desde + businessType: Tipo de negocio + city: Población + rating: Clasificación + recommendCredit: Crédito recomendado + basicData: + socialName: Nombre fiscal + businessType: Tipo de negocio + contact: Contacto + email: Email + phone: Teléfono + mobile: Móvil + salesPerson: Comercial + contactChannel: Canal de contacto + extendedList: + tableVisibleColumns: + id: Identificador + name: Nombre + fi: NIF / CIF + salesPersonFk: Comercial + credit: Crédito + creditInsurance: Crédito asegurado + phone: Teléfono + mobile: Móvil + street: Dirección fiscal + countryFk: País + provinceFk: Provincia + city: Población + postcode: Código postal + email: Email + created: Fecha creación + businessTypeFk: Tipo de negocio + payMethodFk: Forma de pago + sageTaxTypeFk: Tipo de impuesto Sage + sageTransactionTypeFk: Tipo tr. sage + isActive: Activo + isVies: Vies + isTaxDataChecked: Datos comprobados + isEqualizated: Recargo de equivalencias + isFreezed: Congelado + hasToInvoice: Factura + hasToInvoiceByAddress: Factura por consigna + isToBeMailed: Env. emails + hasLcr: Recibido LCR + hasCoreVnl: Recibido core VNL + hasSepaVnl: Recibido B2B VNL +entry: + pageTitles: + entries: Entradas + list: Listado + summary: Resumen + basicData: Datos básicos + buys: Compras + notes: Notas + dms: Gestión documental + log: Historial + entryCreate: Nueva entrada + latestBuys: Últimas compras + list: + newEntry: Nueva entrada + landed: F. entrega + invoiceNumber: Núm. factura + supplier: Proveedor + booked: Asentado + confirmed: Confirmado + ordered: Pedida + summary: + commission: Comisión + currency: Moneda + company: Empresa + reference: Referencia + invoiceNumber: Núm. factura + ordered: Pedida + confirmed: Confirmada + booked: Contabilizada + raid: Redada + excludedFromAvailable: Inventario + travelReference: Referencia + travelAgency: Agencia + travelShipped: F. envio + travelWarehouseOut: Alm. salida + travelDelivered: Enviada + travelLanded: F. entrega + travelWarehouseIn: Alm. entrada + travelReceived: Recibida + buys: Compras + quantity: Cantidad + stickers: Etiquetas + package: Embalaje + weight: Peso + packing: Packing + grouping: Grouping + buyingValue: Coste + import: Importe + pvp: PVP + item: Artículo + basicData: + supplier: Proveedor + travel: Envío + reference: Referencia + invoiceNumber: Núm. factura + company: Empresa + currency: Moneda + observation: Observación + commission: Comisión + ordered: Pedida + confirmed: Confirmado + booked: Asentado + raid: Redada + excludedFromAvailable: Inventario + agency: Agencia + warehouseOut: Alm. salida + warehouseIn: Alm. entrada + shipped: F. envío + landed: F. entrega + id: ID + buys: + groupingPrice: Precio grouping + packingPrice: Precio packing + reference: Referencia + observations: Observaciónes + item: Artículo + size: Medida + packing: Packing + grouping: Grouping + buyingValue: Coste + packagingFk: Embalaje + file: Fichero + name: Nombre + producer: Productor + type: Tipo + color: Color + id: ID + notes: + observationType: Tipo de observación + descriptor: + agency: Agencia + landed: F. entrega + warehouseOut: Alm. salida + latestBuys: + picture: Foto + itemFk: ID Artículo + packing: Packing + grouping: Grouping + quantity: Cantidad + size: Medida + tags: Etiquetas + type: Tipo + intrastat: Intrastat + origin: Origen + weightByPiece: Peso (gramos)/tallo + isActive: Activo + family: Familia + entryFk: Entrada + buyingValue: Coste + freightValue: Porte + comissionValue: Comisión + packageValue: Embalaje + isIgnored: Ignorado + price2: Grouping + price3: Packing + minPrice: Min + ektFk: Ekt + weight: Peso + packagingFk: Embalaje + packingOut: Embalaje envíos + landing: Llegada +ticket: + pageTitles: + tickets: Tickets + list: Listado + ticketCreate: Nuevo ticket + summary: Resumen + basicData: Datos básicos + boxing: Encajado + sms: Sms + notes: Notas + list: + nickname: Alias + state: Estado + shipped: Enviado + landed: Entregado + salesPerson: Comercial + total: Total + card: + ticketId: ID ticket + state: Estado + customerId: ID cliente + salesPerson: Comercial + agency: Agencia + shipped: Enviado + warehouse: Almacén + customerCard: Ficha del cliente + alias: Alias + boxing: + expedition: Expedición + item: Artículo + created: Creado + worker: Trabajador + selectTime: 'Seleccionar hora:' + selectVideo: 'Seleccionar vídeo:' + notFound: No hay vídeos disponibles + summary: + state: Estado + salesPerson: Comercial + agency: Agencia + zone: Zona + warehouse: Almacén + route: Ruta + invoice: Factura + shipped: Enviado + landed: Entregado + consigneePhone: Tel. consignatario + consigneeMobile: Móv. consignatario + clientPhone: Tel. cliente + clientMobile: Móv. cliente + consignee: Consignatario + subtotal: Subtotal + vat: IVA + total: Total + saleLines: Líneas del pedido + item: Artículo + visible: Visible + available: Disponible + quantity: Cantidad + price: Precio + discount: Descuento + packing: Encajado + hasComponentLack: Faltan componentes + itemShortage: No visible + claim: Reclamación + reserved: Reservado + created: Fecha creación + package: Embalaje + taxClass: Tipo IVA + services: Servicios + changeState: Cambiar estado + requester: Solicitante + atender: Comprador + request: Petición de compra + weight: Peso + goTo: Ir a + summaryAmount: Resumen +claim: + pageTitles: + claims: Reclamaciones + list: Listado + claimCreate: Crear reclamación + summary: Resumen + basicData: Datos básicos + lines: Líneas + development: Trazabilidad + photos: Fotos + log: Historial + notes: Notas + action: Acción + list: + customer: Cliente + assignedTo: Asignada a + created: Creada + state: Estado + rmaList: + code: Código + records: registros + card: + claimId: ID reclamación + assignedTo: Asignada a + created: Creada + state: Estado + ticketId: ID ticket + customerSummary: Resumen del cliente + claimedTicket: Ticket reclamado + saleTracking: Líneas preparadas + ticketTracking: Estados del ticket + commercial: Comercial + province: Provincia + zone: Zona + customerId: ID del cliente + summary: + customer: Cliente + assignedTo: Asignada a + attendedBy: Atendida por + created: Creada + state: Estado + details: Detalles + item: Artículo + landed: Entregado + quantity: Cantidad + claimed: Reclamado + price: Precio + discount: Descuento + total: Total + actions: Acciones + responsibility: Responsabilidad + company: Empresa + person: Comercial/Cliente + notes: Observaciones + photos: Fotos + development: Trazabilidad + reason: Motivo + result: Consecuencias + responsible: Responsable + worker: Trabajador + redelivery: Devolución + basicData: + customer: Cliente + assignedTo: Asignada a + created: Creada + state: Estado + pickup: Recogida + null: No + agency: Agencia + delivery: Reparto + photo: + fileDescription: 'Reclamacion ID {claimId} del cliente {clientName} id {clientId}' + noData: No hay imágenes/videos haz click aquí o arrastra y suelta el archivo + dragDrop: Arrástralo y sueltalo aquí +invoiceOut: + pageTitles: + invoiceOuts: Fact. emitidas + list: Listado + negativeBases: Bases Negativas + globalInvoicing: Facturación global + invoiceOutCreate: Crear fact. emitida + summary: Resumen + basicData: Datos básicos + list: + ref: Referencia + issued: Fecha emisión + shortIssued: F. emisión + client: Cliente + created: Fecha creación + shortCreated: F. creación + company: Empresa + dued: Fecha vencimineto + shortDued: F. vencimiento + amount: Importe + card: + issued: Fecha emisión + client: Cliente + company: Empresa + customerCard: Ficha del cliente + ticketList: Listado de tickets + summary: + issued: Fecha + created: Fecha creación + dued: Vencimiento + booked: Contabilizada + company: Empresa + taxBreakdown: Desglose impositivo + type: Tipo + taxableBase: Base imp. + rate: Tarifa + fee: Cuota + tickets: Tickets + ticketId: Id ticket + nickname: Alias + shipped: F. envío + totalWithVat: Importe + globalInvoices: + errors: + chooseValidClient: Selecciona un cliente válido + chooseValidCompany: Selecciona una empresa válida + chooseValidPrinter: Selecciona una impresora 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 + table: + client: Cliente + addressId: Id dirección + streetAddress: Dirección fiscal + statusCard: + percentageText: '{getPercentage}% {getAddressNumber} de {getNAddresses}' + pdfsNumberText: '{nPdfs} de {totalPdfs} PDFs' + negativeBases: + from: Desde + to: Hasta + company: Empresa + country: País + clientId: Id cliente + client: Cliente + amount: Importe + base: Base + ticketId: Id ticket + active: Activo + hasToInvoice: Facturar + verifiedData: Datos comprobados + comercial: Comercial + errors: + downloadCsvFailed: Error al descargar CSV +order: + pageTitles: + order: Cesta + orderList: Listado + orderCreate: Nueva orden + summary: Resumen + basicData: Datos básicos + catalog: Catálogo + volume: Volumen + lines: Líneas + field: + salesPersonFk: Comercial + clientFk: Cliente + isConfirmed: Confirmada + created: Creado + landed: F. entrega + hour: Hora + agency: Agencia + total: Total + form: + clientFk: Cliente + addressFk: Dirección + landed: F. entrega + agencyModeFk: Agencia + list: + newOrder: Nuevo Pedido + summary: + basket: Cesta + nickname: Alias + company: Empresa + confirmed: Confirmada + notConfirmed: No confirmada + created: Creado + landed: F. entrega + phone: Teléfono + createdFrom: Creado desde + address: Dirección + notes: Notas + subtotal: Subtotal + total: Total + vat: IVA + state: Estado + alias: Alias + items: Items + orderTicketList: Tickets del pedido + details: Detalles + item: Item + quantity: Cantidad + price: Precio + amount: Monto +shelving: + pageTitles: + shelving: Carros + shelvingList: Listado de carros + shelvingCreate: Nuevo carro + summary: Resumen + basicData: Datos básicos + log: Historial + list: + parking: Parking + priority: Prioridad + newShelving: Nuevo Carro + summary: + code: Código + parking: Parking + priority: Prioridad + worker: Trabajador + recyclable: Reciclable + basicData: + code: Código + parking: Parking + priority: Prioridad + recyclable: Reciclable +parking: + pickingOrder: Orden de recogida + row: Fila + column: Columna + pageTitles: + parking: Parking + searchBar: + info: Puedes buscar por código de parking + label: Buscar parking... +invoiceIn: + pageTitles: + invoiceIns: Fact. recibidas + list: Listado + invoiceInCreate: Crear fact. recibida + summary: Resumen + basicData: Datos básicos + vat: IVA + dueDay: Vencimiento + intrastat: Intrastat + corrective: Rectificativa + log: Historial + list: + ref: Referencia + supplier: Proveedor + supplierRef: Ref. proveedor + serialNumber: Num. serie + shortIssued: F. emisión + serial: Serie + file: Fichero + issued: Fecha emisión + isBooked: Conciliada + awb: AWB + amount: Importe + card: + issued: Fecha emisión + amount: Importe + client: Cliente + company: Empresa + customerCard: Ficha del cliente + ticketList: Listado de tickets + vat: Iva + dueDay: Fecha de vencimiento + summary: + supplier: Proveedor + supplierRef: Ref. proveedor + currency: Divisa + docNumber: Número documento + issued: Fecha de expedición + operated: Fecha operación + bookEntried: Fecha asiento + bookedDate: Fecha contable + sage: Retención sage + vat: Iva no deducible + company: Empresa + booked: Contabilizada + expense: Gasto + taxableBase: Base imp. + rate: Tasa + sageTransaction: Sage transación + dueDay: Fecha + bank: Caja + amount: Importe + foreignValue: Divisa + dueTotal: Vencimiento + code: Código + net: Neto + stems: Tallos + country: País +department: + pageTitles: + basicData: Basic data + department: Departamentos + summary: Resumen + name: Nombre + code: Código + chat: Chat + bossDepartment: Jefe de departamento + email: Email + selfConsumptionCustomer: Cliente autoconsumo + telework: Teletrabaja + notifyOnErrors: Notificar errores + worksInProduction: Pertenece a producción + hasToRefill: Completar días sin registros físicos + hasToSendMail: Enviar fichadas por mail + departmentRemoved: Departamento eliminado +worker: + pageTitles: + workers: Trabajadores + list: Listado + basicData: Datos básicos + summary: Resumen + notifications: Notificaciones + workerCreate: Nuevo trabajador + department: Departamentos + pda: PDA + notes: Notas + dms: Mi documentación + pbx: Centralita + log: Historial + calendar: Calendario + list: + name: Nombre + email: Email + phone: Teléfono + mobile: Móvil + active: Activo + department: Departamento + schedule: Horario + newWorker: Nuevo trabajador + card: + workerId: ID Trabajador + name: Nombre + email: Email + phone: Teléfono + mobile: Móvil + active: Activo + warehouse: Almacén + agency: Empresa + salesPerson: Comercial + summary: + basicData: Datos básicos + boss: Jefe + phoneExtension: Extensión de teléfono + entPhone: Teléfono de empresa + personalPhone: Teléfono personal + noBoss: Sin jefe + userData: Datos de usuario + userId: ID del usuario + role: Rol + sipExtension: Extensión + locker: Taquilla + notificationsManager: + activeNotifications: Notificaciones activas + availableNotifications: Notificaciones disponibles + subscribed: Se ha suscrito a la notificación + unsubscribed: Se ha dado de baja de la notificación + pda: + newPDA: Nueva PDA + currentPDA: PDA Actual + model: Modelo + serialNumber: Número de serie + removePDA: Desasignar PDA + create: + name: Nombre + lastName: Apellido + birth: Fecha de nacimiento + fi: DNI/NIF/NIE + code: Código de trabajador + phone: Teléfono + postcode: Código postal + province: Provincia + city: Población + street: Dirección + webUser: Usuario Web + personalEmail: Correo personal + company: Empresa + boss: Jefe + payMethods: Método de pago + iban: IBAN + bankEntity: Swift / BIC + imageNotFound: No se ha encontrado la imagen +wagon: + pageTitles: + wagons: Vagones + wagonsList: Listado vagones + wagonCreate: Crear tipo + wagonEdit: Editar tipo + typesList: Listado tipos + typeCreate: Crear tipo + typeEdit: Editar tipo + wagonCounter: Contador de carros + type: + name: Nombre + submit: Guardar + reset: Deshacer cambios + trayColor: Color de la bandeja + removeItem: Tipo de vagón borrado correctamente + list: + plate: Matrícula + volume: Volumen + type: Tipo + remove: Borrar + removeItem: Vagón borrado correctamente + create: + plate: Matrícula + volume: Volumen + type: Tipo + label: Etiqueta + warnings: + noData: Sin datos disponibles + nameNotEmpty: El nombre no puede estar vacío + labelNotEmpty: La etiqueta no puede estar vacía + plateNotEmpty: La matrícula no puede estar vacía + volumeNotEmpty: El volumen no puede estar vacío + typeNotEmpty: El tipo no puede estar vacío + maxTrays: Has alcanzado el número máximo de bandejas + minHeightBetweenTrays: 'La distancia mínima entre bandejas es ' + maxWagonHeight: 'La altura máxima del vagón es ' + uncompleteTrays: Hay bandejas sin completar +route/roadmap: + pageTitles: + roadmap: Troncales + summary: Resumen + basicData: Datos básicos + stops: Paradas +roadmap: + pageTitles: + roadmap: Troncales + summary: Resumen + basicData: Datos básicos + stops: Paradas +route: + pageTitles: + routes: Rutas + cmrsList: Listado de CMRs externos + RouteList: Listado + routeCreate: Nueva ruta + basicData: Datos básicos + summary: Resumen + RouteRoadmap: Troncales + RouteRoadmapCreate: Crear troncal + tickets: Tickets + log: Historial + autonomous: Autónomos + cmr: + list: + results: resultados + cmrFk: Id CMR + hasCmrDms: Adjuntado en gestdoc + 'true': Sí + 'false': 'No' + ticketFk: Id ticket + routeFk: Id ruta + country: País + clientFk: Id cliente + shipped: Fecha preparación + viewCmr: Ver CMR + downloadCmrs: Descargar CMRs +supplier: + pageTitles: + suppliers: Proveedores + supplier: Proveedor + list: Listado + supplierCreate: Nuevo proveedor + summary: Resumen + basicData: Datos básicos + fiscalData: Datos fiscales + billingData: Forma de pago + log: Historial + accounts: Cuentas + contacts: Contactos + addresses: Direcciones + consumption: Consumo + agencyTerm: Acuerdo agencia + dms: Gestión documental + list: + payMethod: Método de pago + payDeadline: Plazo de pago + payDay: Día de pago + account: Cuenta + newSupplier: Nuevo proveedor + summary: + responsible: Responsable + notes: Notas + verified: Verificado + isActive: Está activo + billingData: Forma de pago + payMethod: Método de pago + payDeadline: Plazo de pago + payDay: Día de pago + account: Cuenta + fiscalData: Datos fiscales + sageTaxType: Tipo de impuesto Sage + sageTransactionType: Tipo de transacción Sage + sageWithholding: Retención sage + supplierActivity: Actividad proveedor + healthRegister: Pasaporte sanitario + fiscalAddress: Dirección fiscal + socialName: Razón social + taxNumber: NIF/CIF + street: Dirección + city: Población + postCode: Código postal + province: Provincia + country: País + create: + supplierName: Nombre del proveedor + basicData: + alias: Alias + workerFk: Responsable + isSerious: Verificado + isActive: Activo + isPayMethodChecked: Método de pago validado + note: Notas + fiscalData: + name: Razón social * + nif: NIF/CIF * + account: Cuenta + sageTaxTypeFk: Tipo de impuesto sage + sageWithholdingFk: Retención sage + sageTransactionTypeFk: Tipo de transacción sage + supplierActivityFk: Actividad proveedor + healthRegister: Pasaporte sanitario + street: Calle + postcode: Código postal + city: Población * + provinceFk: Provincia + country: País + isTrucker: Transportista + isVies: Vies + billingData: + payMethodFk: Forma de pago + payDemFk: Plazo de pago + payDay: Día de pago + accounts: + iban: Iban + bankEntity: Entidad bancaria + beneficiary: Beneficiario + contacts: + name: Nombre + phone: Teléfono + mobile: Móvil + email: Email + observation: Notas + addresses: + street: Dirección + postcode: Código postal + phone: Teléfono + name: Nombre + city: Población + province: Provincia + mobile: Móvil + agencyTerms: + agencyFk: Agencia + minimumM3: M3 mínimos + packagePrice: Precio bulto + kmPrice: Precio Km + m3Price: Precio M3 + routePrice: Precio ruta + minimumKm: Km mínimos + addRow: Añadir fila + consumption: + entry: Entrada + date: Fecha + reference: Referencia +travel: + pageTitles: + travel: Envíos + list: Listado + create: Crear + summary: Resumen + extraCommunity: Extra comunitarios + travelCreate: Nuevo envío + basicData: Datos básicos + history: Historial + thermographs: Termógrafos + summary: + confirmed: Confirmado + entryId: Id entrada + freight: Porte + package: Embalaje + delivered: Enviada + received: Recibida + entries: Entradas + cloneShipping: Clonar envío + CloneTravelAndEntries: Clonar travel y sus entradas + deleteTravel: Eliminar envío + AddEntry: Añadir entrada + thermographs: Termógrafos + hb: HB + variables: + search: Id/Referencia + agencyModeFk: Agencia + warehouseInFk: Alm. entrada + warehouseOutFk: ' Alm. salida' + landedFrom: Llegada desde + landedTo: Llegada hasta + continent: Cont. Salida + totalEntries: Ent. totales + basicData: + reference: Referencia + agency: Agencia + shipped: F. Envío + landed: F. entrega + warehouseOut: Alm. salida + warehouseIn: Alm. entrada + delivered: Enviada + received: Recibida + thermographs: + code: Código + temperature: Temperatura + state: Estado + destination: Destino + created: Fecha creación + thermograph: Termógrafo + reference: Referencia + type: Tipo + company: Empresa + warehouse: Almacén + travelFileDescription: 'Id envío { travelId }' + file: Fichero +item: + pageTitles: + items: Artículos + list: Listado + diary: Histórico + tags: Etiquetas + wasteBreakdown: Deglose de mermas + itemCreate: Nuevo artículo + descriptor: + item: Artículo + buyer: Comprador + color: Color + category: Categoría + stems: Tallos + visible: Visible + available: Disponible + warehouseText: 'Calculado sobre el almacén de { warehouseName }' + itemDiary: Registro de compra-venta + list: + id: Identificador + grouping: Grouping + packing: Packing + description: Descripción + stems: Tallos + category: Reino + typeName: Tipo + intrastat: Intrastat + isActive: Activo + size: Medida + origin: Origen + weightByPiece: Peso (gramos)/tallo + userName: Comprador + stemMultiplier: Multiplicador + producer: Productor + landed: F. entrega + create: + name: Nombre + tag: Etiqueta + priority: Prioridad + type: Tipo + intrastat: Intrastat + origin: Origen +components: + topbar: {} + userPanel: + copyToken: Token copiado al portapapeles + settings: Configuración + logOut: Cerrar sesión + localWarehouse: Almacén local + localBank: Banco local + localCompany: Empresa local + userWarehouse: Almacén del usuario + userCompany: Empresa del usuario + smartCard: + downloadFile: Descargar archivo + clone: Clonar + openCard: Ficha + openSummary: Detalles + cardDescriptor: + mainList: Listado principal + summary: Resumen + moreOptions: 'Más opciones' + leftMenu: + addToPinned: Añadir a fijados + removeFromPinned: Eliminar de fijados + VnLv: + copyText: '{copyValue} se ha copiado al portapepeles' + iban_tooltip: 'IBAN: ES21 1234 5678 90 0123456789' +weekdays: + sun: Domingo + mon: Lunes + tue: Martes + wed: Miércoles + thu: Jueves + fri: Viernes + sat: Sábado +months: + jan: Enero + feb: Febrero + mar: Marzo + apr: Abril + may: Mayo + jun: Junio + jul: Julio + aug: Agosto + sep: Septiembre + oct: Octubre + nov: Noviembre + dec: Diciembre diff --git a/src/pages/Customer/locale/en.yml b/src/pages/Customer/locale/en.yml index 6eb7cfa85..67bfa6622 100644 --- a/src/pages/Customer/locale/en.yml +++ b/src/pages/Customer/locale/en.yml @@ -1,4 +1,4 @@ customerFilter: filter: - name: Name - socialName: Social name + name: 'Name' + socialName: 'Social name' diff --git a/src/pages/Customer/locale/es.yml b/src/pages/Customer/locale/es.yml index 8fed37092..ec1981257 100644 --- a/src/pages/Customer/locale/es.yml +++ b/src/pages/Customer/locale/es.yml @@ -1,4 +1,4 @@ customerFilter: filter: - name: Nombre - socialName: Razón Social + name: 'Nombre' + socialName: 'Razón Social' diff --git a/src/pages/Entry/Card/EntryBuys.vue b/src/pages/Entry/Card/EntryBuys.vue index 0208b49ba..3b39840c8 100644 --- a/src/pages/Entry/Card/EntryBuys.vue +++ b/src/pages/Entry/Card/EntryBuys.vue @@ -268,16 +268,11 @@ const importBuys = () => { const toggleGroupingMode = async (buy, mode) => { try { - const grouping = 1; - const packing = 2; - const groupingMode = mode === 'grouping' ? grouping : packing; - - const newGroupingMode = buy.groupingMode === groupingMode ? 0 : groupingMode; - + const groupingMode = mode === 'grouping' ? mode : 'packing'; + const newGroupingMode = buy.groupingMode === groupingMode ? null : groupingMode; const params = { groupingMode: newGroupingMode, }; - await axios.patch(`Buys/${buy.id}`, params); buy.groupingMode = newGroupingMode; } catch (err) { @@ -287,9 +282,9 @@ const toggleGroupingMode = async (buy, mode) => { const lockIconType = (groupingMode, mode) => { if (mode === 'packing') { - return groupingMode === 2 ? 'lock' : 'lock_open'; + return groupingMode === 'packing' ? 'lock' : 'lock_open'; } else { - return groupingMode === 1 ? 'lock' : 'lock_open'; + return groupingMode === 'grouping' ? 'lock' : 'lock_open'; } }; diff --git a/src/pages/Item/Card/ItemBasicData.vue b/src/pages/Item/Card/ItemBasicData.vue new file mode 100644 index 000000000..334cf049d --- /dev/null +++ b/src/pages/Item/Card/ItemBasicData.vue @@ -0,0 +1 @@ + diff --git a/src/pages/Item/ItemCreate.vue b/src/pages/Item/ItemCreate.vue index e20f67ac3..18e7522cb 100644 --- a/src/pages/Item/ItemCreate.vue +++ b/src/pages/Item/ItemCreate.vue @@ -1 +1,170 @@ - + + + diff --git a/src/pages/Supplier/Card/SupplierSummary.vue b/src/pages/Supplier/Card/SupplierSummary.vue index 9d00ba8f7..4cd1f46f5 100644 --- a/src/pages/Supplier/Card/SupplierSummary.vue +++ b/src/pages/Supplier/Card/SupplierSummary.vue @@ -1,10 +1,9 @@