Merge pull request 'fixes #4793-models_translation' (!1148) from 4793-models_translation into dev
gitea/salix/pipeline/head There was a failure building this commit
Details
gitea/salix/pipeline/head There was a failure building this commit
Details
Reviewed-on: #1148 Reviewed-by: Joan Sanchez <joan@verdnatura.es>
This commit is contained in:
commit
8e74ddf267
|
@ -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);
|
|
@ -19,6 +19,7 @@
|
|||
-- Current Database: `account`
|
||||
--
|
||||
|
||||
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `account` /*!40100 DEFAULT CHARACTER SET utf8mb3 */;
|
||||
|
||||
USE `account`;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue