diff --git a/db/dump/fixtures.sql b/db/dump/fixtures.sql index ac7900f708..482218ed24 100644 --- a/db/dump/fixtures.sql +++ b/db/dump/fixtures.sql @@ -2732,3 +2732,7 @@ UPDATE `account`.`user` INSERT INTO `vn`.`osTicketConfig` (`id`, `host`, `user`, `password`, `oldStatus`, `newStatusId`, `day`, `comment`, `hostDb`, `userDb`, `passwordDb`, `portDb`, `responseType`, `fromEmailId`, `replyTo`) VALUES (0, 'http://localhost:56596/scp', 'ostadmin', 'Admin1', 'open', 3, 60, 'Este CAU se ha cerrado automáticamente. Si el problema persiste responda a este mensaje.', 'localhost', 'osticket', 'osticket', 40003, 'reply', 1, 'all'); + +INSERT INTO `vn`.`ticketLog` (`id`, `originFk`, `userFk`, `action`, `changedModel`, `oldInstance`, `newInstance`, `changedModelId`) + VALUES + (1, 1, 9, 'insert', 'Ticket', '{}', '{"clientFk":1, "nickname": "Bat cave"}', 1); \ No newline at end of file diff --git a/db/dump/structure.sql b/db/dump/structure.sql index 9f2370832b..6d85d0511f 100644 --- a/db/dump/structure.sql +++ b/db/dump/structure.sql @@ -19,6 +19,7 @@ -- Current Database: `account` -- + CREATE DATABASE /*!32312 IF NOT EXISTS*/ `account` /*!40100 DEFAULT CHARACTER SET utf8mb3 */; USE `account`; diff --git a/front/salix/components/log/index.js b/front/salix/components/log/index.js index c5a4febcc8..2796931a07 100644 --- a/front/salix/components/log/index.js +++ b/front/salix/components/log/index.js @@ -33,16 +33,18 @@ export default class Controller extends Section { set logs(value) { this._logs = value; + if (!value) return; - if (this.logs) { - this.logs.forEach(log => { - log.oldProperties = this.getInstance(log.oldInstance); - log.newProperties = this.getInstance(log.newInstance); - }); - } + const validations = window.validations; + value.forEach(log => { + const locale = validations[log.changedModel].locale ? validations[log.changedModel].locale : {}; + + log.oldProperties = this.getInstance(log.oldInstance, locale); + log.newProperties = this.getInstance(log.newInstance, locale); + }); } - getInstance(instance) { + getInstance(instance, locale) { const properties = []; let validDate = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/; @@ -51,7 +53,8 @@ export default class Controller extends Section { if (validDate.test(instance[property])) instance[property] = new Date(instance[property]).toLocaleString('es-ES'); - properties.push({key: property, value: instance[property]}); + const key = locale[property] || property; + properties.push({key, value: instance[property]}); }); return properties; } diff --git a/loopback/common/methods/schema/model-info.js b/loopback/common/methods/schema/model-info.js index a95b60627a..6a4db033d5 100644 --- a/loopback/common/methods/schema/model-info.js +++ b/loopback/common/methods/schema/model-info.js @@ -1,3 +1,5 @@ +const path = require('path'); +const fs = require('fs'); module.exports = Self => { Self.remoteMethod('modelInfo', { @@ -19,6 +21,42 @@ module.exports = Self => { } }); + const modelsLocale = new Map(); + const modulesDir = path.resolve(`${__dirname}/../../../../modules`); + const modules = fs.readdirSync(modulesDir); + + for (const mod of modules) { + const modelsDir = path.join(modulesDir, mod, `back/locale`); + if (!fs.existsSync(modelsDir)) continue; + const models = fs.readdirSync(modelsDir); + + for (const model of models) { + const localeDir = path.join(modelsDir, model); + const localeFiles = fs.readdirSync(localeDir); + + let modelName = model.charAt(0).toUpperCase() + model.substring(1); + modelName = modelName.replace(/-\w/g, match => { + return match.charAt(1).toUpperCase(); + }); + + const modelLocale = new Map(); + modelsLocale.set(modelName, modelLocale); + + for (const localeFile of localeFiles) { + const localePath = path.join(localeDir, localeFile); + + const match = localeFile.match(/^([a-z]+)\.yml$/); + if (!match) { + console.warn(`Skipping wrong model locale file: ${localeFile}`); + continue; + } + + const translations = require(localePath); + modelLocale.set(match[1], translations); + } + } + } + Self.modelInfo = async function(ctx) { let json = {}; let models = Self.app.models; @@ -49,9 +87,14 @@ module.exports = Self => { jsonValidations[fieldName] = jsonField; } + const modelLocale = modelsLocale.get(modelName); + const lang = ctx.req.getLocale(); + const locale = modelLocale && modelLocale.get(lang); + json[modelName] = { properties: model.definition.rawProperties, - validations: jsonValidations + validations: jsonValidations, + locale }; } diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js index ededc5679b..02f982011c 100644 --- a/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js +++ b/modules/invoiceOut/back/methods/invoiceOut/specs/filter.spec.js @@ -64,7 +64,7 @@ describe('InvoiceOut filter()', () => { const invoiceOut = await models.InvoiceOut.findById(1, null, options); await invoiceOut.updateAttribute('hasPdf', true, options); - const result = await models.InvoiceOut.filter(ctx, {}, options); + const result = await models.InvoiceOut.filter(ctx, {id: invoiceOut.id}, options); expect(result.length).toEqual(1); diff --git a/modules/ticket/back/locale/sale/en.yml b/modules/ticket/back/locale/sale/en.yml new file mode 100644 index 0000000000..ae8f67d5ef --- /dev/null +++ b/modules/ticket/back/locale/sale/en.yml @@ -0,0 +1,11 @@ +concept: concept +quantity: quantity +price: price +discount: discount +reserved: reserved +isPicked: is picked +created: created +originalQuantity: original quantity +itemFk: item +ticketFk: ticket +saleFk: sale diff --git a/modules/ticket/back/locale/sale/es.yml b/modules/ticket/back/locale/sale/es.yml new file mode 100644 index 0000000000..ff8cc54669 --- /dev/null +++ b/modules/ticket/back/locale/sale/es.yml @@ -0,0 +1,11 @@ +concept: concepto +quantity: cantidad +price: precio +discount: descuento +reserved: reservado +isPicked: esta seleccionado +created: creado +originalQuantity: cantidad original +itemFk: artículo +ticketFk: ticket +saleFk: línea diff --git a/modules/ticket/back/locale/ticket/en.yml b/modules/ticket/back/locale/ticket/en.yml new file mode 100644 index 0000000000..4e97f5d8cb --- /dev/null +++ b/modules/ticket/back/locale/ticket/en.yml @@ -0,0 +1,22 @@ +shipped: shipped +landed: landed +nickname: nickname +location: location +solution: solution +packages: packages +updated: updated +isDeleted: is deleted +priority: priority +zoneFk: zone +zonePrice: zone price +zoneBonus: zone bonus +totalWithVat: total with vat +totalWithoutVat: total without vat +clientFk: client +warehouseFk: warehouse +refFk: reference +addressFk: address +routeFk: route +companyFk: company +agencyModeFk: agency +ticketFk: ticket diff --git a/modules/ticket/back/locale/ticket/es.yml b/modules/ticket/back/locale/ticket/es.yml new file mode 100644 index 0000000000..a570f1f118 --- /dev/null +++ b/modules/ticket/back/locale/ticket/es.yml @@ -0,0 +1,22 @@ +shipped: fecha salida +landed: fecha entrega +nickname: alias +location: ubicación +solution: solución +packages: embalajes +updated: fecha última actualización +isDeleted: esta eliminado +priority: prioridad +zoneFk: zona +zonePrice: precio zona +zoneBonus: bonus zona +totalWithVat: total con IVA +totalWithoutVat: total sin IVA +clientFk: cliente +warehouseFk: almacén +refFk: referencia +addressFk: dirección +routeFk: ruta +companyFk: empresa +agencyModeFk: agencia +ticketFk: ticket