fixes #4793-models_translation #1148

Merged
vicent merged 18 commits from 4793-models_translation into dev 2022-11-24 11:03:09 +00:00
9 changed files with 127 additions and 10 deletions

View File

@ -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);

View File

@ -19,6 +19,7 @@
-- Current Database: `account`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `account` /*!40100 DEFAULT CHARACTER SET utf8mb3 */;
USE `account`;

View File

@ -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;
}

View File

@ -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`);
vicent marked this conversation as resolved
Review

Se puede utilizar vn-loopback/modules

Se puede utilizar vn-loopback/modules
Review

Como? La carpeta modules no esta dentro de la carpeta loopback.

Como? La carpeta modules no esta dentro de la carpeta loopback.
Review

Tras hablarlo con Joan se queda como estaba. Pq la carpeta models no tiene un package.json.

Tras hablarlo con Joan se queda como estaba. Pq la carpeta models no tiene un package.json.
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
};
}

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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