diff --git a/back/methods/vn-user/renew-token.js b/back/methods/vn-user/renew-token.js
index ae2d36e3e..f3e5c16e4 100644
--- a/back/methods/vn-user/renew-token.js
+++ b/back/methods/vn-user/renew-token.js
@@ -30,17 +30,8 @@ module.exports = Self => {
// Schedule to remove current token
setTimeout(async() => {
- let exists;
- try {
- exists = await models.AccessToken.findById(token.id);
- exists && await Self.logout(token.id);
- } catch (error) {
- // eslint-disable-next-line no-console
- console.error(error);
- const body = {error: error.message, now: Date.now(), userId: token?.userId ?? null, exists};
- await handleError(body);
- throw new Error(error);
- }
+ if (await models.AccessToken.findById(token.id))
+ await Self.logout(token.id);
}, courtesyTime * 1000);
// Get scopes
@@ -53,14 +44,20 @@ module.exports = Self => {
return {id: accessToken.id, ttl: accessToken.ttl};
} catch (error) {
- const body = {error: error.message, now: Date.now(), userId: token?.userId ?? null, createTokenOptions, isNotExceeded};
- await handleError(body);
+ const body = {
+ error: error.message,
+ userId: token?.userId ?? null,
+ token: token?.id,
+ scopes: token?.scopes,
+ createTokenOptions,
+ isNotExceeded
+ };
+ await handleError(JSON.stringify(body));
throw new Error(error);
}
};
};
-async function handleError(body, tag = 'renewToken') {
- body = JSON.stringify(body);
- await models.Application.rawSql('CALL util.debugAdd(?,?);', [tag, body]);
+async function handleError(body) {
+ await models.Application.rawSql('CALL util.debugAdd(?,?);', ['renewToken', body]);
}
diff --git a/back/methods/vn-user/sign-in.js b/back/methods/vn-user/sign-in.js
index 782046641..775970d55 100644
--- a/back/methods/vn-user/sign-in.js
+++ b/back/methods/vn-user/sign-in.js
@@ -67,7 +67,9 @@ module.exports = Self => {
if (vnUser.twoFactor === 'email') {
const $ = Self.app.models;
- const code = String(Math.floor(Math.random() * 999999));
+ const min = 100000;
+ const max = 999999;
+ const code = String(Math.floor(Math.random() * (max - min + 1)) + min);
const maxTTL = ((60 * 1000) * 5); // 5 min
await $.AuthCode.upsertWithWhere({userFk: vnUser.id}, {
userFk: vnUser.id,
diff --git a/back/methods/vn-user/update-user.js b/back/methods/vn-user/update-user.js
index ddaae8548..202b01c65 100644
--- a/back/methods/vn-user/update-user.js
+++ b/back/methods/vn-user/update-user.js
@@ -24,6 +24,10 @@ module.exports = Self => {
arg: 'lang',
type: 'string',
description: 'The user lang'
+ }, {
+ arg: 'twoFactor',
+ type: 'string',
+ description: 'The user twoFactor'
}
],
http: {
@@ -32,8 +36,8 @@ module.exports = Self => {
}
});
- Self.updateUser = async(ctx, id, name, nickname, email, lang) => {
+ Self.updateUser = async(ctx, id, name, nickname, email, lang, twoFactor) => {
await Self.userSecurity(ctx, id);
- await Self.upsertWithWhere({id}, {name, nickname, email, lang});
+ await Self.upsertWithWhere({id}, {name, nickname, email, lang, twoFactor});
};
};
diff --git a/back/methods/vn-user/validate-auth.js b/back/methods/vn-user/validate-auth.js
index beab43417..8fb8b4923 100644
--- a/back/methods/vn-user/validate-auth.js
+++ b/back/methods/vn-user/validate-auth.js
@@ -58,7 +58,7 @@ module.exports = Self => {
fields: ['name', 'twoFactor']
}, myOptions);
- if (user.name !== username)
+ if (user.name.toLowerCase() !== username.toLowerCase())
throw new UserError('Authentication failed');
await authCode.destroy(myOptions);
diff --git a/back/methods/workerActivity/add.js b/back/methods/workerActivity/add.js
new file mode 100644
index 000000000..4592a0797
--- /dev/null
+++ b/back/methods/workerActivity/add.js
@@ -0,0 +1,50 @@
+module.exports = Self => {
+ Self.remoteMethodCtx('add', {
+ description: 'Add activity if the activity is different or is the same but have exceed time for break',
+ accessType: 'WRITE',
+ accepts: [
+ {
+ arg: 'code',
+ type: 'string',
+ description: 'Code for activity'
+ },
+ {
+ arg: 'model',
+ type: 'string',
+ description: 'Origin model from insert'
+ },
+
+ ],
+ http: {
+ path: `/add`,
+ verb: 'POST'
+ }
+ });
+
+ Self.add = async(ctx, code, model, options) => {
+ const userId = ctx.req.accessToken.userId;
+ const myOptions = {};
+
+ if (typeof options == 'object')
+ Object.assign(myOptions, options);
+
+ return await Self.rawSql(`
+ INSERT INTO workerActivity (workerFk, workerActivityTypeFk, model)
+ SELECT ?, ?, ?
+ FROM workerTimeControlParams wtcp
+ LEFT JOIN (
+ SELECT wa.workerFk,
+ wa.created,
+ wat.code
+ FROM workerActivity wa
+ LEFT JOIN workerActivityType wat ON wat.code = wa.workerActivityTypeFk
+ WHERE wa.workerFk = ?
+ ORDER BY wa.created DESC
+ LIMIT 1
+ ) sub ON TRUE
+ WHERE sub.workerFk IS NULL
+ OR sub.code <> ?
+ OR TIMESTAMPDIFF(SECOND, sub.created, util.VN_NOW()) > wtcp.dayBreak;`
+ , [userId, code, model, userId, code], myOptions);
+ };
+};
diff --git a/back/methods/workerActivity/specs/add.spec.js b/back/methods/workerActivity/specs/add.spec.js
new file mode 100644
index 000000000..352d67723
--- /dev/null
+++ b/back/methods/workerActivity/specs/add.spec.js
@@ -0,0 +1,30 @@
+const {models} = require('vn-loopback');
+
+describe('workerActivity insert()', () => {
+ const ctx = beforeAll.getCtx(1106);
+
+ it('should insert in workerActivity', async() => {
+ const tx = await models.WorkerActivity.beginTransaction({});
+ let count = 0;
+ const options = {transaction: tx};
+
+ try {
+ await models.WorkerActivityType.create(
+ {'code': 'STOP', 'description': 'STOP'}, options
+ );
+
+ await models.WorkerActivity.add(ctx, 'STOP', 'APP', options);
+
+ count = await models.WorkerActivity.count(
+ {'workerFK': 1106}, options
+ );
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+
+ expect(count).toEqual(1);
+ });
+});
diff --git a/back/model-config.json b/back/model-config.json
index 13c06ef54..cb9ee4fdb 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -118,6 +118,9 @@
"NotificationSubscription": {
"dataSource": "vn"
},
+ "OrmConfig": {
+ "dataSource": "vn"
+ },
"Province": {
"dataSource": "vn"
},
diff --git a/back/models/ormConfig.json b/back/models/ormConfig.json
new file mode 100644
index 000000000..ef4c2b181
--- /dev/null
+++ b/back/models/ormConfig.json
@@ -0,0 +1,26 @@
+{
+ "name": "OrmConfig",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "ormConfig"
+ }
+ },
+ "properties": {
+ "id": {
+ "type": "number",
+ "id": true
+ },
+ "selectLimit": {
+ "type": "number"
+ }
+ },
+ "acls": [
+ {
+ "accessType": "*",
+ "principalType": "ROLE",
+ "principalId": "$authenticated",
+ "permission": "ALLOW"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/back/models/vn-user.js b/back/models/vn-user.js
index 6ec5642a2..531561e04 100644
--- a/back/models/vn-user.js
+++ b/back/models/vn-user.js
@@ -101,9 +101,10 @@ module.exports = function(Self) {
const headers = httpRequest.headers;
const origin = headers.origin;
- const defaultHash = '/reset-password?access_token=$token$';
+ const defaultHash = '!/reset-password?access_token=$token$';
const recoverHashes = {
- hedera: 'verificationToken=$token$'
+ hedera: '!verificationToken=$token$',
+ lilium: '/resetPassword?access_token=$token$'
};
const app = info.options?.app;
@@ -115,7 +116,7 @@ module.exports = function(Self) {
const params = {
recipient: info.email,
lang: user.lang,
- url: origin + '/#!' + recoverHash
+ url: origin + '/#' + recoverHash
};
const options = Object.assign({}, info.options);
diff --git a/back/models/workerActivity.js b/back/models/workerActivity.js
new file mode 100644
index 000000000..b3bb2c160
--- /dev/null
+++ b/back/models/workerActivity.js
@@ -0,0 +1,3 @@
+module.exports = Self => {
+ require('../methods/workerActivity/add')(Self);
+};
diff --git a/back/models/workerActivity.json b/back/models/workerActivity.json
index e3b994f77..ecd92bbce 100644
--- a/back/models/workerActivity.json
+++ b/back/models/workerActivity.json
@@ -22,18 +22,18 @@
},
"description": {
"type": "string"
+ }
+ },
+ "relations": {
+ "workerFk": {
+ "type": "belongsTo",
+ "model": "Worker",
+ "foreignKey": "workerFk"
},
- "relations": {
- "workerFk": {
- "type": "belongsTo",
- "model": "Worker",
- "foreignKey": "workerFk"
- },
- "workerActivityTypeFk": {
- "type": "belongsTo",
- "model": "WorkerActivityType",
- "foreignKey": "workerActivityTypeFk"
- }
+ "workerActivityTypeFk": {
+ "type": "belongsTo",
+ "model": "WorkerActivityType",
+ "foreignKey": "workerActivityTypeFk"
}
}
}
\ No newline at end of file
diff --git a/back/process.yml b/back/process.yml
index 08fee7a93..94072b57d 100644
--- a/back/process.yml
+++ b/back/process.yml
@@ -3,4 +3,5 @@ apps:
name: salix-back
instances: 1
max_restarts: 0
+ autorestart: false
node_args: --tls-min-v1.0 --openssl-legacy-provider
diff --git a/db/dump/.dump/data.sql b/db/dump/.dump/data.sql
index f6bc84db7..37e7835fc 100644
--- a/db/dump/.dump/data.sql
+++ b/db/dump/.dump/data.sql
@@ -3,7 +3,7 @@ USE `util`;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-INSERT INTO `version` VALUES ('vn-database','11161','36dee872d62ba2421c05503f374f6b208c40ecfa','2024-08-06 07:53:56','11180');
+INSERT INTO `version` VALUES ('vn-database','11180','2a5588f013dbb6370e15754e03a6d9f1d74188e2','2024-08-20 08:34:44','11191');
INSERT INTO `versionLog` VALUES ('vn-database','10107','00-firstScript.sql','jenkins@10.0.2.69','2022-04-23 10:53:53',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','10112','00-firstScript.sql','jenkins@10.0.2.69','2022-05-09 09:14:53',NULL,NULL);
@@ -910,9 +910,15 @@ INSERT INTO `versionLog` VALUES ('vn-database','11159','00-firstScript.sql','jen
INSERT INTO `versionLog` VALUES ('vn-database','11160','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-18 13:46:16',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11161','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-06 07:53:54',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11164','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-23 11:03:16',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11165','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-20 08:34:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11166','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-20 08:34:43',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11168','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-25 08:58:34',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11169','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-07-25 12:38:13',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11170','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-09 07:12:38',NULL,NULL);
INSERT INTO `versionLog` VALUES ('vn-database','11177','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-07-30 12:42:28',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11179','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-20 08:34:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11180','00-firstScript.sql','jenkins@db-proxy1.servers.dc.verdnatura.es','2024-08-20 08:34:43',NULL,NULL);
+INSERT INTO `versionLog` VALUES ('vn-database','11182','00-firstScript.sql','jenkins@db-proxy2.servers.dc.verdnatura.es','2024-08-09 08:19:36',NULL,NULL);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
@@ -1283,6 +1289,7 @@ INSERT INTO `roleInherit` VALUES (371,36,35,NULL);
INSERT INTO `roleInherit` VALUES (372,126,13,19295);
INSERT INTO `roleInherit` VALUES (373,131,2,19295);
INSERT INTO `roleInherit` VALUES (375,120,131,1437);
+INSERT INTO `roleInherit` VALUES (376,124,21,19336);
INSERT INTO `userPassword` VALUES (1,7,1,0,2,1);
@@ -1299,770 +1306,770 @@ USE `salix`;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-INSERT INTO `ACL` VALUES (3,'Address','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (5,'AgencyService','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (9,'ClientObservation','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (11,'ContactChannel','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (13,'Employee','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (14,'PayMethod','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (16,'FakeProduction','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (17,'Warehouse','* ','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (20,'TicketState','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (24,'Delivery','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (25,'Zone','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (26,'ClientCredit','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (27,'ClientCreditLimit','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (30,'GreugeType','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (31,'Mandate','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (32,'MandateType','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (33,'Company','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (34,'Greuge','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (35,'AddressObservation','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (36,'ObservationType','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (37,'Greuge','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (38,'AgencyMode','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (39,'ItemTag','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (40,'ItemBotanical','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (41,'ItemBotanical','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (42,'ItemPlacement','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (43,'ItemPlacement','*','WRITE','ALLOW','ROLE','replenisher');
-INSERT INTO `ACL` VALUES (44,'ItemPlacement','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (45,'ItemBarcode','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (46,'ItemBarcode','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (47,'ItemBarcode','*','WRITE','ALLOW','ROLE','replenisher');
-INSERT INTO `ACL` VALUES (51,'ItemTag','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (53,'Item','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (54,'Item','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (55,'Recovery','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (56,'Recovery','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (58,'CreditClassification','*','*','ALLOW','ROLE','insurance');
-INSERT INTO `ACL` VALUES (60,'CreditInsurance','*','*','ALLOW','ROLE','insurance');
-INSERT INTO `ACL` VALUES (61,'InvoiceOut','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (63,'TicketObservation','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (65,'Sale','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (66,'TicketTracking','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (68,'TicketPackaging','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (69,'Packaging','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (70,'Packaging','*','WRITE','ALLOW','ROLE','logistic');
-INSERT INTO `ACL` VALUES (72,'SaleComponent','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (73,'Expedition','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (74,'Expedition','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (75,'Expedition','*','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (76,'AnnualAverageInvoiced','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (77,'WorkerMana','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (78,'TicketTracking','*','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (79,'Ticket','state','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (80,'Sale','deleteSales','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (81,'Sale','moveToTicket','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (82,'Sale','updateQuantity','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (83,'Sale','updatePrice','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (84,'Sale','updateDiscount','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (85,'SaleTracking','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (86,'Order','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (87,'OrderRow','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (88,'ClientContact','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (89,'Sale','moveToNewTicket','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (90,'Sale','reserve','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (91,'TicketWeekly','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (94,'Agency','landsThatDay','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (96,'ClaimEnd','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (97,'ClaimEnd','*','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (98,'ClaimBeginning','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (99,'ClaimDevelopment','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (100,'ClaimDevelopment','*','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (102,'Claim','createFromSales','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (104,'Item','*','WRITE','ALLOW','ROLE','marketingBoss');
-INSERT INTO `ACL` VALUES (105,'ItemBarcode','*','WRITE','ALLOW','ROLE','marketingBoss');
-INSERT INTO `ACL` VALUES (106,'ItemBotanical','*','WRITE','ALLOW','ROLE','marketingBoss');
-INSERT INTO `ACL` VALUES (108,'ItemPlacement','*','WRITE','ALLOW','ROLE','marketingBoss');
-INSERT INTO `ACL` VALUES (109,'UserConfig','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (110,'Accounting','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (111,'ClientLog','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (112,'Defaulter','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (113,'ClientRisk','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (114,'Receipt','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (115,'Receipt','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (116,'BankEntity','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (117,'ClientSample','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (118,'WorkerTeam','*','*','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (119,'Travel','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (120,'Travel','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (121,'Item','regularize','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (122,'TicketRequest','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (124,'Client','confirmTransaction','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (125,'Agency','getAgenciesWithWarehouse','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (127,'TicketLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (129,'TicketService','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (130,'Expedition','*','WRITE','ALLOW','ROLE','packager');
-INSERT INTO `ACL` VALUES (131,'CreditInsurance','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (132,'CreditClassification','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (133,'ItemTag','*','WRITE','ALLOW','ROLE','marketingBoss');
-INSERT INTO `ACL` VALUES (135,'ZoneGeo','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (136,'ZoneCalendar','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (137,'ZoneIncluded','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (138,'LabourHoliday','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (139,'LabourHolidayLegend','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (140,'LabourHolidayType','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (141,'Zone','*','*','ALLOW','ROLE','logisticBoss');
-INSERT INTO `ACL` VALUES (142,'ZoneCalendar','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (143,'ZoneIncluded','*','*','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (144,'Stowaway','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (145,'Ticket','getPossibleStowaways','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (147,'UserConfigView','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (148,'UserConfigView','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (149,'Sip','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (150,'Sip','*','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (151,'Department','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (152,'Department','*','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (154,'Route','*','WRITE','ALLOW','ROLE','delivery');
-INSERT INTO `ACL` VALUES (155,'Calendar','*','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (156,'WorkerLabour','*','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (157,'Calendar','absences','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (158,'ItemTag','*','WRITE','ALLOW','ROLE','accessory');
-INSERT INTO `ACL` VALUES (160,'TicketServiceType','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (161,'TicketConfig','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (162,'InvoiceOut','delete','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (163,'InvoiceOut','book','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (165,'TicketDms','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (167,'Worker','isSubordinate','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (168,'Worker','mySubordinates','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (169,'WorkerTimeControl','filter','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (171,'TicketServiceType','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (172,'Sms','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (173,'Sms','send','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (176,'Device','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (177,'Device','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (179,'ItemLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (180,'RouteLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (181,'Dms','removeFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (182,'Dms','uploadFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (183,'Dms','downloadFile','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (184,'Client','uploadFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (185,'ClientDms','removeFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (186,'ClientDms','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (187,'Ticket','uploadFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (190,'Route','updateVolume','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (191,'Agency','getLanded','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (192,'Agency','getShipped','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (194,'Postcode','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (195,'Ticket','addSale','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (196,'Dms','updateFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (197,'Dms','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (198,'ClaimDms','removeFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (199,'ClaimDms','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (200,'Claim','uploadFile','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (201,'Sale','updateConcept','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (202,'Claim','updateClaimAction','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (203,'UserPhone','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (204,'WorkerDms','removeFile','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (205,'WorkerDms','*','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (206,'Chat','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (207,'Chat','sendMessage','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (208,'Sale','recalculatePrice','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (209,'Ticket','recalculateComponents','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (211,'TravelLog','*','READ','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (212,'Thermograph','*','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (213,'TravelThermograph','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (214,'Entry','*','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (216,'TravelThermograph','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (218,'Intrastat','*','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (221,'UserConfig','getUserConfig','READ','ALLOW','ROLE','guest');
-INSERT INTO `ACL` VALUES (226,'ClientObservation','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (227,'Address','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (228,'AddressObservation','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (230,'ClientCredit','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (231,'ClientContact','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (232,'ClientSample','*','READ','ALLOW','ROLE','trainee');
-INSERT INTO `ACL` VALUES (233,'EntryLog','*','READ','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (234,'WorkerLog','find','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (235,'CustomsAgent','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (236,'Buy','*','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (237,'WorkerDms','filter','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (238,'Town','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (239,'Province','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (241,'SupplierContact','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (248,'RoleMapping','*','READ','ALLOW','ROLE','account');
-INSERT INTO `ACL` VALUES (249,'UserPassword','*','READ','ALLOW','ROLE','account');
-INSERT INTO `ACL` VALUES (250,'Town','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (251,'Province','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (252,'Supplier','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (253,'Supplier','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (254,'SupplierLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (256,'Image','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (257,'FixedPrice','*','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (258,'PayDem','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (259,'Client','createReceipt','*','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (260,'PrintServerQueue','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (261,'SupplierAccount','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (262,'Entry','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (263,'InvoiceIn','*','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (264,'StarredModule','*','*','ALLOW','ROLE','$authenticated');
-INSERT INTO `ACL` VALUES (265,'ItemBotanical','*','WRITE','ALLOW','ROLE','logisticBoss');
-INSERT INTO `ACL` VALUES (266,'ZoneLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (267,'Genus','*','WRITE','ALLOW','ROLE','logisticBoss');
-INSERT INTO `ACL` VALUES (268,'Specie','*','WRITE','ALLOW','ROLE','logisticBoss');
-INSERT INTO `ACL` VALUES (269,'InvoiceOut','createPdf','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (270,'SupplierAddress','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (271,'SalesMonitor','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (272,'InvoiceInLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (273,'InvoiceInTax','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (274,'InvoiceInLog','*','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (275,'InvoiceOut','createManualInvoice','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (276,'InvoiceOut','globalInvoicing','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (278,'RoleInherit','*','WRITE','ALLOW','ROLE','grant');
-INSERT INTO `ACL` VALUES (279,'MailAlias','*','READ','ALLOW','ROLE','marketing');
-INSERT INTO `ACL` VALUES (283,'EntryObservation','*','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (284,'LdapConfig','*','*','ALLOW','ROLE','sysadmin');
-INSERT INTO `ACL` VALUES (285,'SambaConfig','*','*','ALLOW','ROLE','sysadmin');
-INSERT INTO `ACL` VALUES (286,'ACL','*','*','ALLOW','ROLE','developer');
-INSERT INTO `ACL` VALUES (287,'AccessToken','*','*','ALLOW','ROLE','developer');
-INSERT INTO `ACL` VALUES (293,'RoleInherit','*','*','ALLOW','ROLE','it');
-INSERT INTO `ACL` VALUES (294,'RoleRole','*','*','ALLOW','ROLE','it');
-INSERT INTO `ACL` VALUES (295,'AccountConfig','*','*','ALLOW','ROLE','sysadmin');
-INSERT INTO `ACL` VALUES (296,'Collection','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (297,'Sale','clone','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (298,'InvoiceInDueDay','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (299,'Collection','setSaleQuantity','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (302,'AgencyTerm','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (303,'ClaimLog','*','READ','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (304,'Edi','updateData','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (305,'EducationLevel','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (306,'InvoiceInIntrastat','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (307,'SupplierAgencyTerm','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (308,'InvoiceInIntrastat','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (309,'Zone','getZoneClosing','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (310,'ExpeditionState','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (311,'Expense','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (312,'Expense','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (314,'SupplierActivity','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (315,'SupplierActivity','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (316,'Dms','deleteTrashFiles','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (317,'ClientUnpaid','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (318,'MdbVersion','*','*','ALLOW','ROLE','developer');
-INSERT INTO `ACL` VALUES (319,'ItemType','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (320,'ItemType','*','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (321,'InvoiceOut','refund','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (322,'InvoiceOut','refund','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (323,'InvoiceOut','refund','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (324,'Ticket','refund','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (325,'Ticket','refund','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (326,'Ticket','refund','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (327,'Sale','clone','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (328,'Sale','clone','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (329,'TicketRefund','*','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (330,'ClaimObservation','*','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (331,'ClaimObservation','*','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (332,'Client','setPassword','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (333,'Client','updateUser','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (334,'ShelvingLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (335,'ZoneExclusionGeo','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (336,'ZoneExclusionGeo','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (337,'Parking','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (338,'Shelving','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (339,'OsTicket','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (340,'OsTicketConfig','*','*','ALLOW','ROLE','it');
-INSERT INTO `ACL` VALUES (341,'ClientConsumptionQueue','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (343,'Ticket','deliveryNoteEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (344,'Ticket','deliveryNoteCsvPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (345,'Ticket','deliveryNoteCsvEmail','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (346,'Client','campaignMetricsPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (347,'Client','campaignMetricsEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (348,'Client','clientWelcomeHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (349,'Client','clientWelcomeEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (350,'Client','creditRequestPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (351,'Client','creditRequestHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (352,'Client','creditRequestEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (353,'Client','printerSetupHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (354,'Client','printerSetupEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (355,'Client','sepaCoreEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (356,'Client','letterDebtorPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (357,'Client','letterDebtorStHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (358,'Client','letterDebtorStEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (359,'Client','letterDebtorNdHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (360,'Client','letterDebtorNdEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (361,'Client','clientDebtStatementPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (362,'Client','clientDebtStatementHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (363,'Client','clientDebtStatementEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (364,'Client','incotermsAuthorizationPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (365,'Client','incotermsAuthorizationHtml','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (366,'Client','incotermsAuthorizationEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (367,'Client','consumptionSendQueued','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (368,'InvoiceOut','invoiceEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (369,'InvoiceOut','exportationPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (370,'InvoiceOut','sendQueued','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (371,'Ticket','invoiceCsvPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (372,'Ticket','invoiceCsvEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (373,'Supplier','campaignMetricsPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (374,'Supplier','campaignMetricsEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (375,'Travel','extraCommunityPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (376,'Travel','extraCommunityEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (377,'Entry','entryOrderPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (378,'OsTicket','osTicketReportEmail','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (379,'Item','buyerWasteEmail','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (380,'Claim','claimPickupPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (381,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (382,'Item','labelPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (383,'Sector','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (384,'Sector','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (385,'Route','driverRoutePdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (386,'Route','driverRouteEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (387,'Ticket','deliveryNotePdf','READ','ALLOW','ROLE','$owner');
-INSERT INTO `ACL` VALUES (388,'Supplier','newSupplier','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (389,'ClaimRma','*','READ','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (390,'ClaimRma','*','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (391,'Notification','*','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (392,'Boxing','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (393,'Url','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (394,'Url','*','WRITE','ALLOW','ROLE','it');
-INSERT INTO `ACL` VALUES (395,'ItemShelving','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (396,'ItemShelving','*','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (397,'ItemShelvingPlacementSupplyStock','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (398,'NotificationQueue','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (399,'InvoiceOut','clientsToInvoice','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (400,'InvoiceOut','invoiceClient','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (401,'Sale','editTracked','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (402,'Sale','editFloramondo','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (403,'Receipt','balanceCompensationEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (404,'Receipt','balanceCompensationPdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (405,'Ticket','getTicketsFuture','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (406,'Ticket','merge','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (407,'Sale','editFloramondo','WRITE','ALLOW','ROLE','logistic');
-INSERT INTO `ACL` VALUES (408,'ZipConfig','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (409,'Item','*','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (410,'Sale','editCloned','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (411,'Sale','editCloned','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (414,'MdbVersion','*','READ','ALLOW','ROLE','$everyone');
-INSERT INTO `ACL` VALUES (416,'TicketLog','getChanges','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (417,'Ticket','getTicketsAdvance','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (418,'EntryLog','*','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (419,'Sale','editTracked','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (420,'MdbBranch','*','READ','ALLOW','ROLE','$everyone');
-INSERT INTO `ACL` VALUES (421,'ItemShelvingSale','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (422,'Docuware','checkFile','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (423,'Docuware','download','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (424,'Docuware','upload','WRITE','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (425,'Docuware','deliveryNoteEmail','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (426,'TpvTransaction','confirm','WRITE','ALLOW','ROLE','$everyone');
-INSERT INTO `ACL` VALUES (427,'TpvTransaction','start','WRITE','ALLOW','ROLE','$authenticated');
-INSERT INTO `ACL` VALUES (428,'TpvTransaction','end','WRITE','ALLOW','ROLE','$authenticated');
-INSERT INTO `ACL` VALUES (429,'ItemConfig','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (431,'Tag','onSubmit','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (432,'Worker','updateAttributes','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (433,'Worker','createAbsence','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (434,'Worker','updateAbsence','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (435,'Worker','deleteAbsence','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (436,'Worker','new','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (438,'Client','getClientOrSupplierReference','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (439,'NotificationSubscription','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (440,'NotificationAcl','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (441,'MdbApp','*','READ','ALLOW','ROLE','$everyone');
-INSERT INTO `ACL` VALUES (442,'MdbApp','*','*','ALLOW','ROLE','developer');
-INSERT INTO `ACL` VALUES (443,'ItemConfig','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (444,'DeviceProduction','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (445,'DeviceProductionModels','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (446,'DeviceProductionState','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (447,'DeviceProductionUser','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (448,'DeviceProduction','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (449,'DeviceProductionModels','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (450,'DeviceProductionState','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (451,'DeviceProductionUser','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (452,'Worker','deallocatePDA','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (453,'Worker','allocatePDA','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (454,'Worker','deallocatePDA','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (455,'Worker','allocatePDA','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (456,'Zone','*','*','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (458,'Operator','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (459,'Operator','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (460,'InvoiceIn','getSerial','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (461,'Ticket','saveSign','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (462,'InvoiceOut','negativeBases','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (463,'InvoiceOut','negativeBasesCsv','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (464,'WorkerObservation','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (465,'ClientInforma','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (466,'ClientInforma','*','WRITE','ALLOW','ROLE','financial');
-INSERT INTO `ACL` VALUES (467,'Receipt','receiptEmail','*','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (468,'Client','setRating','WRITE','ALLOW','ROLE','financial');
-INSERT INTO `ACL` VALUES (470,'Client','addressesPropagateRe','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (471,'Client','canBeInvoiced','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (472,'Client','canCreateTicket','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (473,'Client','consumption','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (474,'Client','createAddress','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (475,'Client','createWithUser','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (476,'Client','extendedListFilter','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (477,'Client','getAverageInvoiced','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (478,'Client','getCard','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (479,'Client','getDebt','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (480,'Client','getMana','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (481,'Client','transactions','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (482,'Client','hasCustomerRole','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (483,'Client','isValidClient','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (484,'Client','lastActiveTickets','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (485,'Client','sendSms','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (486,'Client','setPassword','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (487,'Client','summary','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (488,'Client','updateAddress','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (489,'Client','updateFiscalData','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (491,'Client','uploadFile','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (492,'Client','campaignMetricsPdf','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (493,'Client','campaignMetricsEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (494,'Client','clientWelcomeHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (495,'Client','clientWelcomeEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (496,'Client','printerSetupHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (497,'Client','printerSetupEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (498,'Client','sepaCoreEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (499,'Client','letterDebtorPdf','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (500,'Client','letterDebtorStHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (501,'Client','letterDebtorStEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (502,'Client','letterDebtorNdHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (503,'Client','letterDebtorNdEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (504,'Client','clientDebtStatementPdf','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (505,'Client','clientDebtStatementHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (506,'Client','clientDebtStatementEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (507,'Client','creditRequestPdf','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (508,'Client','creditRequestHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (509,'Client','creditRequestEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (510,'Client','incotermsAuthorizationPdf','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (511,'Client','incotermsAuthorizationHtml','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (512,'Client','incotermsAuthorizationEmail','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (513,'Client','consumptionSendQueued','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (514,'Client','filter','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (515,'Client','getClientOrSupplierReference','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (516,'Client','upsert','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (518,'Client','replaceById','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (519,'Client','updateAttributes','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (520,'Client','updateAttributes','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (521,'Client','deleteById','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (522,'Client','replaceOrCreate','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (523,'Client','updateAll','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (524,'Client','upsertWithWhere','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (525,'Defaulter','observationEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (527,'VnUser','acl','READ','ALLOW','ROLE','guest');
-INSERT INTO `ACL` VALUES (528,'VnUser','getCurrentUserData','READ','ALLOW','ROLE','account');
-INSERT INTO `ACL` VALUES (530,'Account','exists','READ','ALLOW','ROLE','account');
-INSERT INTO `ACL` VALUES (531,'Account','exists','READ','ALLOW','ROLE','account');
-INSERT INTO `ACL` VALUES (532,'UserLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (533,'RoleLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (534,'WagonType','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (535,'WagonTypeColor','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (536,'WagonTypeTray','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (537,'WagonConfig','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (538,'CollectionWagon','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (539,'CollectionWagonTicket','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (540,'Wagon','*','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (541,'WagonType','createWagonType','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (542,'WagonType','deleteWagonType','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (543,'WagonType','editWagonType','*','ALLOW','ROLE','productionAssi');
-INSERT INTO `ACL` VALUES (544,'Docuware','deliveryNoteEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (545,'Agency','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (546,'Agency','seeExpired','READ','ALLOW','ROLE','coolerAssist');
-INSERT INTO `ACL` VALUES (547,'WorkerLog','models','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (548,'Ticket','editDiscount','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (549,'Ticket','editDiscount','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (550,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (551,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (552,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (553,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (554,'Ticket','deleteTicketWithPartPrepared','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (555,'Ticket','editZone','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (556,'State','editableStates','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (557,'State','seeEditableStates','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (558,'State','seeEditableStates','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (559,'State','isSomeEditable','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (560,'State','isAllEditable','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (561,'State','isAllEditable','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (562,'Agency','seeExpired','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (563,'Agency','seeExpired','READ','ALLOW','ROLE','productionBoss');
-INSERT INTO `ACL` VALUES (564,'Claim','createAfterDeadline','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (565,'Client','editAddressLogifloraAllowed','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (566,'Client','editFiscalDataWithoutTaxDataCheck','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (567,'Client','editVerifiedDataWithoutTaxDataCheck','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (568,'Client','editCredit','WRITE','ALLOW','ROLE','financialBoss');
-INSERT INTO `ACL` VALUES (569,'Client','zeroCreditEditor','WRITE','ALLOW','ROLE','financialBoss');
-INSERT INTO `ACL` VALUES (570,'InvoiceOut','canCreatePdf','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (571,'Supplier','editPayMethodCheck','WRITE','ALLOW','ROLE','financial');
-INSERT INTO `ACL` VALUES (572,'Worker','isTeamBoss','WRITE','ALLOW','ROLE','teamBoss');
-INSERT INTO `ACL` VALUES (573,'Worker','forceIsSubordinate','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (574,'Claim','editPickup','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (577,'Claim','findOne','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (579,'Claim','updateClaim','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (580,'Claim','regularizeClaim','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (581,'Claim','updateClaimDestination','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (582,'Claim','downloadFile','READ','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (583,'Claim','deleteById','WRITE','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (585,'Claim','logs','READ','ALLOW','ROLE','claimManager');
-INSERT INTO `ACL` VALUES (586,'Ticket','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (587,'Ticket','findById','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (588,'Ticket','findOne','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (589,'Ticket','getVolume','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (590,'Ticket','getTotalVolume','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (591,'Ticket','summary','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (592,'Ticket','priceDifference','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (593,'Ticket','componentUpdate','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (594,'Ticket','new','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (595,'Ticket','isEditable','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (596,'Ticket','setDeleted','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (597,'Ticket','restore','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (598,'Ticket','getSales','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (599,'Ticket','getSalesPersonMana','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (600,'Ticket','filter','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (601,'Ticket','makeInvoice','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (602,'Ticket','updateEditableTicket','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (603,'Ticket','updateDiscount','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (604,'Ticket','transferSales','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (605,'Ticket','sendSms','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (606,'Ticket','isLocked','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (607,'Ticket','freightCost','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (608,'Ticket','getComponentsSum','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (609,'Ticket','updateAttributes','WRITE','ALLOW','ROLE','delivery');
-INSERT INTO `ACL` VALUES (610,'Ticket','deliveryNoteCsv','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (611,'State','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (612,'State','findById','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (613,'State','findOne','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (614,'Worker','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (615,'Worker','findById','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (616,'Worker','findOne','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (617,'Worker','filter','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (618,'Worker','getWorkedHours','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (619,'Worker','active','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (620,'Worker','activeWithRole','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (621,'Worker','uploadFile','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (622,'Worker','contracts','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (623,'Worker','holidays','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (624,'Worker','activeContract','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (625,'Worker','activeWithInheritedRole','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (626,'Ticket','collectionLabel','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (628,'Ticket','expeditionPalletLabel','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (629,'Ticket','editDiscount','WRITE','ALLOW','ROLE','artificialBoss');
-INSERT INTO `ACL` VALUES (630,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','salesTeamBoss');
-INSERT INTO `ACL` VALUES (635,'Ticket','updateAttributes','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (636,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (637,'Claim','downloadFile','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (638,'Agency','seeExpired','READ','ALLOW','ROLE','artificialBoss');
-INSERT INTO `ACL` VALUES (639,'Agency','seeExpired','READ','ALLOW','ROLE','logisticAssistant');
-INSERT INTO `ACL` VALUES (654,'Ticket','editZone','WRITE','ALLOW','ROLE','logisticAssistant');
-INSERT INTO `ACL` VALUES (655,'Entry','addFromPackaging','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (656,'Entry','addFromBuy','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (657,'Supplier','getItemsPackaging','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (658,'Ticket','closeAll','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (659,'Account','*','*','ALLOW','ROLE','developerBoss');
-INSERT INTO `ACL` VALUES (664,'MailForward','*','*','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (667,'VnUser','*','*','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (668,'VnUser','__get__preview','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (669,'VnUser','preview','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (670,'VnUser','create','*','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (672,'PackingSiteAdvanced','*','*','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (673,'InvoiceOut','makePdfAndNotify','WRITE','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (674,'InvoiceOutConfig','*','READ','ALLOW','ROLE','invoicing');
-INSERT INTO `ACL` VALUES (676,'Ticket','invoiceTickets','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (680,'MailAliasAccount','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (683,'MailAliasAccount','canEditAlias','WRITE','ALLOW','ROLE','developerBoss');
-INSERT INTO `ACL` VALUES (684,'WorkerDisableExcluded','*','READ','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (685,'WorkerDisableExcluded','*','WRITE','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (686,'MailForward','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (687,'ClientSms','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (688,'ClientSms','create','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (689,'Vehicle','sorted','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (695,'ViaexpressConfig','internationalExpedition','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (696,'ViaexpressConfig','renderer','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (697,'Ticket','transferClient','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (698,'Ticket','canEditWeekly','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (699,'TicketSms','find','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (701,'Docuware','upload','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (702,'Ticket','docuwareDownload','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (703,'Worker','search','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (704,'ExpeditionState','addExpeditionState','WRITE','ALLOW','ROLE','delivery');
-INSERT INTO `ACL` VALUES (705,'SaleGroupDetail','deleteById','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (706,'Ticket','setDeleted','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (707,'DeviceLog','create','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (708,'Collection','getTickets','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (709,'Client','findOne','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (710,'Client','findById','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (711,'Client','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (712,'Client','exists','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (713,'Client','__get__addresses','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (714,'ExpeditionMistakeType','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (715,'WorkerMistakeType','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (716,'ExpeditionMistake','*','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (717,'WorkerMistake','*','WRITE','ALLOW','ROLE','coolerAssist');
-INSERT INTO `ACL` VALUES (718,'MistakesTypes','*','WRITE','ALLOW','ROLE','coolerAssist');
-INSERT INTO `ACL` VALUES (719,'MistakeType','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (720,'MachineWorker','*','READ','ALLOW','ROLE','coolerAssist');
-INSERT INTO `ACL` VALUES (721,'Printer','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (722,'SaleMistake','*','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (723,'Item','setVisibleDiscard','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (724,'Address','getAddress','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (725,'Account','findOne','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (726,'Account','findById','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (727,'Account','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (728,'Account','exists','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (729,'Sale','clone','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (730,'Ticket','setDeleted','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (732,'Sale','isInPreparing','*','ALLOW','ROLE','reviewer');
-INSERT INTO `ACL` VALUES (733,'Train','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (734,'WorkerDepartment','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (735,'VnUser','higherPrivileges','*','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (736,'VnUser','mediumPrivileges','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (737,'VnUser','updateUser','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (738,'TicketCollection','*','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (739,'Worker','setPassword','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (740,'Url','getByUser','READ','ALLOW','ROLE','$everyone');
-INSERT INTO `ACL` VALUES (741,'Claim','__get__lines','READ','ALLOW','ROLE','claimViewer');
-INSERT INTO `ACL` VALUES (742,'AddressShortage','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (743,'Claim','filter','READ','ALLOW','ROLE','claimViewer');
-INSERT INTO `ACL` VALUES (744,'Claim','find','READ','ALLOW','ROLE','claimViewer');
-INSERT INTO `ACL` VALUES (745,'Claim','findById','READ','ALLOW','ROLE','claimViewer');
-INSERT INTO `ACL` VALUES (746,'Claim','getSummary','READ','ALLOW','ROLE','claimViewer');
-INSERT INTO `ACL` VALUES (747,'CplusRectificationType','*','READ','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (748,'SiiTypeInvoiceOut','*','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (749,'InvoiceCorrectionType','*','READ','ALLOW','ROLE','salesPerson');
-INSERT INTO `ACL` VALUES (750,'InvoiceOut','transferInvoice','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (751,'Application','executeProc','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (752,'Application','executeFunc','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (753,'NotificationSubscription','getList','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (754,'Route','find','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (755,'Route','findById','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (756,'Route','findOne','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (757,'Route','getRoutesByWorker','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (758,'Route','canViewAllRoute','READ','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (759,'Route','cmr','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (760,'Route','downloadCmrsZip','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (761,'Route','downloadZip','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (762,'Route','filter','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (763,'Route','getByWorker','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (764,'Route','getDeliveryPoint','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (765,'Route','cmrs','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (766,'Route','getSuggestedTickets','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (767,'Route','getTickets','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (768,'Route','guessPriority','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (769,'Route','insertTicket','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (770,'Route','getDeliveryPoint','READ','ALLOW','ROLE','deliveryBoss');
-INSERT INTO `ACL` VALUES (771,'Route','summary','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (772,'Route','getExpeditionSummary','READ','ALLOW','ROLE','delivery');
-INSERT INTO `ACL` VALUES (773,'WorkerTimeControl','login','READ','ALLOW','ROLE','timeControl');
-INSERT INTO `ACL` VALUES (774,'WorkerTimeControl','getClockIn','READ','ALLOW','ROLE','timeControl');
-INSERT INTO `ACL` VALUES (775,'WorkerTimeControl','clockIn','WRITE','ALLOW','ROLE','timeControl');
-INSERT INTO `ACL` VALUES (776,'WorkerTimeControl','addTimeEntry','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (777,'WorkerTimeControl','deleteTimeEntry','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (778,'WorkerTimeControl','updateTimeEntry','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (779,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','developer');
-INSERT INTO `ACL` VALUES (780,'WorkerTimeControl','updateMailState','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (781,'WorkerTimeControl','weeklyHourRecordEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (782,'WorkerTimeControl','getMailStates','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (783,'WorkerTimeControl','resendWeeklyHourEmail','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (784,'VnRole','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (785,'VnRole','*','WRITE','ALLOW','ROLE','it');
-INSERT INTO `ACL` VALUES (786,'State','isAllEditable','READ','ALLOW','ROLE','delivery');
-INSERT INTO `ACL` VALUES (787,'Ticket','makePdfList','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (788,'Ticket','invoiceTicketsAndPdf','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (789,'InvoiceIn','*','READ','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (790,'InvoiceIn','getSerial','READ','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (791,'InvoiceIn','corrective','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (792,'InvoiceInCorrection','*','*','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (793,'Supplier','updateAllFiscalData','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (794,'Supplier','updateFiscalData','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (795,'Ticket','myLastModified','*','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (796,'MrwConfig','cancelShipment','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (797,'MrwConfig','createShipment','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (798,'MailAliasAccount','*','*','ALLOW','ROLE','itManagement');
-INSERT INTO `ACL` VALUES (799,'Ticket','saveCmr','*','ALLOW','ROLE','developer');
-INSERT INTO `ACL` VALUES (800,'EntryDms','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (801,'MailAliasAccount','create','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (802,'MailAliasAccount','deleteById','WRITE','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (804,'DeviceProduction','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (805,'Collection','assign','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (806,'ExpeditionPallet','getPallet','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (807,'MachineWorker','updateInTime','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (808,'MobileAppVersionControl','getVersion','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (809,'SaleTracking','delete','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (810,'SaleTracking','updateTracking','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (811,'SaleTracking','setPicked','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (813,'Sale','getFromSectorCollection','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (814,'ItemBarcode','delete','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (815,'WorkerActivityType','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (816,'WorkerActivity','*','*','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (817,'ParkingLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (818,'ExpeditionPallet','*','*','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (819,'Ticket','addSaleByCode','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (820,'TicketCollection','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (821,'Ticket','clone','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (822,'SupplierDms','*','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (823,'MailAlias','*','*','ALLOW','ROLE','developerBoss');
-INSERT INTO `ACL` VALUES (824,'ItemShelving','hasItemOlder','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (825,'Application','getEnumValues','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (826,'Ticket','editZone','WRITE','ALLOW','ROLE','salesAssistant');
-INSERT INTO `ACL` VALUES (827,'TicketWeekly','deleteById','WRITE','ALLOW','ROLE','buyerBoss');
-INSERT INTO `ACL` VALUES (828,'TicketWeekly','upsert','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (830,'InvoiceIn','*','READ','ALLOW','ROLE','deliveryBoss');
-INSERT INTO `ACL` VALUES (831,'InvoiceIn','exchangeRateUpdate','*','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (832,'AgencyLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (833,'AgencyWorkCenter','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (835,'Agency','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (836,'Agency','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (837,'AgencyWorkCenter','*','WRITE','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (838,'Worker','getAvailablePda','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (839,'Locker','__get__codes','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (840,'Locker','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (841,'Locker','*','*','ALLOW','ROLE','productionBoss');
-INSERT INTO `ACL` VALUES (842,'Worker','__get__locker','READ','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (843,'Worker','__get__locker','READ','ALLOW','ROLE','productionBoss');
-INSERT INTO `ACL` VALUES (846,'Ticket','refund','WRITE','ALLOW','ROLE','logistic');
-INSERT INTO `ACL` VALUES (847,'RouteConfig','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (848,'InvoiceIn','updateInvoiceIn','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (849,'InvoiceIn','clone','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (850,'InvoiceIn','corrective','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (851,'InvoiceIn','exchangeRateUpdate','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (852,'InvoiceIn','invoiceInEmail','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (853,'InvoiceIn','toBook','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (854,'InvoiceIn','toUnbook','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (855,'InvoiceIn','deleteById','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (856,'InvoiceIn','updateInvoiceIn','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (857,'InvoiceIn','clone','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (858,'InvoiceIn','corrective','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (859,'InvoiceIn','exchangeRateUpdate','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (860,'InvoiceIn','invoiceInEmail','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (861,'InvoiceIn','toBook','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (862,'InvoiceIn','deleteById','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (863,'InvoiceIn','create','WRITE','ALLOW','ROLE','administrative');
-INSERT INTO `ACL` VALUES (864,'InvoiceIn','create','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (865,'Ticket','deliveryNotePdf','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (866,'InvoiceOut','download','READ','ALLOW','ROLE','$owner');
-INSERT INTO `ACL` VALUES (867,'InvoiceIn','*','READ','ALLOW','ROLE','maintenanceBoss');
-INSERT INTO `ACL` VALUES (868,'InvoiceIn','*','READ','ALLOW','ROLE','maintenanceBos');
-INSERT INTO `ACL` VALUES (869,'Ticket','editZone','WRITE','ALLOW','ROLE','buyer');
-INSERT INTO `ACL` VALUES (870,'Entry','find','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (871,'RoadmapAddress','*','WRITE','ALLOW','ROLE','palletizerBoss');
-INSERT INTO `ACL` VALUES (872,'RoadmapAddress','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (873,'Roadmap','*','WRITE','ALLOW','ROLE','palletizerBoss');
-INSERT INTO `ACL` VALUES (874,'Roadmap','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (875,'RoadmapStop','*','WRITE','ALLOW','ROLE','palletizerBoss');
-INSERT INTO `ACL` VALUES (876,'RoadmapStop','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (877,'TravelKgPercentage','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (878,'MrwConfig','getLabel','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (879,'AgencyMode','*','*','ALLOW','ROLE','deliveryAssistant');
-INSERT INTO `ACL` VALUES (880,'Collection','assignCollection','WRITE','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (881,'TrainingCourse','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (882,'TrainingCourseType','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (883,'TrainingCenter','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (884,'Worker','__get__trainingCourse','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (885,'WorkerTimeControl','addTimeEntry','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (886,'WorkerTimeControl','deleteTimeEntry','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (887,'WorkerTimeControl','updateTimeEntry','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (888,'WorkerTimeControl','weeklyHourRecordEmail','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (889,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (890,'WorkerTimeControl','updateMailState','WRITE','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (891,'TravelKgPercentage','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (892,'WorkerIncome','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (893,'PayrollComponent','*','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (894,'Worker','__get__incomes','*','ALLOW','ROLE','hr');
-INSERT INTO `ACL` VALUES (895,'ItemShelvingLog','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (897,'WorkerLog','*','READ','ALLOW','ROLE','employee');
-INSERT INTO `ACL` VALUES (901,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','system');
-INSERT INTO `ACL` VALUES (902,'Entry','filter','READ','ALLOW','ROLE','supplier');
-INSERT INTO `ACL` VALUES (903,'Entry','getBuys','READ','ALLOW','ROLE','supplier');
-INSERT INTO `ACL` VALUES (904,'Entry','buyLabel','READ','ALLOW','ROLE','supplier');
-INSERT INTO `ACL` VALUES (905,'AddressWaste','*','READ','ALLOW','ROLE','production');
-INSERT INTO `ACL` VALUES (906,'Entry','print','READ','ALLOW','ROLE','supplier');
-INSERT INTO `ACL` VALUES (907,'Expedition_PrintOut','*','*','ALLOW','ROLE','production');
+INSERT INTO `ACL` VALUES (3,'Address','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (5,'AgencyService','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (9,'ClientObservation','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (11,'ContactChannel','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (13,'Employee','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (14,'PayMethod','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (16,'FakeProduction','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (17,'Warehouse','* ','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (20,'TicketState','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (24,'Delivery','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (25,'Zone','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (26,'ClientCredit','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (27,'ClientCreditLimit','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (30,'GreugeType','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (31,'Mandate','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (32,'MandateType','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (33,'Company','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (34,'Greuge','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (35,'AddressObservation','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (36,'ObservationType','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (37,'Greuge','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (38,'AgencyMode','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (39,'ItemTag','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (40,'ItemBotanical','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (41,'ItemBotanical','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (42,'ItemPlacement','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (43,'ItemPlacement','*','WRITE','ALLOW','ROLE','replenisher',NULL);
+INSERT INTO `ACL` VALUES (44,'ItemPlacement','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (45,'ItemBarcode','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (46,'ItemBarcode','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (47,'ItemBarcode','*','WRITE','ALLOW','ROLE','replenisher',NULL);
+INSERT INTO `ACL` VALUES (51,'ItemTag','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (53,'Item','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (54,'Item','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (55,'Recovery','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (56,'Recovery','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (58,'CreditClassification','*','*','ALLOW','ROLE','insurance',NULL);
+INSERT INTO `ACL` VALUES (60,'CreditInsurance','*','*','ALLOW','ROLE','insurance',NULL);
+INSERT INTO `ACL` VALUES (61,'InvoiceOut','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (63,'TicketObservation','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (65,'Sale','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (66,'TicketTracking','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (68,'TicketPackaging','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (69,'Packaging','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (70,'Packaging','*','WRITE','ALLOW','ROLE','logistic',NULL);
+INSERT INTO `ACL` VALUES (72,'SaleComponent','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (73,'Expedition','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (74,'Expedition','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (75,'Expedition','*','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (76,'AnnualAverageInvoiced','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (77,'WorkerMana','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (78,'TicketTracking','*','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (79,'Ticket','state','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (80,'Sale','deleteSales','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (81,'Sale','moveToTicket','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (82,'Sale','updateQuantity','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (83,'Sale','updatePrice','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (84,'Sale','updateDiscount','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (85,'SaleTracking','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (86,'Order','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (87,'OrderRow','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (88,'ClientContact','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (89,'Sale','moveToNewTicket','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (90,'Sale','reserve','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (91,'TicketWeekly','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (94,'Agency','landsThatDay','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (96,'ClaimEnd','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (97,'ClaimEnd','*','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (98,'ClaimBeginning','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (99,'ClaimDevelopment','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (100,'ClaimDevelopment','*','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (102,'Claim','createFromSales','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (104,'Item','*','WRITE','ALLOW','ROLE','marketingBoss',NULL);
+INSERT INTO `ACL` VALUES (105,'ItemBarcode','*','WRITE','ALLOW','ROLE','marketingBoss',NULL);
+INSERT INTO `ACL` VALUES (106,'ItemBotanical','*','WRITE','ALLOW','ROLE','marketingBoss',NULL);
+INSERT INTO `ACL` VALUES (108,'ItemPlacement','*','WRITE','ALLOW','ROLE','marketingBoss',NULL);
+INSERT INTO `ACL` VALUES (109,'UserConfig','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (110,'Accounting','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (111,'ClientLog','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (112,'Defaulter','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (113,'ClientRisk','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (114,'Receipt','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (115,'Receipt','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (116,'BankEntity','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (117,'ClientSample','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (118,'WorkerTeam','*','*','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (119,'Travel','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (120,'Travel','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (121,'Item','regularize','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (122,'TicketRequest','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (124,'Client','confirmTransaction','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (125,'Agency','getAgenciesWithWarehouse','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (127,'TicketLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (129,'TicketService','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (130,'Expedition','*','WRITE','ALLOW','ROLE','packager',NULL);
+INSERT INTO `ACL` VALUES (131,'CreditInsurance','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (132,'CreditClassification','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (133,'ItemTag','*','WRITE','ALLOW','ROLE','marketingBoss',NULL);
+INSERT INTO `ACL` VALUES (135,'ZoneGeo','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (136,'ZoneCalendar','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (137,'ZoneIncluded','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (138,'LabourHoliday','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (139,'LabourHolidayLegend','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (140,'LabourHolidayType','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (141,'Zone','*','*','ALLOW','ROLE','logisticBoss',NULL);
+INSERT INTO `ACL` VALUES (142,'ZoneCalendar','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (143,'ZoneIncluded','*','*','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (144,'Stowaway','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (145,'Ticket','getPossibleStowaways','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (147,'UserConfigView','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (148,'UserConfigView','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (149,'Sip','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (150,'Sip','*','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (151,'Department','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (152,'Department','*','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (154,'Route','*','WRITE','ALLOW','ROLE','delivery',NULL);
+INSERT INTO `ACL` VALUES (155,'Calendar','*','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (156,'WorkerLabour','*','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (157,'Calendar','absences','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (158,'ItemTag','*','WRITE','ALLOW','ROLE','accessory',NULL);
+INSERT INTO `ACL` VALUES (160,'TicketServiceType','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (161,'TicketConfig','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (162,'InvoiceOut','delete','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (163,'InvoiceOut','book','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (165,'TicketDms','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (167,'Worker','isSubordinate','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (168,'Worker','mySubordinates','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (169,'WorkerTimeControl','filter','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (171,'TicketServiceType','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (172,'Sms','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (173,'Sms','send','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (176,'Device','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (177,'Device','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (179,'ItemLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (180,'RouteLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (181,'Dms','removeFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (182,'Dms','uploadFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (183,'Dms','downloadFile','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (184,'Client','uploadFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (185,'ClientDms','removeFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (186,'ClientDms','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (187,'Ticket','uploadFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (190,'Route','updateVolume','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (191,'Agency','getLanded','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (192,'Agency','getShipped','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (194,'Postcode','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (195,'Ticket','addSale','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (196,'Dms','updateFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (197,'Dms','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (198,'ClaimDms','removeFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (199,'ClaimDms','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (200,'Claim','uploadFile','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (201,'Sale','updateConcept','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (202,'Claim','updateClaimAction','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (203,'UserPhone','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (204,'WorkerDms','removeFile','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (205,'WorkerDms','*','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (206,'Chat','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (207,'Chat','sendMessage','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (208,'Sale','recalculatePrice','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (209,'Ticket','recalculateComponents','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (211,'TravelLog','*','READ','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (212,'Thermograph','*','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (213,'TravelThermograph','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (214,'Entry','*','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (216,'TravelThermograph','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (218,'Intrastat','*','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (221,'UserConfig','getUserConfig','READ','ALLOW','ROLE','guest',NULL);
+INSERT INTO `ACL` VALUES (226,'ClientObservation','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (227,'Address','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (228,'AddressObservation','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (230,'ClientCredit','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (231,'ClientContact','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (232,'ClientSample','*','READ','ALLOW','ROLE','trainee',NULL);
+INSERT INTO `ACL` VALUES (233,'EntryLog','*','READ','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (234,'WorkerLog','find','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (235,'CustomsAgent','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (236,'Buy','*','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (237,'WorkerDms','filter','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (238,'Town','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (239,'Province','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (241,'SupplierContact','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (248,'RoleMapping','*','READ','ALLOW','ROLE','account',NULL);
+INSERT INTO `ACL` VALUES (249,'UserPassword','*','READ','ALLOW','ROLE','account',NULL);
+INSERT INTO `ACL` VALUES (250,'Town','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (251,'Province','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (252,'Supplier','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (253,'Supplier','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (254,'SupplierLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (256,'Image','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (257,'FixedPrice','*','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (258,'PayDem','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (259,'Client','createReceipt','*','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (260,'PrintServerQueue','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (261,'SupplierAccount','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (262,'Entry','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (263,'InvoiceIn','*','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (264,'StarredModule','*','*','ALLOW','ROLE','$authenticated',NULL);
+INSERT INTO `ACL` VALUES (265,'ItemBotanical','*','WRITE','ALLOW','ROLE','logisticBoss',NULL);
+INSERT INTO `ACL` VALUES (266,'ZoneLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (267,'Genus','*','WRITE','ALLOW','ROLE','logisticBoss',NULL);
+INSERT INTO `ACL` VALUES (268,'Specie','*','WRITE','ALLOW','ROLE','logisticBoss',NULL);
+INSERT INTO `ACL` VALUES (269,'InvoiceOut','createPdf','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (270,'SupplierAddress','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (271,'SalesMonitor','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (272,'InvoiceInLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (273,'InvoiceInTax','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (274,'InvoiceInLog','*','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (275,'InvoiceOut','createManualInvoice','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (276,'InvoiceOut','globalInvoicing','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (278,'RoleInherit','*','WRITE','ALLOW','ROLE','grant',NULL);
+INSERT INTO `ACL` VALUES (279,'MailAlias','*','READ','ALLOW','ROLE','marketing',NULL);
+INSERT INTO `ACL` VALUES (283,'EntryObservation','*','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (284,'LdapConfig','*','*','ALLOW','ROLE','sysadmin',NULL);
+INSERT INTO `ACL` VALUES (285,'SambaConfig','*','*','ALLOW','ROLE','sysadmin',NULL);
+INSERT INTO `ACL` VALUES (286,'ACL','*','*','ALLOW','ROLE','developer',NULL);
+INSERT INTO `ACL` VALUES (287,'AccessToken','*','*','ALLOW','ROLE','developer',NULL);
+INSERT INTO `ACL` VALUES (293,'RoleInherit','*','*','ALLOW','ROLE','it',NULL);
+INSERT INTO `ACL` VALUES (294,'RoleRole','*','*','ALLOW','ROLE','it',NULL);
+INSERT INTO `ACL` VALUES (295,'AccountConfig','*','*','ALLOW','ROLE','sysadmin',NULL);
+INSERT INTO `ACL` VALUES (296,'Collection','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (297,'Sale','clone','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (298,'InvoiceInDueDay','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (299,'Collection','setSaleQuantity','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (302,'AgencyTerm','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (303,'ClaimLog','*','READ','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (304,'Edi','updateData','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (305,'EducationLevel','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (306,'InvoiceInIntrastat','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (307,'SupplierAgencyTerm','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (308,'InvoiceInIntrastat','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (309,'Zone','getZoneClosing','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (310,'ExpeditionState','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (311,'Expense','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (312,'Expense','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (314,'SupplierActivity','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (315,'SupplierActivity','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (316,'Dms','deleteTrashFiles','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (317,'ClientUnpaid','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (318,'MdbVersion','*','*','ALLOW','ROLE','developer',NULL);
+INSERT INTO `ACL` VALUES (319,'ItemType','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (320,'ItemType','*','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (321,'InvoiceOut','refund','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (322,'InvoiceOut','refund','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (323,'InvoiceOut','refund','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (324,'Ticket','refund','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (325,'Ticket','refund','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (326,'Ticket','refund','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (327,'Sale','clone','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (328,'Sale','clone','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (329,'TicketRefund','*','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (330,'ClaimObservation','*','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (331,'ClaimObservation','*','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (332,'Client','setPassword','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (333,'Client','updateUser','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (334,'ShelvingLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (335,'ZoneExclusionGeo','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (336,'ZoneExclusionGeo','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (337,'Parking','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (338,'Shelving','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (339,'OsTicket','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (340,'OsTicketConfig','*','*','ALLOW','ROLE','it',NULL);
+INSERT INTO `ACL` VALUES (341,'ClientConsumptionQueue','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (343,'Ticket','deliveryNoteEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (344,'Ticket','deliveryNoteCsvPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (345,'Ticket','deliveryNoteCsvEmail','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (346,'Client','campaignMetricsPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (347,'Client','campaignMetricsEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (348,'Client','clientWelcomeHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (349,'Client','clientWelcomeEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (350,'Client','creditRequestPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (351,'Client','creditRequestHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (352,'Client','creditRequestEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (353,'Client','printerSetupHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (354,'Client','printerSetupEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (355,'Client','sepaCoreEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (356,'Client','letterDebtorPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (357,'Client','letterDebtorStHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (358,'Client','letterDebtorStEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (359,'Client','letterDebtorNdHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (360,'Client','letterDebtorNdEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (361,'Client','clientDebtStatementPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (362,'Client','clientDebtStatementHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (363,'Client','clientDebtStatementEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (364,'Client','incotermsAuthorizationPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (365,'Client','incotermsAuthorizationHtml','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (366,'Client','incotermsAuthorizationEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (367,'Client','consumptionSendQueued','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (368,'InvoiceOut','invoiceEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (369,'InvoiceOut','exportationPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (370,'InvoiceOut','sendQueued','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (371,'Ticket','invoiceCsvPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (372,'Ticket','invoiceCsvEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (373,'Supplier','campaignMetricsPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (374,'Supplier','campaignMetricsEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (375,'Travel','extraCommunityPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (376,'Travel','extraCommunityEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (377,'Entry','entryOrderPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (378,'OsTicket','osTicketReportEmail','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (379,'Item','buyerWasteEmail','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (380,'Claim','claimPickupPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (381,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (382,'Item','labelPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (383,'Sector','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (384,'Sector','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (385,'Route','driverRoutePdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (386,'Route','driverRouteEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (387,'Ticket','deliveryNotePdf','READ','ALLOW','ROLE','$owner',NULL);
+INSERT INTO `ACL` VALUES (388,'Supplier','newSupplier','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (389,'ClaimRma','*','READ','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (390,'ClaimRma','*','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (391,'Notification','*','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (392,'Boxing','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (393,'Url','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (394,'Url','*','WRITE','ALLOW','ROLE','it',NULL);
+INSERT INTO `ACL` VALUES (395,'ItemShelving','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (396,'ItemShelving','*','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (397,'ItemShelvingPlacementSupplyStock','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (398,'NotificationQueue','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (399,'InvoiceOut','clientsToInvoice','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (400,'InvoiceOut','invoiceClient','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (401,'Sale','editTracked','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (402,'Sale','editFloramondo','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (403,'Receipt','balanceCompensationEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (404,'Receipt','balanceCompensationPdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (405,'Ticket','getTicketsFuture','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (406,'Ticket','merge','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (407,'Sale','editFloramondo','WRITE','ALLOW','ROLE','logistic',NULL);
+INSERT INTO `ACL` VALUES (408,'ZipConfig','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (409,'Item','*','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (410,'Sale','editCloned','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (411,'Sale','editCloned','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (414,'MdbVersion','*','READ','ALLOW','ROLE','$everyone',NULL);
+INSERT INTO `ACL` VALUES (416,'TicketLog','getChanges','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (417,'Ticket','getTicketsAdvance','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (418,'EntryLog','*','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (419,'Sale','editTracked','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (420,'MdbBranch','*','READ','ALLOW','ROLE','$everyone',NULL);
+INSERT INTO `ACL` VALUES (421,'ItemShelvingSale','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (422,'Docuware','checkFile','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (423,'Docuware','download','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (424,'Docuware','upload','WRITE','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (425,'Docuware','deliveryNoteEmail','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (426,'TpvTransaction','confirm','WRITE','ALLOW','ROLE','$everyone',NULL);
+INSERT INTO `ACL` VALUES (427,'TpvTransaction','start','WRITE','ALLOW','ROLE','$authenticated',NULL);
+INSERT INTO `ACL` VALUES (428,'TpvTransaction','end','WRITE','ALLOW','ROLE','$authenticated',NULL);
+INSERT INTO `ACL` VALUES (429,'ItemConfig','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (431,'Tag','onSubmit','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (432,'Worker','updateAttributes','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (433,'Worker','createAbsence','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (434,'Worker','updateAbsence','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (435,'Worker','deleteAbsence','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (436,'Worker','new','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (438,'Client','getClientOrSupplierReference','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (439,'NotificationSubscription','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (440,'NotificationAcl','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (441,'MdbApp','*','READ','ALLOW','ROLE','$everyone',NULL);
+INSERT INTO `ACL` VALUES (442,'MdbApp','*','*','ALLOW','ROLE','developer',NULL);
+INSERT INTO `ACL` VALUES (443,'ItemConfig','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (444,'DeviceProduction','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (445,'DeviceProductionModels','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (446,'DeviceProductionState','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (447,'DeviceProductionUser','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (448,'DeviceProduction','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (449,'DeviceProductionModels','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (450,'DeviceProductionState','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (451,'DeviceProductionUser','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (452,'Worker','deallocatePDA','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (453,'Worker','allocatePDA','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (454,'Worker','deallocatePDA','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (455,'Worker','allocatePDA','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (456,'Zone','*','*','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (458,'Operator','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (459,'Operator','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (460,'InvoiceIn','getSerial','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (461,'Ticket','saveSign','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (462,'InvoiceOut','negativeBases','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (463,'InvoiceOut','negativeBasesCsv','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (464,'WorkerObservation','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (465,'ClientInforma','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (466,'ClientInforma','*','WRITE','ALLOW','ROLE','financial',NULL);
+INSERT INTO `ACL` VALUES (467,'Receipt','receiptEmail','*','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (468,'Client','setRating','WRITE','ALLOW','ROLE','financial',NULL);
+INSERT INTO `ACL` VALUES (470,'Client','addressesPropagateRe','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (471,'Client','canBeInvoiced','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (472,'Client','canCreateTicket','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (473,'Client','consumption','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (474,'Client','createAddress','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (475,'Client','createWithUser','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (476,'Client','extendedListFilter','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (477,'Client','getAverageInvoiced','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (478,'Client','getCard','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (479,'Client','getDebt','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (480,'Client','getMana','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (481,'Client','transactions','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (482,'Client','hasCustomerRole','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (483,'Client','isValidClient','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (484,'Client','lastActiveTickets','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (485,'Client','sendSms','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (486,'Client','setPassword','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (487,'Client','summary','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (488,'Client','updateAddress','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (489,'Client','updateFiscalData','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (491,'Client','uploadFile','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (492,'Client','campaignMetricsPdf','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (493,'Client','campaignMetricsEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (494,'Client','clientWelcomeHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (495,'Client','clientWelcomeEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (496,'Client','printerSetupHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (497,'Client','printerSetupEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (498,'Client','sepaCoreEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (499,'Client','letterDebtorPdf','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (500,'Client','letterDebtorStHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (501,'Client','letterDebtorStEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (502,'Client','letterDebtorNdHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (503,'Client','letterDebtorNdEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (504,'Client','clientDebtStatementPdf','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (505,'Client','clientDebtStatementHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (506,'Client','clientDebtStatementEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (507,'Client','creditRequestPdf','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (508,'Client','creditRequestHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (509,'Client','creditRequestEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (510,'Client','incotermsAuthorizationPdf','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (511,'Client','incotermsAuthorizationHtml','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (512,'Client','incotermsAuthorizationEmail','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (513,'Client','consumptionSendQueued','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (514,'Client','filter','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (515,'Client','getClientOrSupplierReference','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (516,'Client','upsert','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (518,'Client','replaceById','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (519,'Client','updateAttributes','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (520,'Client','updateAttributes','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (521,'Client','deleteById','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (522,'Client','replaceOrCreate','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (523,'Client','updateAll','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (524,'Client','upsertWithWhere','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (525,'Defaulter','observationEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (527,'VnUser','acl','READ','ALLOW','ROLE','guest',NULL);
+INSERT INTO `ACL` VALUES (528,'VnUser','getCurrentUserData','READ','ALLOW','ROLE','account',NULL);
+INSERT INTO `ACL` VALUES (530,'Account','exists','READ','ALLOW','ROLE','account',NULL);
+INSERT INTO `ACL` VALUES (531,'Account','exists','READ','ALLOW','ROLE','account',NULL);
+INSERT INTO `ACL` VALUES (532,'UserLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (533,'RoleLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (534,'WagonType','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (535,'WagonTypeColor','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (536,'WagonTypeTray','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (537,'WagonConfig','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (538,'CollectionWagon','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (539,'CollectionWagonTicket','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (540,'Wagon','*','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (541,'WagonType','createWagonType','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (542,'WagonType','deleteWagonType','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (543,'WagonType','editWagonType','*','ALLOW','ROLE','productionAssi',NULL);
+INSERT INTO `ACL` VALUES (544,'Docuware','deliveryNoteEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (545,'Agency','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (546,'Agency','seeExpired','READ','ALLOW','ROLE','coolerAssist',NULL);
+INSERT INTO `ACL` VALUES (547,'WorkerLog','models','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (548,'Ticket','editDiscount','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (549,'Ticket','editDiscount','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (550,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (551,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (552,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (553,'Ticket','isRoleAdvanced','*','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (554,'Ticket','deleteTicketWithPartPrepared','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (555,'Ticket','editZone','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (556,'State','editableStates','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (557,'State','seeEditableStates','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (558,'State','seeEditableStates','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (559,'State','isSomeEditable','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (560,'State','isAllEditable','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (561,'State','isAllEditable','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (562,'Agency','seeExpired','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (563,'Agency','seeExpired','READ','ALLOW','ROLE','productionBoss',NULL);
+INSERT INTO `ACL` VALUES (564,'Claim','createAfterDeadline','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (565,'Client','editAddressLogifloraAllowed','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (566,'Client','editFiscalDataWithoutTaxDataCheck','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (567,'Client','editVerifiedDataWithoutTaxDataCheck','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (568,'Client','editCredit','WRITE','ALLOW','ROLE','financialBoss',NULL);
+INSERT INTO `ACL` VALUES (569,'Client','zeroCreditEditor','WRITE','ALLOW','ROLE','financialBoss',NULL);
+INSERT INTO `ACL` VALUES (570,'InvoiceOut','canCreatePdf','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (571,'Supplier','editPayMethodCheck','WRITE','ALLOW','ROLE','financial',NULL);
+INSERT INTO `ACL` VALUES (572,'Worker','isTeamBoss','WRITE','ALLOW','ROLE','teamBoss',NULL);
+INSERT INTO `ACL` VALUES (573,'Worker','forceIsSubordinate','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (574,'Claim','editPickup','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (577,'Claim','findOne','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (579,'Claim','updateClaim','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (580,'Claim','regularizeClaim','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (581,'Claim','updateClaimDestination','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (582,'Claim','downloadFile','READ','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (583,'Claim','deleteById','WRITE','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (585,'Claim','logs','READ','ALLOW','ROLE','claimManager',NULL);
+INSERT INTO `ACL` VALUES (586,'Ticket','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (587,'Ticket','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (588,'Ticket','findOne','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (589,'Ticket','getVolume','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (590,'Ticket','getTotalVolume','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (591,'Ticket','summary','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (592,'Ticket','priceDifference','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (593,'Ticket','componentUpdate','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (594,'Ticket','new','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (595,'Ticket','isEditable','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (596,'Ticket','setDeleted','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (597,'Ticket','restore','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (598,'Ticket','getSales','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (599,'Ticket','getSalesPersonMana','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (600,'Ticket','filter','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (601,'Ticket','makeInvoice','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (602,'Ticket','updateEditableTicket','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (603,'Ticket','updateDiscount','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (604,'Ticket','transferSales','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (605,'Ticket','sendSms','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (606,'Ticket','isLocked','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (607,'Ticket','freightCost','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (608,'Ticket','getComponentsSum','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (609,'Ticket','updateAttributes','WRITE','ALLOW','ROLE','delivery',NULL);
+INSERT INTO `ACL` VALUES (610,'Ticket','deliveryNoteCsv','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (611,'State','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (612,'State','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (613,'State','findOne','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (614,'Worker','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (615,'Worker','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (616,'Worker','findOne','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (617,'Worker','filter','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (618,'Worker','getWorkedHours','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (619,'Worker','active','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (620,'Worker','activeWithRole','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (621,'Worker','uploadFile','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (622,'Worker','contracts','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (623,'Worker','holidays','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (624,'Worker','activeContract','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (625,'Worker','activeWithInheritedRole','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (626,'Ticket','collectionLabel','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (628,'Ticket','expeditionPalletLabel','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (629,'Ticket','editDiscount','WRITE','ALLOW','ROLE','artificialBoss',NULL);
+INSERT INTO `ACL` VALUES (630,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','salesTeamBoss',NULL);
+INSERT INTO `ACL` VALUES (635,'Ticket','updateAttributes','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (636,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (637,'Claim','downloadFile','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (638,'Agency','seeExpired','READ','ALLOW','ROLE','artificialBoss',NULL);
+INSERT INTO `ACL` VALUES (639,'Agency','seeExpired','READ','ALLOW','ROLE','logisticAssistant',NULL);
+INSERT INTO `ACL` VALUES (654,'Ticket','editZone','WRITE','ALLOW','ROLE','logisticAssistant',NULL);
+INSERT INTO `ACL` VALUES (655,'Entry','addFromPackaging','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (656,'Entry','addFromBuy','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (657,'Supplier','getItemsPackaging','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (658,'Ticket','closeAll','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (659,'Account','*','*','ALLOW','ROLE','developerBoss',NULL);
+INSERT INTO `ACL` VALUES (664,'MailForward','*','*','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (667,'VnUser','*','*','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (668,'VnUser','__get__preview','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (669,'VnUser','preview','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (670,'VnUser','create','*','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (672,'PackingSiteAdvanced','*','*','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (673,'InvoiceOut','makePdfAndNotify','WRITE','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (674,'InvoiceOutConfig','*','READ','ALLOW','ROLE','invoicing',NULL);
+INSERT INTO `ACL` VALUES (676,'Ticket','invoiceTickets','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (680,'MailAliasAccount','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (683,'MailAliasAccount','canEditAlias','WRITE','ALLOW','ROLE','developerBoss',NULL);
+INSERT INTO `ACL` VALUES (684,'WorkerDisableExcluded','*','READ','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (685,'WorkerDisableExcluded','*','WRITE','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (686,'MailForward','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (687,'ClientSms','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (688,'ClientSms','create','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (689,'Vehicle','sorted','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (695,'ViaexpressConfig','internationalExpedition','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (696,'ViaexpressConfig','renderer','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (697,'Ticket','transferClient','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (698,'Ticket','canEditWeekly','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (699,'TicketSms','find','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (701,'Docuware','upload','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (702,'Ticket','docuwareDownload','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (703,'Worker','search','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (704,'ExpeditionState','addExpeditionState','WRITE','ALLOW','ROLE','delivery',NULL);
+INSERT INTO `ACL` VALUES (705,'SaleGroupDetail','deleteById','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (706,'Ticket','setDeleted','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (707,'DeviceLog','create','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (708,'Collection','getTickets','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (709,'Client','findOne','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (710,'Client','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (711,'Client','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (712,'Client','exists','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (713,'Client','__get__addresses','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (714,'ExpeditionMistakeType','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (715,'WorkerMistakeType','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (716,'ExpeditionMistake','*','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (717,'WorkerMistake','*','WRITE','ALLOW','ROLE','coolerAssist',NULL);
+INSERT INTO `ACL` VALUES (718,'MistakesTypes','*','WRITE','ALLOW','ROLE','coolerAssist',NULL);
+INSERT INTO `ACL` VALUES (719,'MistakeType','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (720,'MachineWorker','*','READ','ALLOW','ROLE','coolerAssist',NULL);
+INSERT INTO `ACL` VALUES (721,'Printer','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (722,'SaleMistake','*','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (723,'Item','setVisibleDiscard','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (724,'Address','getAddress','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (725,'Account','findOne','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (726,'Account','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (727,'Account','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (728,'Account','exists','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (729,'Sale','clone','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (730,'Ticket','setDeleted','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (732,'Sale','isInPreparing','*','ALLOW','ROLE','reviewer',NULL);
+INSERT INTO `ACL` VALUES (733,'Train','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (734,'WorkerDepartment','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (735,'VnUser','higherPrivileges','*','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (736,'VnUser','mediumPrivileges','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (737,'VnUser','updateUser','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (738,'TicketCollection','*','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (739,'Worker','setPassword','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (740,'Url','getByUser','READ','ALLOW','ROLE','$everyone',NULL);
+INSERT INTO `ACL` VALUES (741,'Claim','__get__lines','READ','ALLOW','ROLE','claimViewer',NULL);
+INSERT INTO `ACL` VALUES (742,'AddressShortage','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (743,'Claim','filter','READ','ALLOW','ROLE','claimViewer',NULL);
+INSERT INTO `ACL` VALUES (744,'Claim','find','READ','ALLOW','ROLE','claimViewer',NULL);
+INSERT INTO `ACL` VALUES (745,'Claim','findById','READ','ALLOW','ROLE','claimViewer',NULL);
+INSERT INTO `ACL` VALUES (746,'Claim','getSummary','READ','ALLOW','ROLE','claimViewer',NULL);
+INSERT INTO `ACL` VALUES (747,'CplusRectificationType','*','READ','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (748,'SiiTypeInvoiceOut','*','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (749,'InvoiceCorrectionType','*','READ','ALLOW','ROLE','salesPerson',NULL);
+INSERT INTO `ACL` VALUES (750,'InvoiceOut','transferInvoice','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (751,'Application','executeProc','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (752,'Application','executeFunc','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (753,'NotificationSubscription','getList','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (754,'Route','find','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (755,'Route','findById','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (756,'Route','findOne','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (757,'Route','getRoutesByWorker','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (758,'Route','canViewAllRoute','READ','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (759,'Route','cmr','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (760,'Route','downloadCmrsZip','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (761,'Route','downloadZip','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (762,'Route','filter','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (763,'Route','getByWorker','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (764,'Route','getDeliveryPoint','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (765,'Route','cmrs','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (766,'Route','getSuggestedTickets','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (767,'Route','getTickets','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (768,'Route','guessPriority','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (769,'Route','insertTicket','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (770,'Route','getDeliveryPoint','READ','ALLOW','ROLE','deliveryBoss',NULL);
+INSERT INTO `ACL` VALUES (771,'Route','summary','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (772,'Route','getExpeditionSummary','READ','ALLOW','ROLE','delivery',NULL);
+INSERT INTO `ACL` VALUES (773,'WorkerTimeControl','login','READ','ALLOW','ROLE','timeControl',NULL);
+INSERT INTO `ACL` VALUES (774,'WorkerTimeControl','getClockIn','READ','ALLOW','ROLE','timeControl',NULL);
+INSERT INTO `ACL` VALUES (775,'WorkerTimeControl','clockIn','WRITE','ALLOW','ROLE','timeControl',NULL);
+INSERT INTO `ACL` VALUES (776,'WorkerTimeControl','addTimeEntry','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (777,'WorkerTimeControl','deleteTimeEntry','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (778,'WorkerTimeControl','updateTimeEntry','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (779,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','developer',NULL);
+INSERT INTO `ACL` VALUES (780,'WorkerTimeControl','updateMailState','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (781,'WorkerTimeControl','weeklyHourRecordEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (782,'WorkerTimeControl','getMailStates','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (783,'WorkerTimeControl','resendWeeklyHourEmail','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (784,'VnRole','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (785,'VnRole','*','WRITE','ALLOW','ROLE','it',NULL);
+INSERT INTO `ACL` VALUES (786,'State','isAllEditable','READ','ALLOW','ROLE','delivery',NULL);
+INSERT INTO `ACL` VALUES (787,'Ticket','makePdfList','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (788,'Ticket','invoiceTicketsAndPdf','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (789,'InvoiceIn','*','READ','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (790,'InvoiceIn','getSerial','READ','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (791,'InvoiceIn','corrective','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (792,'InvoiceInCorrection','*','*','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (793,'Supplier','updateAllFiscalData','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (794,'Supplier','updateFiscalData','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (795,'Ticket','myLastModified','*','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (796,'MrwConfig','cancelShipment','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (797,'MrwConfig','createShipment','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (798,'MailAliasAccount','*','*','ALLOW','ROLE','itManagement',NULL);
+INSERT INTO `ACL` VALUES (799,'Ticket','saveCmr','*','ALLOW','ROLE','developer',NULL);
+INSERT INTO `ACL` VALUES (800,'EntryDms','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (801,'MailAliasAccount','create','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (802,'MailAliasAccount','deleteById','WRITE','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (804,'DeviceProduction','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (805,'Collection','assign','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (806,'ExpeditionPallet','getPallet','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (807,'MachineWorker','updateInTime','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (808,'MobileAppVersionControl','getVersion','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (809,'SaleTracking','delete','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (810,'SaleTracking','updateTracking','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (811,'SaleTracking','setPicked','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (813,'Sale','getFromSectorCollection','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (814,'ItemBarcode','delete','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (815,'WorkerActivityType','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (816,'WorkerActivity','*','*','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (817,'ParkingLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (818,'ExpeditionPallet','*','*','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (819,'Ticket','addSaleByCode','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (820,'TicketCollection','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (821,'Ticket','clone','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (822,'SupplierDms','*','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (823,'MailAlias','*','*','ALLOW','ROLE','developerBoss',NULL);
+INSERT INTO `ACL` VALUES (824,'ItemShelving','hasItemOlder','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (825,'Application','getEnumValues','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (826,'Ticket','editZone','WRITE','ALLOW','ROLE','salesAssistant',NULL);
+INSERT INTO `ACL` VALUES (827,'TicketWeekly','deleteById','WRITE','ALLOW','ROLE','buyerBoss',NULL);
+INSERT INTO `ACL` VALUES (828,'TicketWeekly','upsert','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (830,'InvoiceIn','*','READ','ALLOW','ROLE','deliveryBoss',NULL);
+INSERT INTO `ACL` VALUES (831,'InvoiceIn','exchangeRateUpdate','*','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (832,'AgencyLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (833,'AgencyWorkCenter','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (835,'Agency','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (836,'Agency','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (837,'AgencyWorkCenter','*','WRITE','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (838,'Worker','getAvailablePda','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (839,'Locker','__get__codes','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (840,'Locker','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (841,'Locker','*','*','ALLOW','ROLE','productionBoss',NULL);
+INSERT INTO `ACL` VALUES (842,'Worker','__get__locker','READ','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (843,'Worker','__get__locker','READ','ALLOW','ROLE','productionBoss',NULL);
+INSERT INTO `ACL` VALUES (846,'Ticket','refund','WRITE','ALLOW','ROLE','logistic',NULL);
+INSERT INTO `ACL` VALUES (847,'RouteConfig','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (848,'InvoiceIn','updateInvoiceIn','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (849,'InvoiceIn','clone','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (850,'InvoiceIn','corrective','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (851,'InvoiceIn','exchangeRateUpdate','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (852,'InvoiceIn','invoiceInEmail','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (853,'InvoiceIn','toBook','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (854,'InvoiceIn','toUnbook','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (855,'InvoiceIn','deleteById','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (856,'InvoiceIn','updateInvoiceIn','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (857,'InvoiceIn','clone','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (858,'InvoiceIn','corrective','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (859,'InvoiceIn','exchangeRateUpdate','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (860,'InvoiceIn','invoiceInEmail','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (861,'InvoiceIn','toBook','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (862,'InvoiceIn','deleteById','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (863,'InvoiceIn','create','WRITE','ALLOW','ROLE','administrative',NULL);
+INSERT INTO `ACL` VALUES (864,'InvoiceIn','create','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (865,'Ticket','deliveryNotePdf','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (866,'InvoiceOut','download','READ','ALLOW','ROLE','$owner',NULL);
+INSERT INTO `ACL` VALUES (867,'InvoiceIn','*','READ','ALLOW','ROLE','maintenanceBoss',NULL);
+INSERT INTO `ACL` VALUES (868,'InvoiceIn','*','READ','ALLOW','ROLE','maintenanceBos',NULL);
+INSERT INTO `ACL` VALUES (869,'Ticket','editZone','WRITE','ALLOW','ROLE','buyer',NULL);
+INSERT INTO `ACL` VALUES (870,'Entry','find','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (871,'RoadmapAddress','*','WRITE','ALLOW','ROLE','palletizerBoss',NULL);
+INSERT INTO `ACL` VALUES (872,'RoadmapAddress','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (873,'Roadmap','*','WRITE','ALLOW','ROLE','palletizerBoss',NULL);
+INSERT INTO `ACL` VALUES (874,'Roadmap','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (875,'RoadmapStop','*','WRITE','ALLOW','ROLE','palletizerBoss',NULL);
+INSERT INTO `ACL` VALUES (876,'RoadmapStop','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (877,'TravelKgPercentage','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (878,'MrwConfig','getLabel','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (879,'AgencyMode','*','*','ALLOW','ROLE','deliveryAssistant',NULL);
+INSERT INTO `ACL` VALUES (880,'Collection','assignCollection','WRITE','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (881,'TrainingCourse','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (882,'TrainingCourseType','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (883,'TrainingCenter','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (884,'Worker','__get__trainingCourse','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (885,'WorkerTimeControl','addTimeEntry','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (886,'WorkerTimeControl','deleteTimeEntry','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (887,'WorkerTimeControl','updateTimeEntry','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (888,'WorkerTimeControl','weeklyHourRecordEmail','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (889,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (890,'WorkerTimeControl','updateMailState','WRITE','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (891,'TravelKgPercentage','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (892,'WorkerIncome','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (893,'PayrollComponent','*','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (894,'Worker','__get__incomes','*','ALLOW','ROLE','hr',NULL);
+INSERT INTO `ACL` VALUES (895,'ItemShelvingLog','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (897,'WorkerLog','*','READ','ALLOW','ROLE','employee',NULL);
+INSERT INTO `ACL` VALUES (901,'WorkerTimeControl','sendMail','WRITE','ALLOW','ROLE','system',NULL);
+INSERT INTO `ACL` VALUES (902,'Entry','filter','READ','ALLOW','ROLE','supplier',NULL);
+INSERT INTO `ACL` VALUES (903,'Entry','getBuys','READ','ALLOW','ROLE','supplier',NULL);
+INSERT INTO `ACL` VALUES (904,'Entry','buyLabel','READ','ALLOW','ROLE','supplier',NULL);
+INSERT INTO `ACL` VALUES (905,'AddressWaste','*','READ','ALLOW','ROLE','production',NULL);
+INSERT INTO `ACL` VALUES (906,'Entry','print','READ','ALLOW','ROLE','supplier',NULL);
+INSERT INTO `ACL` VALUES (907,'Expedition_PrintOut','*','*','ALLOW','ROLE','production',NULL);
INSERT INTO `fieldAcl` VALUES (1,'Client','name','update','employee');
INSERT INTO `fieldAcl` VALUES (2,'Client','contact','update','employee');
@@ -2395,7 +2402,7 @@ INSERT INTO `department` VALUES (37,'PROD','PRODUCCION',14,37,NULL,72,1,1,1,11,1
INSERT INTO `department` VALUES (38,'picking','SACADO',17,18,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (39,'packing','ENCAJADO',19,20,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (41,'administration','ADMINISTRACION',38,39,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (43,'VT','VENTAS',40,71,NULL,0,0,0,1,15,1,'/1/',NULL,1,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (43,'VT','VENTAS',40,71,NULL,0,0,0,1,15,1,'/1/',NULL,0,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (44,'management','GERENCIA',72,73,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (45,'logistic','LOGISTICA',74,75,NULL,72,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (46,'delivery','REPARTO',76,77,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
@@ -2408,35 +2415,35 @@ INSERT INTO `department` VALUES (55,NULL,'TALLER NATURAL',21,22,14548,72,0,0,2,0
INSERT INTO `department` VALUES (56,NULL,'TALLER ARTIFICIAL',23,24,8470,72,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,1927,NULL,NULL,NULL);
INSERT INTO `department` VALUES (58,'CMP','CAMPOS',86,89,NULL,72,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (59,'maintenance','MANTENIMIENTO',90,91,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (60,'claims','RECLAMACIONES',43,44,NULL,72,0,0,2,0,43,'/1/43/',NULL,1,NULL,1,1,0,0,NULL,NULL,NULL,NULL);
+INSERT INTO `department` VALUES (60,'claims','RECLAMACIONES',43,44,NULL,72,0,0,2,0,43,'/1/43/',NULL,0,NULL,1,1,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (61,NULL,'VNH',92,95,NULL,73,0,0,1,1,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (66,NULL,'VERDNAMADRID',96,97,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (68,NULL,'COMPLEMENTOS',25,26,NULL,72,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (69,NULL,'VERDNABARNA',98,99,NULL,74,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (80,'spainTeam5','EQUIPO ESPAÑA 5',45,46,4250,0,0,0,2,0,43,'/1/43/','es5_equipo',1,'es5@verdnatura.es',0,0,0,0,NULL,NULL,'5300',NULL);
+INSERT INTO `department` VALUES (80,'spainTeam5','EQUIPO ESPAÑA 5',45,46,4250,0,0,0,2,0,43,'/1/43/','es5_equipo',0,'es5@verdnatura.es',0,0,0,0,NULL,NULL,'5300',NULL);
INSERT INTO `department` VALUES (86,NULL,'LIMPIEZA',100,101,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (89,NULL,'COORDINACION',102,103,NULL,0,1,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (90,NULL,'TRAILER',93,94,NULL,0,0,0,2,0,61,'/1/61/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (91,'artificial','ARTIFICIAL',27,28,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (92,NULL,'EQUIPO SILVERIO',47,48,1203,0,0,0,2,0,43,'/1/43/','sdc_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (94,'spainTeam2','EQUIPO ESPAÑA 2',49,50,3797,0,0,0,2,0,43,'/1/43/','es2_equipo',1,'es2@verdnatura.es',0,0,0,0,NULL,NULL,'5100',NULL);
-INSERT INTO `department` VALUES (95,'spainTeam1','EQUIPO ESPAÑA 1',51,52,24065,0,0,0,2,0,43,'/1/43/','es1_equipo',1,'es1@verdnatura.es',0,0,0,0,NULL,NULL,'5000',NULL);
+INSERT INTO `department` VALUES (94,'spainTeam2','EQUIPO ESPAÑA 2',49,50,3797,0,0,0,2,0,43,'/1/43/','es2_equipo',0,'es2@verdnatura.es',0,0,0,0,NULL,NULL,'5100',NULL);
+INSERT INTO `department` VALUES (95,'spainTeam1','EQUIPO ESPAÑA 1',51,52,24065,0,0,0,2,0,43,'/1/43/','es1_equipo',0,'es1@verdnatura.es',0,0,0,0,NULL,NULL,'5000',NULL);
INSERT INTO `department` VALUES (96,NULL,'EQUIPO C LOPEZ',53,54,4661,0,0,0,2,0,43,'/1/43/','cla_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (115,NULL,'EQUIPO CLAUDI',55,56,3810,0,0,0,2,0,43,'/1/43/','csr_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (123,NULL,'EQUIPO ELENA BASCUÑANA',57,58,7102,0,0,0,2,0,43,'/1/43/','ebt_equipo',0,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (124,NULL,'CONTROL INTERNO',104,105,NULL,72,0,0,1,0,1,'/1/',NULL,0,NULL,1,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (125,'spainTeam3','EQUIPO ESPAÑA 3',59,60,1118,0,0,0,2,0,43,'/1/43/','es3_equipo',1,'es3@verdnatura.es',0,0,0,0,NULL,NULL,'5200',NULL);
+INSERT INTO `department` VALUES (125,'spainTeam3','EQUIPO ESPAÑA 3',59,60,1118,0,0,0,2,0,43,'/1/43/','es3_equipo',0,'es3@verdnatura.es',0,0,0,0,NULL,NULL,'5200',NULL);
INSERT INTO `department` VALUES (126,NULL,'PRESERVADO',29,30,NULL,0,0,0,2,0,37,'/1/37/',NULL,0,NULL,0,1,1,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (128,NULL,'PALETIZADO',31,32,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (130,NULL,'REVISION',33,34,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (131,'greenhouse','INVERNADERO',87,88,NULL,0,0,0,2,0,58,'/1/58/',NULL,0,NULL,0,1,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (132,NULL,'EQUIPO DC',61,62,1731,0,0,0,2,0,43,'/1/43/','dc_equipo',1,'gestioncomercial@verdnatura.es',0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (133,'franceTeam','EQUIPO FRANCIA',63,64,1731,72,0,0,2,0,43,'/1/43/','fr_equipo',1,'gestionfrancia@verdnatura.es',0,0,0,0,NULL,NULL,'3300',NULL);
-INSERT INTO `department` VALUES (134,'portugalTeam','EQUIPO PORTUGAL',65,66,6264,0,0,0,2,0,43,'/1/43/','pt_equipo',1,'portugal@verdnatura.es',0,0,0,0,NULL,NULL,'3500',NULL);
+INSERT INTO `department` VALUES (133,'franceTeam','EQUIPO FRANCIA',63,64,1731,72,0,0,2,0,43,'/1/43/','fr_equipo',0,'gestionfrancia@verdnatura.es',0,0,0,0,NULL,NULL,'3300',NULL);
+INSERT INTO `department` VALUES (134,'portugalTeam','EQUIPO PORTUGAL',65,66,6264,0,0,0,2,0,43,'/1/43/','pt_equipo',0,'portugal@verdnatura.es',0,0,0,0,NULL,NULL,'3500',NULL);
INSERT INTO `department` VALUES (135,'routers','ENRUTADORES',106,107,NULL,0,0,0,1,0,1,'/1/',NULL,1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (136,'heavyVehicles','VEHICULOS PESADOS',108,109,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (137,'sorter','SORTER',110,111,NULL,0,0,0,1,0,1,'/1/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
-INSERT INTO `department` VALUES (139,'spainTeam4','EQUIPO ESPAÑA 4',67,68,3803,0,0,0,2,0,43,'/1/43/','es4_equipo',1,'es4@verdnatura.es',0,0,0,0,NULL,NULL,'5400',NULL);
+INSERT INTO `department` VALUES (139,'spainTeam4','EQUIPO ESPAÑA 4',67,68,3803,0,0,0,2,0,43,'/1/43/','es4_equipo',0,'es4@verdnatura.es',0,0,0,0,NULL,NULL,'5400',NULL);
INSERT INTO `department` VALUES (140,'hollandTeam','EQUIPO HOLANDA',69,70,NULL,0,0,0,2,0,43,'/1/43/','nl_equipo',1,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (141,NULL,'PREVIA',35,36,NULL,0,1,0,2,0,37,'/1/37/',NULL,0,NULL,0,0,0,1,NULL,NULL,NULL,NULL);
INSERT INTO `department` VALUES (146,NULL,'VERDNACOLOMBIA',3,4,NULL,72,0,0,2,0,22,'/1/22/',NULL,0,NULL,0,0,0,0,NULL,NULL,NULL,NULL);
@@ -2531,172 +2538,6 @@ INSERT INTO `siiTypeInvoiceOut` VALUES (7,'R3','Factura rectificativa (Art. 80.4
INSERT INTO `siiTypeInvoiceOut` VALUES (8,'R4','Factura rectificativa (Resto)');
INSERT INTO `siiTypeInvoiceOut` VALUES (9,'R5','Factura rectificativa en facturas simplificadas');
-INSERT INTO `silexACL` VALUES (1,'workerTimeControl','clockIn','$everyone');
-INSERT INTO `silexACL` VALUES (2,'workerTimeControl','getClockIn','$everyone');
-INSERT INTO `silexACL` VALUES (3,'workerTimeControl','login','$everyone');
-INSERT INTO `silexACL` VALUES (4,'security','device_checkLogin','employee');
-INSERT INTO `silexACL` VALUES (5,'security','getVersion','employee');
-INSERT INTO `silexACL` VALUES (6,'security','login','employee');
-INSERT INTO `silexACL` VALUES (7,'delivery','addNote','employee');
-INSERT INTO `silexACL` VALUES (8,'delivery','expeditionState_add','employee');
-INSERT INTO `silexACL` VALUES (9,'delivery','expeditionState_addByExpedition','employee');
-INSERT INTO `silexACL` VALUES (10,'delivery','expeditionState_addByExpeditionMulti','employee');
-INSERT INTO `silexACL` VALUES (11,'delivery','expeditionState_addByRoute','employee');
-INSERT INTO `silexACL` VALUES (12,'delivery','expedition_getLog','employee');
-INSERT INTO `silexACL` VALUES (13,'delivery','getExpeditionFromRoute','employee');
-INSERT INTO `silexACL` VALUES (14,'delivery','getInfo','employee');
-INSERT INTO `silexACL` VALUES (15,'delivery','getInfoCompany','employee');
-INSERT INTO `silexACL` VALUES (16,'delivery','getInfoFreelance','employee');
-INSERT INTO `silexACL` VALUES (17,'delivery','getWorkers','employee');
-INSERT INTO `silexACL` VALUES (18,'delivery','get_routes','employee');
-INSERT INTO `silexACL` VALUES (19,'delivery','get_tickets','employee');
-INSERT INTO `silexACL` VALUES (20,'delivery','get_version','employee');
-INSERT INTO `silexACL` VALUES (21,'delivery','saveLoadersWorkers','employee');
-INSERT INTO `silexACL` VALUES (22,'delivery','save_sign','employee');
-INSERT INTO `silexACL` VALUES (23,'delivery','setRouteOk','employee');
-INSERT INTO `silexACL` VALUES (24,'delivery','updateExpeditionChecked','employee');
-INSERT INTO `silexACL` VALUES (25,'delivery','update_routes','employee');
-INSERT INTO `silexACL` VALUES (26,'almacennew','barcodes_edit','employee');
-INSERT INTO `silexACL` VALUES (27,'almacennew','barcodeToItem','employee');
-INSERT INTO `silexACL` VALUES (28,'almacennew','buffer_setTypeByName','employee');
-INSERT INTO `silexACL` VALUES (29,'almacennew','buy_updateGrouping','employee');
-INSERT INTO `silexACL` VALUES (30,'almacennew','buy_updatePacking','employee');
-INSERT INTO `silexACL` VALUES (31,'almacennew','checkRouteExpeditionScanPut','employee');
-INSERT INTO `silexACL` VALUES (32,'almacennew','clearShelvingList','employee');
-INSERT INTO `silexACL` VALUES (33,'almacennew','collectionAddItem','employee');
-INSERT INTO `silexACL` VALUES (34,'almacennew','collectionGet','employee');
-INSERT INTO `silexACL` VALUES (35,'almacennew','collectionIncreaseQuantity','employee');
-INSERT INTO `silexACL` VALUES (36,'almacennew','collectionMissingTrash','employee');
-INSERT INTO `silexACL` VALUES (37,'almacennew','collectionNew','employee');
-INSERT INTO `silexACL` VALUES (38,'almacennew','collectionStickerPrint','employee');
-INSERT INTO `silexACL` VALUES (39,'almacennew','collection_getTickets','employee');
-INSERT INTO `silexACL` VALUES (40,'almacennew','collection_printSticker','employee');
-INSERT INTO `silexACL` VALUES (41,'almacennew','department_getHasMistake','employee');
-INSERT INTO `silexACL` VALUES (42,'almacennew','deviceLog_add','employee');
-INSERT INTO `silexACL` VALUES (43,'almacennew','deviceProductionUser_getWorker','employee');
-INSERT INTO `silexACL` VALUES (44,'almacennew','deviceProduction_getnameDevice','employee');
-INSERT INTO `silexACL` VALUES (45,'almacennew','expeditionLoading_add','employee');
-INSERT INTO `silexACL` VALUES (46,'almacennew','expeditionPalletDel','employee');
-INSERT INTO `silexACL` VALUES (47,'almacennew','expeditionPalletList','employee');
-INSERT INTO `silexACL` VALUES (48,'almacennew','expeditionPalletPrintSet','employee');
-INSERT INTO `silexACL` VALUES (49,'almacennew','expeditionPalletView','employee');
-INSERT INTO `silexACL` VALUES (50,'almacennew','expeditionScanAdd','employee');
-INSERT INTO `silexACL` VALUES (51,'almacennew','expeditionScanDel','employee');
-INSERT INTO `silexACL` VALUES (52,'almacennew','expeditionScanList','employee');
-INSERT INTO `silexACL` VALUES (53,'almacennew','expeditionScanPut','employee');
-INSERT INTO `silexACL` VALUES (54,'almacennew','expeditionState_addByPallet','employee');
-INSERT INTO `silexACL` VALUES (55,'almacennew','expeditionTruckAdd','employee');
-INSERT INTO `silexACL` VALUES (56,'almacennew','expeditionTruckList','employee');
-INSERT INTO `silexACL` VALUES (57,'almacennew','expedition_getState','employee');
-INSERT INTO `silexACL` VALUES (58,'almacennew','expedition_scan','employee');
-INSERT INTO `silexACL` VALUES (59,'almacennew','faultsReview','employee');
-INSERT INTO `silexACL` VALUES (60,'almacennew','faultsReview_isChecked','employee');
-INSERT INTO `silexACL` VALUES (61,'almacennew','getItemUbication','employee');
-INSERT INTO `silexACL` VALUES (62,'almacennew','get_ItemPackingType','employee');
-INSERT INTO `silexACL` VALUES (63,'almacennew','itemDiary','employee');
-INSERT INTO `silexACL` VALUES (64,'almacennew','itemPlacementSupplyAiming','employee');
-INSERT INTO `silexACL` VALUES (65,'almacennew','itemPlacementSupplyCloseOrder','employee');
-INSERT INTO `silexACL` VALUES (66,'almacennew','itemPlacementSupplyGetOrder','employee');
-INSERT INTO `silexACL` VALUES (68,'almacennew','itemShelvingBuyerGet','employee');
-INSERT INTO `silexACL` VALUES (69,'almacennew','itemShelvingBuyerTask','employee');
-INSERT INTO `silexACL` VALUES (70,'almacennew','itemShelvingDelete','employee');
-INSERT INTO `silexACL` VALUES (71,'almacennew','itemShelvingList','employee');
-INSERT INTO `silexACL` VALUES (72,'almacennew','itemShelvingLog_get','employee');
-INSERT INTO `silexACL` VALUES (73,'almacennew','itemShelvingMake','employee');
-INSERT INTO `silexACL` VALUES (74,'almacennew','itemShelvingMakeEdit','employee');
-INSERT INTO `silexACL` VALUES (75,'almacennew','itemShelvingMake_multi','employee');
-INSERT INTO `silexACL` VALUES (76,'almacennew','itemShelvingPlacementSupplyAdd','employee');
-INSERT INTO `silexACL` VALUES (77,'almacennew','itemShelvingSaleSupplyAdd','employee');
-INSERT INTO `silexACL` VALUES (78,'almacennew','itemShelvingStarsUpdate','employee');
-INSERT INTO `silexACL` VALUES (79,'almacennew','itemShelvingTransfer','employee');
-INSERT INTO `silexACL` VALUES (80,'almacennew','itemShelving_addByClaim','employee');
-INSERT INTO `silexACL` VALUES (81,'almacennew','itemShelving_filterBuyer','employee');
-INSERT INTO `silexACL` VALUES (82,'almacennew','itemShelving_getSaleDate','employee');
-INSERT INTO `silexACL` VALUES (83,'almacennew','itemTrash','employee');
-INSERT INTO `silexACL` VALUES (84,'almacennew','item_card','employee');
-INSERT INTO `silexACL` VALUES (85,'almacennew','item_getSimilar','employee');
-INSERT INTO `silexACL` VALUES (86,'almacennew','item_placement_save','employee');
-INSERT INTO `silexACL` VALUES (87,'almacennew','item_saveReference','employee');
-INSERT INTO `silexACL` VALUES (88,'almacennew','item_updatePackingShelve','employee');
-INSERT INTO `silexACL` VALUES (89,'almacennew','machineWorker_add','employee');
-INSERT INTO `silexACL` VALUES (90,'almacennew','machineWorker_getHistorical','employee');
-INSERT INTO `silexACL` VALUES (91,'almacennew','machineWorker_update','employee');
-INSERT INTO `silexACL` VALUES (92,'almacennew','machineWorker_Worker','employee');
-INSERT INTO `silexACL` VALUES (93,'almacennew','machine_checkPlate','employee');
-INSERT INTO `silexACL` VALUES (94,'almacennew','machine_getWorkerPlate','employee');
-INSERT INTO `silexACL` VALUES (95,'almacennew','mistakeType','employee');
-INSERT INTO `silexACL` VALUES (96,'almacennew','printer_get','employee');
-INSERT INTO `silexACL` VALUES (97,'almacennew','qr_getCall','developer');
-INSERT INTO `silexACL` VALUES (98,'almacennew','saleMistakeAdd','employee');
-INSERT INTO `silexACL` VALUES (99,'almacennew','saleMove','employee');
-INSERT INTO `silexACL` VALUES (100,'almacennew','saleParking_add','employee');
-INSERT INTO `silexACL` VALUES (101,'almacennew','saleTrackingDel','employee');
-INSERT INTO `silexACL` VALUES (102,'almacennew','saleTrackingReplace','employee');
-INSERT INTO `silexACL` VALUES (103,'almacennew','saleTracking_add','employee');
-INSERT INTO `silexACL` VALUES (104,'almacennew','saleTracking_addPrevOK','employee');
-INSERT INTO `silexACL` VALUES (105,'almacennew','saleTracking_updateIsChecked','employee');
-INSERT INTO `silexACL` VALUES (106,'almacennew','sectorCollectionSaleGroup_add','employee');
-INSERT INTO `silexACL` VALUES (107,'almacennew','sectorCollection_get','employee');
-INSERT INTO `silexACL` VALUES (108,'almacennew','sectorCollection_getSale','employee');
-INSERT INTO `silexACL` VALUES (109,'almacennew','sectorCollection_new','employee');
-INSERT INTO `silexACL` VALUES (110,'almacennew','sector_get','employee');
-INSERT INTO `silexACL` VALUES (111,'almacennew','shelvingChange','employee');
-INSERT INTO `silexACL` VALUES (112,'almacennew','shelvingLog_get','employee');
-INSERT INTO `silexACL` VALUES (113,'almacennew','shelvingPark','employee');
-INSERT INTO `silexACL` VALUES (114,'almacennew','shelvingParking_get','employee');
-INSERT INTO `silexACL` VALUES (115,'almacennew','shelvingPriorityUpdate','employee');
-INSERT INTO `silexACL` VALUES (116,'almacennew','sip_getExtension','employee');
-INSERT INTO `silexACL` VALUES (117,'almacennew','ticketCollection_setUsedShelves','employee');
-INSERT INTO `silexACL` VALUES (118,'almacennew','ticketOrCollection_checkFullyControlled','employee');
-INSERT INTO `silexACL` VALUES (119,'almacennew','ticketToPrePrepare','employee');
-INSERT INTO `silexACL` VALUES (120,'almacennew','ticket_checkFullyControlled','employee');
-INSERT INTO `silexACL` VALUES (121,'almacennew','ticket_setState','employee');
-INSERT INTO `silexACL` VALUES (122,'almacennew','update_ItemPackingType','employee');
-INSERT INTO `silexACL` VALUES (123,'almacennew','workerMachinery_isRegistered','employee');
-INSERT INTO `silexACL` VALUES (124,'almacennew','workerMistakeType_get','employee');
-INSERT INTO `silexACL` VALUES (125,'almacennew','workerMistake_Add','coolerBoss');
-INSERT INTO `silexACL` VALUES (126,'almacennew','workerShelving_add','employee');
-INSERT INTO `silexACL` VALUES (127,'almacennew','workerShelving_delete','employee');
-INSERT INTO `silexACL` VALUES (128,'almacennew','worker_getFromHasMistake','employee');
-INSERT INTO `silexACL` VALUES (129,'almacennew','worker_getId','employee');
-INSERT INTO `silexACL` VALUES (130,'almacennew','worker_getPrinter','employee');
-INSERT INTO `silexACL` VALUES (131,'almacennew','worker_getSector','employee');
-INSERT INTO `silexACL` VALUES (132,'almacennew','worker_updatePrinter','employee');
-INSERT INTO `silexACL` VALUES (133,'almacennew','worker_updateSector','employee');
-INSERT INTO `silexACL` VALUES (134,'almacennew','itemShelving_updateFromSale','employee');
-INSERT INTO `silexACL` VALUES (135,'almacennew','collection_getUncheckedTicket','employee');
-INSERT INTO `silexACL` VALUES (136,'almacennew','itemShelving_return','employee');
-INSERT INTO `silexACL` VALUES (137,'almacennew','itemShelving_merge','employee');
-INSERT INTO `silexACL` VALUES (139,'delivery','get_expeditionsSummary','employee');
-INSERT INTO `silexACL` VALUES (140,'almacennew','cmrExpeditionPallet_add','employee');
-INSERT INTO `silexACL` VALUES (141,'delivery','route_getExpeditionSummary','employee');
-INSERT INTO `silexACL` VALUES (142,'almacennew','item_saveStems','employee');
-INSERT INTO `silexACL` VALUES (143,'almacennew','debug_add','employee');
-INSERT INTO `silexACL` VALUES (144,'almacennew','operator_getNumberOfWagons','employee');
-INSERT INTO `silexACL` VALUES (145,'almacennew','operator_add','employee');
-INSERT INTO `silexACL` VALUES (146,'almacennew','expeditionPallet_get','employee');
-INSERT INTO `silexACL` VALUES (147,'almacennew','worker_isF11Allowed','employee');
-INSERT INTO `silexACL` VALUES (148,'almacennew','train_get','employee');
-INSERT INTO `silexACL` VALUES (149,'almacennew','saleTracking_mark','employee');
-INSERT INTO `silexACL` VALUES (150,'almacennew','operator_updateItemPackingType','employee');
-INSERT INTO `silexACL` VALUES (151,'almacennew','operator_updateTrain','employee');
-INSERT INTO `silexACL` VALUES (152,'almacennew','operator_getTrain','employee');
-INSERT INTO `silexACL` VALUES (153,'almacennew','operator_getItemPackingType','employee');
-INSERT INTO `silexACL` VALUES (154,'almacennew','collection_assign','employee');
-INSERT INTO `silexACL` VALUES (155,'almacennew','itemPacking_get','employee');
-INSERT INTO `silexACL` VALUES (156,'almacennew','shelvingLog_add','employee');
-INSERT INTO `silexACL` VALUES (157,'almacennew','collection_get','employee');
-INSERT INTO `silexACL` VALUES (158,'delivery','get_routesFromExpedition','employee');
-INSERT INTO `silexACL` VALUES (160,'almacennew','expeditionMistakeType_get','employee');
-INSERT INTO `silexACL` VALUES (161,'almacennew','expeditionMistake_add','employee');
-INSERT INTO `silexACL` VALUES (162,'almacennew','itemShelving_addList','employee');
-INSERT INTO `silexACL` VALUES (163,'almacennew','cmrPallet_add','employee');
-INSERT INTO `silexACL` VALUES (164,'almacennew','ticket_isOutClosureZone','employee');
-INSERT INTO `silexACL` VALUES (165,'almacennew','itemShelving_selfConsumption','employee');
-INSERT INTO `silexACL` VALUES (166,'almacennew','ticket_printLabelPrevious','employee');
-INSERT INTO `silexACL` VALUES (167,'almacennew','travel_updatePacking','employee');
-INSERT INTO `silexACL` VALUES (168,'app','status','$everyone');
-
INSERT INTO `state` VALUES (1,'Arreglar',2,0,'FIXING',NULL,1,0,0,0,0,0,0,4,1,'alert');
INSERT INTO `state` VALUES (2,'Libre',2,0,'FREE',NULL,2,0,0,0,0,0,0,4,1,'notice');
INSERT INTO `state` VALUES (3,'OK',3,0,'OK',3,28,1,0,0,0,1,1,3,0,'success');
diff --git a/db/dump/.dump/privileges.sql b/db/dump/.dump/privileges.sql
index 7776e6d5a..1af4b446a 100644
--- a/db/dump/.dump/privileges.sql
+++ b/db/dump/.dump/privileges.sql
@@ -1455,6 +1455,11 @@ INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','accountingType','gu
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','bankPolicyDetail','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','bankPolicyReview','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','bankPolicy','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','edi','hedera-web','imapMultiConfig','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','hedera','salesAssistant','orderConfig','root@localhost','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','itemEntryOut','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','itemEntryIn','guillermo@db-proxy2.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
+INSERT IGNORE INTO `tables_priv` VALUES ('','vn','grafana','itemShelvingSale','guillermo@db-proxy1.servers.dc.verdnatura.es','0000-00-00 00:00:00','Select','');
/*!40000 ALTER TABLE `tables_priv` ENABLE KEYS */;
/*!40000 ALTER TABLE `columns_priv` DISABLE KEYS */;
@@ -2160,9 +2165,7 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','buy_recalcPricesByAwb'
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','buy_recalcPricesByEntry','PROCEDURE','jenkins@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','util','hr','accountNumberToIban','FUNCTION','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','util','financial','accountNumberToIban','FUNCTION','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
-INSERT IGNORE INTO `procs_priv` VALUES ('','vn','administrative','supplier_statement','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
-INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','supplier_statement','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
-INSERT IGNORE INTO `procs_priv` VALUES ('','vn','hrBoss','supplier_statement','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','supplier_statementWithEntries','PROCEDURE','guillermo@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','adminBoss','XDiario_check','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','travel_getDetailFromContinent','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','claimManager','entry_getTransfer','PROCEDURE','jenkins@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
@@ -2193,6 +2196,8 @@ INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','itemShelvingSale_
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','production','sectorCollection_getMyPartial','PROCEDURE','carlosap@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','grafana-write','item_ValuateInventory','PROCEDURE','guillermo@db-proxy1.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
INSERT IGNORE INTO `procs_priv` VALUES ('','vn','guest','ticketCalculatePurge','PROCEDURE','jenkins@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','buyer','buy_getUltimate','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
+INSERT IGNORE INTO `procs_priv` VALUES ('','vn','cooler','buy_getUltimate','PROCEDURE','guillermo@db-proxy2.servers.dc.verdnatura.es','Execute','0000-00-00 00:00:00');
/*!40000 ALTER TABLE `procs_priv` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
@@ -2237,7 +2242,7 @@ INSERT IGNORE INTO `global_priv` VALUES ('','grafana-write','{\"access\":0,\"ve
INSERT IGNORE INTO `global_priv` VALUES ('','greenhouseBoss','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
INSERT IGNORE INTO `global_priv` VALUES ('','guest','{\"access\": 0, \"max_questions\": 40000, \"max_updates\": 1000, \"max_connections\": 150000, \"max_user_connections\": 200, \"max_statement_time\": 0.000000, \"is_role\": true, \"version_id\": 101106}');
INSERT IGNORE INTO `global_priv` VALUES ('','handmadeBoss','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
-INSERT IGNORE INTO `global_priv` VALUES ('','hedera-web','{\"access\":0,\"version_id\":100707,\"is_role\":true}');
+INSERT IGNORE INTO `global_priv` VALUES ('','hedera-web','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
INSERT IGNORE INTO `global_priv` VALUES ('','hr','{\"access\": 0, \"is_role\": true, \"version_id\": 101106}');
INSERT IGNORE INTO `global_priv` VALUES ('','hrBoss','{\"access\":0,\"version_id\":101106,\"is_role\":true}');
INSERT IGNORE INTO `global_priv` VALUES ('','invoicing','{\"access\":0,\"version_id\":100707,\"is_role\":true}');
diff --git a/db/dump/.dump/structure.sql b/db/dump/.dump/structure.sql
index 4790e156c..1f04c8e78 100644
--- a/db/dump/.dump/structure.sql
+++ b/db/dump/.dump/structure.sql
@@ -4504,8 +4504,8 @@ CREATE TABLE `waste` (
`buyerFk` int(10) unsigned NOT NULL,
`itemTypeFk` smallint(5) unsigned NOT NULL,
`itemFk` int(11) NOT NULL DEFAULT 0,
- `saleQuantity` decimal(10,2) DEFAULT NULL,
- `saleTotal` decimal(10,2) DEFAULT NULL,
+ `saleTotal` decimal(10,2) DEFAULT NULL COMMENT 'Coste',
+ `saleWasteQuantity` decimal(10,2) DEFAULT NULL,
`saleInternalWaste` decimal(10,2) DEFAULT NULL,
`saleExternalWaste` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`year`,`week`,`buyerFk`,`itemTypeFk`,`itemFk`),
@@ -6527,7 +6527,7 @@ DELIMITER ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `waste_addSales`()
BEGIN
- DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY;
+ DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(util.VN_CURDATE()) DAY;
DECLARE vDateTo DATE DEFAULT vDateFrom + INTERVAL 6 DAY;
CALL cache.last_buy_refresh(FALSE);
@@ -6538,25 +6538,22 @@ BEGIN
it.workerFk,
it.id,
s.itemFk,
- SUM(s.quantity),
- SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity) `value`,
- SUM (
+ SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity),
+ SUM(IF(aw.`type`, s.quantity, 0)),
+ SUM(
IF(
aw.`type` = 'internal',
(b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
0
)
- ) internalWaste,
- SUM (
+ ),
+ SUM(
IF(
aw.`type` = 'external',
(b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
- IF(c.code = 'manaClaim',
- sc.value * s.quantity,
- 0
- )
+ 0
)
- ) externalWaste
+ )
FROM vn.sale s
JOIN vn.item i ON i.id = s.itemFk
JOIN vn.itemType it ON it.id = i.typeFk
@@ -6567,11 +6564,9 @@ BEGIN
JOIN cache.last_buy lb ON lb.item_id = i.id
AND lb.warehouse_id = w.id
JOIN vn.buy b ON b.id = lb.buy_id
- LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id
- LEFT JOIN vn.component c ON c.id = sc.componentFk
WHERE t.shipped BETWEEN vDateFrom AND vDateTo
AND w.isManaged
- GROUP BY it.id, i.id;
+ GROUP BY i.id;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -14378,61 +14373,64 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `order_confirmWithUser`(vSelf INT, vUserId INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `order_confirmWithUser`(
+ vSelf INT,
+ vUserFk INT
+)
BEGIN
/**
- * Confirms an order, creating each of its tickets on the corresponding
- * date, store and user.
+ * Confirms an order, creating each of its tickets
+ * on the corresponding date, store and user.
*
* @param vSelf The order identifier
* @param vUser The user identifier
*/
- DECLARE vOk BOOL;
- DECLARE vDone BOOL DEFAULT FALSE;
- DECLARE vWarehouse INT;
+ DECLARE vHasRows BOOL;
+ DECLARE vDone BOOL;
+ DECLARE vWarehouseFk INT;
DECLARE vShipment DATE;
- DECLARE vTicket INT;
+ DECLARE vShipmentDayEnd DATETIME;
+ DECLARE vTicketFk INT;
DECLARE vNotes VARCHAR(255);
- DECLARE vItem INT;
+ DECLARE vItemFk INT;
DECLARE vConcept VARCHAR(30);
DECLARE vAmount INT;
+ DECLARE vAvailable INT;
DECLARE vPrice DECIMAL(10,2);
- DECLARE vSale INT;
- DECLARE vRate INT;
- DECLARE vRowId INT;
+ DECLARE vSaleFk INT;
+ DECLARE vRowFk INT;
DECLARE vPriceFixed DECIMAL(10,2);
- DECLARE vDelivery DATE;
- DECLARE vAddress INT;
- DECLARE vIsConfirmed BOOL;
- DECLARE vClientId INT;
- DECLARE vCompanyId INT;
- DECLARE vAgencyModeId INT;
- DECLARE TICKET_FREE INT DEFAULT 2;
- DECLARE vCalc INT;
- DECLARE vIsLogifloraItem BOOL;
- DECLARE vOldQuantity INT;
- DECLARE vNewQuantity INT;
+ DECLARE vLanded DATE;
+ DECLARE vAddressFk INT;
+ DECLARE vClientFk INT;
+ DECLARE vCompanyFk INT;
+ DECLARE vAgencyModeFk INT;
+ DECLARE vCalcFk INT;
DECLARE vIsTaxDataChecked BOOL;
- DECLARE cDates CURSOR FOR
- SELECT zgs.shipped, r.warehouse_id
+ DECLARE vDates CURSOR FOR
+ SELECT zgs.shipped, r.warehouseFk
FROM `order` o
- JOIN order_row r ON r.order_id = o.id
- LEFT JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = r.warehouse_id
- WHERE o.id = vSelf AND r.amount != 0
- GROUP BY r.warehouse_id;
+ JOIN orderRow r ON r.orderFk = o.id
+ LEFT JOIN tmp.zoneGetShipped zgs ON zgs.warehouseFk = r.warehouseFk
+ WHERE o.id = vSelf
+ AND r.amount
+ GROUP BY r.warehouseFk;
- DECLARE cRows CURSOR FOR
- SELECT r.id, r.item_id, i.name, r.amount, r.price, r.rate, i.isFloramondo
- FROM order_row r
- JOIN vn.item i ON i.id = r.item_id
- WHERE r.amount != 0
- AND r.warehouse_id = vWarehouse
- AND r.order_id = vSelf
+ DECLARE vRows CURSOR FOR
+ SELECT r.id,
+ r.itemFk,
+ i.name,
+ r.amount,
+ r.price
+ FROM orderRow r
+ JOIN vn.item i ON i.id = r.itemFk
+ WHERE r.amount
+ AND r.warehouseFk = vWarehouseFk
+ AND r.orderFk = vSelf
ORDER BY r.rate DESC;
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
@@ -14441,26 +14439,36 @@ BEGIN
END;
-- Carga los datos del pedido
- SELECT o.date_send, o.address_id, o.note, a.clientFk,
- o.company_id, o.agency_id, c.isTaxDataChecked
- INTO vDelivery, vAddress, vNotes, vClientId,
- vCompanyId, vAgencyModeId, vIsTaxDataChecked
- FROM hedera.`order` o
+ SELECT o.date_send,
+ o.address_id,
+ o.note,
+ a.clientFk,
+ o.company_id,
+ o.agency_id,
+ c.isTaxDataChecked
+ INTO vLanded,
+ vAddressFk,
+ vNotes,
+ vClientFk,
+ vCompanyFk,
+ vAgencyModeFk,
+ vIsTaxDataChecked
+ FROM `order` o
JOIN vn.address a ON a.id = o.address_id
JOIN vn.client c ON c.id = a.clientFk
WHERE o.id = vSelf;
-- Verifica si el cliente tiene los datos comprobados
IF NOT vIsTaxDataChecked THEN
- CALL util.throw ('clientNotVerified');
+ CALL util.throw('clientNotVerified');
END IF;
-- Carga las fechas de salida de cada almacen
- CALL vn.zone_getShipped (vDelivery, vAddress, vAgencyModeId, FALSE);
+ CALL vn.zone_getShipped(vLanded, vAddressFk, vAgencyModeFk, FALSE);
-- Trabajador que realiza la accion
- IF vUserId IS NULL THEN
- SELECT employeeFk INTO vUserId FROM orderConfig;
+ IF vUserFk IS NULL THEN
+ SELECT employeeFk INTO vUserFk FROM orderConfig;
END IF;
START TRANSACTION;
@@ -14468,207 +14476,188 @@ BEGIN
CALL order_checkEditable(vSelf);
-- Check order is not empty
+ SELECT COUNT(*) > 0 INTO vHasRows
+ FROM orderRow
+ WHERE orderFk = vSelf
+ AND amount > 0;
- SELECT COUNT(*) > 0 INTO vOk
- FROM order_row WHERE order_id = vSelf AND amount > 0;
-
- IF NOT vOk THEN
- CALL util.throw ('ORDER_EMPTY');
+ IF NOT vHasRows THEN
+ CALL util.throw('ORDER_EMPTY');
END IF;
-- Crea los tickets del pedido
-
- OPEN cDates;
-
- lDates:
- LOOP
- SET vTicket = NULL;
+ OPEN vDates;
+ lDates: LOOP
+ SET vTicketFk = NULL;
SET vDone = FALSE;
- FETCH cDates INTO vShipment, vWarehouse;
+ FETCH vDates INTO vShipment, vWarehouseFk;
IF vDone THEN
LEAVE lDates;
END IF;
- -- Busca un ticket existente que coincida con los parametros
- WITH tPrevia AS
- (SELECT DISTINCT s.ticketFk
+ SET vShipmentDayEnd = util.dayEnd(vShipment);
+
+ -- Busca un ticket libre disponible
+ WITH tPrevia AS (
+ SELECT DISTINCT s.ticketFk
FROM vn.sale s
JOIN vn.saleGroupDetail sgd ON sgd.saleFk = s.id
JOIN vn.ticket t ON t.id = s.ticketFk
- WHERE t.shipped BETWEEN vShipment AND util.dayend(vShipment)
- )
- SELECT t.id INTO vTicket
+ WHERE t.shipped BETWEEN vShipment AND vShipmentDayEnd
+ )
+ SELECT t.id INTO vTicketFk
FROM vn.ticket t
JOIN vn.alertLevel al ON al.code = 'FREE'
LEFT JOIN tPrevia tp ON tp.ticketFk = t.id
- LEFT JOIN vn.ticketState tls on tls.ticketFk = t.id
- JOIN hedera.`order` o
- ON o.address_id = t.addressFk
- AND vWarehouse = t.warehouseFk
- AND o.date_send = t.landed
- AND DATE(t.shipped) = vShipment
+ LEFT JOIN vn.ticketState tls ON tls.ticketFk = t.id
+ JOIN hedera.`order` o ON o.address_id = t.addressFk
+ AND t.shipped BETWEEN vShipment AND vShipmentDayEnd
+ AND t.warehouseFk = vWarehouseFk
+ AND o.date_send = t.landed
WHERE o.id = vSelf
AND t.refFk IS NULL
AND tp.ticketFk IS NULL
AND (tls.alertLevel IS NULL OR tls.alertLevel = al.id)
LIMIT 1;
+ -- Comprobamos si hay un ticket de previa disponible
+ IF vTicketFk IS NULL THEN
+ WITH tItemPackingTypeOrder AS (
+ SELECT GROUP_CONCAT(
+ DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk
+ ) distinctItemPackingTypes,
+ o.address_id
+ FROM vn.item i
+ JOIN hedera.orderRow oro ON oro.itemFk = i.id
+ JOIN hedera.`order` o ON o.id = oro.orderFk
+ WHERE oro.orderFk = vSelf
+ ),
+ tItemPackingTypeTicket AS (
+ SELECT t.id,
+ GROUP_CONCAT(
+ DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk
+ ) distinctItemPackingTypes
+ FROM vn.ticket t
+ JOIN vn.ticketState tls ON tls.ticketFk = t.id
+ JOIN vn.alertLevel al ON al.id = tls.alertLevel
+ JOIN vn.sale s ON s.ticketFk = t.id
+ JOIN vn.item i ON i.id = s.itemFk
+ JOIN tItemPackingTypeOrder ipto
+ WHERE t.shipped BETWEEN vShipment AND vShipmentDayEnd
+ AND t.refFk IS NULL
+ AND t.warehouseFk = vWarehouseFk
+ AND t.addressFk = ipto.address_id
+ AND al.code = 'ON_PREVIOUS'
+ GROUP BY t.id
+ )
+ SELECT iptt.id INTO vTicketFk
+ FROM tItemPackingTypeTicket iptt
+ JOIN tItemPackingTypeOrder ipto
+ WHERE INSTR(iptt.distinctItemPackingTypes, ipto.distinctItemPackingTypes)
+ LIMIT 1;
+ END IF;
+
-- Crea el ticket en el caso de no existir uno adecuado
- IF vTicket IS NULL
- THEN
-
+ IF vTicketFk IS NULL THEN
SET vShipment = IFNULL(vShipment, util.VN_CURDATE());
-
CALL vn.ticket_add(
- vClientId,
+ vClientFk,
vShipment,
- vWarehouse,
- vCompanyId,
- vAddress,
- vAgencyModeId,
+ vWarehouseFk,
+ vCompanyFk,
+ vAddressFk,
+ vAgencyModeFk,
NULL,
- vDelivery,
- vUserId,
+ vLanded,
+ vUserFk,
TRUE,
- vTicket
+ vTicketFk
);
ELSE
INSERT INTO vn.ticketTracking
- SET ticketFk = vTicket,
- userFk = vUserId,
- stateFk = TICKET_FREE;
+ SET ticketFk = vTicketFk,
+ userFk = vUserFk,
+ stateFk = (SELECT id FROM vn.state WHERE code = 'FREE');
END IF;
INSERT IGNORE INTO vn.orderTicket
SET orderFk = vSelf,
- ticketFk = vTicket;
+ ticketFk = vTicketFk;
-- Añade las notas
-
- IF vNotes IS NOT NULL AND vNotes != ''
- THEN
- INSERT INTO vn.ticketObservation SET
- ticketFk = vTicket,
- observationTypeFk = 4 /* salesperson */ ,
+ IF vNotes IS NOT NULL AND vNotes <> '' THEN
+ INSERT INTO vn.ticketObservation
+ SET ticketFk = vTicketFk,
+ observationTypeFk = (SELECT id FROM vn.observationType WHERE code = 'salesPerson'),
`description` = vNotes
ON DUPLICATE KEY UPDATE
`description` = CONCAT(VALUES(`description`),'. ', `description`);
END IF;
-- Añade los movimientos y sus componentes
-
- OPEN cRows;
-
+ OPEN vRows;
lRows: LOOP
+ SET vSaleFk = NULL;
SET vDone = FALSE;
- FETCH cRows INTO vRowId, vItem, vConcept, vAmount, vPrice, vRate, vIsLogifloraItem;
+ FETCH vRows INTO vRowFk, vItemFk, vConcept, vAmount, vPrice;
IF vDone THEN
LEAVE lRows;
END IF;
- SET vSale = NULL;
-
- SELECT s.id, s.quantity INTO vSale, vOldQuantity
+ SELECT s.id INTO vSaleFk
FROM vn.sale s
- WHERE ticketFk = vTicket
+ WHERE ticketFk = vTicketFk
AND price = vPrice
- AND itemFk = vItem
+ AND itemFk = vItemFk
AND discount = 0
LIMIT 1;
- IF vSale THEN
+ IF vSaleFk THEN
UPDATE vn.sale
SET quantity = quantity + vAmount,
originalQuantity = quantity
- WHERE id = vSale;
-
- SELECT s.quantity INTO vNewQuantity
- FROM vn.sale s
- WHERE id = vSale;
+ WHERE id = vSaleFk;
ELSE
-- Obtiene el coste
SELECT SUM(rc.`price`) valueSum INTO vPriceFixed
FROM orderRowComponent rc
JOIN vn.component c ON c.id = rc.componentFk
- JOIN vn.componentType ct ON ct.id = c.typeFk AND ct.isBase
- WHERE rc.rowFk = vRowId;
+ JOIN vn.componentType ct ON ct.id = c.typeFk
+ AND ct.isBase
+ WHERE rc.rowFk = vRowFk;
INSERT INTO vn.sale
- SET itemFk = vItem,
- ticketFk = vTicket,
+ SET itemFk = vItemFk,
+ ticketFk = vTicketFk,
concept = vConcept,
quantity = vAmount,
price = vPrice,
priceFixed = vPriceFixed,
isPriceFixed = TRUE;
- SET vSale = LAST_INSERT_ID();
+ SET vSaleFk = LAST_INSERT_ID();
- INSERT INTO vn.saleComponent
- (saleFk, componentFk, `value`)
- SELECT vSale, rc.componentFk, rc.price
+ INSERT INTO vn.saleComponent (saleFk, componentFk, `value`)
+ SELECT vSaleFk, rc.componentFk, rc.price
FROM orderRowComponent rc
JOIN vn.component c ON c.id = rc.componentFk
- WHERE rc.rowFk = vRowId
- GROUP BY vSale, rc.componentFk;
+ WHERE rc.rowFk = vRowFk
+ GROUP BY vSaleFk, rc.componentFk;
END IF;
- UPDATE order_row SET Id_Movimiento = vSale
- WHERE id = vRowId;
-
- -- Inserta en putOrder si la compra es de Floramondo
- IF vIsLogifloraItem THEN
- CALL cache.availableNoRaids_refresh(vCalc,FALSE,vWarehouse,vShipment);
-
- SET @available := 0;
-
- SELECT GREATEST(0,available) INTO @available
- FROM cache.availableNoRaids
- WHERE calc_id = vCalc
- AND item_id = vItem;
-
- UPDATE cache.availableNoRaids
- SET available = GREATEST(0,available - vAmount)
- WHERE item_id = vItem
- AND calc_id = vCalc;
-
- INSERT INTO edi.putOrder (
- deliveryInformationID,
- supplyResponseId,
- quantity ,
- EndUserPartyId,
- EndUserPartyGLN,
- FHAdminNumber,
- saleFk
- )
- SELECT di.ID,
- i.supplyResponseFk,
- CEIL((vAmount - @available)/ sr.NumberOfItemsPerCask),
- o.address_id ,
- vClientId,
- IFNULL(ca.fhAdminNumber, fhc.defaultAdminNumber),
- vSale
- FROM edi.deliveryInformation di
- JOIN vn.item i ON i.supplyResponseFk = di.supplyResponseID
- JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
- LEFT JOIN edi.clientFHAdminNumber ca ON ca.clientFk = vClientId
- JOIN edi.floraHollandConfig fhc
- JOIN hedera.`order` o ON o.id = vSelf
- WHERE i.id = vItem
- AND di.LatestOrderDateTime > util.VN_NOW()
- AND vAmount > @available
- LIMIT 1;
- END IF;
+ UPDATE orderRow
+ SET saleFk = vSaleFk
+ WHERE id = vRowFk;
END LOOP;
-
- CLOSE cRows;
+ CLOSE vRows;
END LOOP;
+ CLOSE vDates;
- CLOSE cDates;
-
- UPDATE `order` SET confirmed = TRUE, confirm_date = util.VN_NOW()
+ UPDATE `order`
+ SET confirmed = TRUE,
+ confirm_date = util.VN_NOW()
WHERE id = vSelf;
COMMIT;
@@ -18986,6 +18975,7 @@ CREATE TABLE `ACL` (
`permission` set('DENY','ALLOW') DEFAULT 'ALLOW',
`principalType` set('ROLE','USER') DEFAULT 'ROLE',
`principalId` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `model_ix` (`model`(255)) COMMENT 'ernesto 3.8.2020. Mysql pide indices',
KEY `property_ix` (`property`(255)),
@@ -18993,6 +18983,34 @@ CREATE TABLE `ACL` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `ACLLog`
+--
+
+DROP TABLE IF EXISTS `ACLLog`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `ACLLog` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `originFk` int(11) DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
+ `action` set('insert','update','delete','select') NOT NULL,
+ `creationDate` timestamp NULL DEFAULT current_timestamp(),
+ `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `changedModel` enum('Acl') NOT NULL DEFAULT 'Acl',
+ `oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
+ `newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
+ `changedModelId` int(11) NOT NULL,
+ `changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `logRateuserFk` (`userFk`),
+ KEY `ACLLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
+ KEY `ACLLog_originFk` (`originFk`,`creationDate`),
+ CONSTRAINT `aclUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Table structure for table `AccessToken`
--
@@ -32114,6 +32132,7 @@ CREATE TABLE `invoiceInConfig` (
`daysAgo` int(10) unsigned DEFAULT 45 COMMENT 'Días en el pasado para mostrar facturas en invoiceIn series en salix',
`taxRowLimit` int(11) DEFAULT 4 COMMENT 'Número máximo de líneas de IVA que puede tener una factura',
`dueDateMarginDays` int(10) unsigned DEFAULT 2,
+ `balanceStartingDate` date NOT NULL DEFAULT '2015-01-01',
PRIMARY KEY (`id`),
KEY `invoiceInConfig_sageWithholdingFk` (`sageFarmerWithholdingFk`),
CONSTRAINT `invoiceInConfig_sageWithholdingFk` FOREIGN KEY (`sageFarmerWithholdingFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -34775,7 +34794,6 @@ CREATE TABLE `packingSite` (
`scannerFk` int(11) DEFAULT NULL,
`screenFk` int(11) DEFAULT NULL,
`editorFk` int(10) unsigned DEFAULT NULL,
- `hasNewLabelMrwMethod` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `packingSite_UN` (`code`),
UNIQUE KEY `printerRfidFk` (`printerRfidFk`),
@@ -35734,13 +35752,12 @@ CREATE TABLE `productionConfig` (
`collection_new_lockname` varchar(100) NOT NULL DEFAULT 'collection_new' COMMENT 'Lockname value for proc vn.collection_new',
`collection_assign_lockname` varchar(100) DEFAULT 'collection_assign' COMMENT 'Lockname value for proc vn.collection_new',
`defaultSectorFk` int(10) unsigned NOT NULL DEFAULT 37 COMMENT 'Default sector',
- `scannableCodeType` enum('qr','barcode') NOT NULL DEFAULT 'barcode',
- `scannablePreviusCodeType` enum('qr','barcode') NOT NULL DEFAULT 'barcode',
`itemOlderReviewHours` int(11) NOT NULL DEFAULT 0 COMMENT 'Horas que se tienen en cuenta para comprobar si un ítem es más viejo.',
`sectorFromCode` varchar(15) DEFAULT NULL COMMENT 'Sector origen que se revisa ítems más nuevos al parkinear',
`sectorToCode` varchar(15) DEFAULT NULL COMMENT 'Sector destino que se revisa ítems más nuevos al parkinear',
`orderMode` enum('Location','Age') NOT NULL DEFAULT 'Location',
`editorFk` int(10) unsigned DEFAULT NULL,
+ `hasNewLabelMrwMethod` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'column to activate the new mrw integration',
PRIMARY KEY (`id`),
KEY `productionConfig_FK` (`shortageAddressFk`),
KEY `productionConfig_FK_1` (`clientSelfConsumptionFk`),
@@ -37197,6 +37214,23 @@ CREATE TABLE `saleTracking` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
+--
+-- Table structure for table `saleUnit`
+--
+
+DROP TABLE IF EXISTS `saleUnit`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `saleUnit` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) DEFAULT NULL,
+ `isVisible` tinyint(1) NOT NULL DEFAULT 1,
+ `created` timestamp NULL DEFAULT current_timestamp(),
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name_UNIQUE` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
--
-- Temporary table structure for view `saleValue`
--
@@ -37797,20 +37831,20 @@ CREATE TABLE `siiTypeInvoiceOut` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
--- Table structure for table `silexACL`
+-- Table structure for table `silexACL__`
--
-DROP TABLE IF EXISTS `silexACL`;
+DROP TABLE IF EXISTS `silexACL__`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `silexACL` (
+CREATE TABLE `silexACL__` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`module` varchar(50) NOT NULL,
`method` varchar(50) NOT NULL,
`role` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `module_UNIQUE` (`module`,`method`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='@deprecated 2024-08-05 refs #7820';
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -38812,9 +38846,9 @@ CREATE TABLE `ticket` (
`weight` decimal(10,2) DEFAULT NULL COMMENT 'En caso de informar, se utilizará su valor para calcular el peso de la factura',
`clonedFrom` int(11) DEFAULT NULL,
`cmrFk` int(11) DEFAULT NULL,
- `editorFk` int(10) unsigned DEFAULT NULL,
`problem` set('hasTicketRequest','isFreezed','hasRisk','hasHighRisk','isTaxDataChecked','isTooLittle') NOT NULL DEFAULT '',
`risk` decimal(10,2) DEFAULT NULL COMMENT 'cache calculada con el riesgo del cliente',
+ `editorFk` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `Id_Cliente` (`clientFk`),
KEY `Id_Consigna` (`addressFk`),
@@ -47091,8 +47125,8 @@ DELIMITER ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `address_updateCoordinates`(
vTicketFk INT,
- vLongitude INT,
- vLatitude INT)
+ vLongitude DECIMAL(11,7),
+ vLatitude DECIMAL(11,7))
BEGIN
/**
* Actualiza las coordenadas de una dirección.
@@ -51549,6 +51583,7 @@ BEGIN
AND a.id IS NULL
AND u.active
AND c.created < util.VN_CURDATE() - INTERVAL vMonths MONTH
+ AND NOT u.role = (SELECT id FROM `role` WHERE name = 'supplier')
AND u.id NOT IN (
SELECT DISTINCT c.id
FROM client c
@@ -54343,7 +54378,7 @@ BEGIN
JOIN duaEntry de ON de.entryFk = e.id
JOIN invoiceInConfig iic
WHERE de.duaFk = vDuaFk
- AND iidd.dueDated <= util.VN_CURDATE() + INTERVAL iic.dueDateMarginDays DAY;
+ AND iidd.dueDated < util.VN_CURDATE() + INTERVAL iic.dueDateMarginDays DAY;
IF vIncorrectInvoiceInDueDay THEN
CALL util.throw(CONCAT('Incorrect due date, invoice: ', vIncorrectInvoiceInDueDay));
@@ -55844,7 +55879,7 @@ BEGIN
DECLARE cur CURSOR FOR
SELECT bb.id buyFk,
- FLOOR(ish.visible / ish.packing) ishStickers,
+ LEAST(bb.stickers, FLOOR(ish.visible / ish.packing)) ishStickers,
bb.stickers buyStickers
FROM itemShelving ish
JOIN (SELECT b.id, b.itemFk, b.stickers
@@ -55852,7 +55887,6 @@ BEGIN
WHERE b.entryFk = vFromEntryFk
ORDER BY b.stickers DESC
LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk
- AND bb.stickers >= FLOOR(ish.visible / ish.packing)
WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_general_ci
AND NOT ish.isSplit
GROUP BY ish.id;
@@ -56480,14 +56514,21 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionScan_Put`(vPalletFk INT, vExpeditionFk INT)
+CREATE DEFINER=`root`@`localhost` PROCEDURE `expeditionScan_Put`(
+ vPalletFk INT,
+ vExpeditionFk INT
+)
BEGIN
-
- REPLACE vn.expeditionScan(expeditionFk, palletFk)
- VALUES(vExpeditionFk, vPalletFk);
-
- SELECT LAST_INSERT_ID() INTO vPalletFk;
-
+ IF NOT (SELECT TRUE FROM expedition WHERE id = vExpeditionFk LIMIT 1) THEN
+ CALL util.throw('Expedition not exists');
+ END IF;
+
+ IF NOT (SELECT TRUE FROM expeditionPallet WHERE id = vPalletFk LIMIT 1) THEN
+ CALL util.throw('Pallet not exists');
+ END IF;
+
+ REPLACE expeditionScan(expeditionFk, palletFk)
+ VALUES(vExpeditionFk, vPalletFk);
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -60923,7 +60964,7 @@ BEGIN
DECLARE vSaleFk INT;
DECLARE vSectorFk INT;
DECLARE vSales CURSOR FOR
- SELECT s.id
+ SELECT DISTINCT s.id
FROM sectorCollectionSaleGroup sc
JOIN saleGroupDetail sg ON sg.saleGroupFk = sc.saleGroupFk
JOIN sale s ON sg.saleFk = s.id
@@ -63909,7 +63950,7 @@ BEGIN
SELECT * FROM sales
UNION ALL
SELECT * FROM orders
- ORDER BY shipped,
+ ORDER BY shipped DESC,
(inventorySupplierFk = entityId) DESC,
alertLevel DESC,
isTicket,
@@ -63960,7 +64001,7 @@ BEGIN
NULL reference,
NULL entityType,
NULL entityId,
- 'Inventario calculado',
+ 'Inventario calculado' entityName,
@a invalue,
NULL `out`,
@a balance,
@@ -72035,7 +72076,7 @@ DELIMITER ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
-/*!50003 DROP PROCEDURE IF EXISTS `supplier_statement` */;
+/*!50003 DROP PROCEDURE IF EXISTS `supplier_statementWithEntries` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
@@ -72043,28 +72084,35 @@ DELIMITER ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
DELIMITER ;;
-CREATE DEFINER=`root`@`localhost` PROCEDURE `supplier_statement`(
+CREATE DEFINER=`root`@`localhost` PROCEDURE `supplier_statementWithEntries`(
vSupplierFk INT,
vCurrencyFk INT,
vCompanyFk INT,
vOrderBy VARCHAR(15),
- vIsConciliated BOOL
+ vIsConciliated BOOL,
+ vHasEntries BOOL
)
BEGIN
/**
- * Crea un estado de cuenta de proveedores calculando
- * los saldos en euros y en la moneda especificada.
- *
- * @param vSupplierFk Id del proveedor
- * @param vCurrencyFk Id de la moneda
- * @param vCompanyFk Id de la empresa
- * @param vOrderBy Criterio de ordenación
- * @param vIsConciliated Indica si está conciliado o no
- * @return tmp.supplierStatement
- */
+* Creates a supplier statement, calculating balances in euros and the specified currency.
+*
+* @param vSupplierFk Supplier ID
+* @param vCurrencyFk Currency ID
+* @param vCompanyFk Company ID
+* @param vOrderBy Order by criteria
+* @param vIsConciliated Indicates whether it is reconciled or not
+* @param vHasEntries Indicates if future entries must be shown
+* @return tmp.supplierStatement
+*/
+ DECLARE vBalanceStartingDate DATETIME;
+
SET @euroBalance:= 0;
SET @currencyBalance:= 0;
+ SELECT balanceStartingDate
+ INTO vBalanceStartingDate
+ FROM invoiceInConfig;
+
CREATE OR REPLACE TEMPORARY TABLE tmp.supplierStatement
ENGINE = MEMORY
SELECT *,
@@ -72077,107 +72125,127 @@ BEGIN
IFNULL(invoiceCurrency, 0), 2
) currencyBalance
FROM (
- SELECT * FROM
- (
- SELECT NULL bankFk,
- ii.companyFk,
- ii.serial,
- ii.id,
- CASE
- WHEN vOrderBy = 'issued' THEN ii.issued
- WHEN vOrderBy = 'bookEntried' THEN ii.bookEntried
- WHEN vOrderBy = 'booked' THEN ii.booked
- WHEN vOrderBy = 'dueDate' THEN iid.dueDated
- END dated,
- CONCAT('S/Fra ', ii.supplierRef) sref,
- IF(ii.currencyFk > 1,
- ROUND(SUM(iid.foreignValue) / SUM(iid.amount), 3),
- NULL
- ) changeValue,
- CAST(SUM(iid.amount) AS DECIMAL(10,2)) invoiceEuros,
- CAST(SUM(iid.foreignValue) AS DECIMAL(10,2)) invoiceCurrency,
- NULL paymentEuros,
- NULL paymentCurrency,
- ii.currencyFk,
- ii.isBooked,
- c.code,
- 'invoiceIn' statementType
- FROM invoiceIn ii
- JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
- JOIN currency c ON c.id = ii.currencyFk
- WHERE ii.issued > '2014-12-31'
- AND ii.supplierFk = vSupplierFk
- AND vCurrencyFk IN (ii.currencyFk, 0)
- AND vCompanyFk IN (ii.companyFk, 0)
- AND (vIsConciliated = ii.isBooked OR NOT vIsConciliated)
- GROUP BY iid.id
- UNION ALL
- SELECT p.bankFk,
- p.companyFk,
- NULL,
- p.id,
- CASE
- WHEN vOrderBy = 'issued' THEN p.received
- WHEN vOrderBy = 'bookEntried' THEN p.received
- WHEN vOrderBy = 'booked' THEN p.received
- WHEN vOrderBy = 'dueDate' THEN p.dueDated
- END,
- CONCAT(IFNULL(pm.name, ''),
- IF(pn.concept <> '',
- CONCAT(' : ', pn.concept),
- '')
- ),
- IF(p.currencyFk > 1, p.divisa / p.amount, NULL),
- NULL,
- NULL,
- p.amount,
- p.divisa,
- p.currencyFk,
- p.isConciliated,
- c.code,
- 'payment'
- FROM payment p
- LEFT JOIN currency c ON c.id = p.currencyFk
- LEFT JOIN accounting a ON a.id = p.bankFk
- LEFT JOIN payMethod pm ON pm.id = p.payMethodFk
- LEFT JOIN promissoryNote pn ON pn.paymentFk = p.id
- WHERE p.received > '2014-12-31'
- AND p.supplierFk = vSupplierFk
- AND vCurrencyFk IN (p.currencyFk, 0)
- AND vCompanyFk IN (p.companyFk, 0)
- AND (vIsConciliated = p.isConciliated OR NOT vIsConciliated)
- UNION ALL
- SELECT NULL,
- companyFk,
- NULL,
- se.id,
- CASE
- WHEN vOrderBy = 'issued' THEN se.dated
- WHEN vOrderBy = 'bookEntried' THEN se.dated
- WHEN vOrderBy = 'booked' THEN se.dated
- WHEN vOrderBy = 'dueDate' THEN se.dueDated
- END,
- se.description,
- 1,
- amount,
- NULL,
- NULL,
- NULL,
- currencyFk,
- isConciliated,
- c.`code`,
- 'expense'
- FROM supplierExpense se
- JOIN currency c ON c.id = se.currencyFk
- WHERE se.supplierFk = vSupplierFk
- AND vCurrencyFk IN (se.currencyFk,0)
- AND vCompanyFk IN (se.companyFk,0)
- AND (vIsConciliated = se.isConciliated OR NOT vIsConciliated)
- ) sub
- ORDER BY (dated IS NULL AND NOT isBooked),
- dated,
- IF(vOrderBy = 'dueDate', id, NULL)
- LIMIT 10000000000000000000
+ SELECT NULL bankFk,
+ ii.companyFk,
+ ii.serial,
+ ii.id,
+ CASE
+ WHEN vOrderBy = 'issued' THEN ii.issued
+ WHEN vOrderBy = 'bookEntried' THEN ii.bookEntried
+ WHEN vOrderBy = 'booked' THEN ii.booked
+ WHEN vOrderBy = 'dueDate' THEN iid.dueDated
+ END dated,
+ CONCAT('S/Fra ', ii.supplierRef) sref,
+ IF(ii.currencyFk > 1,
+ ROUND(SUM(iid.foreignValue) / SUM(iid.amount), 3),
+ NULL
+ ) changeValue,
+ CAST(SUM(iid.amount) AS DECIMAL(10,2)) invoiceEuros,
+ CAST(SUM(iid.foreignValue) AS DECIMAL(10,2)) invoiceCurrency,
+ NULL paymentEuros,
+ NULL paymentCurrency,
+ ii.currencyFk,
+ ii.isBooked,
+ c.code,
+ 'invoiceIn' statementType
+ FROM invoiceIn ii
+ JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
+ JOIN currency c ON c.id = ii.currencyFk
+ WHERE ii.issued >= vBalanceStartingDate
+ AND ii.supplierFk = vSupplierFk
+ AND vCurrencyFk IN (ii.currencyFk, 0)
+ AND vCompanyFk IN (ii.companyFk, 0)
+ AND (vIsConciliated = ii.isBooked OR NOT vIsConciliated)
+ GROUP BY iid.id
+ UNION ALL
+ SELECT p.bankFk,
+ p.companyFk,
+ NULL,
+ p.id,
+ CASE
+ WHEN vOrderBy = 'issued' THEN p.received
+ WHEN vOrderBy = 'bookEntried' THEN p.received
+ WHEN vOrderBy = 'booked' THEN p.received
+ WHEN vOrderBy = 'dueDate' THEN p.dueDated
+ END,
+ CONCAT(IFNULL(pm.name, ''),
+ IF(pn.concept <> '',
+ CONCAT(' : ', pn.concept),
+ '')
+ ),
+ IF(p.currencyFk > 1, p.divisa / p.amount, NULL),
+ NULL,
+ NULL,
+ p.amount,
+ p.divisa,
+ p.currencyFk,
+ p.isConciliated,
+ c.code,
+ 'payment'
+ FROM payment p
+ LEFT JOIN currency c ON c.id = p.currencyFk
+ LEFT JOIN accounting a ON a.id = p.bankFk
+ LEFT JOIN payMethod pm ON pm.id = p.payMethodFk
+ LEFT JOIN promissoryNote pn ON pn.paymentFk = p.id
+ WHERE p.received >= vBalanceStartingDate
+ AND p.supplierFk = vSupplierFk
+ AND vCurrencyFk IN (p.currencyFk, 0)
+ AND vCompanyFk IN (p.companyFk, 0)
+ AND (vIsConciliated = p.isConciliated OR NOT vIsConciliated)
+ UNION ALL
+ SELECT NULL,
+ companyFk,
+ NULL,
+ se.id,
+ CASE
+ WHEN vOrderBy = 'issued' THEN se.dated
+ WHEN vOrderBy = 'bookEntried' THEN se.dated
+ WHEN vOrderBy = 'booked' THEN se.dated
+ WHEN vOrderBy = 'dueDate' THEN se.dueDated
+ END,
+ se.description,
+ 1,
+ amount,
+ NULL,
+ NULL,
+ NULL,
+ currencyFk,
+ isConciliated,
+ c.`code`,
+ 'expense'
+ FROM supplierExpense se
+ JOIN currency c ON c.id = se.currencyFk
+ WHERE se.supplierFk = vSupplierFk
+ AND vCurrencyFk IN (se.currencyFk,0)
+ AND vCompanyFk IN (se.companyFk,0)
+ AND (vIsConciliated = se.isConciliated OR NOT vIsConciliated)
+ UNION ALL
+ SELECT NULL bankFk,
+ e.companyFk,
+ 'E' serial,
+ e.invoiceNumber id,
+ tr.landed dated,
+ CONCAT('Ent. ',e.id) sref,
+ 1 / ((e.commission/100)+1) changeValue,
+ e.invoiceAmount * (1 + (e.commission/100)),
+ e.invoiceAmount,
+ NULL,
+ NULL,
+ e.currencyFk,
+ FALSE isBooked,
+ c.code,
+ 'order'
+ FROM entry e
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN currency c ON c.id = e.currencyFk
+ WHERE e.supplierFk = vSupplierFk
+ AND tr.landed >= CURDATE()
+ AND e.invoiceInFk IS NULL
+ AND vHasEntries
+ ORDER BY (dated IS NULL AND NOT isBooked),
+ dated,
+ IF(vOrderBy = 'dueDate', id, NULL)
+ LIMIT 10000000000000000000
) t;
END ;;
DELIMITER ;
@@ -74119,7 +74187,6 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `ticket_cloneWeekly`(
vDateTo DATE
)
BEGIN
- DECLARE vIsDone BOOL;
DECLARE vLanding DATE;
DECLARE vShipment DATE;
DECLARE vWarehouseFk INT;
@@ -74130,36 +74197,37 @@ BEGIN
DECLARE vAgencyModeFk INT;
DECLARE vNewTicket INT;
DECLARE vYear INT;
- DECLARE vSalesPersonFK INT;
- DECLARE vItemPicker INT;
+ DECLARE vObservationSalesPersonFk INT
+ DEFAULT (SELECT id FROM observationType WHERE code = 'salesPerson');
+ DECLARE vObservationItemPickerFk INT
+ DEFAULT (SELECT id FROM observationType WHERE code = 'itemPicker');
+ DECLARE vEmail VARCHAR(255);
+ DECLARE vIsDuplicateMail BOOL;
+ DECLARE vSubject VARCHAR(100);
+ DECLARE vMessage TEXT;
+ DECLARE vDone BOOL;
- DECLARE rsTicket CURSOR FOR
- SELECT tt.ticketFk,
- t.clientFk,
- t.warehouseFk,
- t.companyFk,
- t.addressFk,
- tt.agencyModeFk,
- ti.dated
- FROM ticketWeekly tt
- JOIN ticket t ON tt.ticketFk = t.id
- JOIN tmp.time ti
- WHERE WEEKDAY(ti.dated) = tt.weekDay;
+ DECLARE vTickets CURSOR FOR
+ SELECT tt.ticketFk,
+ t.clientFk,
+ t.warehouseFk,
+ t.companyFk,
+ t.addressFk,
+ tt.agencyModeFk,
+ ti.dated
+ FROM ticketWeekly tt
+ JOIN ticket t ON tt.ticketFk = t.id
+ JOIN tmp.time ti
+ WHERE WEEKDAY(ti.dated) = tt.weekDay;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET vIsDone = TRUE;
-
- CALL `util`.`time_generate`(vDateFrom,vDateTo);
-
- OPEN rsTicket;
- myLoop: LOOP
- BEGIN
- DECLARE vSalesPersonEmail VARCHAR(150);
- DECLARE vIsDuplicateMail BOOL;
- DECLARE vSubject VARCHAR(150);
- DECLARE vMessage TEXT;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- SET vIsDone = FALSE;
- FETCH rsTicket INTO
+ CALL `util`.`time_generate`(vDateFrom, vDateTo);
+
+ OPEN vTickets;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vTickets INTO
vTicketFk,
vClientFk,
vWarehouseFk,
@@ -74168,11 +74236,11 @@ BEGIN
vAgencyModeFk,
vShipment;
- IF vIsDone THEN
- LEAVE myLoop;
+ IF vDone THEN
+ LEAVE l;
END IF;
- -- busca si el ticket ya ha sido clonado
+ -- Busca si el ticket ya ha sido clonado
IF EXISTS (SELECT TRUE FROM ticket tOrig
JOIN sale saleOrig ON tOrig.id = saleOrig.ticketFk
JOIN saleCloned sc ON sc.saleOriginalFk = saleOrig.id
@@ -74182,7 +74250,7 @@ BEGIN
AND tClon.isDeleted = FALSE
AND DATE(tClon.shipped) = vShipment)
THEN
- ITERATE myLoop;
+ ITERATE l;
END IF;
IF vAgencyModeFk IS NULL THEN
@@ -74222,15 +74290,15 @@ BEGIN
priceFixed,
isPriceFixed)
SELECT vNewTicket,
- saleOrig.itemFk,
- saleOrig.concept,
- saleOrig.quantity,
- saleOrig.price,
- saleOrig.discount,
- saleOrig.priceFixed,
- saleOrig.isPriceFixed
- FROM sale saleOrig
- WHERE saleOrig.ticketFk = vTicketFk;
+ itemFk,
+ concept,
+ quantity,
+ price,
+ discount,
+ priceFixed,
+ isPriceFixed
+ FROM sale
+ WHERE ticketFk = vTicketFk;
INSERT IGNORE INTO saleCloned(saleOriginalFk, saleClonedFk)
SELECT saleOriginal.id, saleClon.id
@@ -74267,15 +74335,7 @@ BEGIN
attenderFk,
vNewTicket
FROM ticketRequest
- WHERE ticketFk =vTicketFk;
-
- SELECT id INTO vSalesPersonFK
- FROM observationType
- WHERE code = 'salesPerson';
-
- SELECT id INTO vItemPicker
- FROM observationType
- WHERE code = 'itemPicker';
+ WHERE ticketFk = vTicketFk;
INSERT INTO ticketObservation(
ticketFk,
@@ -74283,7 +74343,7 @@ BEGIN
description)
VALUES(
vNewTicket,
- vSalesPersonFK,
+ vObservationSalesPersonFk,
CONCAT('turno desde ticket: ',vTicketFk))
ON DUPLICATE KEY UPDATE description =
CONCAT(ticketObservation.description,VALUES(description),' ');
@@ -74293,16 +74353,17 @@ BEGIN
description)
VALUES(
vNewTicket,
- vItemPicker,
+ vObservationItemPickerFk,
'ATENCION: Contiene lineas de TURNO')
ON DUPLICATE KEY UPDATE description =
CONCAT(ticketObservation.description,VALUES(description),' ');
- IF (vLanding IS NULL) THEN
-
- SELECT e.email INTO vSalesPersonEmail
+ IF vLanding IS NULL THEN
+ SELECT IFNULL(d.notificationEmail, e.email) INTO vEmail
FROM client c
JOIN account.emailUser e ON e.userFk = c.salesPersonFk
+ LEFT JOIN workerDepartment wd ON wd.workerFk = c.salesPersonFk
+ LEFT JOIN department d ON d.id = wd.departmentFk
WHERE c.id = vClientFk;
SET vSubject = CONCAT('Turnos - No se ha podido clonar correctamente el ticket ',
@@ -74314,21 +74375,22 @@ BEGIN
SELECT COUNT(*) INTO vIsDuplicateMail
FROM mail
- WHERE receiver = vSalesPersonEmail
+ WHERE receiver = vEmail
AND subject = vSubject;
IF NOT vIsDuplicateMail THEN
- CALL mail_insert(vSalesPersonEmail, NULL, vSubject, vMessage);
+ CALL mail_insert(vEmail, NULL, vSubject, vMessage);
END IF;
CALL ticket_setState(vNewTicket, 'FIXING');
ELSE
CALL ticketCalculateClon(vNewTicket, vTicketFk);
END IF;
-
- END;
END LOOP;
- CLOSE rsTicket;
- DROP TEMPORARY TABLE IF EXISTS tmp.time, tmp.zoneGetLanded;
+ CLOSE vTickets;
+
+ DROP TEMPORARY TABLE IF EXISTS
+ tmp.time,
+ tmp.zoneGetLanded;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
@@ -81972,55 +82034,57 @@ DELIMITER ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `zone_getAddresses`(
vSelf INT,
- vLanded DATE
+ vShipped DATE,
+ vDepartmentFk INT
)
BEGIN
/**
* Devuelve un listado de todos los clientes activos
* con consignatarios a los que se les puede
- * vender producto para esa zona y no tiene un ticket
- * para ese día.
+ * vender producto para esa zona.
*
* @param vSelf Id de zona
- * @param vDated Fecha de entrega
+ * @param vShipped Fecha de envio
+ * @param vDepartmentFk Id de departamento
* @return Un select
*/
CALL zone_getPostalCode(vSelf);
- WITH notHasTicket AS (
- SELECT id
- FROM vn.client
- WHERE id NOT IN (
- SELECT clientFk
- FROM vn.ticket
- WHERE landed BETWEEN vLanded AND util.dayEnd(vLanded)
- )
+ WITH clientWithTicket AS (
+ SELECT clientFk
+ FROM vn.ticket
+ WHERE shipped BETWEEN vShipped AND util.dayEnd(vShipped)
)
- SELECT c.id clientFk,
- c.name,
- c.phone,
- bt.description,
- c.salesPersonFk,
- u.name username,
- aai.invoiced,
- cnb.lastShipped
- FROM vn.client c
- JOIN notHasTicket ON notHasTicket.id = c.id
- LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
- JOIN vn.`address` a ON a.clientFk = c.id
- JOIN vn.postCode pc ON pc.code = a.postalCode
- JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
- JOIN vn.zoneGeo zg ON zg.name = a.postalCode
- JOIN tmp.zoneNodes zn ON zn.geoFk = pc.geoFk
- LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
- LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
- JOIN vn.clientType ct ON ct.code = c.typeFk
- JOIN vn.businessType bt ON bt.code = c.businessTypeFk
- WHERE a.isActive
- AND c.isActive
- AND ct.code = 'normal'
- AND bt.code <> 'worker'
- GROUP BY c.id;
+ SELECT c.id,
+ c.name,
+ c.phone,
+ bt.description,
+ c.salesPersonFk,
+ u.name username,
+ aai.invoiced,
+ cnb.lastShipped,
+ cwt.clientFk
+ FROM vn.client c
+ JOIN vn.worker w ON w.id = c.salesPersonFk
+ JOIN vn.workerDepartment wd ON wd.workerFk = w.id
+ JOIN vn.department d ON d.id = wd.departmentFk
+ LEFT JOIN clientWithTicket cwt ON cwt.clientFk = c.id
+ LEFT JOIN account.`user` u ON u.id = c.salesPersonFk
+ JOIN vn.`address` a ON a.clientFk = c.id
+ JOIN vn.postCode pc ON pc.code = a.postalCode
+ JOIN vn.town t ON t.id = pc.townFk AND t.provinceFk = a.provinceFk
+ JOIN vn.zoneGeo zg ON zg.name = a.postalCode
+ JOIN tmp.zoneNodes zn ON zn.geoFk = pc.geoFk
+ LEFT JOIN bs.clientNewBorn cnb ON cnb.clientFk = c.id
+ LEFT JOIN vn.annualAverageInvoiced aai ON aai.clientFk = c.id
+ JOIN vn.clientType ct ON ct.code = c.typeFk
+ JOIN vn.businessType bt ON bt.code = c.businessTypeFk
+ WHERE a.isActive
+ AND c.isActive
+ AND ct.code = 'normal'
+ AND bt.code <> 'worker'
+ AND (d.id = vDepartmentFk OR NOT vDepartmentFk)
+ GROUP BY c.id;
DROP TEMPORARY TABLE tmp.zoneNodes;
END ;;
@@ -91355,4 +91419,4 @@ USE `vn2008`;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-08-06 6:02:57
+-- Dump completed on 2024-08-20 7:45:07
diff --git a/db/dump/.dump/triggers.sql b/db/dump/.dump/triggers.sql
index 014bce729..a968277b9 100644
--- a/db/dump/.dump/triggers.sql
+++ b/db/dump/.dump/triggers.sql
@@ -1423,6 +1423,70 @@ DELIMITER ;
--
USE `salix`;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `salix`.`ACL_beforeInsert`
+ BEFORE INSERT ON `ACL`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `salix`.`ACL_beforeUpdate`
+ BEFORE UPDATE ON `ACL`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
+/*!50003 SET @saved_cs_client = @@character_set_client */ ;
+/*!50003 SET @saved_cs_results = @@character_set_results */ ;
+/*!50003 SET @saved_col_connection = @@collation_connection */ ;
+/*!50003 SET character_set_client = utf8mb4 */ ;
+/*!50003 SET character_set_results = utf8mb4 */ ;
+/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
+/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
+/*!50003 SET sql_mode = 'IGNORE_SPACE,NO_ENGINE_SUBSTITUTION' */ ;
+DELIMITER ;;
+/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `salix`.`ACL_afterDelete`
+ AFTER DELETE ON `ACL`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO ACLLog
+ SET `action` = 'delete',
+ `changedModel` = 'Acl',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END */;;
+DELIMITER ;
+/*!50003 SET sql_mode = @saved_sql_mode */ ;
+/*!50003 SET character_set_client = @saved_cs_client */ ;
+/*!50003 SET character_set_results = @saved_cs_results */ ;
+/*!50003 SET collation_connection = @saved_col_connection */ ;
--
-- Current Database: `srt`
@@ -9220,7 +9284,13 @@ BEGIN
SET NEW.editorFk = account.myUser_getId();
IF NOT (NEW.routeFk <=> OLD.routeFk) THEN
- IF NEW.isSigned THEN
+ IF NEW.isSigned AND NOT (
+ SELECT (COUNT(s.id) = COUNT(cb.saleFk)
+ AND SUM(s.quantity) = SUM(cb.quantity))
+ FROM sale s
+ LEFT JOIN claimBeginning cb ON cb.saleFk = s.id
+ WHERE s.ticketFk = NEW.id
+ ) THEN
CALL util.throw('A signed ticket cannot be rerouted');
END IF;
INSERT IGNORE INTO routeRecalc(routeFk)
@@ -11142,4 +11212,4 @@ USE `vn2008`;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2024-08-06 6:03:19
+-- Dump completed on 2024-08-20 7:45:23
diff --git a/db/dump/fixtures.before.sql b/db/dump/fixtures.before.sql
index 650cf5333..769c081c5 100644
--- a/db/dump/fixtures.before.sql
+++ b/db/dump/fixtures.before.sql
@@ -412,7 +412,7 @@ INSERT INTO `vn`.`clientManaCache`(`clientFk`, `mana`, `dated`)
(1103, 0, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH)),
(1104, -30, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH));
-INSERT INTO `vn`.`mandateType`(`id`, `name`)
+INSERT INTO `vn`.`mandateType`(`id`, `code`)
VALUES
(1, 'B2B'),
(2, 'CORE'),
@@ -632,7 +632,7 @@ INSERT INTO `vn`.`invoiceOutSerial` (`code`, `description`, `isTaxed`, `taxAreaF
('A', 'Global nacional', 1, 'NATIONAL', 0, 'global'),
('T', 'Española rapida', 1, 'NATIONAL', 0, 'quick'),
('V', 'Intracomunitaria global', 0, 'CEE', 1, 'global'),
- ('M', 'Múltiple nacional', 1, 'NATIONAL', 0, 'quick'),
+ ('M', 'Múltiple nacional', 1, 'NATIONAL', 0, 'multiple'),
('R', 'Rectificativa', 1, 'NATIONAL', 0, NULL),
('E', 'Exportación rápida', 0, 'WORLD', 0, 'quick');
@@ -1516,7 +1516,7 @@ INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed
(9, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 9', 1, 1, ''),
(10, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 9', 1, 1, '');
-INSERT INTO `bs`.`waste`(`buyerFk`, `year`, `week`, `itemFk`, `itemTypeFk`, `saleTotal`, `saleQuantity`, `saleInternalWaste`, `saleExternalWaste`)
+INSERT INTO `bs`.`waste`(`buyerFk`, `year`, `week`, `itemFk`, `itemTypeFk`, `saleTotal`, `saleWasteQuantity`, `saleInternalWaste`, `saleExternalWaste`)
VALUES
('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 1, 1, '1062', '51', '56.20', '56.20'),
('35', YEAR(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK)), WEEK(DATE_ADD(util.VN_CURDATE(), INTERVAL -1 WEEK), 1), 2, 1, '35074', '687', '53.12', '89.69'),
@@ -3945,11 +3945,11 @@ VALUES
(35, 'ES12346B12345679', 3, 241);
INSERT INTO vn.accountDetailType
-(id, description)
+(id, description, code)
VALUES
- (1, 'IBAN'),
- (2, 'SWIFT'),
- (3, 'Referencia Remesas'),
- (4, 'Referencia Transferencias'),
- (5, 'Referencia Nominas'),
- (6, 'ABA');
+ (1, 'IBAN', 'iban'),
+ (2, 'SWIFT', 'swift'),
+ (3, 'Referencia Remesas', 'remRef'),
+ (4, 'Referencia Transferencias', 'trnRef'),
+ (5, 'Referencia Nominas', 'payRef'),
+ (6, 'ABA', 'aba');
diff --git a/db/routines/bs/procedures/waste_addSales.sql b/db/routines/bs/procedures/waste_addSales.sql
index 3e189d2e6..20eee5d49 100644
--- a/db/routines/bs/procedures/waste_addSales.sql
+++ b/db/routines/bs/procedures/waste_addSales.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bs`.`waste_addSales`()
BEGIN
- DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY;
+ DECLARE vDateFrom DATE DEFAULT util.VN_CURDATE() - INTERVAL WEEKDAY(util.VN_CURDATE()) DAY;
DECLARE vDateTo DATE DEFAULT vDateFrom + INTERVAL 6 DAY;
CALL cache.last_buy_refresh(FALSE);
@@ -12,25 +12,22 @@ BEGIN
it.workerFk,
it.id,
s.itemFk,
- SUM(s.quantity),
- SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity) `value`,
- SUM (
+ SUM((b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity),
+ SUM(IF(aw.`type`, s.quantity, 0)),
+ SUM(
IF(
aw.`type` = 'internal',
(b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
0
)
- ) internalWaste,
- SUM (
+ ),
+ SUM(
IF(
aw.`type` = 'external',
(b.buyingValue + b.freightValue + b.comissionValue + b.packageValue) * s.quantity,
- IF(c.code = 'manaClaim',
- sc.value * s.quantity,
- 0
- )
+ 0
)
- ) externalWaste
+ )
FROM vn.sale s
JOIN vn.item i ON i.id = s.itemFk
JOIN vn.itemType it ON it.id = i.typeFk
@@ -41,10 +38,8 @@ BEGIN
JOIN cache.last_buy lb ON lb.item_id = i.id
AND lb.warehouse_id = w.id
JOIN vn.buy b ON b.id = lb.buy_id
- LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id
- LEFT JOIN vn.component c ON c.id = sc.componentFk
WHERE t.shipped BETWEEN vDateFrom AND vDateTo
AND w.isManaged
- GROUP BY it.id, i.id;
+ GROUP BY i.id;
END$$
DELIMITER ;
diff --git a/db/routines/salix/triggers/ACL_afterDelete.sql b/db/routines/salix/triggers/ACL_afterDelete.sql
index 18689dfb0..b7e6071fc 100644
--- a/db/routines/salix/triggers/ACL_afterDelete.sql
+++ b/db/routines/salix/triggers/ACL_afterDelete.sql
@@ -3,7 +3,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `salix`.`ACL_afterDelete`
AFTER DELETE ON `ACL`
FOR EACH ROW
BEGIN
- INSERT INTO ACL
+ INSERT INTO ACLLog
SET `action` = 'delete',
`changedModel` = 'Acl',
`changedModelId` = OLD.id,
diff --git a/db/routines/srt/events/moving_clean.sql b/db/routines/srt/events/moving_clean.sql
index a6f7792a2..18644a9f8 100644
--- a/db/routines/srt/events/moving_clean.sql
+++ b/db/routines/srt/events/moving_clean.sql
@@ -1,13 +1,9 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `srt`.`moving_clean`
- ON SCHEDULE EVERY 5 MINUTE
+ ON SCHEDULE EVERY 15 MINUTE
STARTS '2022-01-21 00:00:00.000'
ON COMPLETION PRESERVE
ENABLE
COMMENT 'Llama a srt.moving_clean para que elimine y notifique de registr'
-DO BEGIN
-
- CALL srt.moving_clean();
-
-END$$
+DO CALL srt.moving_clean()$$
DELIMITER ;
diff --git a/db/routines/srt/procedures/moving_clean.sql b/db/routines/srt/procedures/moving_clean.sql
index b8fae7ff4..a5bbc7e70 100644
--- a/db/routines/srt/procedures/moving_clean.sql
+++ b/db/routines/srt/procedures/moving_clean.sql
@@ -3,61 +3,69 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`moving_clean`()
BEGIN
/**
* Elimina movimientos por inactividad
- *
*/
DECLARE vExpeditionFk INT;
- DECLARE vBufferToFk INT;
DECLARE vBufferFromFk INT;
- DECLARE done BOOL DEFAULT FALSE;
-
- DECLARE cur CURSOR FOR
- SELECT m.expeditionFk, m.bufferToFk, m.bufferFromFk
- FROM srt.moving m
- JOIN srt.config c
- JOIN (SELECT bufferFk, SUM(isActive) hasBox
- FROM srt.photocell
- GROUP BY bufferFk) sub ON sub.bufferFk = m.bufferFromFk
- WHERE m.created < TIMESTAMPADD(MINUTE, - c.movingMaxLife , util.VN_NOW())
+ DECLARE vStateOutFk INT
+ DEFAULT (SELECT id FROM expeditionState WHERE `description` = 'OUT');
+ DECLARE vDone BOOL;
+ DECLARE vSorter CURSOR FOR
+ SELECT m.expeditionFk, m.bufferFromFk
+ FROM moving m
+ JOIN (
+ SELECT bufferFk, SUM(isActive) hasBox
+ FROM photocell
+ GROUP BY bufferFk
+ ) sub ON sub.bufferFk = m.bufferFromFk
+ WHERE m.created < (util.VN_NOW() - INTERVAL (SELECT movingMaxLife FROM config) MINUTE)
AND NOT sub.hasBox;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- OPEN cur;
+ DECLARE EXIT HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
- bucle: LOOP
+ OPEN vSorter;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vSorter INTO vExpeditionFk, vBufferFromFk;
- FETCH cur INTO vExpeditionFk, vBufferToFk, vBufferFromFk;
-
- IF done THEN
- LEAVE bucle;
+ IF vDone THEN
+ LEAVE l;
END IF;
- DELETE FROM srt.moving
+ START TRANSACTION;
+
+ SELECT id
+ FROM moving
+ WHERE expeditionFk = vExpeditionFk
+ FOR UPDATE;
+
+ DELETE FROM moving
WHERE expeditionFk = vExpeditionFk;
- UPDATE srt.expedition e
- JOIN srt.expeditionState es ON es.description = 'OUT'
- SET
- bufferFk = NULL,
+ SELECT id
+ FROM expedition
+ WHERE id = vExpeditionFk
+ OR (bufferFk = vBufferFromFk AND `position` > 0)
+ FOR UPDATE;
+
+ UPDATE expedition
+ SET bufferFk = NULL,
`position` = NULL,
- stateFk = es.id
- WHERE e.id = vExpeditionFk;
+ stateFk = vStateOutFk
+ WHERE id = vExpeditionFk;
- UPDATE srt.expedition e
- SET e.`position` = e.`position` - 1
- WHERE e.bufferFk = vBufferFromFk
- AND e.`position` > 0;
-
- CALL vn.mail_insert(
- 'pako@verdnatura.es, carles@verdnatura.es',
- NULL,
- CONCAT('Moving_clean. Expedition: ', vExpeditionFk, ' estaba parada'),
- CONCAT('Expedition: ', vExpeditionFk,' vBufferToFk: ', vBufferToFk)
- );
-
- END LOOP bucle;
-
- CLOSE cur;
+ UPDATE expedition
+ SET `position` = `position` - 1
+ WHERE bufferFk = vBufferFromFk
+ AND `position` > 0;
+ COMMIT;
+ END LOOP l;
+ CLOSE vSorter;
END$$
DELIMITER ;
diff --git a/db/routines/srt/triggers/buffer_afterDelete.sql b/db/routines/srt/triggers/buffer_afterDelete.sql
new file mode 100644
index 000000000..d554e6364
--- /dev/null
+++ b/db/routines/srt/triggers/buffer_afterDelete.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `srt`.`buffer_afterDelete`
+ AFTER DELETE ON `buffer`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO buffer
+ SET `action` = 'delete',
+ `changedModel` = 'Buffer',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/srt/triggers/buffer_beforeInsert.sql b/db/routines/srt/triggers/buffer_beforeInsert.sql
new file mode 100644
index 000000000..6b1e05362
--- /dev/null
+++ b/db/routines/srt/triggers/buffer_beforeInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `srt`.`buffer_beforeInsert`
+ BEFORE INSERT ON `buffer`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/srt/triggers/buffer_beforeUpdate.sql b/db/routines/srt/triggers/buffer_beforeUpdate.sql
new file mode 100644
index 000000000..86418a551
--- /dev/null
+++ b/db/routines/srt/triggers/buffer_beforeUpdate.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `srt`.`buffer_beforeUpdate`
+ BEFORE UPDATE ON `buffer`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/srt/triggers/config_afterDelete.sql b/db/routines/srt/triggers/config_afterDelete.sql
new file mode 100644
index 000000000..1e4af9104
--- /dev/null
+++ b/db/routines/srt/triggers/config_afterDelete.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `srt`.`config_afterDelete`
+ AFTER DELETE ON `config`
+ FOR EACH ROW
+BEGIN
+ INSERT INTO config
+ SET `action` = 'delete',
+ `changedModel` = 'Config',
+ `changedModelId` = OLD.id,
+ `userFk` = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/srt/triggers/config_beforeInsert.sql b/db/routines/srt/triggers/config_beforeInsert.sql
new file mode 100644
index 000000000..7d8389646
--- /dev/null
+++ b/db/routines/srt/triggers/config_beforeInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `srt`.`config_beforeInsert`
+ BEFORE INSERT ON `config`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/srt/triggers/config_beforeUpdate.sql b/db/routines/srt/triggers/config_beforeUpdate.sql
new file mode 100644
index 000000000..0002fb4d6
--- /dev/null
+++ b/db/routines/srt/triggers/config_beforeUpdate.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `srt`.`config_beforeUpdate`
+ BEFORE UPDATE ON `config`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/functions/invoiceSerial.sql b/db/routines/vn/functions/invoiceSerial.sql
index 66448ac9c..9df887cf5 100644
--- a/db/routines/vn/functions/invoiceSerial.sql
+++ b/db/routines/vn/functions/invoiceSerial.sql
@@ -1,26 +1,32 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceSerial`(vClientFk INT, vCompanyFk INT, vType CHAR(1))
- RETURNS char(1) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
+CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceSerial`(vClientFk INT, vCompanyFk INT, vType CHAR(15))
+ RETURNS char(2) CHARSET utf8mb3 COLLATE utf8mb3_general_ci
DETERMINISTIC
BEGIN
/**
- * Obtiene la serie de de una factura
+ * Obtiene la serie de una factura
* dependiendo del area del cliente.
- *
+ *
* @param vClientFk Id del cliente
* @param vCompanyFk Id de la empresa
- * @param vType Tipo de factura ["R", "M", "G"]
- * @return Serie de la factura
+ * @param vType Tipo de factura ['global','multiple','quick']
+ * @return vSerie de la factura
*/
- DECLARE vTaxArea VARCHAR(25);
- DECLARE vSerie CHAR(1);
+ DECLARE vTaxArea VARCHAR(25) COLLATE utf8mb3_general_ci;
+ DECLARE vSerie CHAR(2);
IF (SELECT hasInvoiceSimplified FROM client WHERE id = vClientFk) THEN
RETURN 'S';
END IF;
- SELECT clientTaxArea(vClientFk, vCompanyFk) INTO vTaxArea;
- SELECT invoiceSerialArea(vType,vTaxArea) INTO vSerie;
+ SELECT addressTaxArea(defaultAddressFk, vCompanyFk) INTO vTaxArea
+ FROM client
+ WHERE id = vClientFk;
+
+ SELECT code INTO vSerie
+ FROM invoiceOutSerial
+ WHERE `type` = vType AND taxAreaFk = vTaxArea;
+
RETURN vSerie;
END$$
DELIMITER ;
diff --git a/db/routines/vn/functions/invoiceSerialArea.sql b/db/routines/vn/functions/invoiceSerialArea.sql
deleted file mode 100644
index 02edd83f2..000000000
--- a/db/routines/vn/functions/invoiceSerialArea.sql
+++ /dev/null
@@ -1,34 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`invoiceSerialArea`(vType CHAR(1), vTaxArea VARCHAR(25))
- RETURNS char(1) CHARSET utf8mb3 COLLATE utf8mb3_unicode_ci
- DETERMINISTIC
-BEGIN
- DECLARE vSerie CHAR(1);
-
- IF vType = 'R' THEN
- SELECT
- CASE vTaxArea
- WHEN 'CEE' THEN 'H'
- WHEN 'WORLD' THEN 'E'
- ELSE 'T'
- END INTO vSerie;
- -- Factura multiple
- ELSEIF vType = 'M' THEN
- SELECT
- CASE vTaxArea
- WHEN 'CEE' THEN 'H'
- WHEN 'WORLD' THEN 'E'
- ELSE 'M'
- END INTO vSerie;
- -- Factura global
- ELSEIF vType = 'G' THEN
- SELECT
- CASE vTaxArea
- WHEN 'CEE' THEN 'V'
- WHEN 'WORLD' THEN 'X'
- ELSE 'A'
- END INTO vSerie;
- END IF;
- RETURN vSerie;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/address_updateCoordinates.sql b/db/routines/vn/procedures/address_updateCoordinates.sql
index bdeb886df..9d3ec963a 100644
--- a/db/routines/vn/procedures/address_updateCoordinates.sql
+++ b/db/routines/vn/procedures/address_updateCoordinates.sql
@@ -1,8 +1,8 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`address_updateCoordinates`(
vTicketFk INT,
- vLongitude INT,
- vLatitude INT)
+ vLongitude DECIMAL(11,7),
+ vLatitude DECIMAL(11,7))
BEGIN
/**
* Actualiza las coordenadas de una dirección.
diff --git a/db/routines/vn/procedures/client_userDisable.sql b/db/routines/vn/procedures/client_userDisable.sql
index f2ba65c1c..779ffd688 100644
--- a/db/routines/vn/procedures/client_userDisable.sql
+++ b/db/routines/vn/procedures/client_userDisable.sql
@@ -21,6 +21,7 @@ BEGIN
AND a.id IS NULL
AND u.active
AND c.created < util.VN_CURDATE() - INTERVAL vMonths MONTH
+ AND NOT u.role = (SELECT id FROM `role` WHERE name = 'supplier')
AND u.id NOT IN (
SELECT DISTINCT c.id
FROM client c
diff --git a/db/routines/vn/procedures/collection_new.sql b/db/routines/vn/procedures/collection_new.sql
index 0bd6e1b25..ee76f3994 100644
--- a/db/routines/vn/procedures/collection_new.sql
+++ b/db/routines/vn/procedures/collection_new.sql
@@ -9,10 +9,11 @@ BEGIN
DECLARE vWarehouseFk INT;
DECLARE vWagons INT;
DECLARE vTrainFk INT;
- DECLARE vLinesLimit INT DEFAULT NULL;
+ DECLARE vLinesLimit INT;
DECLARE vTicketLines INT;
- DECLARE vVolumeLimit DECIMAL DEFAULT NULL;
+ DECLARE vVolumeLimit DECIMAL;
DECLARE vTicketVolume DECIMAL;
+ DECLARE vSizeLimit INT;
DECLARE vMaxTickets INT;
DECLARE vStateFk VARCHAR(45);
DECLARE vFirstTicketFk INT;
@@ -77,6 +78,7 @@ BEGIN
o.trainFk,
o.linesLimit,
o.volumeLimit,
+ o.sizeLimit,
pc.collection_new_lockname
INTO vMaxTickets,
vHasUniqueCollectionTime,
@@ -88,6 +90,7 @@ BEGIN
vTrainFk,
vLinesLimit,
vVolumeLimit,
+ vSizeLimit,
vLockName
FROM productionConfig pc
JOIN worker w ON w.id = vUserFk
@@ -172,6 +175,14 @@ BEGIN
JOIN state s ON s.id = pb.state
JOIN agencyMode am ON am.id = pb.agencyModeFk
JOIN agency a ON a.id = am.agencyFk
+ LEFT JOIN (
+ SELECT pb.ticketFk, MAX(i.`size`) maxSize
+ FROM tmp.productionBuffer pb
+ JOIN ticket t ON t.id = pb.ticketfk
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN item i ON i.id = s.itemFk
+ GROUP BY pb.ticketFk
+ ) sub ON sub.ticketFk = pb.ticketFk
JOIN productionConfig pc
WHERE pb.shipped <> util.VN_CURDATE()
OR (pb.ubicacion IS NULL AND a.isOwn)
@@ -183,8 +194,9 @@ BEGIN
OR (NOT pb.V AND vItemPackingTypeFk = 'V')
OR (pc.isPreviousPreparationRequired AND pb.previousWithoutParking)
OR LENGTH(pb.problem) > 0
- OR (pb.lines >= vLinesLimit AND vLinesLimit IS NOT NULL)
- OR (pb.m3 >= vVolumeLimit AND vVolumeLimit IS NOT NULL);
+ OR (pb.lines > vLinesLimit AND vLinesLimit IS NOT NULL)
+ OR (pb.m3 > vVolumeLimit AND vVolumeLimit IS NOT NULL)
+ OR ((sub.maxSize > vSizeLimit OR sub.maxSize IS NOT NULL) AND vSizeLimit IS NOT NULL);
END IF;
-- Es importante que el primer ticket se coja en todos los casos
diff --git a/db/routines/vn/procedures/entry_splitByShelving.sql b/db/routines/vn/procedures/entry_splitByShelving.sql
index f46278e5a..9f09ed5be 100644
--- a/db/routines/vn/procedures/entry_splitByShelving.sql
+++ b/db/routines/vn/procedures/entry_splitByShelving.sql
@@ -15,7 +15,7 @@ BEGIN
DECLARE cur CURSOR FOR
SELECT bb.id buyFk,
- FLOOR(ish.visible / ish.packing) ishStickers,
+ LEAST(bb.stickers, FLOOR(ish.visible / ish.packing)) ishStickers,
bb.stickers buyStickers
FROM itemShelving ish
JOIN (SELECT b.id, b.itemFk, b.stickers
@@ -23,7 +23,6 @@ BEGIN
WHERE b.entryFk = vFromEntryFk
ORDER BY b.stickers DESC
LIMIT 10000000000000000000) bb ON bb.itemFk = ish.itemFk
- AND bb.stickers >= FLOOR(ish.visible / ish.packing)
WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_general_ci
AND NOT ish.isSplit
GROUP BY ish.id;
diff --git a/db/routines/vn/procedures/invoiceOut_new.sql b/db/routines/vn/procedures/invoiceOut_new.sql
index c9b94027e..43d0a09a1 100644
--- a/db/routines/vn/procedures/invoiceOut_new.sql
+++ b/db/routines/vn/procedures/invoiceOut_new.sql
@@ -97,7 +97,7 @@ BEGIN
AND (vCorrectingSerial = vSerial OR NOT hasAnyNegativeBase())
THEN
- -- el trigger añade el siguiente Id_Factura correspondiente a la vSerial
+ -- el trigger añade el siguiente ref correspondiente a la vSerial
INSERT INTO invoiceOut(
ref,
serial,
diff --git a/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql b/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql
index c359c7c8d..26e661d9a 100644
--- a/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql
+++ b/db/routines/vn/procedures/itemShelvingSale_addBySectorCollection.sql
@@ -12,7 +12,7 @@ BEGIN
DECLARE vSaleFk INT;
DECLARE vSectorFk INT;
DECLARE vSales CURSOR FOR
- SELECT s.id
+ SELECT DISTINCT s.id
FROM sectorCollectionSaleGroup sc
JOIN saleGroupDetail sg ON sg.saleGroupFk = sc.saleGroupFk
JOIN sale s ON sg.saleFk = s.id
diff --git a/db/routines/vn/procedures/supplier_statement.sql b/db/routines/vn/procedures/supplier_statement.sql
deleted file mode 100644
index a03a7770c..000000000
--- a/db/routines/vn/procedures/supplier_statement.sql
+++ /dev/null
@@ -1,139 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`supplier_statement`(
- vSupplierFk INT,
- vCurrencyFk INT,
- vCompanyFk INT,
- vOrderBy VARCHAR(15),
- vIsConciliated BOOL
-)
-BEGIN
-/**
- * Crea un estado de cuenta de proveedores calculando
- * los saldos en euros y en la moneda especificada.
- *
- * @param vSupplierFk Id del proveedor
- * @param vCurrencyFk Id de la moneda
- * @param vCompanyFk Id de la empresa
- * @param vOrderBy Criterio de ordenación
- * @param vIsConciliated Indica si está conciliado o no
- * @return tmp.supplierStatement
- */
- SET @euroBalance:= 0;
- SET @currencyBalance:= 0;
-
- CREATE OR REPLACE TEMPORARY TABLE tmp.supplierStatement
- ENGINE = MEMORY
- SELECT *,
- @euroBalance:= ROUND(
- @euroBalance + IFNULL(paymentEuros, 0) -
- IFNULL(invoiceEuros, 0), 2
- ) euroBalance,
- @currencyBalance:= ROUND(
- @currencyBalance + IFNULL(paymentCurrency, 0) -
- IFNULL(invoiceCurrency, 0), 2
- ) currencyBalance
- FROM (
- SELECT * FROM
- (
- SELECT NULL bankFk,
- ii.companyFk,
- ii.serial,
- ii.id,
- CASE
- WHEN vOrderBy = 'issued' THEN ii.issued
- WHEN vOrderBy = 'bookEntried' THEN ii.bookEntried
- WHEN vOrderBy = 'booked' THEN ii.booked
- WHEN vOrderBy = 'dueDate' THEN iid.dueDated
- END dated,
- CONCAT('S/Fra ', ii.supplierRef) sref,
- IF(ii.currencyFk > 1,
- ROUND(SUM(iid.foreignValue) / SUM(iid.amount), 3),
- NULL
- ) changeValue,
- CAST(SUM(iid.amount) AS DECIMAL(10,2)) invoiceEuros,
- CAST(SUM(iid.foreignValue) AS DECIMAL(10,2)) invoiceCurrency,
- NULL paymentEuros,
- NULL paymentCurrency,
- ii.currencyFk,
- ii.isBooked,
- c.code,
- 'invoiceIn' statementType
- FROM invoiceIn ii
- JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
- JOIN currency c ON c.id = ii.currencyFk
- WHERE ii.issued > '2014-12-31'
- AND ii.supplierFk = vSupplierFk
- AND vCurrencyFk IN (ii.currencyFk, 0)
- AND vCompanyFk IN (ii.companyFk, 0)
- AND (vIsConciliated = ii.isBooked OR NOT vIsConciliated)
- GROUP BY iid.id
- UNION ALL
- SELECT p.bankFk,
- p.companyFk,
- NULL,
- p.id,
- CASE
- WHEN vOrderBy = 'issued' THEN p.received
- WHEN vOrderBy = 'bookEntried' THEN p.received
- WHEN vOrderBy = 'booked' THEN p.received
- WHEN vOrderBy = 'dueDate' THEN p.dueDated
- END,
- CONCAT(IFNULL(pm.name, ''),
- IF(pn.concept <> '',
- CONCAT(' : ', pn.concept),
- '')
- ),
- IF(p.currencyFk > 1, p.divisa / p.amount, NULL),
- NULL,
- NULL,
- p.amount,
- p.divisa,
- p.currencyFk,
- p.isConciliated,
- c.code,
- 'payment'
- FROM payment p
- LEFT JOIN currency c ON c.id = p.currencyFk
- LEFT JOIN accounting a ON a.id = p.bankFk
- LEFT JOIN payMethod pm ON pm.id = p.payMethodFk
- LEFT JOIN promissoryNote pn ON pn.paymentFk = p.id
- WHERE p.received > '2014-12-31'
- AND p.supplierFk = vSupplierFk
- AND vCurrencyFk IN (p.currencyFk, 0)
- AND vCompanyFk IN (p.companyFk, 0)
- AND (vIsConciliated = p.isConciliated OR NOT vIsConciliated)
- UNION ALL
- SELECT NULL,
- companyFk,
- NULL,
- se.id,
- CASE
- WHEN vOrderBy = 'issued' THEN se.dated
- WHEN vOrderBy = 'bookEntried' THEN se.dated
- WHEN vOrderBy = 'booked' THEN se.dated
- WHEN vOrderBy = 'dueDate' THEN se.dueDated
- END,
- se.description,
- 1,
- amount,
- NULL,
- NULL,
- NULL,
- currencyFk,
- isConciliated,
- c.`code`,
- 'expense'
- FROM supplierExpense se
- JOIN currency c ON c.id = se.currencyFk
- WHERE se.supplierFk = vSupplierFk
- AND vCurrencyFk IN (se.currencyFk,0)
- AND vCompanyFk IN (se.companyFk,0)
- AND (vIsConciliated = se.isConciliated OR NOT vIsConciliated)
- ) sub
- ORDER BY (dated IS NULL AND NOT isBooked),
- dated,
- IF(vOrderBy = 'dueDate', id, NULL)
- LIMIT 10000000000000000000
- ) t;
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/supplier_statementWithEntries.sql b/db/routines/vn/procedures/supplier_statementWithEntries.sql
new file mode 100644
index 000000000..df3b918a7
--- /dev/null
+++ b/db/routines/vn/procedures/supplier_statementWithEntries.sql
@@ -0,0 +1,166 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE vn.supplier_statementWithEntries(
+ vSupplierFk INT,
+ vCurrencyFk INT,
+ vCompanyFk INT,
+ vOrderBy VARCHAR(15),
+ vIsConciliated BOOL,
+ vHasEntries BOOL
+)
+BEGIN
+/**
+* Creates a supplier statement, calculating balances in euros and the specified currency.
+*
+* @param vSupplierFk Supplier ID
+* @param vCurrencyFk Currency ID
+* @param vCompanyFk Company ID
+* @param vOrderBy Order by criteria
+* @param vIsConciliated Indicates whether it is reconciled or not
+* @param vHasEntries Indicates if future entries must be shown
+* @return tmp.supplierStatement
+*/
+ DECLARE vBalanceStartingDate DATETIME;
+
+ SET @euroBalance:= 0;
+ SET @currencyBalance:= 0;
+
+ SELECT balanceStartingDate
+ INTO vBalanceStartingDate
+ FROM invoiceInConfig;
+
+ CREATE OR REPLACE TEMPORARY TABLE tmp.supplierStatement
+ ENGINE = MEMORY
+ SELECT *,
+ @euroBalance:= ROUND(
+ @euroBalance + IFNULL(paymentEuros, 0) -
+ IFNULL(invoiceEuros, 0), 2
+ ) euroBalance,
+ @currencyBalance:= ROUND(
+ @currencyBalance + IFNULL(paymentCurrency, 0) -
+ IFNULL(invoiceCurrency, 0), 2
+ ) currencyBalance
+ FROM (
+ SELECT NULL bankFk,
+ ii.companyFk,
+ ii.serial,
+ ii.id,
+ CASE
+ WHEN vOrderBy = 'issued' THEN ii.issued
+ WHEN vOrderBy = 'bookEntried' THEN ii.bookEntried
+ WHEN vOrderBy = 'booked' THEN ii.booked
+ WHEN vOrderBy = 'dueDate' THEN iid.dueDated
+ END dated,
+ CONCAT('S/Fra ', ii.supplierRef) sref,
+ IF(ii.currencyFk > 1,
+ ROUND(SUM(iid.foreignValue) / SUM(iid.amount), 3),
+ NULL
+ ) changeValue,
+ CAST(SUM(iid.amount) AS DECIMAL(10,2)) invoiceEuros,
+ CAST(SUM(iid.foreignValue) AS DECIMAL(10,2)) invoiceCurrency,
+ NULL paymentEuros,
+ NULL paymentCurrency,
+ ii.currencyFk,
+ ii.isBooked,
+ c.code,
+ 'invoiceIn' statementType
+ FROM invoiceIn ii
+ JOIN invoiceInDueDay iid ON iid.invoiceInFk = ii.id
+ JOIN currency c ON c.id = ii.currencyFk
+ WHERE ii.issued >= vBalanceStartingDate
+ AND ii.supplierFk = vSupplierFk
+ AND vCurrencyFk IN (ii.currencyFk, 0)
+ AND vCompanyFk IN (ii.companyFk, 0)
+ AND (vIsConciliated = ii.isBooked OR NOT vIsConciliated)
+ GROUP BY iid.id
+ UNION ALL
+ SELECT p.bankFk,
+ p.companyFk,
+ NULL,
+ p.id,
+ CASE
+ WHEN vOrderBy = 'issued' THEN p.received
+ WHEN vOrderBy = 'bookEntried' THEN p.received
+ WHEN vOrderBy = 'booked' THEN p.received
+ WHEN vOrderBy = 'dueDate' THEN p.dueDated
+ END,
+ CONCAT(IFNULL(pm.name, ''),
+ IF(pn.concept <> '',
+ CONCAT(' : ', pn.concept),
+ '')
+ ),
+ IF(p.currencyFk > 1, p.divisa / p.amount, NULL),
+ NULL,
+ NULL,
+ p.amount,
+ p.divisa,
+ p.currencyFk,
+ p.isConciliated,
+ c.code,
+ 'payment'
+ FROM payment p
+ LEFT JOIN currency c ON c.id = p.currencyFk
+ LEFT JOIN accounting a ON a.id = p.bankFk
+ LEFT JOIN payMethod pm ON pm.id = p.payMethodFk
+ LEFT JOIN promissoryNote pn ON pn.paymentFk = p.id
+ WHERE p.received >= vBalanceStartingDate
+ AND p.supplierFk = vSupplierFk
+ AND vCurrencyFk IN (p.currencyFk, 0)
+ AND vCompanyFk IN (p.companyFk, 0)
+ AND (vIsConciliated = p.isConciliated OR NOT vIsConciliated)
+ UNION ALL
+ SELECT NULL,
+ companyFk,
+ NULL,
+ se.id,
+ CASE
+ WHEN vOrderBy = 'issued' THEN se.dated
+ WHEN vOrderBy = 'bookEntried' THEN se.dated
+ WHEN vOrderBy = 'booked' THEN se.dated
+ WHEN vOrderBy = 'dueDate' THEN se.dueDated
+ END,
+ se.description,
+ 1,
+ amount,
+ NULL,
+ NULL,
+ NULL,
+ currencyFk,
+ isConciliated,
+ c.`code`,
+ 'expense'
+ FROM supplierExpense se
+ JOIN currency c ON c.id = se.currencyFk
+ WHERE se.supplierFk = vSupplierFk
+ AND vCurrencyFk IN (se.currencyFk,0)
+ AND vCompanyFk IN (se.companyFk,0)
+ AND (vIsConciliated = se.isConciliated OR NOT vIsConciliated)
+ UNION ALL
+ SELECT NULL bankFk,
+ e.companyFk,
+ 'E' serial,
+ e.invoiceNumber id,
+ tr.landed dated,
+ CONCAT('Ent. ',e.id) sref,
+ 1 / ((e.commission/100)+1) changeValue,
+ e.invoiceAmount * (1 + (e.commission/100)),
+ e.invoiceAmount,
+ NULL,
+ NULL,
+ e.currencyFk,
+ FALSE isBooked,
+ c.code,
+ 'order'
+ FROM entry e
+ JOIN travel tr ON tr.id = e.travelFk
+ JOIN currency c ON c.id = e.currencyFk
+ WHERE e.supplierFk = vSupplierFk
+ AND tr.landed >= CURDATE()
+ AND e.invoiceInFk IS NULL
+ AND vHasEntries
+ ORDER BY (dated IS NULL AND NOT isBooked),
+ dated,
+ IF(vOrderBy = 'dueDate', id, NULL)
+ LIMIT 10000000000000000000
+ ) t;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_cloneWeekly.sql b/db/routines/vn/procedures/ticket_cloneWeekly.sql
index fd45dc9fa..e13e7e677 100644
--- a/db/routines/vn/procedures/ticket_cloneWeekly.sql
+++ b/db/routines/vn/procedures/ticket_cloneWeekly.sql
@@ -4,7 +4,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_cloneWeekly`
vDateTo DATE
)
BEGIN
- DECLARE vIsDone BOOL;
DECLARE vLanding DATE;
DECLARE vShipment DATE;
DECLARE vWarehouseFk INT;
@@ -15,36 +14,37 @@ BEGIN
DECLARE vAgencyModeFk INT;
DECLARE vNewTicket INT;
DECLARE vYear INT;
- DECLARE vSalesPersonFK INT;
- DECLARE vItemPicker INT;
+ DECLARE vObservationSalesPersonFk INT
+ DEFAULT (SELECT id FROM observationType WHERE code = 'salesPerson');
+ DECLARE vObservationItemPickerFk INT
+ DEFAULT (SELECT id FROM observationType WHERE code = 'itemPicker');
+ DECLARE vEmail VARCHAR(255);
+ DECLARE vIsDuplicateMail BOOL;
+ DECLARE vSubject VARCHAR(100);
+ DECLARE vMessage TEXT;
+ DECLARE vDone BOOL;
- DECLARE rsTicket CURSOR FOR
- SELECT tt.ticketFk,
- t.clientFk,
- t.warehouseFk,
- t.companyFk,
- t.addressFk,
- tt.agencyModeFk,
- ti.dated
- FROM ticketWeekly tt
- JOIN ticket t ON tt.ticketFk = t.id
- JOIN tmp.time ti
- WHERE WEEKDAY(ti.dated) = tt.weekDay;
+ DECLARE vTickets CURSOR FOR
+ SELECT tt.ticketFk,
+ t.clientFk,
+ t.warehouseFk,
+ t.companyFk,
+ t.addressFk,
+ tt.agencyModeFk,
+ ti.dated
+ FROM ticketWeekly tt
+ JOIN ticket t ON tt.ticketFk = t.id
+ JOIN tmp.time ti
+ WHERE WEEKDAY(ti.dated) = tt.weekDay;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET vIsDone = TRUE;
-
- CALL `util`.`time_generate`(vDateFrom,vDateTo);
-
- OPEN rsTicket;
- myLoop: LOOP
- BEGIN
- DECLARE vSalesPersonEmail VARCHAR(150);
- DECLARE vIsDuplicateMail BOOL;
- DECLARE vSubject VARCHAR(150);
- DECLARE vMessage TEXT;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
- SET vIsDone = FALSE;
- FETCH rsTicket INTO
+ CALL `util`.`time_generate`(vDateFrom, vDateTo);
+
+ OPEN vTickets;
+ l: LOOP
+ SET vDone = FALSE;
+ FETCH vTickets INTO
vTicketFk,
vClientFk,
vWarehouseFk,
@@ -53,11 +53,11 @@ BEGIN
vAgencyModeFk,
vShipment;
- IF vIsDone THEN
- LEAVE myLoop;
+ IF vDone THEN
+ LEAVE l;
END IF;
- -- busca si el ticket ya ha sido clonado
+ -- Busca si el ticket ya ha sido clonado
IF EXISTS (SELECT TRUE FROM ticket tOrig
JOIN sale saleOrig ON tOrig.id = saleOrig.ticketFk
JOIN saleCloned sc ON sc.saleOriginalFk = saleOrig.id
@@ -67,7 +67,7 @@ BEGIN
AND tClon.isDeleted = FALSE
AND DATE(tClon.shipped) = vShipment)
THEN
- ITERATE myLoop;
+ ITERATE l;
END IF;
IF vAgencyModeFk IS NULL THEN
@@ -107,15 +107,15 @@ BEGIN
priceFixed,
isPriceFixed)
SELECT vNewTicket,
- saleOrig.itemFk,
- saleOrig.concept,
- saleOrig.quantity,
- saleOrig.price,
- saleOrig.discount,
- saleOrig.priceFixed,
- saleOrig.isPriceFixed
- FROM sale saleOrig
- WHERE saleOrig.ticketFk = vTicketFk;
+ itemFk,
+ concept,
+ quantity,
+ price,
+ discount,
+ priceFixed,
+ isPriceFixed
+ FROM sale
+ WHERE ticketFk = vTicketFk;
INSERT IGNORE INTO saleCloned(saleOriginalFk, saleClonedFk)
SELECT saleOriginal.id, saleClon.id
@@ -152,15 +152,7 @@ BEGIN
attenderFk,
vNewTicket
FROM ticketRequest
- WHERE ticketFk =vTicketFk;
-
- SELECT id INTO vSalesPersonFK
- FROM observationType
- WHERE code = 'salesPerson';
-
- SELECT id INTO vItemPicker
- FROM observationType
- WHERE code = 'itemPicker';
+ WHERE ticketFk = vTicketFk;
INSERT INTO ticketObservation(
ticketFk,
@@ -168,7 +160,7 @@ BEGIN
description)
VALUES(
vNewTicket,
- vSalesPersonFK,
+ vObservationSalesPersonFk,
CONCAT('turno desde ticket: ',vTicketFk))
ON DUPLICATE KEY UPDATE description =
CONCAT(ticketObservation.description,VALUES(description),' ');
@@ -178,16 +170,17 @@ BEGIN
description)
VALUES(
vNewTicket,
- vItemPicker,
+ vObservationItemPickerFk,
'ATENCION: Contiene lineas de TURNO')
ON DUPLICATE KEY UPDATE description =
CONCAT(ticketObservation.description,VALUES(description),' ');
- IF (vLanding IS NULL) THEN
-
- SELECT e.email INTO vSalesPersonEmail
+ IF vLanding IS NULL THEN
+ SELECT IFNULL(d.notificationEmail, e.email) INTO vEmail
FROM client c
JOIN account.emailUser e ON e.userFk = c.salesPersonFk
+ LEFT JOIN workerDepartment wd ON wd.workerFk = c.salesPersonFk
+ LEFT JOIN department d ON d.id = wd.departmentFk
WHERE c.id = vClientFk;
SET vSubject = CONCAT('Turnos - No se ha podido clonar correctamente el ticket ',
@@ -199,20 +192,21 @@ BEGIN
SELECT COUNT(*) INTO vIsDuplicateMail
FROM mail
- WHERE receiver = vSalesPersonEmail
+ WHERE receiver = vEmail
AND subject = vSubject;
IF NOT vIsDuplicateMail THEN
- CALL mail_insert(vSalesPersonEmail, NULL, vSubject, vMessage);
+ CALL mail_insert(vEmail, NULL, vSubject, vMessage);
END IF;
CALL ticket_setState(vNewTicket, 'FIXING');
ELSE
CALL ticketCalculateClon(vNewTicket, vTicketFk);
END IF;
-
- END;
END LOOP;
- CLOSE rsTicket;
- DROP TEMPORARY TABLE IF EXISTS tmp.time, tmp.zoneGetLanded;
+ CLOSE vTickets;
+
+ DROP TEMPORARY TABLE IF EXISTS
+ tmp.time,
+ tmp.zoneGetLanded;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/ticket_close.sql b/db/routines/vn/procedures/ticket_close.sql
index 7f52e81a7..97da5057c 100644
--- a/db/routines/vn/procedures/ticket_close.sql
+++ b/db/routines/vn/procedures/ticket_close.sql
@@ -2,7 +2,7 @@ DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_close`()
BEGIN
/**
- * Realiza el cierre de todos los
+ * Realiza el cierre de todos los
* tickets de la tabla tmp.ticket_close.
*
* @table tmp.ticket_close(ticketFk) Identificadores de los tickets a cerrar
@@ -20,7 +20,7 @@ BEGIN
DECLARE cur CURSOR FOR
SELECT ticketFk FROM tmp.ticket_close;
-
+
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
RESIGNAL;
@@ -30,7 +30,7 @@ BEGIN
proc: LOOP
SET vDone = FALSE;
-
+
FETCH cur INTO vCurTicketFk;
IF vDone THEN
@@ -47,12 +47,12 @@ BEGIN
c.hasToInvoice
INTO vClientFk,
vIsTaxDataChecked,
- vCompanyFk,
+ vCompanyFk,
vShipped,
vHasDailyInvoice,
vWithPackage,
vHasToInvoice
- FROM ticket t
+ FROM ticket t
JOIN `client` c ON c.id = t.clientFk
JOIN province p ON p.id = c.provinceFk
LEFT JOIN autonomy a ON a.id = p.autonomyFk
@@ -62,7 +62,7 @@ BEGIN
INSERT INTO ticketPackaging (ticketFk, packagingFk, quantity)
(SELECT vCurTicketFk, p.id, COUNT(*)
- FROM expedition e
+ FROM expedition e
JOIN packaging p ON p.id = e.packagingFk
JOIN ticket t ON t.id = e.ticketFk
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
@@ -73,15 +73,15 @@ BEGIN
GROUP BY p.itemFk);
-- No retornables o no catalogados
- INSERT INTO sale (itemFk, ticketFk, concept, quantity, price, isPriceFixed)
+ INSERT INTO sale (itemFk, ticketFk, concept, quantity, price, isPriceFixed)
(SELECT e.freightItemFk, vCurTicketFk, i.name, COUNT(*) AS amount, getSpecialPrice(e.freightItemFk, vClientFk), 1
- FROM expedition e
+ FROM expedition e
JOIN item i ON i.id = e.freightItemFk
LEFT JOIN packaging p ON p.itemFk = i.id
WHERE e.ticketFk = vCurTicketFk AND IFNULL(p.isPackageReturnable, 0) = 0
AND getSpecialPrice(e.freightItemFk, vClientFk) > 0
GROUP BY e.freightItemFk);
-
+
IF(vHasDailyInvoice) AND vHasToInvoice THEN
-- Facturacion rapida
@@ -89,10 +89,10 @@ BEGIN
-- Facturar si está contabilizado
IF vIsTaxDataChecked THEN
CALL invoiceOut_newFromClient(
- vClientFk,
- (SELECT invoiceSerial(vClientFk, vCompanyFk, 'M')),
- vShipped,
- vCompanyFk,
+ vClientFk,
+ (SELECT invoiceSerial(vClientFk, vCompanyFk, 'multiple')),
+ vShipped,
+ vCompanyFk,
NULL,
NULL,
vNewInvoiceId);
diff --git a/db/routines/vn/procedures/ticket_recalcByScope.sql b/db/routines/vn/procedures/ticket_recalcByScope.sql
index 41105fe23..ede755187 100644
--- a/db/routines/vn/procedures/ticket_recalcByScope.sql
+++ b/db/routines/vn/procedures/ticket_recalcByScope.sql
@@ -14,16 +14,28 @@ BEGIN
DECLARE vTicketFk INT;
DECLARE cTickets CURSOR FOR
- SELECT id FROM ticket
- WHERE refFk IS NULL
- AND ((vScope = 'client' AND clientFk = vId)
- OR (vScope = 'address' AND addressFk = vId));
+ SELECT DISTINCT t.id
+ FROM ticket t
+ LEFT JOIN tItems ti ON ti.id = t.id
+ WHERE t.refFk IS NULL
+ AND ((vScope = 'client' AND t.clientFk = vId)
+ OR (vScope = 'address' AND t.addressFk = vId)
+ OR (vScope = 'item' AND ti.id)
+ );
- DECLARE CONTINUE HANDLER FOR NOT FOUND
- SET vDone = TRUE;
+ DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
+
+ CREATE OR REPLACE TEMPORARY TABLE tItems
+ (PRIMARY KEY (id))
+ ENGINE = MEMORY
+ SELECT DISTINCT t.id
+ FROM ticket t
+ JOIN sale s ON s.ticketFk = t.id
+ JOIN itemTaxCountry itc ON itc.itemFk = s.itemFk
+ WHERE t.refFk IS NULL
+ AND (vScope = 'item' AND itc.itemFk = vId);
OPEN cTickets;
-
myLoop: LOOP
SET vDone = FALSE;
FETCH cTickets INTO vTicketFk;
@@ -34,7 +46,8 @@ BEGIN
CALL ticket_recalc(vTicketFk, NULL);
END LOOP;
-
CLOSE cTickets;
+
+ DROP TEMPORARY TABLE tItems;
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/host_beforeInsert.sql b/db/routines/vn/triggers/host_beforeInsert.sql
new file mode 100644
index 000000000..c2cb82334
--- /dev/null
+++ b/db/routines/vn/triggers/host_beforeInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`host_beforeInsert`
+ BEFORE INSERT ON `host`
+ FOR EACH ROW
+BEGIN
+ SET NEW.editorFk = account.myUser_getId();
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/host_beforeUpdate.sql b/db/routines/vn/triggers/host_beforeUpdate.sql
index 0b0962e86..dc5a18f3c 100644
--- a/db/routines/vn/triggers/host_beforeUpdate.sql
+++ b/db/routines/vn/triggers/host_beforeUpdate.sql
@@ -4,5 +4,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`host_beforeUpdate`
FOR EACH ROW
BEGIN
SET new.updated = util.VN_NOW();
+ SET NEW.editorFk = account.myUser_getId();
END$$
DELIMITER ;
diff --git a/db/routines/vn/triggers/roadmap_beforeInsert.sql b/db/routines/vn/triggers/roadmap_beforeInsert.sql
new file mode 100644
index 000000000..df07d5540
--- /dev/null
+++ b/db/routines/vn/triggers/roadmap_beforeInsert.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`roadmap_beforeInsert`
+ BEFORE INSERT ON `roadmap`
+ FOR EACH ROW
+BEGIN
+ IF NEW.driver1Fk IS NOT NULL THEN
+ SET NEW.driverName = (SELECT firstName FROM worker WHERE id = NEW.driver1Fk);
+ ELSE
+ SET NEW.driverName = NULL;
+ END IF;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/triggers/roadmap_beforeUpdate.sql b/db/routines/vn/triggers/roadmap_beforeUpdate.sql
new file mode 100644
index 000000000..4905a0442
--- /dev/null
+++ b/db/routines/vn/triggers/roadmap_beforeUpdate.sql
@@ -0,0 +1,12 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`roadmap_beforeUpdate`
+ BEFORE UPDATE ON `roadmap`
+ FOR EACH ROW
+BEGIN
+ IF NEW.driver1Fk IS NOT NULL THEN
+ SET NEW.driverName = (SELECT firstName FROM worker WHERE id = NEW.driver1Fk);
+ ELSE
+ SET NEW.driverName = NULL;
+ END IF;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn2008/views/mandato_tipo.sql b/db/routines/vn2008/views/mandato_tipo.sql
index a1b5b0a9f..bc3f74632 100644
--- a/db/routines/vn2008/views/mandato_tipo.sql
+++ b/db/routines/vn2008/views/mandato_tipo.sql
@@ -2,5 +2,5 @@ CREATE OR REPLACE DEFINER=`root`@`localhost`
SQL SECURITY DEFINER
VIEW `vn2008`.`mandato_tipo`
AS SELECT `m`.`id` AS `idmandato_tipo`,
- `m`.`name` AS `Nombre`
+ `m`.`code` AS `Nombre`
FROM `vn`.`mandateType` `m`
diff --git a/db/versions/11141-azureRoebelini/00-firstScript.sql b/db/versions/11141-azureRoebelini/00-firstScript.sql
new file mode 100644
index 000000000..fd6d79cfb
--- /dev/null
+++ b/db/versions/11141-azureRoebelini/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE srt.moving DROP INDEX moving_fk1_idx;
diff --git a/db/versions/11142-aquaGerbera/00-invoiceOutSerialColumn.sql b/db/versions/11142-aquaGerbera/00-invoiceOutSerialColumn.sql
new file mode 100644
index 000000000..09ac00401
--- /dev/null
+++ b/db/versions/11142-aquaGerbera/00-invoiceOutSerialColumn.sql
@@ -0,0 +1,4 @@
+ALTER TABLE vn.invoiceOutSerial
+ MODIFY COLUMN `type` enum('global','quick','multiple') CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL NULL;
+
+CREATE UNIQUE INDEX invoiceOutSerial_taxAreaFk_IDX USING BTREE ON vn.invoiceOutSerial (taxAreaFk,`type`);
diff --git a/db/versions/11142-aquaGerbera/01-invoiceOutSerialUpdate.sql b/db/versions/11142-aquaGerbera/01-invoiceOutSerialUpdate.sql
new file mode 100644
index 000000000..fad33b5dc
--- /dev/null
+++ b/db/versions/11142-aquaGerbera/01-invoiceOutSerialUpdate.sql
@@ -0,0 +1,3 @@
+UPDATE vn.invoiceOutSerial
+ SET `type`='multiple'
+ WHERE `description` LIKE '%Múltiple%';
diff --git a/db/versions/11165-grayAralia/00-firstScript.sql b/db/versions/11165-grayAralia/00-firstScript.sql
new file mode 100644
index 000000000..652b2343a
--- /dev/null
+++ b/db/versions/11165-grayAralia/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.productionConfig
+ DROP COLUMN scannableCodeType,
+ DROP COLUMN scannablePreviusCodeType;
diff --git a/db/versions/11170-redPaniculata/00-firstScript.sql b/db/versions/11170-redPaniculata/00-firstScript.sql
new file mode 100644
index 000000000..b5d34c082
--- /dev/null
+++ b/db/versions/11170-redPaniculata/00-firstScript.sql
@@ -0,0 +1,6 @@
+-- Place your SQL code here
+
+ALTER TABLE vn.packingSite DROP COLUMN IF EXISTS hasNewLabelMrwMethod;
+
+ALTER TABLE vn.productionConfig ADD IF NOT EXISTS hasNewLabelMrwMethod BOOL DEFAULT TRUE NOT NULL
+ COMMENT 'column to activate the new mrw integration';
diff --git a/db/versions/11171-maroonMoss/00-firstScript.sql b/db/versions/11171-maroonMoss/00-firstScript.sql
new file mode 100644
index 000000000..0632239ac
--- /dev/null
+++ b/db/versions/11171-maroonMoss/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.operator
+ ADD COLUMN sizeLimit int(10) unsigned DEFAULT 90 NULL COMMENT 'Límite de altura en una colección para la asignación de pedidos' AFTER volumeLimit,
+ MODIFY COLUMN linesLimit int(10) unsigned DEFAULT 20 NULL COMMENT 'Límite de lineas en una colección para la asignación de pedidos';
diff --git a/db/versions/11172-blueFern/00-firstScript.sql b/db/versions/11172-blueFern/00-firstScript.sql
new file mode 100644
index 000000000..04e0813d5
--- /dev/null
+++ b/db/versions/11172-blueFern/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.ticket DROP FOREIGN KEY ticket_FK;
\ No newline at end of file
diff --git a/db/versions/11172-blueFern/01-firstScript.sql b/db/versions/11172-blueFern/01-firstScript.sql
new file mode 100644
index 000000000..64255f9de
--- /dev/null
+++ b/db/versions/11172-blueFern/01-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOut DROP KEY Id_Factura;
diff --git a/db/versions/11172-blueFern/02-firstScript.sql b/db/versions/11172-blueFern/02-firstScript.sql
new file mode 100644
index 000000000..e76b7f7d6
--- /dev/null
+++ b/db/versions/11172-blueFern/02-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOut MODIFY COLUMN id int(10) unsigned NOT NULL;
\ No newline at end of file
diff --git a/db/versions/11172-blueFern/03-firstScript.sql b/db/versions/11172-blueFern/03-firstScript.sql
new file mode 100644
index 000000000..e6def98a4
--- /dev/null
+++ b/db/versions/11172-blueFern/03-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceCorrection DROP FOREIGN KEY corrected_fk;
diff --git a/db/versions/11172-blueFern/04-firstScript.sql b/db/versions/11172-blueFern/04-firstScript.sql
new file mode 100644
index 000000000..a19bc336e
--- /dev/null
+++ b/db/versions/11172-blueFern/04-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceCorrection DROP FOREIGN KEY correcting_fk;
diff --git a/db/versions/11172-blueFern/05-firstScript.sql b/db/versions/11172-blueFern/05-firstScript.sql
new file mode 100644
index 000000000..9f5ec2871
--- /dev/null
+++ b/db/versions/11172-blueFern/05-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOutExpense DROP FOREIGN KEY invoiceOutExpence_FK_1;
diff --git a/db/versions/11172-blueFern/06-firstScript.sql b/db/versions/11172-blueFern/06-firstScript.sql
new file mode 100644
index 000000000..2c16e9b77
--- /dev/null
+++ b/db/versions/11172-blueFern/06-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOutTax DROP FOREIGN KEY invoiceOutFk;
diff --git a/db/versions/11172-blueFern/07-firstScript.sql b/db/versions/11172-blueFern/07-firstScript.sql
new file mode 100644
index 000000000..bec72a131
--- /dev/null
+++ b/db/versions/11172-blueFern/07-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOut DROP PRIMARY KEY;
diff --git a/db/versions/11172-blueFern/08-firstScript.sql b/db/versions/11172-blueFern/08-firstScript.sql
new file mode 100644
index 000000000..316db2e32
--- /dev/null
+++ b/db/versions/11172-blueFern/08-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOut ADD CONSTRAINT invoiceOut_pk PRIMARY KEY (id);
diff --git a/db/versions/11172-blueFern/09-firstScript.sql b/db/versions/11172-blueFern/09-firstScript.sql
new file mode 100644
index 000000000..553d7857e
--- /dev/null
+++ b/db/versions/11172-blueFern/09-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.invoiceOut ADD CONSTRAINT invoiceOut_unique UNIQUE KEY (`ref`);
diff --git a/db/versions/11172-blueFern/10-firstScript.sql b/db/versions/11172-blueFern/10-firstScript.sql
new file mode 100644
index 000000000..47ddaff14
--- /dev/null
+++ b/db/versions/11172-blueFern/10-firstScript.sql
@@ -0,0 +1,5 @@
+UPDATE vn.invoiceOut
+ SET id = (SELECT MAX(id) + 1 FROM vn.invoiceOut)
+ WHERE id = 0;
+
+ALTER TABLE vn.invoiceOut MODIFY COLUMN id int(10) unsigned auto_increment NOT NULL;
diff --git a/db/versions/11172-blueFern/11-firstScript.sql b/db/versions/11172-blueFern/11-firstScript.sql
new file mode 100644
index 000000000..e1847a877
--- /dev/null
+++ b/db/versions/11172-blueFern/11-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.ticket ADD CONSTRAINT ticket_invoiceOut_FK
+ FOREIGN KEY (refFk) REFERENCES vn.invoiceOut(`ref`) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11172-blueFern/12-firstScript.sql b/db/versions/11172-blueFern/12-firstScript.sql
new file mode 100644
index 000000000..720b7962e
--- /dev/null
+++ b/db/versions/11172-blueFern/12-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.invoiceCorrection ADD CONSTRAINT invoiceCorrection_invoiceOut_FK
+ FOREIGN KEY (correctingFk) REFERENCES vn.invoiceOut(id) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/db/versions/11172-blueFern/13-firstScript.sql b/db/versions/11172-blueFern/13-firstScript.sql
new file mode 100644
index 000000000..35099bd5d
--- /dev/null
+++ b/db/versions/11172-blueFern/13-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.invoiceCorrection ADD CONSTRAINT invoiceCorrection_invoiceOut_FK_1
+ FOREIGN KEY (correctedFk) REFERENCES vn.invoiceOut(id) ON DELETE CASCADE ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/db/versions/11172-blueFern/14-firstScript.sql b/db/versions/11172-blueFern/14-firstScript.sql
new file mode 100644
index 000000000..f1aa0a216
--- /dev/null
+++ b/db/versions/11172-blueFern/14-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.invoiceOutExpense ADD CONSTRAINT invoiceOutExpense_invoiceOut_FK
+ FOREIGN KEY (invoiceOutFk) REFERENCES vn.invoiceOut(id) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/db/versions/11172-blueFern/15-firstScript.sql b/db/versions/11172-blueFern/15-firstScript.sql
new file mode 100644
index 000000000..ba570e20c
--- /dev/null
+++ b/db/versions/11172-blueFern/15-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE vn.invoiceOutTax ADD CONSTRAINT invoiceOutTax_invoiceOut_FK
+ FOREIGN KEY (invoiceOutFk) REFERENCES vn.invoiceOut(id) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/db/versions/11175-pinkChico/00-firstScript.sql b/db/versions/11175-pinkChico/00-firstScript.sql
new file mode 100644
index 000000000..349f4c7f7
--- /dev/null
+++ b/db/versions/11175-pinkChico/00-firstScript.sql
@@ -0,0 +1,8 @@
+USE vn;
+
+CREATE TABLE IF NOT EXISTS ormConfig (
+ id int(5) NOT NULL AUTO_INCREMENT primary key,
+ selectLimit int(5) NOT NULL
+);
+
+INSERT IGNORE INTO ormConfig SET selectLimit = 1000;
\ No newline at end of file
diff --git a/db/versions/11180-navyGerbera/00-firstScript.sql b/db/versions/11180-navyGerbera/00-firstScript.sql
new file mode 100644
index 000000000..8c5d79ce8
--- /dev/null
+++ b/db/versions/11180-navyGerbera/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE vn.invoiceInConfig ADD balanceStartingDate DATE DEFAULT '2015-01-01' NOT NULL;
diff --git a/db/versions/11182-redAralia/00-firstScript.sql b/db/versions/11182-redAralia/00-firstScript.sql
new file mode 100644
index 000000000..72c06de65
--- /dev/null
+++ b/db/versions/11182-redAralia/00-firstScript.sql
@@ -0,0 +1,2 @@
+ALTER TABLE bs.waste CHANGE saleQuantity saleWasteQuantity decimal(10,2) DEFAULT NULL NULL AFTER saleTotal;
+ALTER TABLE bs.waste MODIFY COLUMN saleTotal decimal(10,2) DEFAULT NULL NULL COMMENT 'Coste';
diff --git a/db/versions/11185-maroonArborvitae/00-firstScript.sql b/db/versions/11185-maroonArborvitae/00-firstScript.sql
new file mode 100644
index 000000000..b07126e71
--- /dev/null
+++ b/db/versions/11185-maroonArborvitae/00-firstScript.sql
@@ -0,0 +1 @@
+DROP TABLE bi.Greuges_comercial_detail;
\ No newline at end of file
diff --git a/db/versions/11187-yellowErica/00-firstScript.sql b/db/versions/11187-yellowErica/00-firstScript.sql
new file mode 100644
index 000000000..fb75b1f2f
--- /dev/null
+++ b/db/versions/11187-yellowErica/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.host ADD editorFk int(10) unsigned DEFAULT NULL NULL;
diff --git a/db/versions/11189-purplePaniculata/00-firstScript.sql b/db/versions/11189-purplePaniculata/00-firstScript.sql
new file mode 100644
index 000000000..3319bd154
--- /dev/null
+++ b/db/versions/11189-purplePaniculata/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.item
+ ADD CONSTRAINT item_itemPackingType_FK FOREIGN KEY (itemPackingTypeFk)
+ REFERENCES vn.itemPackingType(code) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11190-blueLaurel/00-firstScript.sql b/db/versions/11190-blueLaurel/00-firstScript.sql
new file mode 100644
index 000000000..75e3f8e59
--- /dev/null
+++ b/db/versions/11190-blueLaurel/00-firstScript.sql
@@ -0,0 +1,9 @@
+ALTER TABLE hedera.tpvMerchantEnable
+ DROP FOREIGN KEY tpvMerchantEnable_ibfk_1,
+ DROP PRIMARY KEY,
+ ADD CONSTRAINT tpvMerchantEnable_pk PRIMARY KEY (merchantFk),
+ ADD CONSTRAINT tpvMerchantEnable_tpvMerchant_FK
+ FOREIGN KEY (merchantFk)
+ REFERENCES hedera.tpvMerchant(id)
+ ON DELETE RESTRICT
+ ON UPDATE CASCADE;
diff --git a/db/versions/11191-chocolateBirch/00-firstScript.sql b/db/versions/11191-chocolateBirch/00-firstScript.sql
new file mode 100644
index 000000000..4c9924a42
--- /dev/null
+++ b/db/versions/11191-chocolateBirch/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.mandateType
+ CHANGE name code VARCHAR(45) NOT NULL,
+ ADD UNIQUE (code);
\ No newline at end of file
diff --git a/db/versions/11191-chocolateBirch/01-firstScript.sql b/db/versions/11191-chocolateBirch/01-firstScript.sql
new file mode 100644
index 000000000..c69e92d51
--- /dev/null
+++ b/db/versions/11191-chocolateBirch/01-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE vn.accountDetailType
+ ADD COLUMN code VARCHAR(45),
+ ADD UNIQUE (code);
\ No newline at end of file
diff --git a/db/versions/11191-chocolateBirch/02-firstScript.sql b/db/versions/11191-chocolateBirch/02-firstScript.sql
new file mode 100644
index 000000000..733cffd63
--- /dev/null
+++ b/db/versions/11191-chocolateBirch/02-firstScript.sql
@@ -0,0 +1,9 @@
+UPDATE vn.accountDetailType
+ SET code = CASE description
+ WHEN 'IBAN' THEN 'iban'
+ WHEN 'SWIFT' THEN 'swift'
+ WHEN 'Referencia Remesas' THEN 'remRef'
+ WHEN 'Referencia Transferencias' THEN 'trnRef'
+ WHEN 'Referencia Nominas' THEN 'payRef'
+ WHEN 'ABA' THEN 'aba'
+ END;
\ No newline at end of file
diff --git a/db/versions/11192-maroonSalal/00-firstScript.sql b/db/versions/11192-maroonSalal/00-firstScript.sql
new file mode 100644
index 000000000..ac35a3db3
--- /dev/null
+++ b/db/versions/11192-maroonSalal/00-firstScript.sql
@@ -0,0 +1,3 @@
+ALTER TABLE hedera.tpvMerchantEnable
+ MODIFY COLUMN companyFk int(10) unsigned NOT NULL,
+ ADD CONSTRAINT tpvMerchantEnable_company_FK FOREIGN KEY (companyFk) REFERENCES vn.company(id) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/db/versions/11193-bronzeAspidistra/00-firstScript.sql b/db/versions/11193-bronzeAspidistra/00-firstScript.sql
new file mode 100644
index 000000000..cc837d007
--- /dev/null
+++ b/db/versions/11193-bronzeAspidistra/00-firstScript.sql
@@ -0,0 +1,19 @@
+CREATE OR REPLACE TABLE `srt`.`bufferLog` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `originFk` int(11) DEFAULT NULL,
+ `userFk` int(10) unsigned DEFAULT NULL,
+ `action` set('insert','update','delete','select') NOT NULL,
+ `creationDate` timestamp NULL DEFAULT current_timestamp(),
+ `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
+ `changedModel` enum('Buffer', 'Config') NOT NULL DEFAULT 'Buffer',
+ `oldInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`oldInstance`)),
+ `newInstance` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`newInstance`)),
+ `changedModelId` int(11) NOT NULL,
+ `changedModelValue` varchar(45) DEFAULT NULL,
+ `summaryId` varchar(30) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `logBufferUserFk` (`userFk`),
+ KEY `bufferLog_changedModel` (`changedModel`,`changedModelId`,`creationDate`),
+ KEY `bufferLog_originFk` (`originFk`,`creationDate`),
+ CONSTRAINT `bufferUserFk` FOREIGN KEY (`userFk`) REFERENCES `account`.`user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
diff --git a/db/versions/11193-bronzeAspidistra/01-firstScript.sql b/db/versions/11193-bronzeAspidistra/01-firstScript.sql
new file mode 100644
index 000000000..748056f3a
--- /dev/null
+++ b/db/versions/11193-bronzeAspidistra/01-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE srt.buffer ADD editorFk int(10) unsigned DEFAULT NULL NULL;
diff --git a/db/versions/11193-bronzeAspidistra/02-firstScript.sql b/db/versions/11193-bronzeAspidistra/02-firstScript.sql
new file mode 100644
index 000000000..36aa938d5
--- /dev/null
+++ b/db/versions/11193-bronzeAspidistra/02-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE srt.config ADD editorFk int(10) unsigned DEFAULT NULL NULL;
diff --git a/db/versions/11194-orangeOrchid/00-firstScript.sql b/db/versions/11194-orangeOrchid/00-firstScript.sql
new file mode 100644
index 000000000..59a616edf
--- /dev/null
+++ b/db/versions/11194-orangeOrchid/00-firstScript.sql
@@ -0,0 +1,9 @@
+CREATE TABLE vn.quadMindsApiConfig (
+ id int(10) unsigned NULL PRIMARY KEY,
+ `url` varchar(255) DEFAULT NULL NULL,
+ `key` varchar(255) DEFAULT NULL NULL,
+ CONSTRAINT quadMindsConfig_check CHECK (id = 1)
+)
+ENGINE=InnoDB
+DEFAULT CHARSET=utf8mb3
+COLLATE=utf8mb3_unicode_ci;
diff --git a/db/versions/11195-salmonPalmetto/00-firstScript.sql b/db/versions/11195-salmonPalmetto/00-firstScript.sql
new file mode 100644
index 000000000..980b66c8d
--- /dev/null
+++ b/db/versions/11195-salmonPalmetto/00-firstScript.sql
@@ -0,0 +1,6 @@
+ALTER TABLE vn.roadmap
+ ADD COLUMN m3 INT UNSIGNED NULL,
+ ADD COLUMN driver2Fk INT UNSIGNED NULL,
+ ADD COLUMN driver1Fk INT UNSIGNED NULL,
+ ADD CONSTRAINT roadmap_worker_FK FOREIGN KEY (driver1Fk) REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE,
+ ADD CONSTRAINT roadmap_worker_FK_2 FOREIGN KEY (driver2Fk) REFERENCES vn.worker(id) ON DELETE RESTRICT ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/db/versions/11197-aquaSalal/00-firstScript.sql b/db/versions/11197-aquaSalal/00-firstScript.sql
new file mode 100644
index 000000000..f07368d3e
--- /dev/null
+++ b/db/versions/11197-aquaSalal/00-firstScript.sql
@@ -0,0 +1,24 @@
+DELETE FROM `salix`.`ACL`
+ WHERE `model` = 'Ticket'
+ AND `property` = 'refund'
+ AND `accessType` = 'WRITE'
+ AND `permission` = 'ALLOW'
+ AND `principalType` = 'ROLE'
+ AND `principalId` = 'salesAssistant';
+
+UPDATE `salix`.`ACL`
+ SET `property` = 'cloneAll'
+ WHERE `model` = 'Ticket'
+ AND `property` = 'refund'
+ AND `accessType` = 'WRITE'
+ AND `permission` = 'ALLOW'
+ AND `principalType` = 'ROLE'
+ AND `principalId` IN ('invoicing', 'claimManager', 'logistic');
+
+DELETE FROM `salix`.`ACL`
+ WHERE `model` = 'Ticket'
+ AND `property` = 'clone'
+ AND `accessType` = 'WRITE'
+ AND `permission` = 'ALLOW'
+ AND `principalType` = 'ROLE'
+ AND `principalId` = 'administrative';
diff --git a/db/versions/11200-brownDendro/00-firstScript.sql b/db/versions/11200-brownDendro/00-firstScript.sql
new file mode 100644
index 000000000..943368b06
--- /dev/null
+++ b/db/versions/11200-brownDendro/00-firstScript.sql
@@ -0,0 +1,4 @@
+-- Place your SQL code here
+ALTER TABLE vn.saleGroup ADD stateFk TINYINT(3) UNSIGNED;
+
+ALTER TABLE vn.saleGroup ADD CONSTRAINT saleGroup_state_FK FOREIGN KEY (stateFk) REFERENCES vn.state(id) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js
index 685345273..097c6e1ab 100644
--- a/e2e/helpers/selectors.js
+++ b/e2e/helpers/selectors.js
@@ -738,69 +738,6 @@ export default {
worker: 'vn-worker-autocomplete[ng-model="$ctrl.userFk"]',
saveStateButton: `button[type=submit]`
},
- claimsIndex: {
- searchResult: 'vn-claim-index vn-card > vn-table > div > vn-tbody > a'
- },
- claimDescriptor: {
- moreMenu: 'vn-claim-descriptor vn-icon-button[icon=more_vert]',
- moreMenuDeleteClaim: '.vn-menu [name="deleteClaim"]',
- acceptDeleteClaim: '.vn-confirm.shown button[response="accept"]'
- },
- claimSummary: {
- header: 'vn-claim-summary > vn-card > h5',
- state: 'vn-claim-summary vn-label-value[label="State"] > section > span',
- observation: 'vn-claim-summary vn-horizontal.text',
- firstSaleItemId: 'vn-claim-summary vn-horizontal > vn-auto:nth-child(5) vn-table > div > vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(1) > span',
- firstSaleDescriptorImage: '.vn-popover.shown vn-item-descriptor img',
- itemDescriptorPopover: '.vn-popover.shown vn-item-descriptor',
- itemDescriptorPopoverItemDiaryButton: '.vn-popover vn-item-descriptor vn-quick-link[icon="icon-transaction"] > a',
- firstDevelopmentWorker: 'vn-claim-summary vn-horizontal > vn-auto:nth-child(4) vn-table > div > vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(4) > span',
- firstDevelopmentWorkerGoToClientButton: '.vn-popover vn-worker-descriptor vn-quick-link[icon="person"] > a',
- firstActionTicketId: 'vn-claim-summary > vn-card > vn-horizontal > vn-auto:nth-child(5) vn-table > div > vn-tbody > vn-tr > vn-td:nth-child(2) > span',
- firstActionTicketDescriptor: '.vn-popover.shown vn-ticket-descriptor'
- },
- claimBasicData: {
- claimState: 'vn-claim-basic-data vn-autocomplete[ng-model="$ctrl.claim.claimStateFk"]',
- packages: 'vn-input-number[ng-model="$ctrl.claim.packages"]',
- saveButton: `button[type=submit]`
- },
- claimDetail: {
- secondItemDiscount: 'vn-claim-detail > vn-vertical > vn-card > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(6) > span',
- discount: '.vn-popover.shown vn-input-number[ng-model="$ctrl.newDiscount"]',
- discoutPopoverMana: '.vn-popover.shown .content > div > vn-horizontal > h5',
- addItemButton: 'vn-claim-detail a vn-float-button',
- firstClaimableSaleFromTicket: '.vn-dialog.shown vn-tbody > vn-tr',
- claimDetailLine: 'vn-claim-detail > vn-vertical > vn-card > vn-vertical > vn-table > div > vn-tbody > vn-tr',
- totalClaimed: 'vn-claim-detail > vn-vertical > vn-card > vn-vertical > vn-horizontal > div > vn-label-value:nth-child(2) > section > span',
- secondItemDeleteButton: 'vn-claim-detail > vn-vertical > vn-card > vn-vertical > vn-table > div > vn-tbody > vn-tr:nth-child(2) > vn-td:nth-child(8) > vn-icon-button > button > vn-icon > i'
- },
- claimDevelopment: {
- addDevelopmentButton: 'vn-claim-development > vn-vertical > vn-card > vn-vertical > vn-one > vn-icon-button > button > vn-icon',
- firstDeleteDevelopmentButton: 'vn-claim-development > vn-vertical > vn-card > vn-vertical > form > vn-horizontal:nth-child(2) > vn-icon-button > button > vn-icon',
- firstClaimReason: 'vn-claim-development vn-horizontal:nth-child(1) vn-autocomplete[ng-model="claimDevelopment.claimReasonFk"]',
- firstClaimResult: 'vn-claim-development vn-horizontal:nth-child(1) vn-autocomplete[ng-model="claimDevelopment.claimResultFk"]',
- firstClaimResponsible: 'vn-claim-development vn-horizontal:nth-child(1) vn-autocomplete[ng-model="claimDevelopment.claimResponsibleFk"]',
- firstClaimWorker: 'vn-claim-development vn-horizontal:nth-child(1) vn-worker-autocomplete[ng-model="claimDevelopment.workerFk"]',
- firstClaimRedelivery: 'vn-claim-development vn-horizontal:nth-child(1) vn-autocomplete[ng-model="claimDevelopment.claimRedeliveryFk"]',
- secondClaimReason: 'vn-claim-development vn-horizontal:nth-child(2) vn-autocomplete[ng-model="claimDevelopment.claimReasonFk"]',
- secondClaimResult: 'vn-claim-development vn-horizontal:nth-child(2) vn-autocomplete[ng-model="claimDevelopment.claimResultFk"]',
- secondClaimResponsible: 'vn-claim-development vn-horizontal:nth-child(2) vn-autocomplete[ng-model="claimDevelopment.claimResponsibleFk"]',
- secondClaimWorker: 'vn-claim-development vn-horizontal:nth-child(2) vn-worker-autocomplete[ng-model="claimDevelopment.workerFk"]',
- secondClaimRedelivery: 'vn-claim-development vn-horizontal:nth-child(2) vn-autocomplete[ng-model="claimDevelopment.claimRedeliveryFk"]',
- saveDevelopmentButton: 'button[type=submit]'
- },
- claimNote: {
- addNoteFloatButton: 'vn-float-button',
- note: 'vn-textarea[ng-model="$ctrl.note.text"]',
- saveButton: 'button[type=submit]',
- firstNoteText: 'vn-claim-note .text'
- },
- claimAction: {
- importClaimButton: 'vn-claim-action vn-button[label="Import claim"]',
- anyLine: 'vn-claim-action vn-tbody > vn-tr',
- firstDeleteLine: 'vn-claim-action tr:nth-child(2) vn-icon-button[icon="delete"]',
- isPaidWithManaCheckbox: 'vn-claim-action vn-check[ng-model="$ctrl.claim.isChargedToMana"]'
- },
ordersIndex: {
secondSearchResultTotal: 'vn-order-index vn-card > vn-table > div > vn-tbody .vn-tr:nth-child(2) vn-td:nth-child(9)',
advancedSearchButton: 'vn-order-search-panel vn-submit[label="Search"]',
diff --git a/e2e/paths/03-worker/01-department/01_summary.spec.js b/e2e/paths/03-worker/01-department/01_summary.spec.js
deleted file mode 100644
index e4bf8fc2d..000000000
--- a/e2e/paths/03-worker/01-department/01_summary.spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import selectors from '../../../helpers/selectors.js';
-import getBrowser from '../../../helpers/puppeteer';
-
-describe('department summary path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- await page.accessToSection('worker.department');
- await page.doSearch('INFORMATICA');
- await page.click(selectors.department.firstDepartment);
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the employee summary section and check all properties', async() => {
- expect(await page.waitToGetProperty(selectors.departmentSummary.header, 'innerText')).toEqual('INFORMATICA');
- expect(await page.getProperty(selectors.departmentSummary.name, 'innerText')).toEqual('INFORMATICA');
- expect(await page.getProperty(selectors.departmentSummary.code, 'innerText')).toEqual('it');
- expect(await page.getProperty(selectors.departmentSummary.chat, 'innerText')).toEqual('informatica-cau');
- expect(await page.getProperty(selectors.departmentSummary.bossDepartment, 'innerText')).toEqual('');
- expect(await page.getProperty(selectors.departmentSummary.email, 'innerText')).toEqual('-');
- expect(await page.getProperty(selectors.departmentSummary.clientFk, 'innerText')).toEqual('-');
- });
-});
diff --git a/e2e/paths/03-worker/01-department/02-basicData.spec.js b/e2e/paths/03-worker/01-department/02-basicData.spec.js
deleted file mode 100644
index 219d1426c..000000000
--- a/e2e/paths/03-worker/01-department/02-basicData.spec.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import getBrowser from '../../../helpers/puppeteer';
-import selectors from '../../../helpers/selectors.js';
-
-const $ = {
- form: 'vn-worker-department-basic-data form',
-};
-
-describe('department summary path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- await page.accessToSection('worker.department');
- await page.doSearch('INFORMATICA');
- await page.click(selectors.department.firstDepartment);
- });
-
- beforeEach(async() => {
- await page.accessToSection('worker.department.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should edit the department basic data and confirm the department data was edited`, async() => {
- const values = {
- Name: 'Informatica',
- Code: 'IT',
- Chat: 'informatica-cau',
- Email: 'it@verdnatura.es',
- };
-
- await page.fillForm($.form, values);
- const formValues = await page.fetchForm($.form, Object.keys(values));
- const message = await page.sendForm($.form, values);
-
- expect(message.isSuccess).toBeTrue();
- expect(formValues).toEqual(values);
- });
-});
diff --git a/e2e/paths/03-worker/01_summary.spec.js b/e2e/paths/03-worker/01_summary.spec.js
deleted file mode 100644
index 51992b41d..000000000
--- a/e2e/paths/03-worker/01_summary.spec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker summary path', () => {
- const workerId = 3;
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('employee', 'worker');
- const httpDataResponse = page.waitForResponse(response => {
- return response.status() === 200 && response.url().includes(`Workers/${workerId}`);
- });
- await page.accessToSearchResult('agencyNick');
- await httpDataResponse;
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the employee summary section and check all properties', async() => {
- expect(await page.getProperty(selectors.workerSummary.header, 'innerText')).toEqual('agency agency');
- expect(await page.getProperty(selectors.workerSummary.id, 'innerText')).toEqual('3');
- expect(await page.getProperty(selectors.workerSummary.email, 'innerText')).toEqual('agency@verdnatura.es');
- expect(await page.getProperty(selectors.workerSummary.department, 'innerText')).toEqual('CAMARA');
- expect(await page.getProperty(selectors.workerSummary.userId, 'innerText')).toEqual('3');
- expect(await page.getProperty(selectors.workerSummary.userName, 'innerText')).toEqual('agency');
- expect(await page.getProperty(selectors.workerSummary.role, 'innerText')).toEqual('agency');
- expect(await page.getProperty(selectors.workerSummary.extension, 'innerText')).toEqual('1101');
- expect(await page.getProperty(selectors.workerSummary.locker, 'innerText')).toEqual('-');
- });
-});
diff --git a/e2e/paths/03-worker/02_basicData.spec.js b/e2e/paths/03-worker/02_basicData.spec.js
deleted file mode 100644
index 66a597dd1..000000000
--- a/e2e/paths/03-worker/02_basicData.spec.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker basic data path', () => {
- const workerId = 1106;
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- const httpDataResponse = page.waitForResponse(response => {
- return response.status() === 200 && response.url().includes(`Workers/${workerId}`);
- });
- await page.accessToSearchResult('David Charles Haller');
- await httpDataResponse;
- await page.accessToSection('worker.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should edit the form and then reload the section and check the data was edited', async() => {
- await page.overwrite(selectors.workerBasicData.name, 'David C.');
- await page.overwrite(selectors.workerBasicData.surname, 'H.');
- await page.overwrite(selectors.workerBasicData.phone, '444332211');
- await page.click(selectors.workerBasicData.saveButton);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
-
- await page.reloadSection('worker.card.basicData');
-
- expect(await page.waitToGetProperty(selectors.workerBasicData.name, 'value')).toEqual('David C.');
- expect(await page.waitToGetProperty(selectors.workerBasicData.surname, 'value')).toEqual('H.');
- expect(await page.waitToGetProperty(selectors.workerBasicData.phone, 'value')).toEqual('444332211');
- });
-});
diff --git a/e2e/paths/03-worker/03_pbx.spec.js b/e2e/paths/03-worker/03_pbx.spec.js
deleted file mode 100644
index 0e8003c47..000000000
--- a/e2e/paths/03-worker/03_pbx.spec.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker pbx path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- await page.accessToSearchResult('employee');
- await page.accessToSection('worker.card.pbx');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should receive an error when the extension exceeds 4 characters and then sucessfully save the changes', async() => {
- await page.write(selectors.workerPbx.extension, '55555');
- await page.click(selectors.workerPbx.saveButton);
- let message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Extension format is invalid');
-
- await page.overwrite(selectors.workerPbx.extension, '4444');
- await page.click(selectors.workerPbx.saveButton);
- message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved! User must access web');
- });
-});
diff --git a/e2e/paths/03-worker/04_time_control.spec.js b/e2e/paths/03-worker/04_time_control.spec.js
deleted file mode 100644
index c6589d2e3..000000000
--- a/e2e/paths/03-worker/04_time_control.spec.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/* eslint max-len: ["error", { "code": 150 }]*/
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker time control path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('salesBoss', 'worker');
- await page.accessToSearchResult('HankPym');
- await page.accessToSection('worker.card.timeControl');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- const eightAm = '08:00';
- const fourPm = '16:00';
- const hankPymId = 1107;
-
- it('should go to the next month, go to current month and go 1 month in the past', async() => {
- let date = Date.vnNew();
- date.setDate(1);
- date.setMonth(date.getMonth() + 1);
- let month = date.toLocaleString('default', {month: 'long'});
-
- await page.waitToClick(selectors.workerTimeControl.nextMonthButton);
- let result = await page.getProperty(selectors.workerTimeControl.monthName, 'innerText');
-
- expect(result).toContain(month);
-
- date = Date.vnNew();
- date.setDate(1);
- month = date.toLocaleString('default', {month: 'long'});
-
- await page.waitToClick(selectors.workerTimeControl.previousMonthButton);
- result = await page.getProperty(selectors.workerTimeControl.monthName, 'innerText');
-
- expect(result).toContain(month);
-
- date = Date.vnNew();
- date.setDate(1);
- date.setMonth(date.getMonth() - 1);
- const timestamp = Math.round(date.getTime() / 1000);
- month = date.toLocaleString('default', {month: 'long'});
-
- await page.loginAndModule('salesBoss', 'worker');
- await page.goto(`http://localhost:5000/#!/worker/${hankPymId}/time-control?timestamp=${timestamp}`);
- await page.waitToClick(selectors.workerTimeControl.secondWeekDay);
-
- result = await page.getProperty(selectors.workerTimeControl.monthName, 'innerText');
-
- expect(result).toContain(month);
- });
-
- it('should change week of month', async() => {
- await page.click(selectors.workerTimeControl.thrirdWeekDay);
- const result = await page.getProperty(selectors.workerTimeControl.mondayWorkedHours, 'innerText');
-
- expect(result).toEqual('00:00 h.');
- });
-});
diff --git a/e2e/paths/03-worker/05_calendar.spec.js b/e2e/paths/03-worker/05_calendar.spec.js
deleted file mode 100644
index f0af0a053..000000000
--- a/e2e/paths/03-worker/05_calendar.spec.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/* eslint-disable max-len */
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker calendar path', () => {
- const reasonableTimeBetweenClicks = 300;
- const date = Date.vnNew();
- const lastYear = (date.getFullYear() - 1).toString();
-
- let browser;
- let page;
-
- async function accessAs(user) {
- await page.loginAndModule(user, 'worker');
- await page.accessToSearchResult('Charles Xavier');
- await page.accessToSection('worker.card.calendar');
- }
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- accessAs('hr');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- describe('as hr', () => {
- it('should set two days as holidays on the calendar and check the total holidays increased by 1.5', async() => {
- await page.waitToClick(selectors.workerCalendar.holidays);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.penultimateMondayOfJanuary);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.absence);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.lastMondayOfMarch);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.halfHoliday);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.fistMondayOfMay);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.furlough);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.secondTuesdayOfMay);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.secondWednesdayOfMay);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.secondThursdayOfMay);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.halfFurlough);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.click(selectors.workerCalendar.secondFridayOfJun);
-
- expect(await page.getProperty(selectors.workerCalendar.totalHolidaysUsed, 'innerText')).toContain(' 1.5 ');
- });
- });
-
- describe(`as salesBoss`, () => {
- it(`should log in, get to Charles Xavier's calendar, undo what was done here, and check the total holidays used are back to what it was`, async() => {
- accessAs('salesBoss');
-
- await page.waitToClick(selectors.workerCalendar.holidays);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.penultimateMondayOfJanuary);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.absence);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.lastMondayOfMarch);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.halfHoliday);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.fistMondayOfMay);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.furlough);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.secondTuesdayOfMay);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.secondWednesdayOfMay);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.secondThursdayOfMay);
-
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.halfFurlough);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
- await page.waitToClick(selectors.workerCalendar.secondFridayOfJun);
-
- expect(await page.getProperty(selectors.workerCalendar.totalHolidaysUsed, 'innerText')).toContain(' 0 ');
- });
- });
-
- describe(`as Charles Xavier`, () => {
- it('should log in and get to his calendar, make a futile attempt to add holidays, check the total holidays used are now the initial ones and use the year selector to go to the previous year', async() => {
- accessAs('CharlesXavier');
- await page.waitToClick(selectors.workerCalendar.holidays);
- await page.waitForTimeout(reasonableTimeBetweenClicks);
-
- await page.click(selectors.workerCalendar.penultimateMondayOfJanuary);
-
- expect(await page.getProperty(selectors.workerCalendar.totalHolidaysUsed, 'innerText')).toContain(' 0 ');
-
- await page.autocompleteSearch(selectors.workerCalendar.year, lastYear);
-
- expect(await page.getProperty(selectors.workerCalendar.totalHolidaysUsed, 'innerText')).toContain(' 0 ');
- });
- });
-});
diff --git a/e2e/paths/03-worker/06_create.spec.js b/e2e/paths/03-worker/06_create.spec.js
deleted file mode 100644
index 2accdfc31..000000000
--- a/e2e/paths/03-worker/06_create.spec.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker create path', () => {
- let browser;
- let page;
- let newWorker;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- await page.waitToClick(selectors.workerCreate.newWorkerButton);
- await page.waitForState('worker.create');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should insert default data', async() => {
- await page.write(selectors.workerCreate.firstname, 'Victor');
- await page.write(selectors.workerCreate.lastname, 'Von Doom');
- await page.write(selectors.workerCreate.fi, '78457139E');
- await page.write(selectors.workerCreate.phone, '12356789');
- await page.write(selectors.workerCreate.postcode, '46680');
- await page.write(selectors.workerCreate.street, 'S/ DOOMSTADT');
- await page.write(selectors.workerCreate.email, 'doctorDoom@marvel.com');
- await page.write(selectors.workerCreate.iban, 'ES9121000418450200051332');
-
- // should check for autocompleted worker code and worker user name
- const workerCode = await page
- .waitToGetProperty(selectors.workerCreate.code, 'value');
-
- newWorker = await page
- .waitToGetProperty(selectors.workerCreate.user, 'value');
-
- expect(workerCode).toEqual('VVD');
- expect(newWorker).toContain('victorvd');
-
- // should fail if necessary data is void
- await page.waitToClick(selectors.workerCreate.createButton);
- let message = await page.waitForSnackbar();
-
- expect(message.text).toContain('is a required argument');
-
- // should create a new worker and go to worker basic data'
- await page.pickDate(selectors.workerCreate.birth, new Date(1962, 8, 5));
- await page.autocompleteSearch(selectors.workerCreate.boss, 'deliveryAssistant');
- await page.waitToClick(selectors.workerCreate.createButton);
- message = await page.waitForSnackbar();
- await page.waitForState('worker.card.basicData');
-
- expect(message.text).toContain('Data saved!');
-
- // 'rollback'
- await page.loginAndModule('itManagement', 'account');
- await page.accessToSearchResult(newWorker);
-
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.deactivateUser);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- message = await page.waitForSnackbar();
-
- expect(message.text).toContain('User deactivated!');
-
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.disableAccount);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Account disabled!');
- });
-});
diff --git a/e2e/paths/03-worker/08_add_notes.spec.js b/e2e/paths/03-worker/08_add_notes.spec.js
deleted file mode 100644
index bdc475c90..000000000
--- a/e2e/paths/03-worker/08_add_notes.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import selectors from '../../helpers/selectors';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker Add notes path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- await page.accessToSearchResult('Bruce Banner');
- await page.accessToSection('worker.card.note.index');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should reach the notes index`, async() => {
- await page.waitForState('worker.card.note.index');
- });
-
- it(`should click on the add note button`, async() => {
- await page.waitToClick(selectors.workerNotes.addNoteFloatButton);
- await page.waitForState('worker.card.note.create');
- });
-
- it(`should create a note`, async() => {
- await page.waitForSelector(selectors.workerNotes.note);
- await page.type(`${selectors.workerNotes.note} textarea`, 'Meeting with Black Widow 21st 9am');
- await page.waitToClick(selectors.workerNotes.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should confirm the note was created', async() => {
- const result = await page.waitToGetProperty(selectors.workerNotes.firstNoteText, 'innerText');
-
- expect(result).toEqual('Meeting with Black Widow 21st 9am');
- });
-});
diff --git a/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js b/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js
index e0f32fc3a..d9689e31a 100644
--- a/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js
+++ b/e2e/paths/05-ticket/01-sale/02_edit_sale.spec.js
@@ -19,7 +19,9 @@ describe('Ticket Edit sale path', () => {
it(`should click on the first sale claim icon to navigate over there`, async() => {
await page.waitToClick(selectors.ticketSales.firstSaleClaimIcon);
- await page.waitForState('claim.card.basicData');
+ await page.waitForNavigation();
+ await page.goBack();
+ await page.goBack();
});
it('should navigate to the tickets index', async() => {
@@ -243,29 +245,13 @@ describe('Ticket Edit sale path', () => {
await page.waitToClick(selectors.ticketSales.moreMenu);
await page.waitToClick(selectors.ticketSales.moreMenuCreateClaim);
await page.waitToClick(selectors.globalItems.acceptButton);
- await page.waitForState('claim.card.basicData');
- });
-
- it('should click on the Claims button of the top bar menu', async() => {
- await page.waitToClick(selectors.globalItems.applicationsMenuButton);
- await page.waitForSelector(selectors.globalItems.applicationsMenuVisible);
- await page.waitToClick(selectors.globalItems.claimsButton);
- await page.waitForState('claim.index');
- });
-
- it('should search for the claim with id 4', async() => {
- await page.accessToSearchResult('4');
- await page.waitForState('claim.card.summary');
- });
-
- it('should click the Tickets button of the top bar menu', async() => {
- await page.waitToClick(selectors.globalItems.applicationsMenuButton);
- await page.waitForSelector(selectors.globalItems.applicationsMenuVisible);
- await page.waitToClick(selectors.globalItems.ticketsButton);
- await page.waitForState('ticket.index');
+ await page.waitForNavigation();
});
it('should search for a ticket then access to the sales section', async() => {
+ await page.goBack();
+ await page.goBack();
+ await page.loginAndModule('salesPerson', 'ticket');
await page.accessToSearchResult('16');
await page.accessToSection('ticket.card.sale');
});
diff --git a/e2e/paths/06-claim/01_basic_data.spec.js b/e2e/paths/06-claim/01_basic_data.spec.js
deleted file mode 100644
index 33c68183f..000000000
--- a/e2e/paths/06-claim/01_basic_data.spec.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Claim edit basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should log in as claimManager then reach basic data of the target claim`, async() => {
- await page.loginAndModule('claimManager', 'claim');
- await page.accessToSearchResult('1');
- await page.accessToSection('claim.card.basicData');
- });
-
- it(`should edit claim state and observation fields`, async() => {
- await page.autocompleteSearch(selectors.claimBasicData.claimState, 'Resuelto');
- await page.clearInput(selectors.claimBasicData.packages);
- await page.write(selectors.claimBasicData.packages, '2');
- await page.waitToClick(selectors.claimBasicData.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should have been redirected to the next section of claims as the role is claimManager`, async() => {
- await page.waitForState('claim.card.detail');
- });
-
- it('should confirm the claim state was edited', async() => {
- await page.reloadSection('claim.card.basicData');
- await page.waitForSelector(selectors.claimBasicData.claimState);
- const result = await page.waitToGetProperty(selectors.claimBasicData.claimState, 'value');
-
- expect(result).toEqual('Resuelto');
- });
-
- it('should confirm the claim packages was edited', async() => {
- const result = await page
- .waitToGetProperty(selectors.claimBasicData.packages, 'value');
-
- expect(result).toEqual('2');
- });
-
- it(`should edit the claim to leave it untainted`, async() => {
- await page.autocompleteSearch(selectors.claimBasicData.claimState, 'Pendiente');
- await page.clearInput(selectors.claimBasicData.packages);
- await page.write(selectors.claimBasicData.packages, '0');
- await page.waitToClick(selectors.claimBasicData.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-});
diff --git a/e2e/paths/06-claim/03_claim_action.spec.js b/e2e/paths/06-claim/03_claim_action.spec.js
deleted file mode 100644
index ac6f72e37..000000000
--- a/e2e/paths/06-claim/03_claim_action.spec.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer.js';
-
-describe('Claim action path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('claimManager', 'claim');
- await page.accessToSearchResult('2');
- await page.accessToSection('claim.card.action');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should import the claim', async() => {
- await page.waitToClick(selectors.claimAction.importClaimButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should delete the first line', async() => {
- await page.waitToClick(selectors.claimAction.firstDeleteLine);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should refresh the view to check not have lines', async() => {
- await page.reloadSection('claim.card.action');
- const result = await page.countElement(selectors.claimAction.anyLine);
-
- expect(result).toEqual(0);
- });
-
- it('should check the "is paid with mana" checkbox', async() => {
- await page.waitToClick(selectors.claimAction.isPaidWithManaCheckbox);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should confirm the "is paid with mana" is checked', async() => {
- await page.reloadSection('claim.card.action');
- const isPaidWithManaCheckbox = await page.checkboxState(selectors.claimAction.isPaidWithManaCheckbox);
-
- expect(isPaidWithManaCheckbox).toBe('checked');
- });
-});
diff --git a/e2e/paths/06-claim/04_summary.spec.js b/e2e/paths/06-claim/04_summary.spec.js
deleted file mode 100644
index dda8484a6..000000000
--- a/e2e/paths/06-claim/04_summary.spec.js
+++ /dev/null
@@ -1,96 +0,0 @@
-
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer.js';
-
-describe('Claim summary path', () => {
- let browser;
- let page;
- const claimId = '4';
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should navigate to the target claim summary section', async() => {
- await page.loginAndModule('salesPerson', 'claim');
- await page.accessToSearchResult(claimId);
- await page.waitForState('claim.card.summary');
- });
-
- it(`should display details from the claim and it's client on the top of the header`, async() => {
- await page.waitForTextInElement(selectors.claimSummary.header, 'Tony Stark');
- const result = await page.waitToGetProperty(selectors.claimSummary.header, 'innerText');
-
- expect(result).toContain('4 -');
- expect(result).toContain('Tony Stark');
- });
-
- it('should display the claim state', async() => {
- const result = await page.waitToGetProperty(selectors.claimSummary.state, 'innerText');
-
- expect(result).toContain('Resuelto');
- });
-
- it('should display the observation', async() => {
- const result = await page.waitToGetProperty(selectors.claimSummary.observation, 'innerText');
-
- expect(result).toContain('Wisi forensibus mnesarchum in cum. Per id impetus abhorreant');
- });
-
- it('should display the claimed line(s)', async() => {
- const result = await page.waitToGetProperty(selectors.claimSummary.firstSaleItemId, 'innerText');
-
- expect(result).toContain('2');
- });
-
- it(`should click on the first sale ID making the item descriptor visible`, async() => {
- const firstItem = selectors.claimSummary.firstSaleItemId;
- await page.evaluate(selectors => {
- document.querySelector(selectors).scrollIntoView();
- }, firstItem);
- await page.click(firstItem);
- await page.waitImgLoad(selectors.claimSummary.firstSaleDescriptorImage);
- const visible = await page.isVisible(selectors.claimSummary.itemDescriptorPopover);
-
- expect(visible).toBeTruthy();
- });
-
- it(`should check the url for the item diary link of the descriptor is for the right item id`, async() => {
- await page.waitForSelector(selectors.claimSummary.itemDescriptorPopoverItemDiaryButton, {visible: true});
-
- await page.closePopup();
- });
-
- it('should display the claim development details', async() => {
- const result = await page.waitToGetProperty(selectors.claimSummary.firstDevelopmentWorker, 'innerText');
-
- expect(result).toContain('salesAssistantNick');
- });
-
- it(`should click on the first development worker making the worker descriptor visible`, async() => {
- await page.waitToClick(selectors.claimSummary.firstDevelopmentWorker);
-
- const visible = await page.isVisible(selectors.claimSummary.firstDevelopmentWorkerGoToClientButton);
-
- expect(visible).toBeTruthy();
- });
-
- it(`should check the url for the go to clientlink of the descriptor is for the right client id`, async() => {
- await page.waitForSelector(selectors.claimSummary.firstDevelopmentWorkerGoToClientButton, {visible: true});
-
- await page.closePopup();
- });
-
- it(`should click on the first action ticket ID making the ticket descriptor visible`, async() => {
- await page.waitToClick(selectors.claimSummary.firstActionTicketId);
- await page.waitForSelector(selectors.claimSummary.firstActionTicketDescriptor);
- const visible = await page.isVisible(selectors.claimSummary.firstActionTicketDescriptor);
-
- expect(visible).toBeTruthy();
- });
-});
diff --git a/e2e/paths/06-claim/05_descriptor.spec.js b/e2e/paths/06-claim/05_descriptor.spec.js
deleted file mode 100644
index 49912b26a..000000000
--- a/e2e/paths/06-claim/05_descriptor.spec.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer.js';
-
-describe('Claim descriptor path', () => {
- let browser;
- let page;
- const claimId = '1';
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should now navigate to the target claim summary section', async() => {
- await page.loginAndModule('salesPerson', 'claim');
- await page.accessToSearchResult(claimId);
- await page.waitForState('claim.card.summary');
- });
-
- it(`should not be able to see the delete claim button of the descriptor more menu`, async() => {
- await page.waitToClick(selectors.claimDescriptor.moreMenu);
- await page.waitForSelector(selectors.claimDescriptor.moreMenuDeleteClaim, {hidden: true});
- });
-
- it(`should log in as claimManager and navigate to the target claim`, async() => {
- await page.loginAndModule('claimManager', 'claim');
- await page.accessToSearchResult(claimId);
- await page.waitForState('claim.card.summary');
- });
-
- it(`should be able to see the delete claim button of the descriptor more menu`, async() => {
- await page.waitToClick(selectors.claimDescriptor.moreMenu);
- await page.waitForSelector(selectors.claimDescriptor.moreMenuDeleteClaim, {visible: true});
- });
-
- it(`should delete the claim`, async() => {
- await page.waitToClick(selectors.claimDescriptor.moreMenuDeleteClaim);
- await page.waitToClick(selectors.claimDescriptor.acceptDeleteClaim);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Claim deleted!');
- });
-
- it(`should have been relocated to the claim index`, async() => {
- await page.waitForState('claim.index');
- });
-
- it(`should search for the deleted claim to find no results`, async() => {
- await page.doSearch(claimId);
- const nResults = await page.countElement(selectors.claimsIndex.searchResult);
-
- expect(nResults).toEqual(0);
- });
-});
diff --git a/e2e/paths/06-claim/06_note.spec.js b/e2e/paths/06-claim/06_note.spec.js
deleted file mode 100644
index 830f77cbe..000000000
--- a/e2e/paths/06-claim/06_note.spec.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import selectors from '../../helpers/selectors';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Claim Add note path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('salesPerson', 'claim');
- await page.accessToSearchResult('2');
- await page.accessToSection('claim.card.note.index');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should reach the claim note index`, async() => {
- await page.waitForState('claim.card.note.index');
- });
-
- it(`should click on the add new note button`, async() => {
- await page.waitToClick(selectors.claimNote.addNoteFloatButton);
- await page.waitForState('claim.card.note.create');
- });
-
- it(`should create a new note`, async() => {
- await page.waitForSelector(selectors.claimNote.note);
- await page.type(`${selectors.claimNote.note} textarea`, 'The delivery was unsuccessful');
- await page.waitToClick(selectors.claimNote.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should redirect back to the claim notes page`, async() => {
- await page.waitForState('claim.card.note.index');
- });
-
- it('should confirm the note was created', async() => {
- const result = await page.waitToGetProperty(selectors.claimNote.firstNoteText, 'innerText');
-
- expect(result).toEqual('The delivery was unsuccessful');
- });
-});
diff --git a/e2e/paths/09-invoice-in/01_summary.spec.js b/e2e/paths/09-invoice-in/01_summary.spec.js
deleted file mode 100644
index d5932efd0..000000000
--- a/e2e/paths/09-invoice-in/01_summary.spec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('InvoiceIn summary path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('administrative', 'invoiceIn');
- await page.accessToSearchResult('1');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should reach the summary section', async() => {
- await page.waitForState('invoiceIn.card.summary');
- });
-
- it('should contain some basic data from the invoice', async() => {
- const result = await page.waitToGetProperty(selectors.invoiceInSummary.supplierRef, 'innerText');
-
- expect(result).toEqual('1234');
- });
-});
diff --git a/e2e/paths/09-invoice-in/02_descriptor.spec.js b/e2e/paths/09-invoice-in/02_descriptor.spec.js
deleted file mode 100644
index 02bbce7ac..000000000
--- a/e2e/paths/09-invoice-in/02_descriptor.spec.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('InvoiceIn descriptor path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('administrative', 'invoiceIn');
- await page.accessToSearchResult('10');
- await page.accessToSection('invoiceIn.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should clone the invoiceIn using the descriptor more menu', async() => {
- await page.waitToClick(selectors.invoiceInDescriptor.moreMenu);
- await page.waitToClick(selectors.invoiceInDescriptor.moreMenuCloneInvoiceIn);
- await page.waitToClick(selectors.invoiceInDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('InvoiceIn cloned');
- });
-
- it('should have been redirected to the created invoiceIn summary', async() => {
- await page.waitForState('invoiceIn.card.summary');
- });
-
- it('should delete the cloned invoiceIn using the descriptor more menu', async() => {
- await page.waitToClick(selectors.invoiceInDescriptor.moreMenu);
- await page.waitToClick(selectors.invoiceInDescriptor.moreMenuDeleteInvoiceIn);
- await page.waitToClick(selectors.invoiceInDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('InvoiceIn deleted');
- });
-
- it('should have been relocated to the invoiceOut index', async() => {
- await page.waitForState('invoiceIn.index');
- });
-
- it(`should search for the deleted invouceOut to find no results`, async() => {
- await page.doSearch('10');
- const nResults = await page.countElement(selectors.invoiceOutIndex.searchResult);
-
- expect(nResults).toEqual(0);
- });
-});
diff --git a/e2e/paths/09-invoice-in/03_basic_data.spec.js b/e2e/paths/09-invoice-in/03_basic_data.spec.js
deleted file mode 100644
index 50fe18830..000000000
--- a/e2e/paths/09-invoice-in/03_basic_data.spec.js
+++ /dev/null
@@ -1,196 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('InvoiceIn basic data path', () => {
- let browser;
- let page;
- let newDms;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('administrative', 'invoiceIn');
- await page.accessToSearchResult('1');
- await page.accessToSection('invoiceIn.card.basicData');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it(`should edit the invoiceIn basic data`, async() => {
- const now = Date.vnNew();
- await page.pickDate(selectors.invoiceInBasicData.issued, now);
- await page.pickDate(selectors.invoiceInBasicData.operated, now);
- await page.autocompleteSearch(selectors.invoiceInBasicData.supplier, 'Verdnatura');
- await page.clearInput(selectors.invoiceInBasicData.supplierRef);
- await page.write(selectors.invoiceInBasicData.supplierRef, '9999');
- await page.clearInput(selectors.invoiceInBasicData.dms);
- await page.write(selectors.invoiceInBasicData.dms, '2');
- await page.pickDate(selectors.invoiceInBasicData.bookEntried, now);
- await page.pickDate(selectors.invoiceInBasicData.booked, now);
- await page.autocompleteSearch(selectors.invoiceInBasicData.currency, 'USD');
- await page.autocompleteSearch(selectors.invoiceInBasicData.company, 'ORN');
- await page.waitToClick(selectors.invoiceInBasicData.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should confirm the invoiceIn supplier was edited`, async() => {
- await page.reloadSection('invoiceIn.card.basicData');
- const result = await page.waitToGetProperty(selectors.invoiceInBasicData.supplier, 'value');
-
- expect(result).toContain('Verdnatura');
- });
-
- it(`should confirm the invoiceIn supplierRef was edited`, async() => {
- const result = await page
- .waitToGetProperty(selectors.invoiceInBasicData.supplierRef, 'value');
-
- expect(result).toEqual('9999');
- });
-
- it(`should confirm the invoiceIn currency was edited`, async() => {
- const result = await page
- .waitToGetProperty(selectors.invoiceInBasicData.currency, 'value');
-
- expect(result).toEqual('USD');
- });
-
- it(`should confirm the invoiceIn company was edited`, async() => {
- const result = await page
- .waitToGetProperty(selectors.invoiceInBasicData.company, 'value');
-
- expect(result).toEqual('ORN');
- });
-
- it(`should confirm the invoiceIn dms was edited`, async() => {
- const result = await page
- .waitToGetProperty(selectors.invoiceInBasicData.dms, 'value');
-
- expect(result).toEqual('2');
- });
-
- it(`should create a new invoiceIn dms and save the changes`, async() => {
- await page.clearInput(selectors.invoiceInBasicData.dms);
- await page.waitToClick(selectors.invoiceInBasicData.create);
-
- await page.clearInput(selectors.invoiceInBasicData.reference);
- await page.write(selectors.invoiceInBasicData.reference, 'New Dms');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- let message = await page.waitForSnackbar();
-
- await page.clearInput(selectors.invoiceInBasicData.companyId);
- await page.autocompleteSearch(selectors.invoiceInBasicData.companyId, 'VNL');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- message = await page.waitForSnackbar();
-
- await page.clearInput(selectors.invoiceInBasicData.warehouseId);
- await page.autocompleteSearch(selectors.invoiceInBasicData.warehouseId, 'Warehouse One');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- message = await page.waitForSnackbar();
-
- await page.clearInput(selectors.invoiceInBasicData.dmsTypeId);
- await page.autocompleteSearch(selectors.invoiceInBasicData.dmsTypeId, 'Ticket');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- message = await page.waitForSnackbar();
-
- await page.waitToClick(selectors.invoiceInBasicData.description);
- await page.write(selectors.invoiceInBasicData.description, 'Dms without edition.');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- message = await page.waitForSnackbar();
-
- expect(message.text).toContain('The files can\'t be empty');
-
- let currentDir = process.cwd();
- let filePath = `${currentDir}/e2e/assets/thermograph.jpeg`;
-
- const [fileChooser] = await Promise.all([
- page.waitForFileChooser(),
- page.waitToClick(selectors.invoiceInBasicData.inputFile)
- ]);
- await fileChooser.accept([filePath]);
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
-
- newDms = await page
- .waitToGetProperty(selectors.invoiceInBasicData.dms, 'value');
- });
-
- it(`should confirm the invoiceIn was edited with the new dms`, async() => {
- await page.reloadSection('invoiceIn.card.basicData');
- const result = await page
- .waitToGetProperty(selectors.invoiceInBasicData.dms, 'value');
-
- expect(result).toEqual(newDms);
- });
-
- it(`should edit the invoiceIn`, async() => {
- await page.waitToClick(selectors.invoiceInBasicData.edit);
-
- await page.clearInput(selectors.invoiceInBasicData.reference);
- await page.write(selectors.invoiceInBasicData.reference, 'Dms Edited');
- await page.clearInput(selectors.invoiceInBasicData.companyId);
- await page.autocompleteSearch(selectors.invoiceInBasicData.companyId, 'CCs');
- await page.clearInput(selectors.invoiceInBasicData.warehouseId);
- await page.autocompleteSearch(selectors.invoiceInBasicData.warehouseId, 'Algemesi');
- await page.clearInput(selectors.invoiceInBasicData.dmsTypeId);
- await page.autocompleteSearch(selectors.invoiceInBasicData.dmsTypeId, 'Basura');
- await page.waitToClick(selectors.invoiceInBasicData.description);
- await page.write(selectors.invoiceInBasicData.description, ' Nevermind, now is edited.');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- let message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it(`should confirm the new dms has been edited`, async() => {
- await page.reloadSection('invoiceIn.card.basicData');
- await page.waitToClick(selectors.invoiceInBasicData.edit);
-
- const reference = await page
- .waitToGetProperty(selectors.invoiceInBasicData.reference, 'value');
- const companyId = await page
- .waitToGetProperty(selectors.invoiceInBasicData.companyId, 'value');
- const warehouseId = await page
- .waitToGetProperty(selectors.invoiceInBasicData.warehouseId, 'value');
- const dmsTypeId = await page
- .waitToGetProperty(selectors.invoiceInBasicData.dmsTypeId, 'value');
- const description = await page
- .waitToGetProperty(selectors.invoiceInBasicData.description, 'value');
-
- expect(reference).toEqual('Dms Edited');
- expect(companyId).toEqual('CCs');
- expect(warehouseId).toEqual('Algemesi');
- expect(dmsTypeId).toEqual('Basura');
- expect(description).toEqual('Dms without edition. Nevermind, now is edited.');
-
- await page.waitToClick(selectors.invoiceInBasicData.confirm);
- });
-
- it(`should disable edit and download if dms doesn't exists, and set back the original dms`, async() => {
- await page.clearInput(selectors.invoiceInBasicData.dms);
- await page.write(selectors.invoiceInBasicData.dms, '9999');
-
- await page.waitForSelector(`${selectors.invoiceInBasicData.download}.disabled`);
- await page.waitForSelector(`${selectors.invoiceInBasicData.edit}.disabled`);
-
- await page.clearInput(selectors.invoiceInBasicData.dms);
- await page.write(selectors.invoiceInBasicData.dms, '1');
-
- await page.waitToClick(selectors.invoiceInBasicData.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-});
diff --git a/e2e/paths/09-invoice-in/04_tax.spec.js b/e2e/paths/09-invoice-in/04_tax.spec.js
deleted file mode 100644
index d51c39048..000000000
--- a/e2e/paths/09-invoice-in/04_tax.spec.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('InvoiceIn tax path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('developer', 'invoiceIn');
- await page.accessToSearchResult('2');
- await page.accessToSection('invoiceIn.card.tax');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should add a new tax and check it', async() => {
- await page.waitToClick(selectors.invoiceInTax.addTaxButton);
- await page.autocompleteSearch(selectors.invoiceInTax.thirdExpense, '6210000567');
- await page.write(selectors.invoiceInTax.thirdTaxableBase, '100');
- await page.autocompleteSearch(selectors.invoiceInTax.thirdTaxType, 'H.P. IVA');
- await page.autocompleteSearch(selectors.invoiceInTax.thirdTransactionType, 'Operaciones exentas');
- await page.waitToClick(selectors.invoiceInTax.saveButton);
- const message = await page.waitForSnackbar();
-
- await page.waitToClick(selectors.invoiceInDescriptor.summaryIcon);
- await page.waitForState('invoiceIn.card.summary');
- const total = await page.waitToGetProperty(selectors.invoiceInSummary.totalTaxableBase, 'innerText');
-
- await page.accessToSection('invoiceIn.card.tax');
-
- const thirdExpense = await page.waitToGetProperty(selectors.invoiceInTax.thirdExpense, 'value');
- const thirdTaxableBase = await page.waitToGetProperty(selectors.invoiceInTax.thirdTaxableBase, 'value');
- const thirdTaxType = await page.waitToGetProperty(selectors.invoiceInTax.thirdTaxType, 'value');
- const thirdTransactionType = await page.waitToGetProperty(selectors.invoiceInTax.thirdTransactionType, 'value');
- const thirdRate = await page.waitToGetProperty(selectors.invoiceInTax.thirdRate, 'value');
-
- expect(message.text).toContain('Data saved!');
-
- expect(total).toEqual('Taxable base €1,323.16');
-
- expect(thirdExpense).toEqual('6210000567');
- expect(thirdTaxableBase).toEqual('100');
- expect(thirdTaxType).toEqual('H.P. IVA 4% CEE');
- expect(thirdTransactionType).toEqual('Operaciones exentas');
- expect(thirdRate).toEqual('€4.00');
- });
-
- it('should delete the added line', async() => {
- await page.waitToClick(selectors.invoiceInTax.thirdDeleteButton);
- await page.waitToClick(selectors.invoiceInTax.saveButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-});
diff --git a/e2e/paths/09-invoice-in/05_serial.spec.js b/e2e/paths/09-invoice-in/05_serial.spec.js
deleted file mode 100644
index 8be5660da..000000000
--- a/e2e/paths/09-invoice-in/05_serial.spec.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('InvoiceIn serial path', () => {
- let browser;
- let page;
- let httpRequest;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('administrative', 'invoiceIn');
- await page.accessToSection('invoiceIn.serial');
- page.on('request', req => {
- if (req.url().includes(`InvoiceIns/getSerial`))
- httpRequest = req.url();
- });
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should check that passes the correct params to back', async() => {
- await page.overwrite(selectors.invoiceInSerial.daysAgo, '30');
- await page.keyboard.press('Enter');
-
- expect(httpRequest).toContain('daysAgo=30');
-
- await page.overwrite(selectors.invoiceInSerial.serial, 'R');
- await page.keyboard.press('Enter');
-
- expect(httpRequest).toContain('serial=R');
- await page.click(selectors.invoiceInSerial.chip);
- });
-
- it('should go to index and check if the search-panel has the correct params', async() => {
- await page.waitToClick(selectors.invoiceInSerial.goToIndex);
- const params = await page.$$(selectors.invoiceInIndex.topbarSearchParams);
- const serial = await params[0].getProperty('title');
- const isBooked = await params[1].getProperty('title');
- const from = await params[2].getProperty('title');
-
- expect(await serial.jsonValue()).toContain('serial');
- expect(await isBooked.jsonValue()).toContain('not isBooked');
- expect(await from.jsonValue()).toContain('from');
- });
-});
diff --git a/e2e/paths/14-account/01_create_and_basic_data.spec.js b/e2e/paths/14-account/01_create_and_basic_data.spec.js
deleted file mode 100644
index e2c069d80..000000000
--- a/e2e/paths/14-account/01_create_and_basic_data.spec.js
+++ /dev/null
@@ -1,164 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account create and basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('itManagement', 'account');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should open the new account form by clicking the add button', async() => {
- await page.waitToClick(selectors.accountIndex.addAccount);
- await page.waitForState('account.create');
- });
-
- it('should fill the form and then save it by clicking the create button', async() => {
- await page.write(selectors.accountIndex.newName, 'remy');
- await page.write(selectors.accountIndex.newNickname, 'Gambit');
- await page.write(selectors.accountIndex.newEmail, 'RemyEtienneLeBeau@verdnatura.es');
- await page.autocompleteSearch(selectors.accountIndex.newRole, 'Trainee');
- await page.write(selectors.accountIndex.newPassword, 'cestlavie');
- await page.waitToClick(selectors.accountIndex.createAccountButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should redirect the user to the created account basic data section', async() => {
- await page.waitForState('account.card.basicData');
- });
-
- it('should check the name is as expected', async() => {
- const result = await page.waitToGetProperty(selectors.accountBasicData.name, 'value');
-
- expect(result).toEqual('remy');
- });
-
- it('should check the nickname is as expected', async() => {
- const result = await page.waitToGetProperty(selectors.accountBasicData.nickname, 'value');
-
- expect(result).toEqual('Gambit');
- });
-
- it('should check the email is as expected', async() => {
- const result = await page.waitToGetProperty(selectors.accountBasicData.email, 'value');
-
- expect(result).toEqual('RemyEtienneLeBeau@verdnatura.es');
- });
-
- it('should navigate to the roles section to check the roles are correct', async() => {
- await page.accessToSection('account.card.roles');
- const rolesCount = await page.countElement(selectors.accountRoles.anyResult);
-
- expect(rolesCount).toEqual(3);
- });
-
- describe('Descriptor option', () => {
- describe('activate account', () => {
- it(`should check the active account icon isn't present in the descriptor`, async() => {
- await page.waitForNumberOfElements(selectors.accountDescriptor.activeAccountIcon, 0);
- });
-
- it('should activate the account using the descriptor menu', async() => {
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.activateAccount);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Account enabled!');
- });
-
- it('should check the active account icon is now present in the descriptor', async() => {
- await page.waitForSelector(selectors.accountDescriptor.activeAccountIcon, {visible: false});
- });
- });
-
- describe('deactivate user', () => {
- it(`should check the inactive user icon isn't present in the descriptor just yet`, async() => {
- await page.waitForNumberOfElements(selectors.accountDescriptor.activeUserIcon, 0);
- });
-
- it('should deactivate the user using the descriptor menu', async() => {
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.deactivateUser);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('User deactivated!');
- });
-
- it('should check the inactive user icon is now present', async() => {
- await page.waitForNumberOfElements(selectors.accountDescriptor.activeUserIcon, 1);
- });
- });
-
- describe('activate user', () => {
- it('should activate the user using the descriptor menu', async() => {
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.activateUser);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('User activated!');
- });
-
- it('should check the inactive user icon is not present anymore', async() => {
- await page.waitForNumberOfElements(selectors.accountDescriptor.activeUserIcon, 0);
- });
- });
-
- describe('mail forwarding', () => {
- it('should activate the mail forwarding and set the recipent email', async() => {
- await page.accessToSection('account.card.mailForwarding');
- await page.waitToClick(selectors.accountMailForwarding.mailForwardingCheckbox);
- await page.write(selectors.accountMailForwarding.email, 'someEmail@someDomain.es');
- await page.waitToClick(selectors.accountMailForwarding.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
- });
-
- describe('Set password', () => {
- it('should set the password using the descriptor menu', async() => {
- const newPassword = 'quantum.12345';
-
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.setPassword);
- await page.write(selectors.accountDescriptor.newPassword, newPassword);
- await page.write(selectors.accountDescriptor.repeatPassword, newPassword);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Password changed succesfully!');
- });
-
- // cant log into created account for unknown reasons
- // it('should login into the created account with the new password', async() => {
- // await page.loginAndModule('Remy', 'quantum.crypt0graphy');
- // });
- });
-
- describe('delete account', () => {
- // it('should navigate to the account basic data section', async() => {
- // });
-
- it('should delete the account using the descriptor menu', async() => {
- await page.waitToClick(selectors.accountDescriptor.menuButton);
- await page.waitToClick(selectors.accountDescriptor.deleteAccount);
- await page.waitToClick(selectors.accountDescriptor.acceptButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('User removed');
- });
- });
- });
-});
diff --git a/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js b/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js
deleted file mode 100644
index 840fb8afe..000000000
--- a/e2e/paths/14-account/02_alias_create_and_basic_data.spec.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account Alias create and basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('itManagement', 'account');
- await page.accessToSection('account.alias');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should open the new account alias form by clicking the add button', async() => {
- await page.waitToClick(selectors.accountAliasIndex.addAlias);
- await page.waitForState('account.alias.create');
- });
-
- it('should fill the form and then save it by clicking the create alias button', async() => {
- await page.write(selectors.accountAliasIndex.newName, 'Boring alias');
- await page.write(selectors.accountAliasIndex.newDescription, 'Boring description');
- await page.waitToClick(selectors.accountAliasIndex.createAliasButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should redirect the user to the created account alias basic data section', async() => {
- await page.waitForState('account.alias.card.basicData');
- });
-
- it('should edit the alias basic data', async() => {
- await page.overwrite(selectors.accountAliasBasicData.name, 'Psykers');
- await page.overwrite(selectors.accountAliasBasicData.description, 'Email group for psykers');
- await page.waitToClick(selectors.accountAliasBasicData.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reload the basicData section and check the name was edited successfully', async() => {
- await page.reloadSection('account.alias.card.basicData');
- const result = await page.waitToGetProperty(selectors.accountAliasBasicData.name, 'value');
-
- expect(result).toEqual('Psykers');
- });
-
- it('should check the alias description was edited successfully', async() => {
- const result = await page.waitToGetProperty(selectors.accountAliasBasicData.description, 'value');
-
- expect(result).toContain('psykers');
- });
-
- it('should search IT alias then access the user section to check the role listed is the expected one', async() => {
- await page.accessToSearchResult('IT');
- await page.accessToSection('account.alias.card.users');
- const rolesCount = await page.countElement(selectors.accountAliasUsers.anyResult);
-
- expect(rolesCount).toEqual(1);
- });
-});
diff --git a/e2e/paths/14-account/03_role_create_and_basic_data.spec.js b/e2e/paths/14-account/03_role_create_and_basic_data.spec.js
deleted file mode 100644
index 6acf82318..000000000
--- a/e2e/paths/14-account/03_role_create_and_basic_data.spec.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account Role create and basic data path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('it', 'account');
- await page.accessToSection('account.role');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should open the new account role form by clicking the add button', async() => {
- await page.waitToClick(selectors.accountRoleIndex.addRole);
- await page.waitForState('account.role.create');
- });
-
- it('should fill the form and then save it by clicking the create role button', async() => {
- await page.write(selectors.accountRoleIndex.newName, 'boringRole');
- await page.write(selectors.accountRoleIndex.newDescription, 'Boring description');
- await page.waitToClick(selectors.accountRoleIndex.createRoleButton);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should redirect the user to the created role basic data section', async() => {
- await page.waitForState('account.role.card.basicData');
- });
-
- it('should edit the role basic data', async() => {
- await page.overwrite(selectors.accountRoleBasicData.name, 'psyker');
- await page.overwrite(selectors.accountRoleBasicData.description, 'A role just for psykers');
- await page.waitToClick(selectors.accountRoleBasicData.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reload the role basicData section and check the name was edited successfully', async() => {
- await page.reloadSection('account.role.card.basicData');
- const result = await page.waitToGetProperty(selectors.accountRoleBasicData.name, 'value');
-
- expect(result).toEqual('psyker');
- });
-
- it('should check the role description was edited successfully', async() => {
- const result = await page.waitToGetProperty(selectors.accountRoleBasicData.description, 'value');
-
- expect(result).toContain('psykers');
- });
-
- it('should navigate to the subroles section', async() => {
- await page.accessToSection('account.role.card.subroles');
- });
-
- it('should asign a subrole', async() => {
- await page.waitToClick(selectors.accountSubroles.addSubrole);
- await page.autocompleteSearch(selectors.accountSubroles.role, 'teamManager');
- await page.waitToClick(selectors.accountSubroles.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Role added!');
- });
-
- it('should reload the subroles section and check a role was added', async() => {
- await page.reloadSection('account.role.card.subroles');
- const subrolesCount = await page.countElement(selectors.accountSubroles.anyResult);
-
- expect(subrolesCount).toEqual(1);
- });
-
- it('should access the employee roles inheritance then check the roles listed are the expected ones', async() => {
- await page.accessToSearchResult('employee');
- await page.accessToSection('account.role.card.inherited');
- const rolesCount = await page.countElement(selectors.accountRoleInheritance.anyResult);
-
- expect(rolesCount).toEqual(7);
- });
-});
diff --git a/e2e/paths/14-account/04_acl.spec.js b/e2e/paths/14-account/04_acl.spec.js
deleted file mode 100644
index ce2a63b14..000000000
--- a/e2e/paths/14-account/04_acl.spec.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account ACL path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('developer', 'account');
- await page.accessToSection('account.acl');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should go to create new acl', async() => {
- await page.waitToClick(selectors.accountAcl.addAcl);
- await page.waitForState('account.acl.create');
- });
-
- it('should create new acl', async() => {
- await page.autocompleteSearch(selectors.accountAcl.role, 'sysadmin');
- await page.autocompleteSearch(selectors.accountAcl.model, 'Account');
- await page.autocompleteSearch(selectors.accountAcl.accessType, '*');
- await page.autocompleteSearch(selectors.accountAcl.permission, 'ALLOW');
- await page.waitToClick(selectors.accountAcl.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should navigate to edit', async() => {
- await page.doSearch();
- await page.waitToClick(selectors.accountAcl.thirdAcl);
- await page.waitForState('account.acl.edit');
- });
-
- it('should edit the third acl', async() => {
- await page.autocompleteSearch(selectors.accountAcl.model, 'Supplier');
- await page.autocompleteSearch(selectors.accountAcl.accessType, 'READ');
- await page.waitToClick(selectors.accountAcl.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should delete the third result', async() => {
- const result = await page.waitToGetProperty(selectors.accountAcl.thirdAcl, 'innerText');
- await page.waitToClick(selectors.accountAcl.deleteThirdAcl);
- await page.waitToClick(selectors.globalItems.acceptButton);
- const message = await page.waitForSnackbar();
- const newResult = await page.waitToGetProperty(selectors.accountAcl.thirdAcl, 'innerText');
-
- expect(message.text).toContain('ACL removed');
- expect(result).not.toEqual(newResult);
- });
-});
diff --git a/e2e/paths/14-account/05_connections.spec.js b/e2e/paths/14-account/05_connections.spec.js
deleted file mode 100644
index 49d5f612d..000000000
--- a/e2e/paths/14-account/05_connections.spec.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account Connections path', () => {
- let browser;
- let page;
- const account = 'sysadmin';
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule(account, 'account');
- await page.accessToSection('account.connections');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should check this is the last connection', async() => {
- const firstResult = await page.waitToGetProperty(selectors.accountConnections.firstConnection, 'innerText');
-
- expect(firstResult).toContain(account);
- });
-});
diff --git a/e2e/paths/14-account/06_accounts.spec.js b/e2e/paths/14-account/06_accounts.spec.js
deleted file mode 100644
index 8bd6ea7d5..000000000
--- a/e2e/paths/14-account/06_accounts.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account Accounts path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('sysadmin', 'account');
- await page.accessToSection('account.accounts');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should sync roles', async() => {
- await page.waitToClick(selectors.accountAccounts.syncRoles);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Roles synchronized!');
- });
-
- it('should relogin', async() => {
- await page.loginAndModule('sysadmin', 'account');
- await page.accessToSection('account.accounts');
- });
-
- it('should sync all', async() => {
- await page.waitToClick(selectors.accountAccounts.syncAll);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Synchronizing in the background');
- });
-});
diff --git a/e2e/paths/14-account/07_ldap.spec.js b/e2e/paths/14-account/07_ldap.spec.js
deleted file mode 100644
index eb22f695c..000000000
--- a/e2e/paths/14-account/07_ldap.spec.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account LDAP path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('sysadmin', 'account');
- await page.accessToSection('account.ldap');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should set data and save', async() => {
- await page.waitToClick(selectors.accountLdap.checkEnable);
- await page.write(selectors.accountLdap.server, '1234');
- await page.write(selectors.accountLdap.rdn, '1234');
- await page.write(selectors.accountLdap.password, 'nightmare');
- await page.write(selectors.accountLdap.userDn, 'sysadmin');
- await page.write(selectors.accountLdap.groupDn, '1234');
- await page.waitToClick(selectors.accountLdap.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reset data', async() => {
- await page.waitToClick(selectors.accountLdap.checkEnable);
- await page.waitToClick(selectors.accountLdap.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-});
diff --git a/e2e/paths/14-account/08_samba.spec.js b/e2e/paths/14-account/08_samba.spec.js
deleted file mode 100644
index a92344acb..000000000
--- a/e2e/paths/14-account/08_samba.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account Samba path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('sysadmin', 'account');
- await page.accessToSection('account.samba');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should set data and save', async() => {
- await page.waitToClick(selectors.accountSamba.checkEnable);
- await page.write(selectors.accountSamba.adDomain, '1234');
- await page.write(selectors.accountSamba.adController, '1234');
- await page.write(selectors.accountSamba.adUser, 'sysadmin');
- await page.write(selectors.accountSamba.adPassword, 'nightmare');
- await page.write(selectors.accountSamba.userDn, 'testDn');
- await page.waitToClick(selectors.accountSamba.verifyCert);
- await page.waitToClick(selectors.accountSamba.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-
- it('should reset data', async() => {
- await page.waitToClick(selectors.accountSamba.checkEnable);
- await page.waitToClick(selectors.accountSamba.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain('Data saved!');
- });
-});
diff --git a/e2e/paths/14-account/09_privileges.spec.js b/e2e/paths/14-account/09_privileges.spec.js
deleted file mode 100644
index e4b8fb24c..000000000
--- a/e2e/paths/14-account/09_privileges.spec.js
+++ /dev/null
@@ -1,112 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Account privileges path', () => {
- let browser;
- let page;
-
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('developer', 'account');
- await page.accessToSearchResult('1101');
- await page.accessToSection('account.card.privileges');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- describe('as developer', () => {
- it('should throw error when give privileges', async() => {
- await page.waitToClick(selectors.accountPrivileges.checkHasGrant);
- await page.waitToClick(selectors.accountPrivileges.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain(`You don't have grant privilege`);
- });
-
- it('should throw error when change role', async() => {
- await page.autocompleteSearch(selectors.accountPrivileges.role, 'employee');
- await page.waitToClick(selectors.accountPrivileges.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain(`You don't have grant privilege`);
- });
- });
-
- describe('as sysadmin', () => {
- beforeAll(async() => {
- await page.loginAndModule('sysadmin', 'account');
- await page.accessToSearchResult('9');
- await page.accessToSection('account.card.privileges');
- });
-
- it('should give privileges', async() => {
- await page.waitToClick(selectors.accountPrivileges.checkHasGrant);
- await page.waitToClick(selectors.accountPrivileges.save);
- const message = await page.waitForSnackbar();
-
- await page.reloadSection('account.card.privileges');
- const result = await page.checkboxState(selectors.accountPrivileges.checkHasGrant);
-
- expect(message.text).toContain(`Data saved!`);
- expect(result).toBe('checked');
- });
-
- it('should throw error when change role and not own role', async() => {
- await page.autocompleteSearch(selectors.accountPrivileges.role, 'itBoss');
- await page.waitToClick(selectors.accountPrivileges.save);
-
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain(`You don't own the role and you can't assign it to another user`);
- });
-
- it('should change role to employee', async() => {
- await page.autocompleteSearch(selectors.accountPrivileges.role, 'employee');
- await page.waitToClick(selectors.accountPrivileges.save);
- const message = await page.waitForSnackbar();
-
- await page.reloadSection('account.card.privileges');
- const result = await page.waitToGetProperty(selectors.accountPrivileges.role, 'value');
-
- expect(message.text).toContain(`Data saved!`);
- expect(result).toContain('employee');
- });
-
- it('should return role to developer', async() => {
- await page.autocompleteSearch(selectors.accountPrivileges.role, 'developer');
- await page.waitToClick(selectors.accountPrivileges.save);
- const message = await page.waitForSnackbar();
-
- await page.reloadSection('account.card.privileges');
- const result = await page.waitToGetProperty(selectors.accountPrivileges.role, 'value');
-
- expect(message.text).toContain(`Data saved!`);
- expect(result).toContain('developer');
- });
- });
-
- describe('as developer again', () => {
- it('should remove privileges', async() => {
- await page.accessToSearchResult('9');
- await page.accessToSection('account.card.privileges');
-
- await page.waitToClick(selectors.accountPrivileges.checkHasGrant);
- await page.waitToClick(selectors.accountPrivileges.save);
- const message = await page.waitForSnackbar();
-
- expect(message.text).toContain(`Data saved!`);
- });
-
- it('should logIn in developer', async() => {
- await page.reloadSection('account.card.privileges');
- const result = await page.checkboxState(selectors.accountPrivileges.checkHasGrant);
-
- expect(result).toBe('unchecked');
- });
- });
-});
diff --git a/e2e/tests.js b/e2e/tests.js
index 829056f4c..a9c662dc4 100644
--- a/e2e/tests.js
+++ b/e2e/tests.js
@@ -41,7 +41,6 @@ async function test() {
`./e2e/paths/03*/*[sS]pec.js`,
`./e2e/paths/04*/*[sS]pec.js`,
`./e2e/paths/05*/*[sS]pec.js`,
- `./e2e/paths/06*/*[sS]pec.js`,
`./e2e/paths/07*/*[sS]pec.js`,
`./e2e/paths/08*/*[sS]pec.js`,
`./e2e/paths/09*/*[sS]pec.js`,
diff --git a/front/salix/components/user-popover/index.html b/front/salix/components/user-popover/index.html
index 06a4af1e0..cedb3383b 100644
--- a/front/salix/components/user-popover/index.html
+++ b/front/salix/components/user-popover/index.html
@@ -38,7 +38,7 @@
My account
diff --git a/front/salix/components/user-popover/index.js b/front/salix/components/user-popover/index.js
index 1d88137ff..72cb734e9 100644
--- a/front/salix/components/user-popover/index.js
+++ b/front/salix/components/user-popover/index.js
@@ -82,6 +82,9 @@ class Controller {
? {id: $search}
: {bank: {like: '%' + $search + '%'}};
}
+ async redirect(id) {
+ window.location.href = await this.vnConfig.vnApp.getUrl(`worker/${id}`);
+ }
}
Controller.$inject = ['$scope', '$translate', 'vnConfig', 'vnAuth', 'vnToken'];
diff --git a/loopback/common/models/vn-model.js b/loopback/common/models/vn-model.js
index 22b535f62..a11bed11d 100644
--- a/loopback/common/models/vn-model.js
+++ b/loopback/common/models/vn-model.js
@@ -13,7 +13,6 @@ module.exports = function(Self) {
Object.assign(Self, {
setup() {
Self.super_.setup.call(this);
-
/**
* Setting a global transaction timeout to find out if the service
* is blocked because the connection pool is empty.
@@ -28,6 +27,26 @@ module.exports = function(Self) {
};
});
+ this.beforeRemote('**', async ctx => {
+ if (!this.hasFilter(ctx)) return;
+
+ const defaultLimit = this.app.orm.selectLimit;
+ const filter = ctx.args.filter || {limit: defaultLimit};
+
+ if (filter.limit > defaultLimit) {
+ filter.limit = defaultLimit;
+ ctx.args.filter = filter;
+ }
+ });
+
+ this.afterRemote('**', async ctx => {
+ if (!this.hasFilter(ctx)) return;
+
+ const {result} = ctx;
+ const length = Array.isArray(result) ? result.length : result ? 1 : 0;
+ if (length >= this.app.orm.selectLimit) throw new UserError('Too many records');
+ });
+
// Register field ACL validation
/*
this.beforeRemote('prototype.patchAttributes', ctx => this.checkUpdateAcls(ctx));
@@ -327,6 +346,12 @@ module.exports = function(Self) {
checkInsertAcls(ctx) {
return this.checkAcls(ctx, 'insert');
+ },
+
+ hasFilter(ctx) {
+ return ctx.req.method.toUpperCase() === 'GET' &&
+ ctx.method.accepts.some(x => x.arg === 'filter' && x.type.toLowerCase() === 'object');
}
+
});
};
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index e1f7fd655..377691ae6 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -369,5 +369,6 @@
"Cannot send mail": "Não é possível enviar o email",
"CONSTRAINT `supplierAccountTooShort` failed for `vn`.`supplier`": "La cuenta debe tener exactamente 10 dígitos",
"The sale not exists in the item shelving": "La venta no existe en la estantería del artículo",
- "The entry not have stickers": "La entrada no tiene etiquetas"
+ "The entry not have stickers": "La entrada no tiene etiquetas",
+ "Too many records": "Demasiados registros"
}
\ No newline at end of file
diff --git a/loopback/server/boot/orm.js b/loopback/server/boot/orm.js
new file mode 100644
index 000000000..8bbd969e1
--- /dev/null
+++ b/loopback/server/boot/orm.js
@@ -0,0 +1,6 @@
+module.exports = async function(app) {
+ if (!app.orm) {
+ const ormConfig = await app.models.OrmConfig.findOne();
+ app.orm = ormConfig;
+ }
+};
diff --git a/modules/account/front/accounts/index.html b/modules/account/front/accounts/index.html
deleted file mode 100644
index 6847e68d1..000000000
--- a/modules/account/front/accounts/index.html
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
diff --git a/modules/account/front/accounts/index.js b/modules/account/front/accounts/index.js
deleted file mode 100644
index ab19126a1..000000000
--- a/modules/account/front/accounts/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSynchronizeAll() {
- this.vnApp.showSuccess(this.$t('Synchronizing in the background'));
- this.$http.patch(`Accounts/syncAll`);
- }
-
- onSynchronizeRoles() {
- this.$http.patch(`RoleInherits/sync`)
- .then(() => this.vnApp.showSuccess(this.$t('Roles synchronized!')));
- }
-}
-
-ngModule.component('vnAccountAccounts', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/accounts/locale/es.yml b/modules/account/front/accounts/locale/es.yml
deleted file mode 100644
index 614ade3eb..000000000
--- a/modules/account/front/accounts/locale/es.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-Accounts: Cuentas
-Homedir base: Directorio base para carpetas de usuario
-Shell: Intérprete de línea de comandos
-User and role base id: Id base usuarios y roles
-Synchronize all: Sincronizar todo
-Synchronize roles: Sincronizar roles
-If password is not specified, just user attributes are synchronized: >-
- Si la contraseña no se especifica solo se sincronizarán lo atributos del usuario
-Synchronizing in the background: Sincronizando en segundo plano
-Users synchronized!: ¡Usuarios sincronizados!
-Username: Nombre de usuario
-Synchronize: Sincronizar
-Please enter the username: Por favor introduce el nombre de usuario
-Roles synchronized!: ¡Roles sincronizados!
diff --git a/modules/account/front/acl/create/index.html b/modules/account/front/acl/create/index.html
deleted file mode 100644
index 14332f737..000000000
--- a/modules/account/front/acl/create/index.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
diff --git a/modules/account/front/acl/create/index.js b/modules/account/front/acl/create/index.js
deleted file mode 100644
index fea71991f..000000000
--- a/modules/account/front/acl/create/index.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor(...args) {
- super(...args);
- this.accessTypes = [
- {name: '*'},
- {name: 'READ'},
- {name: 'WRITE'}
- ];
- this.permissions = [
- {name: 'ALLOW'},
- {name: 'DENY'}
- ];
-
- this.models = [];
- for (let model in window.validations)
- this.models.push({name: model});
-
- this.acl = {
- property: '*',
- principalType: 'ROLE',
- accessType: 'READ',
- permission: 'ALLOW'
- };
- }
-}
-
-ngModule.component('vnAclCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/acl/index.js b/modules/account/front/acl/index.js
deleted file mode 100644
index 8393859a5..000000000
--- a/modules/account/front/acl/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import './main';
-import './index/';
-import './create';
-import './search-panel';
diff --git a/modules/account/front/acl/index/index.html b/modules/account/front/acl/index/index.html
deleted file mode 100644
index af06ec481..000000000
--- a/modules/account/front/acl/index/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
- {{::row.model}}.{{::row.property}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/acl/index/index.js b/modules/account/front/acl/index/index.js
deleted file mode 100644
index a2aec534a..000000000
--- a/modules/account/front/acl/index/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onDelete(row) {
- return this.$http.delete(`ACLs/${row.id}`)
- .then(() => this.$.model.refresh())
- .then(() => this.vnApp.showSuccess(this.$t('ACL removed')));
- }
-}
-
-ngModule.component('vnAclIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/acl/index/locale/es.yml b/modules/account/front/acl/index/locale/es.yml
deleted file mode 100644
index 8024f804c..000000000
--- a/modules/account/front/acl/index/locale/es.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-New ACL: Nuevo ACL
-Edit ACL: Editar ACL
-ACL will be removed: El ACL será eliminado
-ACL removed: ACL eliminado
diff --git a/modules/account/front/acl/locale/es.yml b/modules/account/front/acl/locale/es.yml
deleted file mode 100644
index ff6a1b41c..000000000
--- a/modules/account/front/acl/locale/es.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-Model: Modelo
-Property: Propiedad
-Access type: Tipo de acceso
-Permission: Permiso
\ No newline at end of file
diff --git a/modules/account/front/acl/main/index.html b/modules/account/front/acl/main/index.html
deleted file mode 100644
index 7767768d9..000000000
--- a/modules/account/front/acl/main/index.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/acl/main/index.js b/modules/account/front/acl/main/index.js
deleted file mode 100644
index a91a71cb7..000000000
--- a/modules/account/front/acl/main/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import ngModule from '../../module';
-import ModuleMain from 'salix/components/module-main';
-
-export default class ACL extends ModuleMain {
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return {model: {like: `%${value}%`}};
- default:
- return {[param]: value};
- }
- }
-}
-
-ngModule.vnComponent('vnAclComponent', {
- controller: ACL,
- template: require('./index.html')
-});
diff --git a/modules/account/front/acl/search-panel/index.html b/modules/account/front/acl/search-panel/index.html
deleted file mode 100644
index a3efab440..000000000
--- a/modules/account/front/acl/search-panel/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
diff --git a/modules/account/front/acl/search-panel/index.js b/modules/account/front/acl/search-panel/index.js
deleted file mode 100644
index 4f571059e..000000000
--- a/modules/account/front/acl/search-panel/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-export default class Controller extends SearchPanel {
- constructor(...args) {
- super(...args);
- this.accessTypes = [
- {name: '*'},
- {name: 'READ'},
- {name: 'WRITE'}
- ];
- this.permissions = [
- {name: 'ALLOW'},
- {name: 'DENY'}
- ];
-
- this.models = [];
- for (let model in window.validations)
- this.models.push({name: model});
- }
-}
-
-ngModule.component('vnAclSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/alias/basic-data/index.html b/modules/account/front/alias/basic-data/index.html
deleted file mode 100644
index 523c9297a..000000000
--- a/modules/account/front/alias/basic-data/index.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/alias/basic-data/index.js b/modules/account/front/alias/basic-data/index.js
deleted file mode 100644
index b7c2db089..000000000
--- a/modules/account/front/alias/basic-data/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {}
-
-ngModule.component('vnAliasBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- alias: '<'
- }
-});
diff --git a/modules/account/front/alias/card/index.html b/modules/account/front/alias/card/index.html
deleted file mode 100644
index 712147a24..000000000
--- a/modules/account/front/alias/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/account/front/alias/card/index.js b/modules/account/front/alias/card/index.js
deleted file mode 100644
index fd1a18f6a..000000000
--- a/modules/account/front/alias/card/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- this.$http.get(`MailAliases/${this.$params.id}`)
- .then(res => this.alias = res.data);
- }
-}
-
-ngModule.vnComponent('vnAliasCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/alias/create/index.html b/modules/account/front/alias/create/index.html
deleted file mode 100644
index 4dad1b870..000000000
--- a/modules/account/front/alias/create/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
diff --git a/modules/account/front/alias/create/index.js b/modules/account/front/alias/create/index.js
deleted file mode 100644
index c058c3adf..000000000
--- a/modules/account/front/alias/create/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSubmit() {
- return this.$.watcher.submit().then(res =>
- this.$state.go('account.alias.card.basicData', {id: res.data.id})
- );
- }
-}
-
-ngModule.component('vnAliasCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/alias/descriptor/index.html b/modules/account/front/alias/descriptor/index.html
deleted file mode 100644
index 71b98c6a3..000000000
--- a/modules/account/front/alias/descriptor/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- Delete
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/alias/descriptor/index.js b/modules/account/front/alias/descriptor/index.js
deleted file mode 100644
index a21baae5a..000000000
--- a/modules/account/front/alias/descriptor/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get alias() {
- return this.entity;
- }
-
- set alias(value) {
- this.entity = value;
- }
-
- onDelete() {
- return this.$http.delete(`MailAliases/${this.id}`)
- .then(() => this.$state.go('account.alias'))
- .then(() => this.vnApp.showSuccess(this.$t('Alias removed')));
- }
-}
-
-ngModule.component('vnAliasDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- alias: '<'
- }
-});
diff --git a/modules/account/front/alias/descriptor/locale/es.yml b/modules/account/front/alias/descriptor/locale/es.yml
deleted file mode 100644
index 9c6fa0e73..000000000
--- a/modules/account/front/alias/descriptor/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Alias will be removed: El alias será eliminado
-Alias removed: Alias eliminado
\ No newline at end of file
diff --git a/modules/account/front/alias/index.js b/modules/account/front/alias/index.js
deleted file mode 100644
index 8eed3a3d3..000000000
--- a/modules/account/front/alias/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import './main';
-import './index/';
-import './create';
-import './summary';
-import './card';
-import './descriptor';
-import './create';
-import './basic-data';
-import './users';
diff --git a/modules/account/front/alias/index/index.html b/modules/account/front/alias/index/index.html
deleted file mode 100644
index 7343cb9bd..000000000
--- a/modules/account/front/alias/index/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
- {{::alias.alias}}
- {{::alias.description}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/alias/index/index.js b/modules/account/front/alias/index/index.js
deleted file mode 100644
index 44e146fb4..000000000
--- a/modules/account/front/alias/index/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(alias) {
- this.selectedAlias = alias;
- this.$.summary.show();
- }
-}
-
-ngModule.component('vnAliasIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/alias/index/locale/es.yml b/modules/account/front/alias/index/locale/es.yml
deleted file mode 100644
index 4df41c0be..000000000
--- a/modules/account/front/alias/index/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-New alias: Nuevo alias
-View alias: Ver alias
\ No newline at end of file
diff --git a/modules/account/front/alias/locale/es.yml b/modules/account/front/alias/locale/es.yml
deleted file mode 100644
index ecc856fcf..000000000
--- a/modules/account/front/alias/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Public: Público
\ No newline at end of file
diff --git a/modules/account/front/alias/main/index.html b/modules/account/front/alias/main/index.html
deleted file mode 100644
index 43f6e2f51..000000000
--- a/modules/account/front/alias/main/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/alias/main/index.js b/modules/account/front/alias/main/index.js
deleted file mode 100644
index 21eed3d85..000000000
--- a/modules/account/front/alias/main/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import ngModule from '../../module';
-import ModuleMain from 'salix/components/module-main';
-
-export default class Alias extends ModuleMain {
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return /^\d+$/.test(value)
- ? {id: value}
- : {alias: {like: `%${value}%`}};
- }
- }
-}
-
-ngModule.vnComponent('vnAlias', {
- controller: Alias,
- template: require('./index.html')
-});
diff --git a/modules/account/front/alias/summary/index.html b/modules/account/front/alias/summary/index.html
deleted file mode 100644
index 52ee2813d..000000000
--- a/modules/account/front/alias/summary/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
- {{summary.alias}}
-
-
- Basic data
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/alias/summary/index.js b/modules/account/front/alias/summary/index.js
deleted file mode 100644
index 21bc8d9ba..000000000
--- a/modules/account/front/alias/summary/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import ngModule from '../../module';
-import Component from 'core/lib/component';
-
-class Controller extends Component {
- set alias(value) {
- this._alias = value;
- this.$.summary = null;
- if (!value) return;
-
- this.$http.get(`MailAliases/${value.id}`)
- .then(res => this.$.summary = res.data);
- }
-
- get alias() {
- return this._alias;
- }
-}
-
-ngModule.component('vnAliasSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- alias: '<'
- }
-});
diff --git a/modules/account/front/alias/users/index.html b/modules/account/front/alias/users/index.html
deleted file mode 100644
index 048a702ea..000000000
--- a/modules/account/front/alias/users/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
- {{::row.user.name}}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/account/front/alias/users/index.js b/modules/account/front/alias/users/index.js
deleted file mode 100644
index b2446d71b..000000000
--- a/modules/account/front/alias/users/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- let filter = {
- include: {
- relation: 'user',
- scope: {
- fields: ['id', 'name']
- }
- }
- };
- this.$http.get(`MailAliases/${this.$params.id}/accounts`, {filter})
- .then(res => this.$.data = res.data);
- }
-
- onRemove(row) {
- return this.$http.delete(`MailAliases/${this.$params.id}/accounts/${row.id}`)
- .then(() => {
- let index = this.$.data.indexOf(row);
- if (index !== -1) this.$.data.splice(index, 1);
- this.vnApp.showSuccess(this.$t('User removed'));
- });
- }
-}
-
-ngModule.component('vnAliasUsers', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/alias/users/index.spec.js b/modules/account/front/alias/users/index.spec.js
deleted file mode 100644
index d618f1de1..000000000
--- a/modules/account/front/alias/users/index.spec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-import './index';
-
-describe('component vnAliasUsers', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnAliasUsers', {$element: null});
- controller.$params.id = 1;
- }));
-
- describe('$onInit()', () => {
- it('should delete entity and go to index', () => {
- $httpBackend.expectGET('MailAliases/1/accounts').respond('foo');
- controller.$onInit();
- $httpBackend.flush();
-
- expect(controller.$.data).toBe('foo');
- });
- });
-
- describe('onRemove()', () => {
- it('should call backend method to change role', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.$.data = [
- {id: 1, alias: 'foo'},
- {id: 2, alias: 'bar'}
- ];
-
- $httpBackend.expectDELETE('MailAliases/1/accounts/1').respond();
- controller.onRemove(controller.$.data[0]);
- $httpBackend.flush();
-
- expect(controller.$.data).toEqual([{id: 2, alias: 'bar'}]);
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-});
diff --git a/modules/account/front/alias/users/locale/es.yml b/modules/account/front/alias/users/locale/es.yml
deleted file mode 100644
index dc24eb318..000000000
--- a/modules/account/front/alias/users/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-User will be removed from alias: El usuario será borrado del alias
-User removed: Usuario borrado
\ No newline at end of file
diff --git a/modules/account/front/aliases/index.html b/modules/account/front/aliases/index.html
deleted file mode 100644
index 4a73ec873..000000000
--- a/modules/account/front/aliases/index.html
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
- {{::row.alias.alias}}
-
-
- {{::row.alias.description}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Account not enabled
-
diff --git a/modules/account/front/aliases/index.js b/modules/account/front/aliases/index.js
deleted file mode 100644
index 0fc806a71..000000000
--- a/modules/account/front/aliases/index.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- this.refresh();
- }
-
- refresh() {
- let filter = {
- where: {account: this.$params.id},
- include: {
- relation: 'alias',
- scope: {
- fields: ['id', 'alias', 'description']
- }
- }
- };
- return this.$http.get(`MailAliasAccounts`, {filter})
- .then(res => this.$.data = res.data);
- }
-
- onAddClick() {
- this.addData = {account: this.$params.id};
- this.$.dialog.show();
- }
-
- onAddSave() {
- return this.$http.post(`MailAliasAccounts`, this.addData)
- .then(() => this.refresh())
- .then(() => this.vnApp.showSuccess(
- this.$t('Subscribed to alias!'))
- );
- }
-
- onRemove(row) {
- return this.$http.delete(`MailAliasAccounts/${row.id}`)
- .then(() => {
- this.$.data.splice(this.$.data.indexOf(row), 1);
- this.vnApp.showSuccess(this.$t('Unsubscribed from alias!'));
- });
- }
-}
-
-ngModule.component('vnUserAliases', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnUserCard'
- }
-});
diff --git a/modules/account/front/aliases/index.spec.js b/modules/account/front/aliases/index.spec.js
deleted file mode 100644
index 466f1e1e9..000000000
--- a/modules/account/front/aliases/index.spec.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import './index';
-
-describe('component vnUserAliases', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnUserAliases', {$element: null});
- jest.spyOn(controller.vnApp, 'showSuccess');
- }));
-
- describe('refresh()', () => {
- it('should refresh the controller data', () => {
- $httpBackend.expectGET('MailAliasAccounts').respond('foo');
- controller.refresh();
- $httpBackend.flush();
-
- expect(controller.$.data).toBe('foo');
- });
- });
-
- describe('onAddSave()', () => {
- it('should add the new row', () => {
- controller.addData = {account: 1};
-
- $httpBackend.expectPOST('MailAliasAccounts').respond();
- $httpBackend.expectGET('MailAliasAccounts').respond('foo');
- controller.onAddSave();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('onRemove()', () => {
- it('shoud remove the passed row remote and locally', () => {
- controller.$.data = [
- {id: 1, alias: 'foo'},
- {id: 2, alias: 'bar'}
- ];
-
- $httpBackend.expectDELETE('MailAliasAccounts/1').respond();
- controller.onRemove(controller.$.data[0]);
- $httpBackend.flush();
-
- expect(controller.$.data).toEqual([{id: 2, alias: 'bar'}]);
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-});
diff --git a/modules/account/front/aliases/locale/es.yml b/modules/account/front/aliases/locale/es.yml
deleted file mode 100644
index 4d1ad76a7..000000000
--- a/modules/account/front/aliases/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Unsubscribe: Desuscribir
-Subscribed to alias!: ¡Suscrito al alias!
-Unsubscribed from alias!: ¡Desuscrito del alias!
\ No newline at end of file
diff --git a/modules/account/front/basic-data/index.html b/modules/account/front/basic-data/index.html
deleted file mode 100644
index 9fd3506fe..000000000
--- a/modules/account/front/basic-data/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
diff --git a/modules/account/front/basic-data/index.js b/modules/account/front/basic-data/index.js
deleted file mode 100644
index f6b266bbc..000000000
--- a/modules/account/front/basic-data/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- if (this.$params.emailConfirmed)
- this.vnApp.showSuccess(this.$t('Email verified successfully!'));
- }
-
- onSubmit() {
- this.$.watcher.submit()
- .then(() => this.card.reload());
- }
-}
-
-ngModule.component('vnUserBasicData', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnUserCard'
- },
- bindings: {
- user: '<'
- }
-});
diff --git a/modules/account/front/basic-data/locale/es.yml b/modules/account/front/basic-data/locale/es.yml
deleted file mode 100644
index 2ca7bf698..000000000
--- a/modules/account/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Email verified successfully!: Correo verificado correctamente!
diff --git a/modules/account/front/card/index.html b/modules/account/front/card/index.html
deleted file mode 100644
index cba6b93c6..000000000
--- a/modules/account/front/card/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/account/front/card/index.js b/modules/account/front/card/index.js
deleted file mode 100644
index 2c8cc7637..000000000
--- a/modules/account/front/card/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-import './style.scss';
-
-class Controller extends ModuleCard {
- reload() {
- const filter = {
- where: {id: this.$params.id},
- include: {
- relation: 'role',
- scope: {
- fields: ['id', 'name']
- }
- }
- };
-
- return Promise.all([
- this.$http.get(`VnUsers/preview`, {filter})
- .then(res => {
- const [user] = res.data;
- this.user = user;
- }),
- this.$http.get(`Accounts/${this.$params.id}/exists`)
- .then(res => this.hasAccount = res.data.exists)
- ]);
- }
-}
-
-ngModule.vnComponent('vnUserCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/card/index.spec.js b/modules/account/front/card/index.spec.js
deleted file mode 100644
index 712d3c1d8..000000000
--- a/modules/account/front/card/index.spec.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import './index';
-
-describe('component vnUserCard', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnUserCard', {$element: null});
- }));
-
- describe('reload()', () => {
- it('should reload the controller data', () => {
- controller.$params.id = 1;
-
- $httpBackend.expectGET('VnUsers/preview').respond('foo');
- $httpBackend.expectGET('Accounts/1/exists').respond({exists: true});
- controller.reload();
- $httpBackend.flush();
-
- expect(controller.user).toBe('f');
- expect(controller.hasAccount).toBeTruthy();
- });
- });
-});
diff --git a/modules/account/front/card/style.scss b/modules/account/front/card/style.scss
deleted file mode 100644
index 4d9d108a0..000000000
--- a/modules/account/front/card/style.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-@import "variables";
-
-.bg-title {
- display: block;
- text-align: center;
- padding: 24px;
- box-sizing: border-box;
- color: $color-font-secondary;
- font-size: 1.375rem;
-}
diff --git a/modules/account/front/connections/index.html b/modules/account/front/connections/index.html
deleted file mode 100644
index d634b7a9f..000000000
--- a/modules/account/front/connections/index.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
- {{::row.user.username}}
- {{::row.created | date:'dd/MM HH:mm'}}
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/connections/index.js b/modules/account/front/connections/index.js
deleted file mode 100644
index c4ddd5615..000000000
--- a/modules/account/front/connections/index.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor(...args) {
- super(...args);
- this.filter = {
- fields: ['id', 'created', 'userId'],
- include: {
- relation: 'user',
- scope: {
- fields: ['username']
- }
- },
- order: 'created DESC'
- };
- }
-
- onDisconnect(row) {
- return this.$http.delete(`AccessTokens/${row.id}`)
- .then(() => this.$.model.refresh())
- .then(() => this.vnApp.showSuccess(this.$t('Session killed')));
- }
-}
-
-ngModule.component('vnConnections', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/connections/locale/es.yml b/modules/account/front/connections/locale/es.yml
deleted file mode 100644
index 41ef18b45..000000000
--- a/modules/account/front/connections/locale/es.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-Go to user: Ir al usuario
-Refresh: Actualizar
-Session will be killed: Se va a matar la sesión
-Kill session: Matar sesión
-Session killed: Sesión matada
\ No newline at end of file
diff --git a/modules/account/front/create/index.html b/modules/account/front/create/index.html
deleted file mode 100644
index 70a518885..000000000
--- a/modules/account/front/create/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
diff --git a/modules/account/front/create/index.js b/modules/account/front/create/index.js
deleted file mode 100644
index 01ba7905b..000000000
--- a/modules/account/front/create/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.user = {active: true};
- }
-
- onSubmit() {
- return this.$.watcher.submit().then(res => {
- this.$state.go('account.card.basicData', {id: res.data.id});
- });
- }
-}
-
-ngModule.component('vnUserCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/descriptor/__snapshots__/index.spec.js.snap b/modules/account/front/descriptor/__snapshots__/index.spec.js.snap
deleted file mode 100644
index de5f8e8c2..000000000
--- a/modules/account/front/descriptor/__snapshots__/index.spec.js.snap
+++ /dev/null
@@ -1,5 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`component vnUserDescriptor onPassChange() should throw an error when password is empty 1`] = `"You must enter a new password"`;
-
-exports[`component vnUserDescriptor onPassChange() should throw an error when repeat password not matches new password 1`] = `"Passwords don't match"`;
diff --git a/modules/account/front/descriptor/index.spec.js b/modules/account/front/descriptor/index.spec.js
deleted file mode 100644
index 46c7e376c..000000000
--- a/modules/account/front/descriptor/index.spec.js
+++ /dev/null
@@ -1,97 +0,0 @@
-import './index';
-
-describe('component vnUserDescriptor', () => {
- let controller;
- let $httpBackend;
-
- let user = {id: 1, name: 'foo'};
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $httpBackend.whenGET('Accounts/1/exists').respond({exists: true});
-
- controller = $componentController('vnUserDescriptor', {$element: null}, {user});
- jest.spyOn(controller, 'emit');
- jest.spyOn(controller.vnApp, 'showSuccess');
- }));
-
- describe('onDelete()', () => {
- it('should delete entity and go to index', () => {
- controller.$state.go = jest.fn();
-
- $httpBackend.expectDELETE('VnUsers/1').respond();
- controller.onDelete();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith('account.index');
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('onPassChange()', () => {
- it('should throw an error when password is empty', () => {
- expect(() => {
- controller.onPassChange();
- }).toThrowErrorMatchingSnapshot();
- });
-
- it('should throw an error when repeat password not matches new password', () => {
- controller.newPassword = 'foo';
- controller.repeatPassword = 'bar';
-
- expect(() => {
- controller.onPassChange();
- }).toThrowErrorMatchingSnapshot();
- });
-
- it('should make a request when password checks passes', () => {
- controller.newPassword = 'foo';
- controller.repeatPassword = 'foo';
-
- $httpBackend.expectPATCH('Accounts/1/setPassword').respond();
- controller.onPassChange();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.emit).toHaveBeenCalledWith('change');
- });
- });
-
- describe('onEnableAccount()', () => {
- it('should make request to enable account', () => {
- $httpBackend.expectPOST('Accounts', {id: 1}).respond();
- controller.onEnableAccount();
- $httpBackend.flush();
-
- expect(controller.hasAccount).toBeTruthy();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.emit).toHaveBeenCalledWith('change');
- });
- });
-
- describe('onDisableAccount()', () => {
- it('should make request to disable account', () => {
- $httpBackend.expectDELETE('Accounts/1').respond();
- controller.onDisableAccount();
- $httpBackend.flush();
-
- expect(controller.hasAccount).toBeFalsy();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.emit).toHaveBeenCalledWith('change');
- });
- });
-
- describe('onSetActive()', () => {
- it('should make request to activate/deactivate the user', () => {
- $httpBackend.expectPATCH('VnUsers/1', {active: true}).respond();
- controller.onSetActive(true);
- $httpBackend.flush();
-
- expect(controller.user.active).toBeTruthy();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.emit).toHaveBeenCalledWith('change');
- });
- });
-});
diff --git a/modules/account/front/index.js b/modules/account/front/index.js
index 4d6aedcae..0f2208862 100644
--- a/modules/account/front/index.js
+++ b/modules/account/front/index.js
@@ -1,24 +1,6 @@
export * from './module';
import './main';
-import './index/';
-import './role';
-import './alias';
-import './connections';
-import './acl';
-import './summary';
-import './card';
import './descriptor';
import './descriptor-popover';
-import './search-panel';
-import './create';
-import './basic-data';
-import './mail-forwarding';
-import './aliases';
-import './roles';
-import './ldap';
-import './samba';
-import './accounts';
-import './privileges';
-import './user-log';
-import './role-log';
+import './summary';
diff --git a/modules/account/front/index/index.html b/modules/account/front/index/index.html
deleted file mode 100644
index 7502c8b3d..000000000
--- a/modules/account/front/index/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/account/front/index/index.js b/modules/account/front/index/index.js
deleted file mode 100644
index 9324ca740..000000000
--- a/modules/account/front/index/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(user) {
- this.selectedUser = user;
- this.$.summary.show();
- }
-}
-
-ngModule.component('vnUserIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/index/locale/es.yml b/modules/account/front/index/locale/es.yml
deleted file mode 100644
index 074fb054e..000000000
--- a/modules/account/front/index/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-New user: Nuevo usuario
-View user: Ver usuario
\ No newline at end of file
diff --git a/modules/account/front/ldap/index.html b/modules/account/front/ldap/index.html
deleted file mode 100644
index 23356452a..000000000
--- a/modules/account/front/ldap/index.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
diff --git a/modules/account/front/ldap/index.js b/modules/account/front/ldap/index.js
deleted file mode 100644
index 40e1e8db1..000000000
--- a/modules/account/front/ldap/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onTestConection() {
- this.$http.get(`LdapConfigs/test`)
- .then(() => this.vnApp.showSuccess(this.$t('LDAP connection established!')));
- }
-}
-
-ngModule.component('vnAccountLdap', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/ldap/locale/es.yml b/modules/account/front/ldap/locale/es.yml
deleted file mode 100644
index 0353d6b72..000000000
--- a/modules/account/front/ldap/locale/es.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-Enable synchronization: Habilitar sincronización
-Server: Servidor
-RDN: RDN
-User DN: DN usuarios
-Filter: Filtro
-Group DN: DN grupos
-Test connection: Probar conexión
-LDAP connection established!: ¡Conexión con LDAP establecida!
diff --git a/modules/account/front/mail-forwarding/index.html b/modules/account/front/mail-forwarding/index.html
deleted file mode 100644
index df5cd80bf..000000000
--- a/modules/account/front/mail-forwarding/index.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
- Account not enabled
-
diff --git a/modules/account/front/mail-forwarding/index.js b/modules/account/front/mail-forwarding/index.js
deleted file mode 100644
index 5118e8eab..000000000
--- a/modules/account/front/mail-forwarding/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {}
-
-ngModule.component('vnUserMailForwarding', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnUserCard'
- },
-});
diff --git a/modules/account/front/mail-forwarding/locale/es.yml b/modules/account/front/mail-forwarding/locale/es.yml
deleted file mode 100644
index 688ace6b5..000000000
--- a/modules/account/front/mail-forwarding/locale/es.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-Mail forwarding: Reenvío de correo
-Forward email: Dirección de reenvío
-Enable mail forwarding: Habilitar redirección de correo
-All emails will be forwarded to the specified address.: >
- Todos los correos serán reenviados a la dirección especificada, no se
- mantendrá copia de los mismos en el buzón del usuario.
-You don't have enough privileges: No tienes suficientes permisos
diff --git a/modules/account/front/main/index.html b/modules/account/front/main/index.html
index 36b493ec4..e69de29bb 100644
--- a/modules/account/front/main/index.html
+++ b/modules/account/front/main/index.html
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/account/front/main/index.js b/modules/account/front/main/index.js
index a43ffb76b..335d71b42 100644
--- a/modules/account/front/main/index.js
+++ b/modules/account/front/main/index.js
@@ -4,32 +4,10 @@ import ModuleMain from 'salix/components/module-main';
export default class User extends ModuleMain {
constructor($element, $) {
super($element, $);
- this.filter = {
- fields: ['id', 'nickname', 'name', 'role'],
- include: {
- relation: 'role',
- scope: {
- fields: ['id', 'name']
- }
- }
- };
}
-
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return /^\d+$/.test(value)
- ? {id: value}
- : {or: [
- {name: {like: `%${value}%`}},
- {nickname: {like: `%${value}%`}}
- ]};
- case 'name':
- case 'nickname':
- return {[param]: {like: `%${value}%`}};
- case 'roleFk':
- return {[param]: value};
- }
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`account/`);
}
}
diff --git a/modules/account/front/main/index.spec.js b/modules/account/front/main/index.spec.js
deleted file mode 100644
index c232aa849..000000000
--- a/modules/account/front/main/index.spec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import './index';
-
-describe('component vnUser', () => {
- let controller;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject($componentController => {
- controller = $componentController('vnUser', {$element: null});
- }));
-
- describe('exprBuilder()', () => {
- it('should search by id when only digits string is passed', () => {
- let expr = controller.exprBuilder('search', '1');
-
- expect(expr).toEqual({id: '1'});
- });
-
- it('should search by name when non-only digits string is passed', () => {
- let expr = controller.exprBuilder('search', '1foo');
-
- expect(expr).toEqual({or: [
- {name: {like: '%1foo%'}},
- {nickname: {like: '%1foo%'}}
- ]});
- });
- });
-});
diff --git a/modules/account/front/privileges/index.html b/modules/account/front/privileges/index.html
deleted file mode 100644
index 343c179e3..000000000
--- a/modules/account/front/privileges/index.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
diff --git a/modules/account/front/privileges/index.js b/modules/account/front/privileges/index.js
deleted file mode 100644
index f69428666..000000000
--- a/modules/account/front/privileges/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- get user() {
- return this._user;
- }
-
- set user(value) {
- this._user = value;
- if (!value) return;
- }
-}
-
-ngModule.component('vnUserPrivileges', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- user: '<'
- }
-});
diff --git a/modules/account/front/privileges/locale/es.yml b/modules/account/front/privileges/locale/es.yml
deleted file mode 100644
index d66a7a6cf..000000000
--- a/modules/account/front/privileges/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Privileges: Privilegios
-Has grant: Puede delegar privilegios
diff --git a/modules/account/front/role-log/index.html b/modules/account/front/role-log/index.html
deleted file mode 100644
index 9e2b151b5..000000000
--- a/modules/account/front/role-log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/modules/account/front/role-log/index.js b/modules/account/front/role-log/index.js
deleted file mode 100644
index 02448ccaa..000000000
--- a/modules/account/front/role-log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnRoleLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/account/front/role/basic-data/index.html b/modules/account/front/role/basic-data/index.html
deleted file mode 100644
index 846f8b455..000000000
--- a/modules/account/front/role/basic-data/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
diff --git a/modules/account/front/role/basic-data/index.js b/modules/account/front/role/basic-data/index.js
deleted file mode 100644
index 4e26906ee..000000000
--- a/modules/account/front/role/basic-data/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {}
-
-ngModule.component('vnRoleBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- role: '<'
- }
-});
diff --git a/modules/account/front/role/card/index.html b/modules/account/front/role/card/index.html
deleted file mode 100644
index 2f51f88b5..000000000
--- a/modules/account/front/role/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/account/front/role/card/index.js b/modules/account/front/role/card/index.js
deleted file mode 100644
index 3c7c758ef..000000000
--- a/modules/account/front/role/card/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- this.$http.get(`VnRoles/${this.$params.id}`)
- .then(res => this.role = res.data);
- }
-}
-
-ngModule.vnComponent('vnRoleCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/role/card/index.spec.js b/modules/account/front/role/card/index.spec.js
deleted file mode 100644
index 569fe487d..000000000
--- a/modules/account/front/role/card/index.spec.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import './index';
-
-describe('component vnRoleCard', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnRoleCard', {$element: null});
- }));
-
- describe('reload()', () => {
- it('should reload the controller data', () => {
- controller.$params.id = 1;
-
- $httpBackend.expectGET('VnRoles/1').respond('foo');
- controller.reload();
- $httpBackend.flush();
-
- expect(controller.role).toBe('foo');
- });
- });
-});
diff --git a/modules/account/front/role/create/index.html b/modules/account/front/role/create/index.html
deleted file mode 100644
index 77d6fc2c1..000000000
--- a/modules/account/front/role/create/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
diff --git a/modules/account/front/role/create/index.js b/modules/account/front/role/create/index.js
deleted file mode 100644
index 3f7fcc9cf..000000000
--- a/modules/account/front/role/create/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onSubmit() {
- return this.$.watcher.submit().then(res =>
- this.$state.go('account.role.card.basicData', {id: res.data.id})
- );
- }
-}
-
-ngModule.component('vnRoleCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/role/descriptor/index.html b/modules/account/front/role/descriptor/index.html
deleted file mode 100644
index d8bf4857a..000000000
--- a/modules/account/front/role/descriptor/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- Delete
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/account/front/role/descriptor/index.js b/modules/account/front/role/descriptor/index.js
deleted file mode 100644
index 17b585cb7..000000000
--- a/modules/account/front/role/descriptor/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../../module';
-import Descriptor from 'salix/components/descriptor';
-
-class Controller extends Descriptor {
- get role() {
- return this.entity;
- }
-
- set role(value) {
- this.entity = value;
- }
-
- onDelete() {
- return this.$http.delete(`VnRoles/${this.id}`)
- .then(() => this.$state.go('account.role'))
- .then(() => this.vnApp.showSuccess(this.$t('Role removed')));
- }
-}
-
-ngModule.component('vnRoleDescriptor', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- role: '<'
- }
-});
diff --git a/modules/account/front/role/descriptor/index.spec.js b/modules/account/front/role/descriptor/index.spec.js
deleted file mode 100644
index f3b2e4763..000000000
--- a/modules/account/front/role/descriptor/index.spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import './index';
-
-describe('component vnRoleDescriptor', () => {
- let controller;
- let $httpBackend;
-
- let role = {id: 1, name: 'foo'};
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnRoleDescriptor', {$element: null}, {role});
- }));
-
- describe('onDelete()', () => {
- it('should delete entity and go to index', () => {
- controller.$state.go = jest.fn();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- $httpBackend.expectDELETE('VnRoles/1').respond();
- controller.onDelete();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith('account.role');
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-});
diff --git a/modules/account/front/role/descriptor/locale/es.yml b/modules/account/front/role/descriptor/locale/es.yml
deleted file mode 100644
index 1ca512e4f..000000000
--- a/modules/account/front/role/descriptor/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Role will be removed: El rol va a ser eliminado
-Role removed: Rol eliminado
\ No newline at end of file
diff --git a/modules/account/front/role/index.js b/modules/account/front/role/index.js
deleted file mode 100644
index 97a20d3bc..000000000
--- a/modules/account/front/role/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import './main';
-import './index/';
-import './summary';
-import './card';
-import './descriptor';
-import './search-panel';
-import './create';
-import './basic-data';
-import './subroles';
-import './inherited';
diff --git a/modules/account/front/role/index/index.html b/modules/account/front/role/index/index.html
deleted file mode 100644
index 4c4c6b0ad..000000000
--- a/modules/account/front/role/index/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/role/index/index.js b/modules/account/front/role/index/index.js
deleted file mode 100644
index 40773b23b..000000000
--- a/modules/account/front/role/index/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(role) {
- this.selectedRole = role;
- this.$.summary.show();
- }
-}
-
-ngModule.component('vnRoleIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/role/index/locale/es.yml b/modules/account/front/role/index/locale/es.yml
deleted file mode 100644
index 70932e983..000000000
--- a/modules/account/front/role/index/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-New role: Nuevo rol
-View role: Ver rol
\ No newline at end of file
diff --git a/modules/account/front/role/inherited/index.html b/modules/account/front/role/inherited/index.html
deleted file mode 100644
index 83ecbbff4..000000000
--- a/modules/account/front/role/inherited/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
- {{::row.inherits.name}}
-
-
- {{::row.inherits.description}}
-
-
-
-
-
-
diff --git a/modules/account/front/role/inherited/index.js b/modules/account/front/role/inherited/index.js
deleted file mode 100644
index 5927493ee..000000000
--- a/modules/account/front/role/inherited/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- let filter = {
- where: {role: this.$params.id},
- include: {
- relation: 'inherits',
- scope: {
- fields: ['id', 'name', 'description']
- }
- }
- };
- this.$http.get('RoleRoles', {filter})
- .then(res => this.$.data = res.data);
- }
-}
-
-ngModule.component('vnRoleInherited', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/role/inherited/index.spec.js b/modules/account/front/role/inherited/index.spec.js
deleted file mode 100644
index 16b0c53b2..000000000
--- a/modules/account/front/role/inherited/index.spec.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import './index';
-
-describe('component vnRoleInherited', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnRoleInherited', {$element: null});
- }));
-
- describe('$onInit()', () => {
- it('should delete entity and go to index', () => {
- $httpBackend.expectGET('RoleRoles').respond('foo');
- controller.$onInit();
- $httpBackend.flush();
-
- expect(controller.$.data).toBe('foo');
- });
- });
-});
diff --git a/modules/account/front/role/locale/es.yml b/modules/account/front/role/locale/es.yml
deleted file mode 100644
index 159fc7f16..000000000
--- a/modules/account/front/role/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-Subroles: Subroles
diff --git a/modules/account/front/role/main/index.html b/modules/account/front/role/main/index.html
deleted file mode 100644
index cfef28e57..000000000
--- a/modules/account/front/role/main/index.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/modules/account/front/role/main/index.js b/modules/account/front/role/main/index.js
deleted file mode 100644
index 77d15cf17..000000000
--- a/modules/account/front/role/main/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import ngModule from '../../module';
-import ModuleMain from 'salix/components/module-main';
-
-export default class Role extends ModuleMain {
- exprBuilder(param, value) {
- switch (param) {
- case 'search':
- return /^\d+$/.test(value)
- ? {id: value}
- : {or: [
- {name: {like: `%${value}%`}},
- {nickname: {like: `%${value}%`}}
- ]};
- case 'name':
- case 'description':
- return {[param]: {like: `%${value}%`}};
- }
- }
-}
-
-ngModule.vnComponent('vnRole', {
- controller: Role,
- template: require('./index.html')
-});
diff --git a/modules/account/front/role/search-panel/index.html b/modules/account/front/role/search-panel/index.html
deleted file mode 100644
index dfea9f01c..000000000
--- a/modules/account/front/role/search-panel/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/role/search-panel/index.js b/modules/account/front/role/search-panel/index.js
deleted file mode 100644
index 35da591ad..000000000
--- a/modules/account/front/role/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.component('vnRoleSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/account/front/role/subroles/index.html b/modules/account/front/role/subroles/index.html
deleted file mode 100644
index eba1002b0..000000000
--- a/modules/account/front/role/subroles/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
- {{::row.inherits.name}}
-
-
- {{::row.inherits.description}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/account/front/role/subroles/index.js b/modules/account/front/role/subroles/index.js
deleted file mode 100644
index b7e1caaa4..000000000
--- a/modules/account/front/role/subroles/index.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- this.refresh();
- }
-
- get path() {
- return `RoleInherits`;
- }
-
- refresh() {
- let filter = {
- where: {role: this.$params.id},
- include: {
- relation: 'inherits',
- scope: {
- fields: ['id', 'name', 'description']
- }
- }
- };
- this.$http.get(this.path, {filter})
- .then(res => this.$.data = res.data);
- }
-
- onAddClick() {
- this.addData = {role: this.$params.id};
- this.$.dialog.show();
- }
-
- onAddSave() {
- return this.$http.post(this.path, this.addData)
- .then(() => this.refresh())
- .then(() => this.vnApp.showSuccess(this.$t('Role added! Changes will take a while to fully propagate.')));
- }
-
- onRemove(row) {
- return this.$http.delete(`${this.path}/${row.id}`)
- .then(() => {
- let index = this.$.data.indexOf(row);
- if (index !== -1) this.$.data.splice(index, 1);
- this.vnApp.showSuccess(this.$t('Role removed. Changes will take a while to fully propagate.'));
- });
- }
-}
-
-ngModule.component('vnRoleSubroles', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/role/subroles/index.spec.js b/modules/account/front/role/subroles/index.spec.js
deleted file mode 100644
index e7d9a4d0e..000000000
--- a/modules/account/front/role/subroles/index.spec.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import './index';
-
-describe('component vnRoleSubroles', () => {
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('account'));
-
- beforeEach(inject(($componentController, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- controller = $componentController('vnRoleSubroles', {$element: null});
- jest.spyOn(controller.vnApp, 'showSuccess');
- }));
-
- describe('refresh()', () => {
- it('should delete entity and go to index', () => {
- $httpBackend.expectGET('RoleInherits').respond('foo');
- controller.refresh();
- $httpBackend.flush();
-
- expect(controller.$.data).toBe('foo');
- });
- });
-
- describe('onAddSave()', () => {
- it('should add a subrole', () => {
- controller.addData = {role: 'foo'};
-
- $httpBackend.expectPOST('RoleInherits', {role: 'foo'}).respond();
- $httpBackend.expectGET('RoleInherits').respond();
- controller.onAddSave();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('onRemove()', () => {
- it('should remove a subrole', () => {
- controller.$.data = [
- {id: 1, name: 'foo'},
- {id: 2, name: 'bar'}
- ];
-
- $httpBackend.expectDELETE('RoleInherits/1').respond();
- controller.onRemove(controller.$.data[0]);
- $httpBackend.flush();
-
- expect(controller.$.data).toEqual([{id: 2, name: 'bar'}]);
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-});
diff --git a/modules/account/front/role/subroles/locale/es.yml b/modules/account/front/role/subroles/locale/es.yml
deleted file mode 100644
index 170882405..000000000
--- a/modules/account/front/role/subroles/locale/es.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-Role added! Changes will take a while to fully propagate.: >
- ¡Rol añadido! Los cambios tardaran un tiempo en propagarse completamente.
-Role removed. Changes will take a while to fully propagate.: >
- Rol eliminado. Los cambios tardaran un tiempo en propagarse completamente.
diff --git a/modules/account/front/role/summary/index.html b/modules/account/front/role/summary/index.html
deleted file mode 100644
index f7971190c..000000000
--- a/modules/account/front/role/summary/index.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
- {{summary.name}}
-
-
- Basic data
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/account/front/role/summary/index.js b/modules/account/front/role/summary/index.js
deleted file mode 100644
index 6c649a68f..000000000
--- a/modules/account/front/role/summary/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import ngModule from '../../module';
-import Component from 'core/lib/component';
-
-class Controller extends Component {
- set role(value) {
- this._role = value;
- this.$.summary = null;
- if (!value) return;
- this.$http.get(`VnRoles/${value.id}`)
- .then(res => this.$.summary = res.data);
- }
-
- get role() {
- return this._role;
- }
-}
-
-ngModule.component('vnRoleSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- role: '<'
- }
-});
diff --git a/modules/account/front/roles/index.html b/modules/account/front/roles/index.html
deleted file mode 100644
index 8c8583929..000000000
--- a/modules/account/front/roles/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
- {{::row.role.name}}
-
-
- {{::row.role.description}}
-
-
-
-
-
-
diff --git a/modules/account/front/roles/index.js b/modules/account/front/roles/index.js
deleted file mode 100644
index 0982dcf10..000000000
--- a/modules/account/front/roles/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- $onInit() {
- let filter = {
- where: {
- prindicpalType: 'USER',
- principalId: this.$params.id
- },
- include: {
- relation: 'role',
- scope: {
- fields: ['id', 'name', 'description']
- }
- }
- };
- this.$http.get('RoleMappings', {filter})
- .then(res => this.$.data = res.data);
- }
-}
-
-ngModule.component('vnUserRoles', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/routes.json b/modules/account/front/routes.json
index d7845090b..9eadf2af2 100644
--- a/modules/account/front/routes.json
+++ b/modules/account/front/routes.json
@@ -7,31 +7,6 @@
"menus": {
"main": [
{"state": "account.index", "icon": "face"},
- {"state": "account.role", "icon": "group"},
- {"state": "account.alias", "icon": "email"},
- {"state": "account.accounts", "icon": "accessibility"},
- {"state": "account.ldap", "icon": "account_tree"},
- {"state": "account.samba", "icon": "preview"},
- {"state": "account.acl", "icon": "check"},
- {"state": "account.connections", "icon": "share"}
- ],
- "card": [
- {"state": "account.card.basicData", "icon": "settings"},
- {"state": "account.card.roles", "icon": "group"},
- {"state": "account.card.mailForwarding", "icon": "forward"},
- {"state": "account.card.aliases", "icon": "email"},
- {"state": "account.card.privileges", "icon": "badge"},
- {"state": "account.card.log", "icon": "history"}
- ],
- "role": [
- {"state": "account.role.card.basicData", "icon": "settings"},
- {"state": "account.role.card.subroles", "icon": "groups"},
- {"state": "account.role.card.inherited", "icon": "account_tree"},
- {"state": "account.role.card.log", "icon": "history"}
- ],
- "alias": [
- {"state": "account.alias.card.basicData", "icon": "settings"},
- {"state": "account.alias.card.users", "icon": "groups"}
]
},
"keybindings": [
@@ -50,224 +25,6 @@
"state": "account.index",
"component": "vn-user-index",
"description": "Users"
- },
- {
- "url": "/create",
- "state": "account.create",
- "component": "vn-user-create",
- "description": "New user"
- },
- {
- "url": "/:id",
- "state": "account.card",
- "component": "vn-user-card",
- "abstract": true,
- "description": "Detail"
- },
- {
- "url": "/summary",
- "state": "account.card.summary",
- "component": "vn-user-summary",
- "description": "Summary",
- "params": {
- "user": "$ctrl.user"
- }
- },
- {
- "url": "/basic-data?emailConfirmed",
- "state": "account.card.basicData",
- "component": "vn-user-basic-data",
- "description": "Basic data",
- "params": {
- "user": "$ctrl.user"
- }
- },
- {
- "url" : "/log",
- "state": "account.card.log",
- "component": "vn-user-log",
- "description": "Log"
- },
- {
- "url" : "/log",
- "state": "account.role.card.log",
- "component": "vn-role-log",
- "description": "Log"
- },
- {
- "url": "/roles",
- "state": "account.card.roles",
- "component": "vn-user-roles",
- "description": "Inherited roles"
- },
- {
- "url": "/mail-forwarding",
- "state": "account.card.mailForwarding",
- "component": "vn-user-mail-forwarding",
- "description": "Mail forwarding"
- },
- {
- "url": "/aliases",
- "state": "account.card.aliases",
- "component": "vn-user-aliases",
- "description": "Mail aliases"
- },
- {
- "url": "/privileges",
- "state": "account.card.privileges",
- "component": "vn-user-privileges",
- "description": "Privileges",
- "params": {
- "user": "$ctrl.user"
- }
- },
- {
- "url": "/role?q",
- "state": "account.role",
- "component": "vn-role",
- "description": "Roles",
- "acl": ["it"]
- },
- {
- "url": "/create",
- "state": "account.role.create",
- "component": "vn-role-create",
- "description": "New role",
- "acl": ["it"]
- },
- {
- "url": "/:id",
- "state": "account.role.card",
- "component": "vn-role-card",
- "abstract": true,
- "description": "Detail"
- },
- {
- "url": "/summary",
- "state": "account.role.card.summary",
- "component": "vn-role-summary",
- "description": "Summary",
- "params": {
- "role": "$ctrl.role"
- },
- "acl": ["it"]
- },
- {
- "url": "/basic-data",
- "state": "account.role.card.basicData",
- "component": "vn-role-basic-data",
- "description": "Basic data",
- "params": {
- "role": "$ctrl.role"
- },
- "acl": ["it"]
- },
- {
- "url": "/subroles",
- "state": "account.role.card.subroles",
- "component": "vn-role-subroles",
- "description": "Subroles",
- "acl": ["it"]
- },
- {
- "url": "/inherited",
- "state": "account.role.card.inherited",
- "component": "vn-role-inherited",
- "description": "Inherited roles",
- "acl": ["it"]
- },
- {
- "url": "/alias?q",
- "state": "account.alias",
- "component": "vn-alias",
- "description": "Mail aliases"
- },
- {
- "url": "/create",
- "state": "account.alias.create",
- "component": "vn-alias-create",
- "description": "New alias"
- },
- {
- "url": "/:id",
- "state": "account.alias.card",
- "component": "vn-alias-card",
- "abstract": true,
- "description": "Detail"
- },
- {
- "url": "/summary",
- "state": "account.alias.card.summary",
- "component": "vn-alias-summary",
- "description": "Summary",
- "params": {
- "alias": "$ctrl.alias"
- }
- },
- {
- "url": "/basic-data",
- "state": "account.alias.card.basicData",
- "component": "vn-alias-basic-data",
- "description": "Basic data",
- "params": {
- "alias": "$ctrl.alias"
- }
- },
- {
- "url": "/users",
- "state": "account.alias.card.users",
- "component": "vn-alias-users",
- "description": "Users",
- "acl": ["it"]
- },
- {
- "url": "/accounts",
- "state": "account.accounts",
- "component": "vn-account-accounts",
- "description": "Accounts",
- "acl": ["sysadmin"]
- },
- {
- "url": "/ldap",
- "state": "account.ldap",
- "component": "vn-account-ldap",
- "description": "LDAP",
- "acl": ["sysadmin"]
- },
- {
- "url": "/samba",
- "state": "account.samba",
- "component": "vn-account-samba",
- "description": "Samba",
- "acl": ["sysadmin"]
- },
- {
- "url": "/acl?q",
- "state": "account.acl",
- "component": "vn-acl-component",
- "description": "ACLs",
- "acl": ["developer"]
- },
- {
- "url": "/create",
- "state": "account.acl.create",
- "component": "vn-acl-create",
- "description": "New ACL",
- "acl": ["developer"]
- },
- {
- "url": "/:id/edit",
- "state": "account.acl.edit",
- "component": "vn-acl-create",
- "description": "Edit ACL",
- "acl": ["developer"]
- },
- {
- "url": "/connections",
- "state": "account.connections",
- "component": "vn-connections",
- "description": "Connections",
- "acl": ["developer"]
}
]
}
diff --git a/modules/account/front/samba/index.html b/modules/account/front/samba/index.html
deleted file mode 100644
index 0186cac7c..000000000
--- a/modules/account/front/samba/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
diff --git a/modules/account/front/samba/index.js b/modules/account/front/samba/index.js
deleted file mode 100644
index 6a4969893..000000000
--- a/modules/account/front/samba/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- onTestConection() {
- this.$http.get(`SambaConfigs/test`)
- .then(() => this.vnApp.showSuccess(this.$t('Samba connection established!')));
- }
-}
-
-ngModule.component('vnAccountSamba', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/account/front/samba/locale/es.yml b/modules/account/front/samba/locale/es.yml
deleted file mode 100644
index efa3b1597..000000000
--- a/modules/account/front/samba/locale/es.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-Enable synchronization: Habilitar sincronización
-Domain controller: Controlador de dominio
-AD domain: Dominio AD
-AD user: Usuario AD
-AD password: Contraseña AD
-User DN (without domain part): DN usuarios (sin la parte del dominio)
-Verify certificate: Verificar certificado
-Test connection: Probar conexión
-Samba connection established!: ¡Conexión con Samba establecida!
diff --git a/modules/account/front/search-panel/index.html b/modules/account/front/search-panel/index.html
deleted file mode 100644
index a539d9657..000000000
--- a/modules/account/front/search-panel/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
diff --git a/modules/account/front/search-panel/index.js b/modules/account/front/search-panel/index.js
deleted file mode 100644
index fff3bf7b9..000000000
--- a/modules/account/front/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.component('vnUserSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/account/front/summary/index.html b/modules/account/front/summary/index.html
index 41632aef6..f3c11f25f 100644
--- a/modules/account/front/summary/index.html
+++ b/modules/account/front/summary/index.html
@@ -1,6 +1,6 @@
\ No newline at end of file
+
diff --git a/modules/account/front/user-log/index.html b/modules/account/front/user-log/index.html
deleted file mode 100644
index 5a77ed7b9..000000000
--- a/modules/account/front/user-log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/modules/account/front/user-log/index.js b/modules/account/front/user-log/index.js
deleted file mode 100644
index 7cd0bb378..000000000
--- a/modules/account/front/user-log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnUserLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/claim/back/methods/claim/updateClaim.js b/modules/claim/back/methods/claim/updateClaim.js
index 326192385..10d304496 100644
--- a/modules/claim/back/methods/claim/updateClaim.js
+++ b/modules/claim/back/methods/claim/updateClaim.js
@@ -108,7 +108,7 @@ module.exports = Self => {
async function notifyStateChange(ctx, workerId, claim, newState) {
const models = Self.app.models;
- const url = await models.Url.getUrl();
+ const url = await models.Url.getUrl('lilium');
const $t = ctx.req.__;
const message = $t(`Claim state has changed to`, {
@@ -122,7 +122,7 @@ module.exports = Self => {
async function notifyPickUp(ctx, workerId, claim) {
const models = Self.app.models;
- const url = await models.Url.getUrl();
+ const url = await models.Url.getUrl('lilium');
const $t = ctx.req.__; // $translate
const message = $t('Claim will be picked', {
diff --git a/modules/claim/front/action/index.html b/modules/claim/front/action/index.html
deleted file mode 100644
index 9da51b8de..000000000
--- a/modules/claim/front/action/index.html
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- |
- Id |
- Ticket |
-
- Destination
- |
-
- Landed
- |
-
- Quantity
- |
-
- Description
- |
-
- Price
- |
-
- Disc.
- |
- Total |
-
-
-
-
-
-
-
- |
-
-
- {{::saleClaimed.itemFk}}
-
- |
-
-
- {{::saleClaimed.ticketFk}}
-
- |
-
-
-
- |
- {{::saleClaimed.landed | date: 'dd/MM/yyyy'}} |
- {{::saleClaimed.quantity}} |
- {{::saleClaimed.concept}} |
- {{::saleClaimed.price | currency: 'EUR':2}} |
- {{::saleClaimed.discount}} % |
- {{saleClaimed.total | currency: 'EUR':2}} |
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.$t('Change destination to all selected rows', {total: $ctrl.checked.length})}}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/claim/front/action/index.js b/modules/claim/front/action/index.js
deleted file mode 100644
index 10b629f27..000000000
--- a/modules/claim/front/action/index.js
+++ /dev/null
@@ -1,233 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.newDestination;
- this.filter = {
- include: [
- {relation: 'sale',
- scope: {
- fields: ['concept', 'ticketFk', 'price', 'quantity', 'discount', 'itemFk'],
- include: {
- relation: 'ticket'
- }
- }
- },
- {relation: 'claimBeggining'},
- {relation: 'claimDestination'}
- ]
- };
- this.getResolvedState();
- this.maxResponsibility = 5;
- this.smartTableOptions = {
- activeButtons: {
- search: true
- },
- columns: [
- {
- field: 'claimDestinationFk',
- autocomplete: {
- url: 'ClaimDestinations',
- showField: 'description',
- valueField: 'id'
- }
- },
- {
- field: 'landed',
- searchable: false
- }
- ]
- };
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'itemFk':
- case 'ticketFk':
- case 'claimDestinationFk':
- case 'quantity':
- case 'price':
- case 'discount':
- case 'total':
- return {[param]: value};
- case 'concept':
- return {[param]: {like: `%${value}%`}};
- case 'landed':
- return {[param]: {between: this.dateRange(value)}};
- }
- }
-
- dateRange(value) {
- const minHour = new Date(value);
- minHour.setHours(0, 0, 0, 0);
- const maxHour = new Date(value);
- maxHour.setHours(23, 59, 59, 59);
-
- return [minHour, maxHour];
- }
-
- get checked() {
- const salesClaimed = this.$.model.data || [];
-
- const checkedSalesClaimed = [];
- for (let saleClaimed of salesClaimed) {
- if (saleClaimed.$checked)
- checkedSalesClaimed.push(saleClaimed);
- }
-
- return checkedSalesClaimed;
- }
-
- updateDestination(saleClaimed, claimDestinationFk) {
- const data = {rows: [saleClaimed], claimDestinationFk: claimDestinationFk};
- this.$http.post(`Claims/updateClaimDestination`, data).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- }).catch(e => {
- this.$.model.refresh();
- throw e;
- });
- }
-
- removeSales(saleClaimed) {
- const params = {sales: [saleClaimed]};
- this.$http.post(`ClaimEnds/deleteClamedSales`, params).then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- getResolvedState() {
- const query = `ClaimStates/findOne`;
- const params = {
- filter: {
- where: {
- code: 'resolved'
- }
- }
- };
- this.$http.get(query, params).then(res =>
- this.resolvedStateId = res.data.id
- );
- }
-
- importToNewRefundTicket() {
- let query = `ClaimBeginnings/${this.$params.id}/importToNewRefundTicket`;
- return this.$http.post(query).then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- focusLastInput() {
- let inputs = document.querySelectorAll('#claimDestinationFk');
- inputs[inputs.length - 1].querySelector('input').focus();
- this.calculateTotals();
- }
-
- calculateTotals() {
- this.claimedTotal = 0;
- this.salesClaimed.forEach(sale => {
- const price = sale.quantity * sale.price;
- const discount = (sale.discount * (sale.quantity * sale.price)) / 100;
- this.claimedTotal += price - discount;
- });
- }
-
- regularize() {
- const query = `Claims/${this.$params.id}/regularizeClaim`;
- return this.$http.post(query).then(() => {
- if (this.claim.responsibility >= Math.ceil(this.maxResponsibility) / 2)
- this.$.updateGreuge.show();
- else
- this.vnApp.showSuccess(this.$t('Data saved!'));
-
- this.card.reload();
- });
- }
-
- getGreugeTypeId() {
- const params = {filter: {where: {code: 'freightPickUp'}}};
- const query = `GreugeTypes/findOne`;
- return this.$http.get(query, {params}).then(res => {
- this.greugeTypeFreightId = res.data.id;
-
- return res;
- });
- }
-
- getGreugeConfig() {
- const query = `GreugeConfigs/findOne`;
- return this.$http.get(query).then(res => {
- this.freightPickUpPrice = res.data.freightPickUpPrice;
-
- return res;
- });
- }
-
- onUpdateGreugeAccept() {
- const promises = [];
- promises.push(this.getGreugeTypeId());
- promises.push(this.getGreugeConfig());
-
- return Promise.all(promises).then(() => {
- return this.updateGreuge({
- clientFk: this.claim.clientFk,
- description: this.$t('ClaimGreugeDescription', {
- claimId: this.claim.id
- }).toUpperCase(),
- amount: this.freightPickUpPrice,
- greugeTypeFk: this.greugeTypeFreightId,
- ticketFk: this.claim.ticketFk
- });
- });
- }
-
- updateGreuge(data) {
- return this.$http.post(`Greuges`, data).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.vnApp.showMessage(this.$t('Greuge added'));
- });
- }
-
- save(data) {
- const query = `Claims/${this.$params.id}/updateClaimAction`;
- this.$http.patch(query, data)
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')));
- }
-
- onSave() {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- }
-
- onResponse() {
- const rowsToEdit = [];
- for (let row of this.checked)
- rowsToEdit.push({id: row.id});
-
- const data = {
- rows: rowsToEdit,
- claimDestinationFk: this.newDestination
- };
-
- const query = `Claims/updateClaimDestination`;
- this.$http.post(query, data)
- .then(() => {
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-}
-
-ngModule.vnComponent('vnClaimAction', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- claim: '<'
- },
- require: {
- card: '^vnClaimCard'
- }
-});
diff --git a/modules/claim/front/action/index.spec.js b/modules/claim/front/action/index.spec.js
deleted file mode 100644
index e773511bf..000000000
--- a/modules/claim/front/action/index.spec.js
+++ /dev/null
@@ -1,167 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('claim', () => {
- describe('Component vnClaimAction', () => {
- let controller;
- let $httpBackend;
- let $state;
-
- beforeEach(ngModule('claim'));
-
- beforeEach(inject(($componentController, _$state_, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $state = _$state_;
- $state.params.id = 1;
-
- controller = $componentController('vnClaimAction', {$element: null});
- controller.claim = {ticketFk: 1};
- controller.$.model = {refresh: () => {}};
- controller.$.addSales = {
- hide: () => {},
- show: () => {}
- };
- controller.$.lastTicketsModel = crudModel;
- controller.$.lastTicketsPopover = {
- hide: () => {},
- show: () => {}
- };
- controller.card = {reload: () => {}};
- $httpBackend.expectGET(`ClaimStates/findOne`).respond({});
- }));
-
- describe('getResolvedState()', () => {
- it('should return the resolved state id', () => {
- $httpBackend.expectGET(`ClaimStates/findOne`).respond({id: 1});
- controller.getResolvedState();
- $httpBackend.flush();
-
- expect(controller.resolvedStateId).toEqual(1);
- });
- });
-
- describe('calculateTotals()', () => {
- it('should calculate the total price of the items claimed', () => {
- controller.salesClaimed = [
- {quantity: 5, price: 2, discount: 0},
- {quantity: 10, price: 2, discount: 0},
- {quantity: 10, price: 2, discount: 0}
- ];
- controller.calculateTotals();
-
- expect(controller.claimedTotal).toEqual(50);
- });
- });
-
- describe('importToNewRefundTicket()', () => {
- it('should perform a post query and add lines from a new ticket', () => {
- jest.spyOn(controller.$.model, 'refresh');
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- $httpBackend.expect('POST', `ClaimBeginnings/1/importToNewRefundTicket`).respond({});
- controller.importToNewRefundTicket();
- $httpBackend.flush();
-
- expect(controller.$.model.refresh).toHaveBeenCalled();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('regularize()', () => {
- it('should perform a post query and reload the claim card', () => {
- jest.spyOn(controller.card, 'reload');
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- $httpBackend.expect('POST', `Claims/1/regularizeClaim`).respond({});
- controller.regularize();
- $httpBackend.flush();
-
- expect(controller.card.reload).toHaveBeenCalledWith();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('save()', () => {
- it('should perform a patch query and show a success message', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const data = {pickup: 'agency'};
- $httpBackend.expect('PATCH', `Claims/1/updateClaimAction`, data).respond({});
- controller.save(data);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('onUpdateGreugeAccept()', () => {
- const greugeTypeId = 7;
- const freightPickUpPrice = 11;
-
- it('should make a query and get the greugeTypeId and greuge config', () => {
- $httpBackend.expectRoute('GET', `GreugeTypes/findOne`).respond({id: greugeTypeId});
- $httpBackend.expectGET(`GreugeConfigs/findOne`).respond({freightPickUpPrice});
- controller.onUpdateGreugeAccept();
- $httpBackend.flush();
-
- expect(controller.greugeTypeFreightId).toEqual(greugeTypeId);
- expect(controller.freightPickUpPrice).toEqual(freightPickUpPrice);
- });
-
- it('should perform a insert into greuges', done => {
- jest.spyOn(controller, 'getGreugeTypeId').mockReturnValue(new Promise(resolve => {
- return resolve({id: greugeTypeId});
- }));
- jest.spyOn(controller, 'getGreugeConfig').mockReturnValue(new Promise(resolve => {
- return resolve({freightPickUpPrice});
- }));
- jest.spyOn(controller, 'updateGreuge').mockReturnValue(new Promise(resolve => {
- return resolve(true);
- }));
-
- controller.claim.clientFk = 1101;
- controller.claim.id = 11;
-
- controller.onUpdateGreugeAccept().then(() => {
- expect(controller.updateGreuge).toHaveBeenCalledWith(jasmine.any(Object));
- done();
- }).catch(done.fail);
- });
- });
-
- describe('updateGreuge()', () => {
- it('should make a query and then call to showSuccess() and showMessage() methods', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.vnApp, 'showMessage');
-
- const freightPickUpPrice = 11;
- const greugeTypeId = 7;
- const expectedData = {
- clientFk: 1101,
- description: `claim: ${controller.claim.id}`,
- amount: freightPickUpPrice,
- greugeTypeFk: greugeTypeId,
- ticketFk: controller.claim.ticketFk
- };
- $httpBackend.expect('POST', `Greuges`, expectedData).respond(200);
- controller.updateGreuge(expectedData);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
- expect(controller.vnApp.showMessage).toHaveBeenCalledWith('Greuge added');
- });
- });
-
- describe('onResponse()', () => {
- it('should perform a post query and show a success message', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- $httpBackend.expect('POST', `Claims/updateClaimDestination`).respond({});
- controller.onResponse();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
- });
-});
diff --git a/modules/claim/front/action/locale/en.yml b/modules/claim/front/action/locale/en.yml
deleted file mode 100644
index faab67c06..000000000
--- a/modules/claim/front/action/locale/en.yml
+++ /dev/null
@@ -1 +0,0 @@
-ClaimGreugeDescription: Claim id {{claimId}}
\ No newline at end of file
diff --git a/modules/claim/front/action/locale/es.yml b/modules/claim/front/action/locale/es.yml
deleted file mode 100644
index 97640d9dc..000000000
--- a/modules/claim/front/action/locale/es.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-Destination: Destino
-Action: Actuaciones
-Total claimed: Total Reclamado
-Import claim: Importar reclamacion
-Imports claim details: Importa detalles de la reclamacion
-Regularize: Regularizar
-Do you want to insert greuges?: Desea insertar greuges?
-Insert greuges on client card: Insertar greuges en la ficha del cliente
-Greuge added: Greuge añadido
-ClaimGreugeDescription: Reclamación id {{claimId}}
-Change destination: Cambiar destino
-Change destination to all selected rows: Cambiar destino a {{total}} fila(s) seleccionada(s)
-Add observation to all selected clients: Añadir observación a {{total}} cliente(s) seleccionado(s)
diff --git a/modules/claim/front/action/style.scss b/modules/claim/front/action/style.scss
deleted file mode 100644
index cda6779c8..000000000
--- a/modules/claim/front/action/style.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-vn-claim-action {
- .header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- align-content: center;
-
- vn-tool-bar {
- flex: none
- }
-
- .vn-check {
- flex: none;
- }
- }
-
- vn-dialog[vn-id=addSales] {
- tpl-body {
- width: 950px;
- div {
- div.buttons {
- display: none;
- }
- vn-table{
- min-width: 950px;
- }
- }
- }
- }
-
- vn-popover.lastTicketsPopover {
- vn-table {
- min-width: 650px;
- overflow: auto
- }
-
- div.ticketList {
- overflow: auto;
- max-height: 350px;
- }
- }
-
- .right {
- margin-left: 370px;
- }
-}
\ No newline at end of file
diff --git a/modules/claim/front/basic-data/index.html b/modules/claim/front/basic-data/index.html
deleted file mode 100644
index 45bc1823d..000000000
--- a/modules/claim/front/basic-data/index.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/claim/front/basic-data/index.js b/modules/claim/front/basic-data/index.js
deleted file mode 100644
index 818012bb9..000000000
--- a/modules/claim/front/basic-data/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- onSubmit() {
- this.$.watcher.submit().then(() => {
- if (this.aclService.hasAny(['claimManager']))
- this.$state.go('claim.card.detail');
- });
- }
-}
-
-ngModule.vnComponent('vnClaimBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- claim: '<'
- }
-});
diff --git a/modules/claim/front/basic-data/index.spec.js b/modules/claim/front/basic-data/index.spec.js
deleted file mode 100644
index 638f88418..000000000
--- a/modules/claim/front/basic-data/index.spec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import './index.js';
-import watcher from 'core/mocks/watcher';
-
-describe('Claim', () => {
- describe('Component vnClaimBasicData', () => {
- let controller;
- let $scope;
-
- beforeEach(ngModule('claim'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- $scope.watcher = watcher;
- const $element = angular.element('');
- controller = $componentController('vnClaimBasicData', {$element, $scope});
- }));
-
- describe('onSubmit()', () => {
- it(`should redirect to 'claim.card.detail' state`, () => {
- jest.spyOn(controller.aclService, 'hasAny').mockReturnValue(true);
- jest.spyOn(controller.$state, 'go');
- controller.onSubmit();
-
- expect(controller.$state.go).toHaveBeenCalledWith('claim.card.detail');
- });
- });
- });
-});
diff --git a/modules/claim/front/basic-data/locale/es.yml b/modules/claim/front/basic-data/locale/es.yml
deleted file mode 100644
index 5250d266c..000000000
--- a/modules/claim/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-Contact: Contacto
-Claim state: Estado de la reclamación
-Is paid with mana: Cargado al maná
-Responsability: Responsabilidad
-Company: Empresa
-Sales/Client: Comercial/Cliente
-Pick up: Recoger
-When checked will notify to the salesPerson: Cuando se marque enviará una notificación de recogida al comercial
-Packages received: Bultos recibidos
diff --git a/modules/claim/front/basic-data/style.scss b/modules/claim/front/basic-data/style.scss
deleted file mode 100644
index e80361ca8..000000000
--- a/modules/claim/front/basic-data/style.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-vn-claim-basic-data vn-date-picker {
- padding-left: 80px;
-}
diff --git a/modules/claim/front/card/index.html b/modules/claim/front/card/index.html
deleted file mode 100644
index 1db6b38db..000000000
--- a/modules/claim/front/card/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/modules/claim/front/card/index.js b/modules/claim/front/card/index.js
deleted file mode 100644
index 5dad0dfc2..000000000
--- a/modules/claim/front/card/index.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import ngModule from '../module';
-import ModuleCard from 'salix/components/module-card';
-
-class Controller extends ModuleCard {
- reload() {
- let filter = {
- include: [
- {
- relation: 'worker',
- scope: {
- fields: ['id'],
- include: {
- relation: 'user',
- scope: {
- fields: ['name']
- }
- }
- }
- }, {
- relation: 'ticket',
- scope: {
- fields: ['zoneFk', 'addressFk'],
- include: [
- {
- relation: 'zone',
- scope: {
- fields: ['name']
- }
- },
- {
- relation: 'address',
- scope: {
- fields: ['provinceFk'],
- include: {
- relation: 'province',
- scope: {
- fields: ['name']
- }
- }
- }
- }]
- }
- }, {
- relation: 'claimState',
- scope: {
- fields: ['id', 'description']
- }
- }, {
- relation: 'client',
- scope: {
- fields: ['salesPersonFk', 'name', 'email'],
- include: {
- relation: 'salesPersonUser'
- }
- }
- }
- ]
- };
-
- this.$http.get(`Claims/${this.$params.id}`, {filter})
- .then(res => this.claim = res.data);
- }
-}
-
-ngModule.vnComponent('vnClaimCard', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/claim/front/card/index.spec.js b/modules/claim/front/card/index.spec.js
deleted file mode 100644
index aa796c1e3..000000000
--- a/modules/claim/front/card/index.spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import './index.js';
-
-describe('Claim', () => {
- describe('Component vnClaimCard', () => {
- let controller;
- let $httpBackend;
- let data = {id: 1, name: 'fooName'};
-
- beforeEach(ngModule('claim'));
-
- beforeEach(inject(($componentController, _$httpBackend_, $stateParams) => {
- $httpBackend = _$httpBackend_;
-
- let $element = angular.element('');
- controller = $componentController('vnClaimCard', {$element});
-
- $stateParams.id = data.id;
- $httpBackend.whenRoute('GET', 'Claims/:id').respond(data);
- }));
-
- it('should request data and set it on the controller', () => {
- controller.reload();
- $httpBackend.flush();
-
- expect(controller.claim).toEqual(data);
- });
- });
-});
-
diff --git a/modules/claim/front/descriptor/index.js b/modules/claim/front/descriptor/index.js
index 5e9ea5140..337233059 100644
--- a/modules/claim/front/descriptor/index.js
+++ b/modules/claim/front/descriptor/index.js
@@ -29,9 +29,9 @@ class Controller extends Descriptor {
deleteClaim() {
return this.$http.delete(`Claims/${this.claim.id}`)
- .then(() => {
+ .then(async() => {
this.vnApp.showSuccess(this.$t('Claim deleted!'));
- this.$state.go('claim.index');
+ window.location.href = await this.vnApp.getUrl(`claim/`);
});
}
}
diff --git a/modules/claim/front/descriptor/index.spec.js b/modules/claim/front/descriptor/index.spec.js
index e6785d3d8..03710b479 100644
--- a/modules/claim/front/descriptor/index.spec.js
+++ b/modules/claim/front/descriptor/index.spec.js
@@ -53,14 +53,12 @@ describe('Item Component vnClaimDescriptor', () => {
describe('deleteClaim()', () => {
it('should perform a query and call showSuccess if the response is accept', () => {
jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$state, 'go');
$httpBackend.expectDELETE(`Claims/${claim.id}`).respond();
controller.deleteClaim();
$httpBackend.flush();
expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$state.go).toHaveBeenCalledWith('claim.index');
});
});
});
diff --git a/modules/claim/front/detail/index.html b/modules/claim/front/detail/index.html
deleted file mode 100644
index a2a08a5db..000000000
--- a/modules/claim/front/detail/index.html
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- Landed
- Quantity
- Claimed
- Description
- Price
- Disc.
- Total
-
-
-
-
-
- {{::saleClaimed.sale.ticket.landed | date:'dd/MM/yyyy'}}
- {{::saleClaimed.sale.quantity}}
-
-
-
-
-
-
- {{::saleClaimed.sale.concept}}
-
-
- {{::saleClaimed.sale.price | currency: 'EUR':2}}
-
-
- {{saleClaimed.sale.discount}} %
-
-
-
- {{$ctrl.getSaleTotal(saleClaimed.sale) | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Claimable sales from ticket {{$ctrl.claim.ticketFk}}
-
-
-
-
-
-
- Landed
- Quantity
- Description
- Price
- Disc.
- Total
-
-
-
-
- {{sale.landed | date: 'dd/MM/yyyy'}}
- {{sale.quantity}}
-
-
- {{sale.itemFk}} - {{sale.concept}}
-
-
- {{sale.price | currency: 'EUR':2}}
- {{sale.discount}} %
-
- {{(sale.quantity * sale.price) - ((sale.discount * (sale.quantity * sale.price))/100) | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Total claimed price
-
{{$ctrl.newPrice | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/claim/front/detail/index.js b/modules/claim/front/detail/index.js
deleted file mode 100644
index 56f39e074..000000000
--- a/modules/claim/front/detail/index.js
+++ /dev/null
@@ -1,203 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.edit = {};
- this.filter = {
- where: {claimFk: this.$params.id},
- include: [
- {
- relation: 'sale',
- scope: {
- fields: ['concept', 'ticketFk', 'price', 'quantity', 'discount', 'itemFk'],
- include: {
- relation: 'ticket'
- }
- }
- }
- ]
- };
- }
-
- get claim() {
- return this._claim;
- }
-
- set claim(value) {
- this._claim = value;
-
- if (value) {
- this.isClaimEditable();
- this.isTicketEditable();
- }
- }
-
- set salesClaimed(value) {
- this._salesClaimed = value;
-
- if (value) this.calculateTotals();
- }
-
- get salesClaimed() {
- return this._salesClaimed;
- }
-
- get newDiscount() {
- return this._newDiscount;
- }
-
- set newDiscount(value) {
- this._newDiscount = value;
- this.updateNewPrice();
- }
-
- get isClaimManager() {
- return this.aclService.hasAny(['claimManager']);
- }
-
- openAddSalesDialog() {
- this.getClaimableFromTicket();
- this.$.addSales.show();
- }
-
- getClaimableFromTicket() {
- let config = {params: {ticketFk: this.claim.ticketFk}};
- let query = `Sales/getClaimableFromTicket`;
- this.$http.get(query, config).then(res => {
- if (res.data)
- this.salesToClaim = res.data;
- });
- }
-
- addClaimedSale(index) {
- let sale = this.salesToClaim[index];
- let saleToAdd = {saleFk: sale.saleFk, claimFk: this.claim.id, quantity: sale.quantity};
- let query = `ClaimBeginnings/`;
- this.$http.post(query, saleToAdd).then(() => {
- this.$.addSales.hide();
- this.$.model.refresh();
- this.vnApp.showSuccess(this.$t('Data saved!'));
-
- if (this.aclService.hasAny(['claimManager']))
- this.$state.go('claim.card.development');
- });
- }
-
- showDeleteConfirm($index) {
- this.claimedIndex = $index;
- this.$.confirm.show();
- }
-
- deleteClaimedSale() {
- this.$.model.remove(this.claimedIndex);
- this.$.model.save().then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.calculateTotals();
- });
- }
-
- setClaimedQuantity(id, claimedQuantity) {
- let params = {quantity: claimedQuantity};
- let query = `ClaimBeginnings/${id}`;
- this.$http.patch(query, params).then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.calculateTotals();
- });
- }
-
- calculateTotals() {
- this.paidTotal = 0.0;
- this.claimedTotal = 0.0;
- if (!this._salesClaimed) return;
-
- this._salesClaimed.forEach(sale => {
- let orgSale = sale.sale;
- this.paidTotal += this.getSaleTotal(orgSale);
-
- const price = sale.quantity * orgSale.price;
- const discount = ((orgSale.discount * price) / 100);
-
- this.claimedTotal += price - discount;
- });
- }
-
- getSaleTotal(sale) {
- let total = 0.0;
-
- const price = sale.quantity * sale.price;
- const discount = ((sale.discount * price) / 100);
-
- total += price - discount;
- return total;
- }
-
- getSalespersonMana() {
- this.$http.get(`Tickets/${this.claim.ticketFk}/getSalesPersonMana`).then(res => {
- this.mana = res.data;
- });
- }
-
- isTicketEditable() {
- if (!this.claim) return;
-
- this.$http.get(`Tickets/${this.claim.ticketFk}/isEditable`).then(res => {
- this.isEditable = res.data;
- });
- }
-
- isClaimEditable() {
- if (!this.claim) return;
-
- this.$http.get(`ClaimStates/${this.claim.claimStateFk}/isEditable`).then(res => {
- this.isRewritable = res.data;
- });
- }
-
- showEditPopover(event, saleClaimed) {
- if (this.aclService.hasAny(['claimManager'])) {
- this.saleClaimed = saleClaimed;
- this.$.editPopover.parent = event.target;
- this.$.editPopover.show();
- }
- }
-
- updateDiscount() {
- const claimedSale = this.saleClaimed.sale;
- if (this.newDiscount != claimedSale.discount) {
- const params = {salesIds: [claimedSale.id], newDiscount: this.newDiscount};
- const query = `Tickets/${claimedSale.ticketFk}/updateDiscount`;
-
- this.$http.post(query, params).then(() => {
- claimedSale.discount = this.newDiscount;
- this.calculateTotals();
- this.clearDiscount();
-
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- this.$.editPopover.hide();
- }
-
- updateNewPrice() {
- this.newPrice = (this.saleClaimed.quantity * this.saleClaimed.sale.price) -
- ((this.newDiscount * (this.saleClaimed.quantity * this.saleClaimed.sale.price)) / 100);
- }
-
- clearDiscount() {
- this.newDiscount = null;
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnClaimDetail', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- claim: '<'
- }
-});
diff --git a/modules/claim/front/detail/index.spec.js b/modules/claim/front/detail/index.spec.js
deleted file mode 100644
index 1ef779fd7..000000000
--- a/modules/claim/front/detail/index.spec.js
+++ /dev/null
@@ -1,150 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('claim', () => {
- describe('Component vnClaimDetail', () => {
- let $scope;
- let controller;
- let $httpBackend;
-
- beforeEach(ngModule('claim'));
-
- beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => {
- $scope = $rootScope.$new();
- $scope.descriptor = {
- show: () => {}
- };
- $httpBackend = _$httpBackend_;
- $httpBackend.whenGET('Claims/ClaimBeginnings').respond({});
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond(true);
- $httpBackend.whenGET(`ClaimStates/2/isEditable`).respond(true);
- const $element = angular.element('');
- controller = $componentController('vnClaimDetail', {$element, $scope});
- controller.claim = {
- ticketFk: 1,
- id: 2,
- claimStateFk: 2}
- ;
- controller.salesToClaim = [{saleFk: 1}, {saleFk: 2}];
- controller.salesClaimed = [{id: 1, sale: {}}];
- controller.$.model = crudModel;
- controller.$.addSales = {
- hide: () => {},
- show: () => {}
- };
- controller.$.editPopover = {
- hide: () => {}
- };
- jest.spyOn(controller.aclService, 'hasAny').mockReturnValue(true);
- }));
-
- describe('openAddSalesDialog()', () => {
- it('should call getClaimableFromTicket and $.addSales.show', () => {
- jest.spyOn(controller, 'getClaimableFromTicket');
- jest.spyOn(controller.$.addSales, 'show');
- controller.openAddSalesDialog();
-
- expect(controller.getClaimableFromTicket).toHaveBeenCalledWith();
- expect(controller.$.addSales.show).toHaveBeenCalledWith();
- });
- });
-
- describe('getClaimableFromTicket()', () => {
- it('should make a query and set salesToClaim', () => {
- $httpBackend.expectGET(`Sales/getClaimableFromTicket?ticketFk=1`).respond(200, 1);
- controller.getClaimableFromTicket();
- $httpBackend.flush();
-
- expect(controller.salesToClaim).toEqual(1);
- });
- });
-
- describe('addClaimedSale(index)', () => {
- it('should make a post and call refresh, hide and showSuccess', () => {
- jest.spyOn(controller.$.addSales, 'hide');
- jest.spyOn(controller.$state, 'go');
- $httpBackend.expectPOST(`ClaimBeginnings/`).respond({});
- controller.addClaimedSale(1);
- $httpBackend.flush();
-
- expect(controller.$.addSales.hide).toHaveBeenCalledWith();
- expect(controller.$state.go).toHaveBeenCalledWith('claim.card.development');
- });
- });
-
- describe('deleteClaimedSale()', () => {
- it('should make a delete and call refresh and showSuccess', () => {
- const claimedIndex = 1;
- controller.claimedIndex = claimedIndex;
- jest.spyOn(controller.$.model, 'remove');
- jest.spyOn(controller.$.model, 'save');
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.deleteClaimedSale();
-
- expect(controller.$.model.remove).toHaveBeenCalledWith(claimedIndex);
- expect(controller.$.model.save).toHaveBeenCalledWith();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('setClaimedQuantity(id, claimedQuantity)', () => {
- it('should make a patch and call refresh and showSuccess', () => {
- const id = 1;
- const claimedQuantity = 1;
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- $httpBackend.expectPATCH(`ClaimBeginnings/${id}`).respond({});
- controller.setClaimedQuantity(id, claimedQuantity);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('calculateTotals()', () => {
- it('should set paidTotal and claimedTotal to 0 if salesClaimed has no data', () => {
- controller.salesClaimed = [];
- controller.calculateTotals();
-
- expect(controller.paidTotal).toEqual(0);
- expect(controller.claimedTotal).toEqual(0);
- });
- });
-
- describe('updateDiscount()', () => {
- it('should perform a query if the new discount differs from the claim discount', () => {
- controller.saleClaimed = {sale: {
- discount: 5,
- id: 7,
- ticketFk: 1,
- price: 2,
- quantity: 10}};
- controller.newDiscount = 10;
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller, 'calculateTotals');
- jest.spyOn(controller, 'clearDiscount');
- jest.spyOn(controller.$.editPopover, 'hide');
-
- $httpBackend.when('POST', 'Tickets/1/updateDiscount').respond({});
- controller.updateDiscount();
- $httpBackend.flush();
-
- expect(controller.calculateTotals).toHaveBeenCalledWith();
- expect(controller.clearDiscount).toHaveBeenCalledWith();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- expect(controller.$.editPopover.hide).toHaveBeenCalledWith();
- });
- });
-
- describe('isTicketEditable()', () => {
- it('should check if the ticket assigned to the claim is editable', () => {
- controller.isTicketEditable();
- $httpBackend.flush();
-
- expect(controller.isEditable).toBeTruthy();
- });
- });
- });
-});
diff --git a/modules/claim/front/detail/locale/es.yml b/modules/claim/front/detail/locale/es.yml
deleted file mode 100644
index 53f9e9b1d..000000000
--- a/modules/claim/front/detail/locale/es.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-Claimed: Reclamados
-Disc.: Dto.
-Attended by: Atendida por
-Landed: F. entrega
-Price: Precio
-Claimable sales from ticket: Lineas reclamables del ticket
-Detail: Detalles
-Add sale item: Añadir artículo
-Insuficient permisos: Permisos insuficientes
-Total claimed price: Precio total reclamado
-Delete sale from claim?: ¿Borrar la linea de la reclamación?
\ No newline at end of file
diff --git a/modules/claim/front/detail/style.scss b/modules/claim/front/detail/style.scss
deleted file mode 100644
index 470c83034..000000000
--- a/modules/claim/front/detail/style.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-@import "variables";
-
-.vn-popover .discount-popover {
- width: 256px;
-
- .header {
- background-color: $color-main;
- color: $color-font-dark;
-
- h5 {
- color: inherit;
- margin: 0 auto;
- }
- }
- .simulatorTitle {
- margin-bottom: 0;
- font-size: .75rem;
- color: $color-main;
- }
- vn-label-value {
- padding-bottom: 20px;
- }
- .simulator{
- text-align: center;
- }
-}
-
-.next{
- float: right;
-}
diff --git a/modules/claim/front/development/index.html b/modules/claim/front/development/index.html
deleted file mode 100644
index 7fb3b870e..000000000
--- a/modules/claim/front/development/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/modules/claim/front/development/index.js b/modules/claim/front/development/index.js
deleted file mode 100644
index 7b31bd17f..000000000
--- a/modules/claim/front/development/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- }
-
- async $onInit() {
- this.$state.go('claim.card.summary', {id: this.$params.id});
- window.location.href = await this.vnApp.getUrl(`claim/${this.$params.id}/development`);
- }
-}
-
-ngModule.vnComponent('vnClaimDevelopment', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- claim: '<'
- }
-});
diff --git a/modules/claim/front/index.js b/modules/claim/front/index.js
index 473f6a4d3..16397df28 100644
--- a/modules/claim/front/index.js
+++ b/modules/claim/front/index.js
@@ -1,16 +1,4 @@
export * from './module';
import './main';
-import './index/';
-import './action';
-import './basic-data';
-import './card';
-import './detail';
import './descriptor';
-import './development';
-import './search-panel';
-import './summary';
-import './photos';
-import './log';
-import './note/index';
-import './note/create';
diff --git a/modules/claim/front/index/index.html b/modules/claim/front/index/index.html
deleted file mode 100644
index 6b2481429..000000000
--- a/modules/claim/front/index/index.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
- Id
- |
-
- Client
- |
-
- Created
- |
-
- Worker
- |
-
- State
- |
- |
-
-
-
-
- {{::claim.id}} |
-
-
- {{::claim.clientName}}
-
- |
- {{::claim.created | date:'dd/MM/yyyy'}} |
-
-
- {{::claim.workerName}}
-
- |
-
-
- {{::claim.stateDescription}}
-
- |
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/claim/front/index/index.js b/modules/claim/front/index/index.js
deleted file mode 100644
index e3fdabf79..000000000
--- a/modules/claim/front/index/index.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
-
- this.smartTableOptions = {
- activeButtons: {
- search: true
- },
- columns: [
- {
- field: 'clientName',
- autocomplete: {
- url: 'Clients',
- showField: 'name',
- valueField: 'name'
- }
- },
- {
- field: 'workerFk',
- autocomplete: {
- url: 'Workers/activeWithInheritedRole',
- where: `{role: 'salesPerson'}`,
- searchFunction: '{firstName: $search}',
- showField: 'name',
- valueField: 'id',
- }
- },
- {
- field: 'claimStateFk',
- autocomplete: {
- url: 'ClaimStates',
- showField: 'description',
- valueField: 'id',
- }
- },
- {
- field: 'created',
- searchable: false
- }
- ]
- };
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'clientName':
- return {'cl.clientName': {like: `%${value}%`}};
- case 'clientFk':
- case 'claimStateFk':
- case 'workerFk':
- return {[`cl.${param}`]: value};
- }
- }
-
- stateColor(code) {
- switch (code) {
- case 'pending':
- return 'warning';
- case 'managed':
- return 'notice';
- case 'resolved':
- return 'success';
- }
- }
-
- preview(claim) {
- this.claimSelected = claim;
- this.$.summary.show();
- }
-
- reload() {
- this.$.model.refresh();
- }
-}
-
-ngModule.vnComponent('vnClaimIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/claim/front/log/index.html b/modules/claim/front/log/index.html
deleted file mode 100644
index 500a626d6..000000000
--- a/modules/claim/front/log/index.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
\ No newline at end of file
diff --git a/modules/claim/front/log/index.js b/modules/claim/front/log/index.js
deleted file mode 100644
index 0143a612b..000000000
--- a/modules/claim/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnClaimLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/claim/front/main/index.html b/modules/claim/front/main/index.html
index f38cc573f..e69de29bb 100644
--- a/modules/claim/front/main/index.html
+++ b/modules/claim/front/main/index.html
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/claim/front/main/index.js b/modules/claim/front/main/index.js
index 0c5c7d728..cbbbe0c7e 100644
--- a/modules/claim/front/main/index.js
+++ b/modules/claim/front/main/index.js
@@ -1,7 +1,18 @@
import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
+export default class Claim extends ModuleMain {
+ constructor($element, $) {
+ super($element, $);
+ }
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`Claim/`);
+ }
+}
+
ngModule.vnComponent('vnClaim', {
- controller: ModuleMain,
+ controller: Claim,
template: require('./index.html')
});
+
diff --git a/modules/claim/front/note/create/index.html b/modules/claim/front/note/create/index.html
deleted file mode 100644
index 8a882a4f5..000000000
--- a/modules/claim/front/note/create/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
diff --git a/modules/claim/front/note/create/index.js b/modules/claim/front/note/create/index.js
deleted file mode 100644
index 40ae9309b..000000000
--- a/modules/claim/front/note/create/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.note = {
- claimFk: parseInt(this.$params.id),
- workerFk: window.localStorage.currentUserWorkerId,
- text: null
- };
- }
-
- cancel() {
- this.$state.go('claim.card.note.index', {id: this.$params.id});
- }
-}
-
-ngModule.vnComponent('vnClaimNoteCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/claim/front/note/index/index.html b/modules/claim/front/note/index/index.html
deleted file mode 100644
index 8ffe19c2b..000000000
--- a/modules/claim/front/note/index/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
- {{::note.worker.firstName}} {{::note.worker.lastName}}
- {{::note.created | date:'dd/MM/yyyy HH:mm'}}
-
-
- {{::note.text}}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/claim/front/note/index/index.js b/modules/claim/front/note/index/index.js
deleted file mode 100644
index 5a2fd96d3..000000000
--- a/modules/claim/front/note/index/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.filter = {
- order: 'created DESC',
- };
- this.include = {
- relation: 'worker',
- scope: {
- fields: ['id', 'firstName', 'lastName']
- }
- };
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnClaimNote', {
- template: require('./index.html'),
- controller: Controller,
-});
diff --git a/modules/claim/front/note/index/style.scss b/modules/claim/front/note/index/style.scss
deleted file mode 100644
index 44ae2cee7..000000000
--- a/modules/claim/front/note/index/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-vn-client-note {
- .note:last-child {
- margin-bottom: 0;
- }
-}
\ No newline at end of file
diff --git a/modules/claim/front/photos/index.html b/modules/claim/front/photos/index.html
deleted file mode 100644
index 8b1378917..000000000
--- a/modules/claim/front/photos/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/modules/claim/front/photos/index.js b/modules/claim/front/photos/index.js
deleted file mode 100644
index c9fada9a4..000000000
--- a/modules/claim/front/photos/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- }
-
- async $onInit() {
- const url = await this.vnApp.getUrl(`claim/${this.$params.id}/photos`);
- window.location.href = url;
- }
-}
-
-ngModule.vnComponent('vnClaimPhotos', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- claim: '<'
- }
-});
diff --git a/modules/claim/front/search-panel/index.html b/modules/claim/front/search-panel/index.html
deleted file mode 100644
index 260f86801..000000000
--- a/modules/claim/front/search-panel/index.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
diff --git a/modules/claim/front/search-panel/index.js b/modules/claim/front/search-panel/index.js
deleted file mode 100644
index 2400b8ede..000000000
--- a/modules/claim/front/search-panel/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-class Controller extends SearchPanel {
- itemSearchFunc($search) {
- return /^\d+$/.test($search)
- ? {id: $search}
- : {name: {like: '%' + $search + '%'}};
- }
-}
-ngModule.vnComponent('vnClaimSearchPanel', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/claim/front/search-panel/locale/es.yml b/modules/claim/front/search-panel/locale/es.yml
deleted file mode 100644
index 1f892a742..000000000
--- a/modules/claim/front/search-panel/locale/es.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-Ticket id: Id ticket
-Client id: Id cliente
-Nickname: Alias
-From: Desde
-To: Hasta
-Agency: Agencia
-Warehouse: Almacén
\ No newline at end of file
diff --git a/modules/claim/front/summary/index.html b/modules/claim/front/summary/index.html
deleted file mode 100644
index b5225e6f4..000000000
--- a/modules/claim/front/summary/index.html
+++ /dev/null
@@ -1,273 +0,0 @@
-
-
-
-
-
-
-
- {{::$ctrl.summary.claim.id}} - {{::$ctrl.summary.claim.client.name}}
-
-
-
-
-
-
-
- Basic data
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Observations
-
-
-
- Observations
-
-
-
- {{::note.worker.firstName}} {{::note.worker.lastName}}
- {{::note.created | date:'dd/MM/yyyy HH:mm'}}
-
-
- {{::note.text}}
-
-
-
-
-
-
- Detail
-
-
-
- Detail
-
-
-
-
-
- Item
- Landed
- Quantity
- Claimed
- Description
- Price
- Disc.
- Total
-
-
-
-
-
-
- {{::saleClaimed.sale.itemFk}}
-
-
- {{::saleClaimed.sale.ticket.landed | date: 'dd/MM/yyyy'}}
- {{::saleClaimed.sale.quantity}}
- {{::saleClaimed.quantity}}
- {{::saleClaimed.sale.concept}}
- {{::saleClaimed.sale.price | currency: 'EUR':2}}
- {{::saleClaimed.sale.discount}} %
-
- {{saleClaimed.sale.quantity * saleClaimed.sale.price *
- ((100 - saleClaimed.sale.discount) / 100) | currency: 'EUR':2}}
-
-
-
-
-
-
-
- Photos
-
-
-
-
-
-
-
- Development
-
-
-
- Development
-
-
-
-
-
- Reason
- Result
- Responsible
- Worker
- Redelivery
-
-
-
-
- {{::development.claimReason.description}}
- {{::development.claimResult.description}}
- {{::development.claimResponsible.description}}
-
-
- {{::development.worker.user.nickname}}
-
-
- {{::development.claimRedelivery.description}}
-
-
-
-
-
-
-
-
- Action
-
-
-
- Action
-
-
-
-
-
-
-
-
-
-
-
- Item
- Ticket
- Destination
- Landed
- Quantity
- Description
- Price
- Disc.
- Total
-
-
-
-
-
-
- {{::action.sale.itemFk}}
-
-
-
-
- {{::action.sale.ticket.id}}
-
-
- {{::action.claimBeggining.description}}
- {{::action.sale.ticket.landed | date: 'dd/MM/yyyy'}}
- {{::action.sale.quantity}}
- {{::action.sale.concept}}
- {{::action.sale.price}}
- {{::action.sale.discount}} %
-
- {{action.sale.quantity * action.sale.price *
- ((100 - action.sale.discount) / 100) | currency: 'EUR':2}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/claim/front/summary/index.js b/modules/claim/front/summary/index.js
deleted file mode 100644
index 7cd4805e9..000000000
--- a/modules/claim/front/summary/index.js
+++ /dev/null
@@ -1,103 +0,0 @@
-import ngModule from '../module';
-import Summary from 'salix/components/summary';
-import './style.scss';
-
-class Controller extends Summary {
- constructor($element, $, vnFile) {
- super($element, $);
- this.vnFile = vnFile;
- this.filter = {
- include: [
- {
- relation: 'dms'
- }
- ]
- };
- }
-
- $onChanges() {
- if (this.claim && this.claim.id)
- this.loadData();
- }
-
- loadData() {
- return this.$http.get(`Claims/${this.claim.id}/getSummary`).then(res => {
- if (res && res.data)
- this.summary = res.data;
- });
- }
-
- reload() {
- this.loadData()
- .then(() => {
- if (this.card)
- this.card.reload();
-
- if (this.parentReload)
- this.parentReload();
- });
- }
-
- get isSalesPerson() {
- return this.aclService.hasAny(['salesPerson']);
- }
-
- get isClaimManager() {
- return this.aclService.hasAny(['claimManager']);
- }
-
- get claim() {
- return this._claim;
- }
-
- set claim(value) {
- this._claim = value;
-
- // Get DMS on summary load
- if (value) {
- this.$.$applyAsync(() => this.loadDms());
- this.loadData();
- }
- }
-
- loadDms() {
- this.$.model.where = {
- claimFk: this.claim.id
- };
- this.$.model.refresh();
- }
-
- getImagePath(dmsId) {
- return this.vnFile.getPath(`/api/dms/${dmsId}/downloadFile`);
- }
-
- changeState(value) {
- const params = {
- id: this.claim.id,
- claimStateFk: value
- };
-
- this.$http.patch(`Claims/updateClaim/${this.claim.id}`, params)
- .then(() => {
- this.reload();
- })
- .then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnFile'];
-
-ngModule.vnComponent('vnClaimSummary', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- claim: '<',
- model: '',
- parentReload: '&'
- },
- require: {
- card: '?^vnClaimCard'
- }
-});
diff --git a/modules/claim/front/summary/index.spec.js b/modules/claim/front/summary/index.spec.js
deleted file mode 100644
index 8540a3a97..000000000
--- a/modules/claim/front/summary/index.spec.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import './index.js';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Claim', () => {
- describe('Component summary', () => {
- let controller;
- let $httpBackend;
- let $scope;
-
- beforeEach(ngModule('claim'));
-
- beforeEach(inject(($componentController, _$httpBackend_, $rootScope) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- const $element = angular.element('');
- controller = $componentController('vnClaimSummary', {$element, $scope});
- controller.claim = {id: 1};
- controller.$.model = crudModel;
- }));
-
- describe('loadData()', () => {
- it('should perform a query to set summary', () => {
- $httpBackend.when('GET', `Claims/1/getSummary`).respond(200, 24);
- controller.loadData();
- $httpBackend.flush();
-
- expect(controller.summary).toEqual(24);
- });
- });
-
- describe('changeState()', () => {
- it('should make an HTTP post query, then call the showSuccess()', () => {
- jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
-
- const expectedParams = {id: 1, claimStateFk: 1};
- $httpBackend.when('GET', `Claims/1/getSummary`).respond(200, 24);
- $httpBackend.expect('PATCH', `Claims/updateClaim/1`, expectedParams).respond(200);
- controller.changeState(1);
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('$onChanges()', () => {
- it('should call loadData when $onChanges is called', () => {
- jest.spyOn(controller, 'loadData');
-
- controller.$onChanges();
-
- expect(controller.loadData).toHaveBeenCalledWith();
- });
- });
- });
-});
diff --git a/modules/claim/front/summary/style.scss b/modules/claim/front/summary/style.scss
deleted file mode 100644
index 5b4e32f7a..000000000
--- a/modules/claim/front/summary/style.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-@import "./variables";
-
-vn-claim-summary {
- section.photo {
- height: 248px;
- }
- .photo .image {
- border-radius: 3px;
- }
- vn-textarea *{
- height: 80px;
- }
-
- .video {
- width: 100%;
- height: 100%;
- object-fit: cover;
- cursor: pointer;
- box-shadow: 0 2px 2px 0 rgba(0,0,0,.14),
- 0 3px 1px -2px rgba(0,0,0,.2),
- 0 1px 5px 0 rgba(0,0,0,.12);
- border: 2px solid transparent;
-
- }
- .video:hover {
- border: 2px solid $color-primary
- }
-}
\ No newline at end of file
diff --git a/modules/client/back/methods/defaulter/filter.js b/modules/client/back/methods/defaulter/filter.js
index 40756b236..9f19dee0a 100644
--- a/modules/client/back/methods/defaulter/filter.js
+++ b/modules/client/back/methods/defaulter/filter.js
@@ -83,9 +83,14 @@ module.exports = Self => {
LEFT JOIN account.user u ON u.id = c.salesPersonFk
LEFT JOIN account.user uw ON uw.id = co.workerFk
LEFT JOIN (
- SELECT MAX(started), clientFk, finished
- FROM recovery
- GROUP BY clientFk
+ SELECT r1.started, r1.clientFk, r1.finished
+ FROM recovery r1
+ JOIN (
+ SELECT MAX(started) AS maxStarted, clientFk
+ FROM recovery
+ GROUP BY clientFk
+ ) r2 ON r1.clientFk = r2.clientFk
+ AND r1.started = r2.maxStarted
) r ON r.clientFk = c.id
LEFT JOIN workerDepartment wd ON wd.workerFk = u.id
JOIN department dp ON dp.id = wd.departmentFk
diff --git a/modules/client/back/models/client-sample.js b/modules/client/back/models/client-sample.js
index 5e4393042..b8ab6cff4 100644
--- a/modules/client/back/models/client-sample.js
+++ b/modules/client/back/models/client-sample.js
@@ -27,7 +27,7 @@ module.exports = Self => {
// Renew mandate
if (mandate) {
const mandateType = await models.MandateType.findOne({
- where: {name: mandate.type}
+ where: {code: mandate.type}
});
const oldMandate = await models.Mandate.findOne({
diff --git a/modules/client/back/models/mandate-type.json b/modules/client/back/models/mandate-type.json
index ec189f089..b481e7c72 100644
--- a/modules/client/back/models/mandate-type.json
+++ b/modules/client/back/models/mandate-type.json
@@ -12,7 +12,7 @@
"type": "number",
"description": "Identifier"
},
- "name": {
+ "code": {
"type": "string"
}
}
diff --git a/modules/client/front/mandate/index.html b/modules/client/front/mandate/index.html
index e2f2cd27b..1ee18737f 100644
--- a/modules/client/front/mandate/index.html
+++ b/modules/client/front/mandate/index.html
@@ -26,7 +26,7 @@
{{::mandate.id}}
{{::mandate.company.code}}
- {{::mandate.mandateType.name}}
+ {{::mandate.mandateType.code}}
{{::mandate.created | date:'dd/MM/yyyy HH:mm' | dashIfEmpty}}
{{::mandate.finished | date:'dd/MM/yyyy HH:mm' | dashIfEmpty}}
diff --git a/modules/client/front/mandate/index.js b/modules/client/front/mandate/index.js
index 114e2b570..605ae08cc 100644
--- a/modules/client/front/mandate/index.js
+++ b/modules/client/front/mandate/index.js
@@ -9,7 +9,7 @@ class Controller extends Section {
{
relation: 'mandateType',
scope: {
- fields: ['id', 'name']
+ fields: ['id', 'code']
}
}, {
relation: 'company',
diff --git a/modules/invoiceIn/back/methods/invoice-in/filter.js b/modules/invoiceIn/back/methods/invoice-in/filter.js
index d72d7fc63..8a884e211 100644
--- a/modules/invoiceIn/back/methods/invoice-in/filter.js
+++ b/modules/invoiceIn/back/methods/invoice-in/filter.js
@@ -119,6 +119,7 @@ module.exports = Self => {
}
let correctings;
+
let correcteds;
if (args.correctedFk) {
correctings = await models.InvoiceInCorrection.find({
@@ -154,6 +155,7 @@ module.exports = Self => {
case 'awbCode':
return {'sub.code': value};
case 'correctingFk':
+ if (!correcteds.length && !args.correctingFk) return;
return args.correctingFk
? {'ii.id': {inq: correcteds.map(x => x.correctingFk)}}
: {'ii.id': {nin: correcteds.map(x => x.correctingFk)}};
diff --git a/modules/invoiceIn/back/methods/invoice-in/getSerial.js b/modules/invoiceIn/back/methods/invoice-in/getSerial.js
index dcc1fbc3c..29c7cae2f 100644
--- a/modules/invoiceIn/back/methods/invoice-in/getSerial.js
+++ b/modules/invoiceIn/back/methods/invoice-in/getSerial.js
@@ -46,7 +46,7 @@ module.exports = Self => {
}
});
- filter = mergeFilters(args.filter, {where});
+ const filter = mergeFilters(args.filter, {where});
const stmt = new ParameterizedSQL(
`SELECT i.serial, SUM(IF(i.isBooked, 0,1)) pending, COUNT(*) total
diff --git a/modules/invoiceIn/front/basic-data/index.html b/modules/invoiceIn/front/basic-data/index.html
deleted file mode 100644
index fbb9b05a2..000000000
--- a/modules/invoiceIn/front/basic-data/index.html
+++ /dev/null
@@ -1,315 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/invoiceIn/front/basic-data/index.js b/modules/invoiceIn/front/basic-data/index.js
deleted file mode 100644
index 246f1b16f..000000000
--- a/modules/invoiceIn/front/basic-data/index.js
+++ /dev/null
@@ -1,187 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- constructor($element, $, vnFile) {
- super($element, $, vnFile);
- this.dms = {
- files: [],
- hasFile: false,
- hasFileAttached: false
- };
- this.vnFile = vnFile;
- this.getAllowedContentTypes();
- this._editDownloadDisabled = false;
- }
-
- get contentTypesInfo() {
- return this.$t('ContentTypesInfo', {
- allowedContentTypes: this.allowedContentTypes
- });
- }
-
- get editDownloadDisabled() {
- return this._editDownloadDisabled;
- }
-
- async checkFileExists(dmsId) {
- if (!dmsId) return;
- let filter = {
- fields: ['id']
- };
- await this.$http.get(`Dms/${dmsId}`, {filter})
- .then(() => this._editDownloadDisabled = false)
- .catch(() => this._editDownloadDisabled = true);
- }
-
- async getFile(dmsId) {
- const path = `Dms/${dmsId}`;
- await this.$http.get(path).then(res => {
- const dms = res.data && res.data;
- this.dms = {
- dmsId: dms.id,
- reference: dms.reference,
- warehouseId: dms.warehouseFk,
- companyId: dms.companyFk,
- dmsTypeId: dms.dmsTypeFk,
- description: dms.description,
- hasFile: dms.hasFile,
- hasFileAttached: false,
- files: []
- };
- });
- }
-
- getAllowedContentTypes() {
- this.$http.get('DmsContainers/allowedContentTypes').then(res => {
- if (res.data.length > 0) {
- const contentTypes = res.data.join(', ');
- this.allowedContentTypes = contentTypes;
- }
- });
- }
-
- openEditDialog(dmsId) {
- this.getFile(dmsId).then(() => this.$.dmsEditDialog.show());
- }
-
- openCreateDialog() {
- const params = {filter: {
- where: {code: 'invoiceIn'}
- }};
- this.$http.get('DmsTypes/findOne', {params}).then(res => {
- this.dms = {
- reference: this.invoiceIn.supplierRef,
- warehouseId: this.vnConfig.warehouseFk,
- companyId: this.vnConfig.companyFk,
- dmsTypeId: res.data.id,
- description: this.invoiceIn.supplier.name,
- hasFile: true,
- hasFileAttached: true,
- files: null
- };
- this.$.dmsCreateDialog.show();
- });
- }
-
- downloadFile(dmsId) {
- this.vnFile.download(`api/dms/${dmsId}/downloadFile`);
- }
-
- onFileChange(files) {
- let hasFileAttached = false;
- if (files.length > 0)
- hasFileAttached = true;
-
- this.$.$applyAsync(() => {
- this.dms.hasFileAttached = hasFileAttached;
- });
- }
-
- onEdit() {
- if (!this.dms.companyId)
- throw new UserError(`The company can't be empty`);
- if (!this.dms.warehouseId)
- throw new UserError(`The warehouse can't be empty`);
- if (!this.dms.dmsTypeId)
- throw new UserError(`The DMS Type can't be empty`);
- if (!this.dms.description)
- throw new UserError(`The description can't be empty`);
-
- const query = `dms/${this.dms.dmsId}/updateFile`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
-
- for (let i = 0; i < files.length; i++)
- formData.append(files[i].name, files[i]);
-
- return formData;
- },
- data: this.dms.files
- };
-
- this.$http(options).then(res => {
- if (res) {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- if (res.data.length > 0) this.invoiceIn.dmsFk = res.data[0].id;
- }
- });
- }
-
- onCreate() {
- if (!this.dms.companyId)
- throw new UserError(`The company can't be empty`);
- if (!this.dms.warehouseId)
- throw new UserError(`The warehouse can't be empty`);
- if (!this.dms.dmsTypeId)
- throw new UserError(`The DMS Type can't be empty`);
- if (!this.dms.description)
- throw new UserError(`The description can't be empty`);
- if (!this.dms.files)
- throw new UserError(`The files can't be empty`);
-
- const query = `Dms/uploadFile`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
-
- for (let i = 0; i < files.length; i++)
- formData.append(files[i].name, files[i]);
-
- return formData;
- },
- data: this.dms.files
- };
-
- this.$http(options).then(res => {
- if (res) {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- if (res.data.length > 0) this.invoiceIn.dmsFk = res.data[0].id;
- }
- });
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnFile'];
-
-ngModule.vnComponent('vnInvoiceInBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- invoiceIn: '<'
- }
-});
diff --git a/modules/invoiceIn/front/basic-data/index.spec.js b/modules/invoiceIn/front/basic-data/index.spec.js
deleted file mode 100644
index 98710ac35..000000000
--- a/modules/invoiceIn/front/basic-data/index.spec.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import './index.js';
-import watcher from 'core/mocks/watcher';
-
-describe('InvoiceIn', () => {
- describe('Component vnInvoiceInBasicData', () => {
- let controller;
- let $scope;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('invoiceIn'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- const $element = angular.element('');
- controller = $componentController('vnInvoiceInBasicData', {$element, $scope});
- controller.$.watcher = watcher;
- $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond({});
- }));
-
- describe('onFileChange()', () => {
- it('should set dms hasFileAttached property to true if has any files', () => {
- const files = [{id: 1, name: 'MyFile'}];
- controller.onFileChange(files);
-
- $scope.$apply();
-
- expect(controller.dms.hasFileAttached).toBeTruthy();
- });
- });
-
- describe('checkFileExists()', () => {
- it(`should return false if a file exists`, () => {
- const fileIdExists = 1;
- controller.checkFileExists(fileIdExists);
-
- expect(controller.editDownloadDisabled).toBe(false);
- });
- });
-
- describe('onEdit()', () => {
- it(`should perform a POST query to edit the dms properties`, () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const dms = {
- dmsId: 1,
- reference: 'Ref1',
- warehouseId: 1,
- companyId: 442,
- dmsTypeId: 20,
- description: 'This is a description',
- files: []
- };
-
- controller.dms = dms;
- const serializedParams = $httpParamSerializer(controller.dms);
- const query = `dms/${controller.dms.dmsId}/updateFile?${serializedParams}`;
-
- $httpBackend.expectPOST(query).respond({});
- controller.onEdit();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('onCreate()', () => {
- it(`should perform a POST query to create a new dms`, () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- const dms = {
- reference: 'Ref1',
- warehouseId: 1,
- companyId: 442,
- dmsTypeId: 20,
- description: 'This is a description',
- files: [{
- lastModified: 1668673957761,
- lastModifiedDate: Date.vnNew(),
- name: 'file-example.png',
- size: 19653,
- type: 'image/png',
- webkitRelativePath: ''
- }]
- };
-
- controller.dms = dms;
- const serializedParams = $httpParamSerializer(controller.dms);
- const query = `Dms/uploadFile?${serializedParams}`;
-
- $httpBackend.expectPOST(query).respond({});
- controller.onCreate();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
- });
-});
-
diff --git a/modules/invoiceIn/front/basic-data/locale/en.yml b/modules/invoiceIn/front/basic-data/locale/en.yml
deleted file mode 100644
index 19f4dc8c2..000000000
--- a/modules/invoiceIn/front/basic-data/locale/en.yml
+++ /dev/null
@@ -1 +0,0 @@
-ContentTypesInfo: Allowed file types {{allowedContentTypes}}
diff --git a/modules/invoiceIn/front/basic-data/locale/es.yml b/modules/invoiceIn/front/basic-data/locale/es.yml
deleted file mode 100644
index e2e494fa5..000000000
--- a/modules/invoiceIn/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-Upload file: Subir fichero
-Edit file: Editar fichero
-Upload: Subir
-Document: Documento
-ContentTypesInfo: "Tipos de archivo permitidos: {{allowedContentTypes}}"
-Generate identifier for original file: Generar identificador para archivo original
-File management: Gestión documental
-Hard copy: Copia
-This file will be deleted: Este fichero va a ser borrado
-Are you sure?: Estas seguro?
-File deleted: Fichero eliminado
-Remove file: Eliminar fichero
-Download file: Descargar fichero
-Edit document: Editar documento
-Create document: Crear documento
diff --git a/modules/invoiceIn/front/create/index.html b/modules/invoiceIn/front/create/index.html
deleted file mode 100644
index 16ecf26cf..000000000
--- a/modules/invoiceIn/front/create/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/modules/invoiceIn/front/create/index.js b/modules/invoiceIn/front/create/index.js
deleted file mode 100644
index 885d55359..000000000
--- a/modules/invoiceIn/front/create/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- $onInit() {
- this.invoiceIn = {};
- if (this.$params && this.$params.supplierFk)
- this.invoiceIn.supplierFk = this.$params.supplierFk;
- this.invoiceIn.issued = Date.vnNew();
- }
-
- get companyFk() {
- return this.invoiceIn.companyFk || this.vnConfig.companyFk;
- }
-
- set companyFk(value) {
- this.invoiceIn.companyFk = value;
- }
-
- onSubmit() {
- this.$.watcher.submit().then(
- res => this.$state.go('invoiceIn.card.basicData', {id: res.data.id})
- );
- }
-}
-
-ngModule.vnComponent('vnInvoiceInCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/invoiceIn/front/create/locale/es.yml b/modules/invoiceIn/front/create/locale/es.yml
deleted file mode 100644
index 35bfe3ca4..000000000
--- a/modules/invoiceIn/front/create/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-a:a
\ No newline at end of file
diff --git a/modules/invoiceIn/front/dueDay/index.html b/modules/invoiceIn/front/dueDay/index.html
deleted file mode 100644
index abc91312d..000000000
--- a/modules/invoiceIn/front/dueDay/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/invoiceIn/front/dueDay/index.js b/modules/invoiceIn/front/dueDay/index.js
deleted file mode 100644
index ee9b13e5c..000000000
--- a/modules/invoiceIn/front/dueDay/index.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- add() {
- this.$.model.insert({
- dueDated: Date.vnNew(),
- bankFk: this.vnConfig.local.bankFk
- });
- }
-
- onSubmit() {
- this.$.watcher.check();
- this.$.model.save().then(() => {
- this.$.watcher.notifySaved();
- this.$.watcher.updateOriginalData();
- this.card.reload();
- });
- }
-
- bankSearchFunc($search) {
- return /^\d+$/.test($search)
- ? {id: $search}
- : {bank: {like: '%' + $search + '%'}};
- }
-}
-
-ngModule.vnComponent('vnInvoiceInDueDay', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnInvoiceInCard'
- },
- bindings: {
- invoiceIn: '<'
- }
-});
diff --git a/modules/invoiceIn/front/dueDay/index.spec.js b/modules/invoiceIn/front/dueDay/index.spec.js
deleted file mode 100644
index 7dddd3bb0..000000000
--- a/modules/invoiceIn/front/dueDay/index.spec.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import './index.js';
-import watcher from 'core/mocks/watcher';
-import crudModel from 'core/mocks/crud-model';
-
-describe('InvoiceIn', () => {
- describe('Component due day', () => {
- let controller;
- let $scope;
- let vnApp;
-
- beforeEach(ngModule('invoiceIn'));
-
- beforeEach(inject(($componentController, $rootScope, _vnApp_) => {
- vnApp = _vnApp_;
- jest.spyOn(vnApp, 'showError');
- $scope = $rootScope.$new();
- $scope.model = crudModel;
- $scope.watcher = watcher;
-
- const $element = angular.element('');
- controller = $componentController('vnInvoiceInDueDay', {$element, $scope});
- controller.invoiceIn = {id: 1};
- }));
-
- describe('onSubmit()', () => {
- it('should make HTTP POST request to save due day values', () => {
- controller.card = {reload: () => {}};
- jest.spyOn($scope.watcher, 'check');
- jest.spyOn($scope.watcher, 'notifySaved');
- jest.spyOn($scope.watcher, 'updateOriginalData');
- jest.spyOn(controller.card, 'reload');
- jest.spyOn($scope.model, 'save');
-
- controller.onSubmit();
-
- expect($scope.model.save).toHaveBeenCalledWith();
- expect($scope.watcher.updateOriginalData).toHaveBeenCalledWith();
- expect($scope.watcher.check).toHaveBeenCalledWith();
- expect($scope.watcher.notifySaved).toHaveBeenCalledWith();
- expect(controller.card.reload).toHaveBeenCalledWith();
- });
- });
- });
-});
diff --git a/modules/invoiceIn/front/index.js b/modules/invoiceIn/front/index.js
index e257cfee3..8155e7089 100644
--- a/modules/invoiceIn/front/index.js
+++ b/modules/invoiceIn/front/index.js
@@ -1,17 +1,7 @@
export * from './module';
import './main';
-import './index/';
-import './search-panel';
import './card';
import './descriptor';
import './descriptor-popover';
import './summary';
-import './basic-data';
-import './tax';
-import './dueDay';
-import './intrastat';
-import './create';
-import './log';
-import './serial';
-import './serial-search-panel';
diff --git a/modules/invoiceIn/front/index/index.html b/modules/invoiceIn/front/index/index.html
deleted file mode 100644
index 008d615b1..000000000
--- a/modules/invoiceIn/front/index/index.html
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
- ID
- Supplier
- Supplier ref.
- Serial number
- Serial
- File
- Issued
- Is booked
- AWB
- Amount
-
-
-
-
-
- {{::invoiceIn.id}}
-
-
- {{::invoiceIn.supplierName}}
-
-
- {{::invoiceIn.supplierRef | dashIfEmpty}}
- {{::invoiceIn.serialNumber}}
- {{::invoiceIn.serial}}
-
-
- {{::invoiceIn.file}}
-
-
- {{::invoiceIn.issued | date:'dd/MM/yyyy' | dashIfEmpty}}
-
-
-
-
- {{::invoiceIn.awbCode}}
- {{::invoiceIn.amount | currency:'EUR'}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/invoiceIn/front/index/index.js b/modules/invoiceIn/front/index/index.js
deleted file mode 100644
index 254e6d3bf..000000000
--- a/modules/invoiceIn/front/index/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $, vnFile) {
- super($element, $, vnFile);
- this.vnFile = vnFile;
- }
-
- exprBuilder(param, value) {
- switch (param) {
- case 'issued':
- return {'ii.issued': {
- between: this.dateRange(value)}
- };
- case 'id':
- case 'supplierFk':
- case 'supplierRef':
- case 'serialNumber':
- case 'serial':
- case 'created':
- case 'isBooked':
- return {[`ii.${param}`]: value};
- case 'account':
- case 'fi':
- return {[`s.${param}`]: value};
- case 'awbCode':
- return {'awb.code': value};
- default:
- return {[param]: value};
- }
- }
-
- dateRange(value) {
- const minHour = new Date(value);
- minHour.setHours(0, 0, 0, 0);
- const maxHour = new Date(value);
- maxHour.setHours(23, 59, 59, 59);
-
- return [minHour, maxHour];
- }
-
- preview(invoiceIn) {
- this.selectedInvoiceIn = invoiceIn;
- this.$.summary.show();
- }
-
- downloadFile(dmsId) {
- this.vnFile.download(`api/dms/${dmsId}/downloadFile`);
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnFile'];
-
-ngModule.vnComponent('vnInvoiceInIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/invoiceIn/front/index/locale/es.yml b/modules/invoiceIn/front/index/locale/es.yml
deleted file mode 100644
index e1b354316..000000000
--- a/modules/invoiceIn/front/index/locale/es.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-Created: Fecha creación
-Issued: Fecha emisión
-Supplier ref.: Ref. proveedor
-Serial number: Num. serie
-Serial: Serie
-Is booked: Conciliada
\ No newline at end of file
diff --git a/modules/invoiceIn/front/intrastat/index.html b/modules/invoiceIn/front/intrastat/index.html
deleted file mode 100644
index b15fdf543..000000000
--- a/modules/invoiceIn/front/intrastat/index.html
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/invoiceIn/front/intrastat/index.js b/modules/invoiceIn/front/intrastat/index.js
deleted file mode 100644
index 659929513..000000000
--- a/modules/invoiceIn/front/intrastat/index.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- set invoceInIntrastat(value) {
- this._invoceInIntrastat = value;
-
- if (value) this.calculateTotals();
- }
-
- get invoceInIntrastat() {
- return this._invoceInIntrastat;
- }
-
- calculateTotals() {
- this.amountTotal = 0.0;
- this.netTotal = 0.0;
- this.stemsTotal = 0.0;
- if (!this.invoceInIntrastat) return;
-
- this.invoceInIntrastat.forEach(intrastat => {
- this.amountTotal += intrastat.amount;
- this.netTotal += intrastat.net;
- this.stemsTotal += intrastat.stems;
- });
- }
-
- add() {
- this.$.model.insert({});
- }
-
- deleteIntrastat($index) {
- this.$.model.remove($index);
- this.$.model.save().then(() => {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.calculateTotals();
- });
- }
-
- onSubmit() {
- this.$.watcher.check();
- this.$.model.save().then(() => {
- this.$.watcher.notifySaved();
- this.$.watcher.updateOriginalData();
- this.calculateTotals();
- this.card.reload();
- });
- }
-}
-
-ngModule.vnComponent('vnInvoiceInIntrastat', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnInvoiceInCard'
- },
- bindings: {
- invoiceIn: '<'
- }
-});
diff --git a/modules/invoiceIn/front/intrastat/index.spec.js b/modules/invoiceIn/front/intrastat/index.spec.js
deleted file mode 100644
index d7d50ac5b..000000000
--- a/modules/invoiceIn/front/intrastat/index.spec.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import './index.js';
-import watcher from 'core/mocks/watcher';
-import crudModel from 'core/mocks/crud-model';
-
-describe('InvoiceIn', () => {
- describe('Component intrastat', () => {
- let controller;
- let $scope;
- let vnApp;
-
- beforeEach(ngModule('invoiceIn'));
-
- beforeEach(inject(($componentController, $rootScope, _vnApp_) => {
- vnApp = _vnApp_;
- jest.spyOn(vnApp, 'showError');
- $scope = $rootScope.$new();
- $scope.model = crudModel;
- $scope.watcher = watcher;
-
- const $element = angular.element('');
- controller = $componentController('vnInvoiceInIntrastat', {$element, $scope});
- controller.invoiceIn = {id: 1};
- }));
-
- describe('calculateTotals()', () => {
- it('should set amountTotal, netTotal and stemsTotal to 0 if salesClaimed has no data', () => {
- controller.invoceInIntrastat = [];
- controller.calculateTotals();
-
- expect(controller.amountTotal).toEqual(0);
- expect(controller.netTotal).toEqual(0);
- expect(controller.stemsTotal).toEqual(0);
- });
-
- it('should set amountTotal, netTotal and stemsTotal', () => {
- controller.invoceInIntrastat = [
- {
- id: 1,
- invoiceInFk: 1,
- net: 30.5,
- intrastatFk: 5080000,
- amount: 10,
- stems: 162,
- countryFk: 5,
- statisticalValue: 0
- },
- {
- id: 2,
- invoiceInFk: 1,
- net: 10,
- intrastatFk: 6021010,
- amount: 20,
- stems: 205,
- countryFk: 5,
- statisticalValue: 0
- }
- ];
- controller.calculateTotals();
-
- expect(controller.amountTotal).toEqual(30);
- expect(controller.netTotal).toEqual(40.5);
- expect(controller.stemsTotal).toEqual(367);
- });
- });
-
- describe('onSubmit()', () => {
- it('should make HTTP POST request to save intrastat values', () => {
- controller.card = {reload: () => {}};
- jest.spyOn($scope.watcher, 'check');
- jest.spyOn($scope.watcher, 'notifySaved');
- jest.spyOn($scope.watcher, 'updateOriginalData');
- jest.spyOn(controller.card, 'reload');
- jest.spyOn($scope.model, 'save');
-
- controller.onSubmit();
-
- expect($scope.model.save).toHaveBeenCalledWith();
- expect($scope.watcher.updateOriginalData).toHaveBeenCalledWith();
- expect($scope.watcher.check).toHaveBeenCalledWith();
- expect($scope.watcher.notifySaved).toHaveBeenCalledWith();
- expect(controller.card.reload).toHaveBeenCalledWith();
- });
- });
- });
-});
diff --git a/modules/invoiceIn/front/log/index.html b/modules/invoiceIn/front/log/index.html
deleted file mode 100644
index 2cfc9dfb1..000000000
--- a/modules/invoiceIn/front/log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/invoiceIn/front/log/index.js b/modules/invoiceIn/front/log/index.js
deleted file mode 100644
index 7a018de0f..000000000
--- a/modules/invoiceIn/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnInvoiceInLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/invoiceIn/front/main/index.html b/modules/invoiceIn/front/main/index.html
index 2dc87b2ee..e69de29bb 100644
--- a/modules/invoiceIn/front/main/index.html
+++ b/modules/invoiceIn/front/main/index.html
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/invoiceIn/front/main/index.js b/modules/invoiceIn/front/main/index.js
index f7b767458..c22b37924 100644
--- a/modules/invoiceIn/front/main/index.js
+++ b/modules/invoiceIn/front/main/index.js
@@ -1,7 +1,16 @@
import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
-export default class InvoiceIn extends ModuleMain {}
+export default class InvoiceIn extends ModuleMain {
+ constructor($element, $) {
+ super($element, $);
+ }
+
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`invoice-in/`);
+ }
+}
ngModule.vnComponent('vnInvoiceIn', {
controller: InvoiceIn,
diff --git a/modules/invoiceIn/front/search-panel/index.html b/modules/invoiceIn/front/search-panel/index.html
deleted file mode 100644
index 609fa56d8..000000000
--- a/modules/invoiceIn/front/search-panel/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
diff --git a/modules/invoiceIn/front/search-panel/index.js b/modules/invoiceIn/front/search-panel/index.js
deleted file mode 100644
index a8e41b7ef..000000000
--- a/modules/invoiceIn/front/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.vnComponent('vnInvoiceInSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/invoiceIn/front/search-panel/locale/es.yml b/modules/invoiceIn/front/search-panel/locale/es.yml
deleted file mode 100644
index 57e2944ea..000000000
--- a/modules/invoiceIn/front/search-panel/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-Supplier fiscal id: CIF proveedor
-Search invoices in by id or supplier fiscal name: Buscar facturas recibidas por id o por nombre fiscal del proveedor
\ No newline at end of file
diff --git a/modules/invoiceIn/front/serial-search-panel/index.html b/modules/invoiceIn/front/serial-search-panel/index.html
deleted file mode 100644
index 0dda54852..000000000
--- a/modules/invoiceIn/front/serial-search-panel/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.$t('Serial')}}: {{$ctrl.filter.serial}}
-
-
-
diff --git a/modules/invoiceIn/front/serial-search-panel/index.js b/modules/invoiceIn/front/serial-search-panel/index.js
deleted file mode 100644
index b11911ee3..000000000
--- a/modules/invoiceIn/front/serial-search-panel/index.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-import './style.scss';
-
-class Controller extends SearchPanel {
- constructor($element, $) {
- super($element, $);
- this.filter = {};
- const filter = {
- fields: ['daysAgo']
- };
- this.$http.get('InvoiceInConfigs', {filter}).then(res => {
- if (res.data) {
- this.invoiceInConfig = res.data[0];
- this.addFilters();
- }
- });
- }
-
- removeItemFilter(param) {
- this.filter[param] = null;
- this.addFilters();
- }
-
- onKeyPress($event) {
- if ($event.key === 'Enter')
- this.addFilters();
- }
-
- addFilters() {
- if (!this.filter.daysAgo)
- this.filter.daysAgo = this.invoiceInConfig.daysAgo;
-
- return this.model.addFilter({}, this.filter);
- }
-}
-
-ngModule.component('vnInvoiceInSerialSearchPanel', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- model: '<'
- }
-});
diff --git a/modules/invoiceIn/front/serial-search-panel/index.spec.js b/modules/invoiceIn/front/serial-search-panel/index.spec.js
deleted file mode 100644
index b5228e126..000000000
--- a/modules/invoiceIn/front/serial-search-panel/index.spec.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import './index.js';
-
-describe('InvoiceIn', () => {
- describe('Component serial-search-panel', () => {
- let controller;
- let $scope;
-
- beforeEach(ngModule('invoiceIn'));
-
- beforeEach(inject(($componentController, $rootScope) => {
- $scope = $rootScope.$new();
- const $element = angular.element('');
- controller = $componentController('vnInvoiceInSerialSearchPanel', {$element, $scope});
- controller.model = {
- addFilter: jest.fn(),
- };
- controller.invoiceInConfig = {
- daysAgo: 45,
- };
- }));
-
- describe('addFilters()', () => {
- it('should add default daysAgo if it is not already set', () => {
- controller.filter = {
- serial: 'R',
- };
- controller.addFilters();
-
- expect(controller.filter.daysAgo).toEqual(controller.invoiceInConfig.daysAgo);
- });
-
- it('should not add default daysAgo if it is already set', () => {
- controller.filter = {
- daysAgo: 1,
- serial: 'R',
- };
- controller.addFilters();
-
- expect(controller.filter.daysAgo).toEqual(1);
- });
- });
- });
-});
diff --git a/modules/invoiceIn/front/serial-search-panel/style.scss b/modules/invoiceIn/front/serial-search-panel/style.scss
deleted file mode 100644
index 4abfcbfa2..000000000
--- a/modules/invoiceIn/front/serial-search-panel/style.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-@import "variables";
-
-vn-invoice-in-serial-search-panel vn-side-menu div {
- & > .input {
- padding-left: $spacing-md;
- padding-right: $spacing-md;
- border-color: $color-spacer;
- border-bottom: $border-thin;
- }
- & > .horizontal {
- grid-auto-flow: column;
- grid-column-gap: $spacing-sm;
- align-items: center;
- }
- & > .chips {
- display: flex;
- flex-wrap: wrap;
- padding: $spacing-md;
- overflow: hidden;
- max-width: 100%;
- border-color: $color-spacer;
- border-top: $border-thin;
- }
-}
diff --git a/modules/invoiceIn/front/serial/index.html b/modules/invoiceIn/front/serial/index.html
deleted file mode 100644
index 1649ec7d7..000000000
--- a/modules/invoiceIn/front/serial/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- Serial
- Pending
- Total
-
-
-
-
-
- {{::invoiceIn.serial}}
- {{::invoiceIn.pending}}
- {{::invoiceIn.total}}
-
-
-
-
-
-
-
-
-
diff --git a/modules/invoiceIn/front/serial/index.js b/modules/invoiceIn/front/serial/index.js
deleted file mode 100644
index 193a57492..000000000
--- a/modules/invoiceIn/front/serial/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- }
-
- goToIndex(daysAgo, serial) {
- const issued = Date.vnNew();
- issued.setDate(issued.getDate() - daysAgo);
- this.$state.go('invoiceIn.index',
- {q: `{"serial": "${serial}", "isBooked": false, "from": ${issued.getTime()}}`});
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnInvoiceInSerial', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/invoiceIn/front/serial/locale/es.yml b/modules/invoiceIn/front/serial/locale/es.yml
deleted file mode 100644
index 92a49cc82..000000000
--- a/modules/invoiceIn/front/serial/locale/es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-Serial: Serie
-Pending: Pendientes
-Go to InvoiceIn: Ir al listado de facturas recibidas
diff --git a/modules/invoiceIn/front/tax/index.html b/modules/invoiceIn/front/tax/index.html
deleted file mode 100644
index e13f769ce..000000000
--- a/modules/invoiceIn/front/tax/index.html
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{$ctrl.$t('New expense')}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/invoiceIn/front/tax/index.js b/modules/invoiceIn/front/tax/index.js
deleted file mode 100644
index d05a77f29..000000000
--- a/modules/invoiceIn/front/tax/index.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- constructor($element, $, vnWeekDays) {
- super($element, $);
- this.expense = {};
- }
- taxRate(invoiceInTax, taxRateSelection) {
- const taxTypeSage = taxRateSelection && taxRateSelection.rate;
- const taxableBase = invoiceInTax && invoiceInTax.taxableBase;
-
- if (taxTypeSage && taxableBase)
- return (taxTypeSage / 100) * taxableBase;
-
- return 0;
- }
-
- add() {
- this.$.model.insert({
- invoiceIn: this.$params.id
- });
- }
-
- onSubmit() {
- this.$.watcher.check();
- this.$.model.save().then(() => {
- this.$.watcher.notifySaved();
- this.$.watcher.updateOriginalData();
- this.card.reload();
- });
- }
-
- onResponse() {
- try {
- if (!this.expense.code)
- throw new Error(`The code can't be empty`);
- if (!this.expense.description)
- throw new UserError(`The description can't be empty`);
-
- const data = [{
- id: this.expense.code,
- isWithheld: this.expense.isWithheld,
- name: this.expense.description
- }];
-
- this.$http.post(`Expenses`, data) .then(() => {
- this.vnApp.showSuccess(this.$t('Expense saved!'));
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-}
-
-ngModule.vnComponent('vnInvoiceInTax', {
- template: require('./index.html'),
- controller: Controller,
- require: {
- card: '^vnInvoiceInCard'
- },
- bindings: {
- invoiceIn: '<'
- }
-});
diff --git a/modules/invoiceIn/front/tax/index.spec.js b/modules/invoiceIn/front/tax/index.spec.js
deleted file mode 100644
index 52114afe5..000000000
--- a/modules/invoiceIn/front/tax/index.spec.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import './index.js';
-import watcher from 'core/mocks/watcher';
-import crudModel from 'core/mocks/crud-model';
-
-describe('InvoiceIn', () => {
- describe('Component tax', () => {
- let controller;
- let $scope;
- let vnApp;
- let $httpBackend;
-
- beforeEach(ngModule('invoiceIn'));
-
- beforeEach(inject(($componentController, $rootScope, _vnApp_, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- vnApp = _vnApp_;
- jest.spyOn(vnApp, 'showError');
- $scope = $rootScope.$new();
- $scope.model = crudModel;
- $scope.watcher = watcher;
-
- const $element = angular.element('');
- controller = $componentController('vnInvoiceInTax', {$element, $scope});
- controller.$.model = crudModel;
- controller.invoiceIn = {id: 1};
- }));
-
- describe('taxRate()', () => {
- it('should set tax rate with the Sage tax type value', () => {
- const taxRateSelection = {
- rate: 21
- };
- const invoiceInTax = {
- taxableBase: 200
- };
-
- const taxRate = controller.taxRate(invoiceInTax, taxRateSelection);
-
- expect(taxRate).toEqual(42);
- });
- });
-
- describe('onSubmit()', () => {
- it('should make HTTP POST request to save tax values', () => {
- controller.card = {reload: () => {}};
- jest.spyOn($scope.watcher, 'check');
- jest.spyOn($scope.watcher, 'notifySaved');
- jest.spyOn($scope.watcher, 'updateOriginalData');
- jest.spyOn(controller.card, 'reload');
- jest.spyOn($scope.model, 'save');
-
- controller.onSubmit();
-
- expect($scope.model.save).toHaveBeenCalledWith();
- expect($scope.watcher.updateOriginalData).toHaveBeenCalledWith();
- expect($scope.watcher.check).toHaveBeenCalledWith();
- expect($scope.watcher.notifySaved).toHaveBeenCalledWith();
- expect(controller.card.reload).toHaveBeenCalledWith();
- });
- });
-
- describe('onResponse()', () => {
- it('should return success message', () => {
- controller.expense = {
- code: 7050000005,
- isWithheld: 0,
- description: 'Test'
- };
-
- const data = [{
- id: controller.expense.code,
- isWithheld: controller.expense.isWithheld,
- name: controller.expense.description
- }];
-
- jest.spyOn(controller.vnApp, 'showSuccess');
- $httpBackend.expect('POST', `Expenses`, data).respond();
-
- controller.onResponse();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Expense saved!');
- });
-
- it('should return an error if code is empty', () => {
- controller.expense = {
- code: null,
- isWithheld: 0,
- description: 'Test'
- };
-
- jest.spyOn(controller.vnApp, 'showError');
- controller.onResponse();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The code can't be empty`);
- });
-
- it('should return an error if description is empty', () => {
- controller.expense = {
- code: 7050000005,
- isWithheld: 0,
- description: null
- };
-
- jest.spyOn(controller.vnApp, 'showError');
- controller.onResponse();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The description can't be empty`);
- });
- });
- });
-});
-
diff --git a/modules/invoiceIn/front/tax/locale/es.yml b/modules/invoiceIn/front/tax/locale/es.yml
deleted file mode 100644
index 3ff68ea40..000000000
--- a/modules/invoiceIn/front/tax/locale/es.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-Create expense: Crear gasto
-New expense: Nuevo gasto
-It's a withholding: Es una retención
-The fields can't be empty: Los campos no pueden estar vacíos
-The code can't be empty: El código no puede estar vacío
-The description can't be empty: La descripción no puede estar vacía
-Expense saved!: Gasto guardado!
\ No newline at end of file
diff --git a/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js b/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js
index 63b00fe38..5526d214a 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/clientsToInvoice.js
@@ -75,7 +75,7 @@ module.exports = Self => {
AND c.isTaxDataChecked
AND c.isActive
AND NOT t.isDeleted
- GROUP BY c.id, IF(c.hasToInvoiceByAddress, a.id, TRUE)
+ GROUP BY IF(c.hasToInvoiceByAddress, a.id, c.id)
HAVING SUM(t.totalWithVat) > 0;`;
const addresses = await Self.rawSql(query, [
diff --git a/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js b/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
index 530b02353..2c44cef34 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/invoiceClient.js
@@ -28,6 +28,11 @@ module.exports = Self => {
type: 'number',
description: 'The company id to invoice',
required: true
+ }, {
+ arg: 'serialType',
+ type: 'string',
+ description: 'Invoice serial number type (see vn.invoiceOutSerial.type enum)',
+ required: true
}
],
returns: {
@@ -39,12 +44,10 @@ module.exports = Self => {
verb: 'POST'
}
});
-
Self.invoiceClient = async(ctx, options) => {
const args = ctx.args;
const models = Self.app.models;
- options = typeof options == 'object'
- ? Object.assign({}, options) : {};
+ options = typeof options === 'object' ? {...options} : {};
options.userId = ctx.req.accessToken.userId;
let tx;
@@ -74,10 +77,9 @@ module.exports = Self => {
], options);
}
- const invoiceType = 'G';
const invoiceId = await models.Ticket.makeInvoice(
ctx,
- invoiceType,
+ args.serialType,
args.companyFk,
args.invoiceDate,
null,
diff --git a/modules/invoiceOut/back/methods/invoiceOut/refund.js b/modules/invoiceOut/back/methods/invoiceOut/refund.js
index 1b7ccc1e4..4f43a7a84 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/refund.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/refund.js
@@ -43,7 +43,7 @@ module.exports = Self => {
const tickets = await models.Ticket.find(filter, myOptions);
const ticketsIds = tickets.map(ticket => ticket.id);
- const refundedTickets = await models.Ticket.refund(ctx, ticketsIds, withWarehouse, myOptions);
+ const refundedTickets = await models.Ticket.cloneAll(ctx, ticketsIds, withWarehouse, true, myOptions);
if (tx) await tx.commit();
diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/clientsToInvoice.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/clientsToInvoice.spec.js
new file mode 100644
index 000000000..470690c5a
--- /dev/null
+++ b/modules/invoiceOut/back/methods/invoiceOut/specs/clientsToInvoice.spec.js
@@ -0,0 +1,75 @@
+const models = require('vn-loopback/server/server').models;
+
+describe('InvoiceOut clientsToInvoice()', () => {
+ const userId = 1;
+ const clientId = 1101;
+ const companyFk = 442;
+ const maxShipped = new Date();
+ maxShipped.setMonth(11);
+ maxShipped.setDate(31);
+ maxShipped.setHours(23, 59, 59, 999);
+ const invoiceDate = new Date();
+ const activeCtx = {
+ getLocale: () => {
+ return 'en';
+ },
+ accessToken: {userId: userId},
+ __: value => {
+ return value;
+ },
+ headers: {origin: 'http://localhost'}
+ };
+ const ctx = {req: activeCtx};
+
+ it('should return a list of clients to invoice', async() => {
+ spyOn(models.InvoiceOut, 'rawSql').and.callFake(query => {
+ if (query.includes('ticketPackaging_add'))
+ return Promise.resolve(true);
+ else if (query.includes('SELECT c.id clientId')) {
+ return Promise.resolve([
+ {
+ clientId: clientId,
+ clientName: 'Test Client',
+ id: 1,
+ nickname: 'Address 1'
+ }
+ ]);
+ }
+ });
+
+ const tx = await models.InvoiceOut.beginTransaction({});
+ const options = {transaction: tx};
+
+ try {
+ const addresses = await models.InvoiceOut.clientsToInvoice(
+ ctx, clientId, invoiceDate, maxShipped, companyFk, options);
+
+ expect(addresses.length).toBeGreaterThan(0);
+ expect(addresses[0].clientId).toBe(clientId);
+ expect(addresses[0].clientName).toBe('Test Client');
+ expect(addresses[0].id).toBe(1);
+ expect(addresses[0].nickname).toBe('Address 1');
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+
+ it('should handle errors and rollback transaction', async() => {
+ spyOn(models.InvoiceOut, 'rawSql').and.callFake(() => {
+ return Promise.reject(new Error('Test Error'));
+ });
+
+ const tx = await models.InvoiceOut.beginTransaction({});
+ const options = {transaction: tx};
+
+ try {
+ await models.InvoiceOut.clientsToInvoice(ctx, clientId, invoiceDate, maxShipped, companyFk, options);
+ } catch (e) {
+ expect(e.message).toBe('Test Error');
+ await tx.rollback();
+ }
+ });
+});
diff --git a/modules/invoiceOut/back/methods/invoiceOut/specs/invoiceClient.spec.js b/modules/invoiceOut/back/methods/invoiceOut/specs/invoiceClient.spec.js
index 0faa8fe1a..c731912ec 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/specs/invoiceClient.spec.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/specs/invoiceClient.spec.js
@@ -1,16 +1,16 @@
const models = require('vn-loopback/server/server').models;
+const LoopBackContext = require('loopback-context');
describe('InvoiceOut invoiceClient()', () => {
const userId = 1;
const clientId = 1101;
- const addressId = 121;
+ const addressFk = 121;
const companyFk = 442;
const minShipped = Date.vnNew();
minShipped.setFullYear(minShipped.getFullYear() - 1);
minShipped.setMonth(1);
minShipped.setDate(1);
minShipped.setHours(0, 0, 0, 0);
- const invoiceSerial = 'A';
const activeCtx = {
getLocale: () => {
return 'en';
@@ -23,9 +23,14 @@ describe('InvoiceOut invoiceClient()', () => {
};
const ctx = {req: activeCtx};
+ beforeAll(() => {
+ spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
+ active: activeCtx
+ });
+ });
- it('should make a global invoicing', async() => {
- spyOn(models.InvoiceOut, 'makePdf').and.returnValue(new Promise(resolve => resolve(true)));
+ it('should make a global invoicing by address and verify billing status', async() => {
+ spyOn(models.InvoiceOut, 'makePdf').and.returnValue(Promise.resolve(true));
spyOn(models.InvoiceOut, 'invoiceEmail');
const tx = await models.InvoiceOut.beginTransaction({});
@@ -34,20 +39,96 @@ describe('InvoiceOut invoiceClient()', () => {
try {
ctx.args = {
clientId: clientId,
- addressId: addressId,
+ addressId: addressFk,
invoiceDate: Date.vnNew(),
maxShipped: Date.vnNew(),
companyFk: companyFk,
- minShipped: minShipped
+ serialType: 'global'
};
+
const invoiceOutId = await models.InvoiceOut.invoiceClient(ctx, options);
+
const invoiceOut = await models.InvoiceOut.findById(invoiceOutId, null, options);
- const [firstTicket] = await models.Ticket.find({
+
+ expect(invoiceOutId).toBeGreaterThan(0);
+
+ const allClientTickets = await models.Ticket.find({
+ where: {
+ clientFk: clientId,
+ or: [
+ {refFk: null},
+ {refFk: invoiceOut.ref}
+ ]
+ }
+ }, options);
+
+ const billedTickets = await models.Ticket.find({
where: {refFk: invoiceOut.ref}
}, options);
+ const allBilledTicketsHaveCorrectAddress = billedTickets.every(ticket => ticket.addressFk === addressFk);
+
+ expect(allBilledTicketsHaveCorrectAddress).toBe(true);
+
+ const addressTickets = allClientTickets.filter(ticket => ticket.addressFk === addressFk);
+
+ const allAddressTicketsBilled = addressTickets.every(ticket => ticket.refFk === invoiceOut.ref);
+
+ expect(allAddressTicketsBilled).toBe(true);
+
+ await tx.rollback();
+ } catch (e) {
+ await tx.rollback();
+ throw e;
+ }
+ });
+
+ it('should invoice all tickets regardless of address when hasToInvoiceByAddress is false', async() => {
+ spyOn(models.InvoiceOut, 'makePdf').and.returnValue(Promise.resolve(true));
+ spyOn(models.InvoiceOut, 'invoiceEmail');
+
+ const tx = await models.InvoiceOut.beginTransaction({});
+ const options = {transaction: tx};
+
+ try {
+ const client = await models.Client.findById(clientId, null, options);
+ await client.updateAttribute('hasToInvoiceByAddress', false, options);
+
+ ctx.args = {
+ clientId: clientId,
+ invoiceDate: Date.vnNew(),
+ maxShipped: Date.vnNew(),
+ companyFk: companyFk,
+ serialType: 'global'
+ };
+
+ const invoiceOutId = await models.InvoiceOut.invoiceClient(ctx, options);
+
+ const invoiceOut = await models.InvoiceOut.findById(invoiceOutId, null, options);
+
expect(invoiceOutId).toBeGreaterThan(0);
- expect(firstTicket.refFk).toContain(invoiceSerial);
+
+ const allClientTickets = await models.Ticket.find({
+ where: {
+ clientFk: clientId,
+ or: [
+ {refFk: null},
+ {refFk: invoiceOut.ref}
+ ]
+ }
+ }, options);
+
+ const billedTickets = await models.Ticket.find({
+ where: {refFk: invoiceOut.ref}
+ }, options);
+
+ const allTicketsBilled = allClientTickets.every(ticket => ticket.refFk === invoiceOut.ref);
+
+ expect(allTicketsBilled).toBe(true);
+
+ const billedAddresses = new Set(billedTickets.map(ticket => ticket.addressFk));
+
+ expect(billedAddresses.size).toBeGreaterThan(1);
await tx.rollback();
} catch (e) {
diff --git a/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js b/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js
index 0c86e5810..c31f381d9 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/transferInvoice.js
@@ -82,20 +82,12 @@ module.exports = Self => {
myOptions.transaction = tx;
}
try {
- const filterRef = {where: {refFk: refFk}};
- const tickets = await models.Ticket.find(filterRef, myOptions);
+ const tickets = await models.Ticket.find({where: {refFk}}, myOptions);
const ticketsIds = tickets.map(ticket => ticket.id);
- const refundTickets = await models.Ticket.refund(ctx, ticketsIds, null, myOptions);
+ const refundTickets = await models.Ticket.cloneAll(ctx, ticketsIds, false, true, myOptions);
- const filterTicket = {where: {ticketFk: {inq: ticketsIds}}};
+ const clonedTickets = await models.Ticket.cloneAll(ctx, ticketsIds, false, false, myOptions);
- const services = await models.TicketService.find(filterTicket, myOptions);
- const servicesIds = services.map(service => service.id);
-
- const sales = await models.Sale.find(filterTicket, myOptions);
- const salesIds = sales.map(sale => sale.id);
-
- const clonedTickets = await models.Sale.clone(ctx, salesIds, servicesIds, null, false, myOptions);
const clonedTicketIds = [];
for (const clonedTicket of clonedTickets) {
diff --git a/modules/invoiceOut/back/models/invoice-out-serial.json b/modules/invoiceOut/back/models/invoice-out-serial.json
index 912269fd7..30e1f1b39 100644
--- a/modules/invoiceOut/back/models/invoice-out-serial.json
+++ b/modules/invoiceOut/back/models/invoice-out-serial.json
@@ -20,6 +20,9 @@
},
"isCEE": {
"type": "boolean"
+ },
+ "type": {
+ "type": "string"
}
},
"relations": {
@@ -35,4 +38,4 @@
"principalId": "$everyone",
"permission": "ALLOW"
}]
-}
\ No newline at end of file
+}
diff --git a/modules/invoiceOut/front/descriptor-menu/index.html b/modules/invoiceOut/front/descriptor-menu/index.html
index da04c8e72..335ab87cc 100644
--- a/modules/invoiceOut/front/descriptor-menu/index.html
+++ b/modules/invoiceOut/front/descriptor-menu/index.html
@@ -88,28 +88,7 @@
translate>
Show CITES letter
-
- Refund...
-
-
-
- with warehouse
-
-
- without warehouse
-
-
-
-
+
{
- const tickets = res.data;
- const refundTickets = tickets.map(ticket => ticket.id);
-
- this.vnApp.showSuccess(this.$t('The following refund tickets have been created', {
- ticketId: refundTickets.join(',')
- }));
- if (refundTickets.length == 1)
- this.$state.go('ticket.card.sale', {id: refundTickets[0]});
- });
- }
-
transferInvoice() {
const params = {
id: this.invoiceOut.id,
diff --git a/modules/invoiceOut/front/descriptor-menu/index.spec.js b/modules/invoiceOut/front/descriptor-menu/index.spec.js
index d2ccfa117..a22ca7c2a 100644
--- a/modules/invoiceOut/front/descriptor-menu/index.spec.js
+++ b/modules/invoiceOut/front/descriptor-menu/index.spec.js
@@ -105,17 +105,4 @@ describe('vnInvoiceOutDescriptorMenu', () => {
expect(controller.vnApp.showMessage).toHaveBeenCalled();
});
});
-
- describe('refundInvoiceOut()', () => {
- it('should make a query and show a success message', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- const params = {ref: controller.invoiceOut.ref};
-
- $httpBackend.expectPOST(`InvoiceOuts/refund`, params).respond([{id: 1}, {id: 2}]);
- controller.refundInvoiceOut();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
});
diff --git a/modules/item/back/methods/fixed-price/filter.js b/modules/item/back/methods/fixed-price/filter.js
index 9c91886c1..edc804dc4 100644
--- a/modules/item/back/methods/fixed-price/filter.js
+++ b/modules/item/back/methods/fixed-price/filter.js
@@ -1,4 +1,3 @@
-
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const buildFilter = require('vn-loopback/util/filter').buildFilter;
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
@@ -134,7 +133,7 @@ module.exports = Self => {
const stmts = [];
const stmt = new ParameterizedSQL(`
- SELECT fp.id,
+ SELECT DISTINCT fp.id,
fp.itemFk,
fp.warehouseFk,
fp.rate2,
diff --git a/modules/order/back/methods/order/filter.js b/modules/order/back/methods/order/filter.js
index 592ed11e6..758e8065c 100644
--- a/modules/order/back/methods/order/filter.js
+++ b/modules/order/back/methods/order/filter.js
@@ -59,6 +59,10 @@ module.exports = Self => {
arg: 'showEmpty',
type: 'boolean',
description: 'Show empty orders'
+ }, {
+ arg: 'sourceApp',
+ type: 'string',
+ description: 'Application'
}
],
returns: {
diff --git a/modules/ticket/back/methods/sale/clone.js b/modules/ticket/back/methods/sale/clone.js
index 9185a6e75..24346f3ba 100644
--- a/modules/ticket/back/methods/sale/clone.js
+++ b/modules/ticket/back/methods/sale/clone.js
@@ -1,40 +1,25 @@
module.exports = Self => {
Self.remoteMethodCtx('clone', {
- description: 'Clone sales and services provided',
+ description: 'Clone sales, services, and ticket packaging provided',
accessType: 'WRITE',
accepts: [
- {
- arg: 'salesIds',
- type: ['number'],
- }, {
- arg: 'servicesIds',
- type: ['number']
- }, {
- arg: 'withWarehouse',
- type: 'boolean',
- required: true
- }, {
- arg: 'negative',
- type: 'boolean'
- }
+ {arg: 'salesIds', type: ['number']},
+ {arg: 'servicesIds', type: ['number']},
+ {arg: 'ticketPackagingIds', type: ['number']},
+ {arg: 'withWarehouse', type: 'boolean', required: true},
+ {arg: 'negative', type: 'boolean'}
],
- returns: {
- type: ['object'],
- root: true
- },
- http: {
- path: `/clone`,
- verb: 'POST'
- }
+ returns: {type: ['object'], root: true},
+ http: {path: `/clone`, verb: 'POST'}
});
- Self.clone = async(ctx, salesIds, servicesIds, withWarehouse, negative, options) => {
+
+ Self.clone = async(ctx, salesIds, servicesIds, ticketPackagingIds, withWarehouse, negative, options) => {
const models = Self.app.models;
const myOptions = {};
let tx;
const newTickets = [];
- if (typeof options == 'object')
- Object.assign(myOptions, options);
+ if (typeof options === 'object') Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
@@ -44,8 +29,9 @@ module.exports = Self => {
try {
let sales;
let services;
+ let ticketPackaging;
- if (salesIds && salesIds.length) {
+ if (salesIds?.length) {
sales = await models.Sale.find({
where: {id: {inq: salesIds}},
include: {
@@ -57,12 +43,18 @@ module.exports = Self => {
}, myOptions);
}
- if (servicesIds && servicesIds.length) {
+ if (servicesIds?.length) {
services = await models.TicketService.find({
where: {id: {inq: servicesIds}}
}, myOptions);
}
+ if (ticketPackagingIds?.length) {
+ ticketPackaging = await models.TicketPackaging.find({
+ where: {id: {inq: ticketPackagingIds}}
+ }, myOptions);
+ }
+
let ticketsIds = sales ?
[...new Set(sales.map(sale => sale.ticketFk))] :
[...new Set(services.map(service => service.ticketFk))];
@@ -74,12 +66,12 @@ module.exports = Self => {
ctx,
ticketId,
withWarehouse,
- negative,
myOptions
);
newTickets.push(newTicket);
mappedTickets.set(ticketId, newTicket.id);
}
+
if (sales) {
for (const sale of sales) {
const newTicketId = mappedTickets.get(sale.ticketFk);
@@ -107,7 +99,7 @@ module.exports = Self => {
await models.TicketService.create({
description: service.description,
- quantity: negative ? - service.quantity : service.quantity,
+ quantity: negative ? -service.quantity : service.quantity,
price: service.price,
taxClassFk: service.taxClassFk,
ticketFk: newTicketId,
@@ -116,6 +108,18 @@ module.exports = Self => {
}
}
+ if (ticketPackaging) {
+ for (const packaging of ticketPackaging) {
+ const newTicketId = mappedTickets.get(packaging.ticketFk);
+
+ await models.TicketPackaging.create({
+ ticketFk: newTicketId,
+ packagingFk: packaging.packagingFk,
+ quantity: negative ? -packaging.quantity : packaging.quantity
+ }, myOptions);
+ }
+ }
+
if (tx) await tx.commit();
return newTickets;
@@ -124,13 +128,7 @@ module.exports = Self => {
throw e;
}
- async function createTicket(
- ctx,
- ticketId,
- withWarehouse,
- negative,
- myOptions
- ) {
+ async function createTicket(ctx, ticketId, withWarehouse, myOptions) {
const models = Self.app.models;
const now = Date.vnNew();
diff --git a/modules/ticket/back/methods/sale/specs/clone.spec.js b/modules/ticket/back/methods/sale/specs/clone.spec.js
index 5b0dc84a7..1738cc08c 100644
--- a/modules/ticket/back/methods/sale/specs/clone.spec.js
+++ b/modules/ticket/back/methods/sale/specs/clone.spec.js
@@ -20,7 +20,7 @@ describe('Ticket cloning - clone function', () => {
const servicesIds = [];
const withWarehouse = true;
const negative = false;
- const newTickets = await models.Sale.clone(ctx, salesIds, servicesIds, withWarehouse, negative, options);
+ const newTickets = await models.Sale.clone(ctx, salesIds, servicesIds, null, withWarehouse, negative, options);
expect(newTickets).toBeDefined();
expect(newTickets.length).toBeGreaterThan(0);
@@ -30,7 +30,7 @@ describe('Ticket cloning - clone function', () => {
const negative = true;
const salesIds = [7, 8];
const servicesIds = [];
- const newTickets = await models.Sale.clone(ctx, salesIds, servicesIds, false, negative, options);
+ const newTickets = await models.Sale.clone(ctx, salesIds, servicesIds, null, false, negative, options);
for (const ticket of newTickets) {
const sales = await models.Sale.find({where: {ticketFk: ticket.id}}, options);
@@ -43,7 +43,7 @@ describe('Ticket cloning - clone function', () => {
it('should create new components and services for cloned tickets', async() => {
const servicesIds = [2];
const salesIds = [5];
- const newTickets = await models.Sale.clone(ctx, salesIds, servicesIds, false, false, options);
+ const newTickets = await models.Sale.clone(ctx, salesIds, servicesIds, null, false, false, options);
for (const ticket of newTickets) {
const sale = await models.Sale.findOne({where: {ticketFk: ticket.id}}, options);
@@ -58,7 +58,7 @@ describe('Ticket cloning - clone function', () => {
it('should create a ticket without sales', async() => {
const servicesIds = [4];
- const tickets = await models.Sale.clone(ctx, null, servicesIds, false, false, options);
+ const tickets = await models.Sale.clone(ctx, null, servicesIds, null, false, false, options);
const refundedTicket = await getTicketRefund(tickets[0].id, options);
expect(refundedTicket).toBeDefined();
diff --git a/modules/ticket/back/methods/ticket/clone.js b/modules/ticket/back/methods/ticket/clone.js
deleted file mode 100644
index 93bc2a94e..000000000
--- a/modules/ticket/back/methods/ticket/clone.js
+++ /dev/null
@@ -1,54 +0,0 @@
-module.exports = Self => {
- Self.remoteMethodCtx('clone', {
- description: 'clone a ticket and return the new ticket id',
- accessType: 'WRITE',
- accepts: [{
- arg: 'id',
- type: 'number',
- required: true,
- description: 'The ticket id',
- http: {source: 'path'}
- }, {
- arg: 'shipped',
- type: 'date',
- }, {
- arg: 'withWarehouse',
- type: 'boolean',
- }
- ],
- returns: {
- type: 'number',
- root: true
- },
- http: {
- path: `/:id/clone`,
- verb: 'POST'
- }
- });
-
- Self.clone = async(ctx, id, shipped, withWarehouse, options) => {
- const myOptions = {userId: ctx.req.accessToken.userId};
- let tx;
-
- if (typeof options == 'object')
- Object.assign(myOptions, options);
-
- if (!myOptions.transaction) {
- tx = await Self.beginTransaction({});
- myOptions.transaction = tx;
- }
-
- try {
- const [, [{clonedTicketId}]] = await Self.rawSql(`
- CALL vn.ticket_cloneAll(?, ?, ?, @clonedTicketId);
- SELECT @clonedTicketId clonedTicketId;`,
- [id, shipped, withWarehouse], myOptions);
-
- if (tx) await tx.commit();
- return clonedTicketId;
- } catch (e) {
- if (tx) await tx.rollback();
- throw e;
- }
- };
-};
diff --git a/modules/ticket/back/methods/ticket/cloneAll.js b/modules/ticket/back/methods/ticket/cloneAll.js
new file mode 100644
index 000000000..cf99a7edc
--- /dev/null
+++ b/modules/ticket/back/methods/ticket/cloneAll.js
@@ -0,0 +1,77 @@
+module.exports = Self => {
+ Self.remoteMethodCtx('cloneAll', {
+ description: 'Clone tickets, sales, services and packages',
+ accessType: 'WRITE',
+ accepts: [
+ {
+ arg: 'ticketsIds',
+ type: ['number'],
+ required: true,
+ description: 'IDs of the tickets to clone'
+ },
+ {
+ arg: 'withWarehouse',
+ type: 'boolean',
+ required: true,
+ description: 'true: keep original warehouse; false: set to null'
+ },
+ {
+ arg: 'negative',
+ type: 'boolean',
+ required: true,
+ description: 'true: invert quantities; false: keep as is.'
+ }
+ ],
+ returns: {
+ type: ['object'],
+ root: true,
+ description: 'The cloned tickets with associated data'
+ },
+ http: {
+ path: `/cloneAll`,
+ verb: 'POST'
+ }
+ });
+
+ Self.cloneAll = async(ctx, ticketsIds, withWarehouse, negative, options) => {
+ const models = Self.app.models;
+ const myOptions = typeof options == 'object' ? {...options} : {};
+ let tx;
+
+ if (!myOptions.transaction) {
+ tx = await Self.beginTransaction({});
+ myOptions.transaction = tx;
+ }
+
+ try {
+ const filter = {where: {ticketFk: {inq: ticketsIds}}};
+
+ const [sales, services, ticketPackaging] = await Promise.all([
+ models.Sale.find(filter, myOptions),
+ models.TicketService.find(filter, myOptions),
+ models.TicketPackaging.find(filter, myOptions)
+ ]);
+
+ const salesIds = sales.map(({id}) => id);
+ const servicesIds = services.map(({id}) => id);
+ const ticketPackagingIds = ticketPackaging.map(({id}) => id);
+
+ const clonedTickets = await models.Sale.clone(
+ ctx,
+ salesIds,
+ servicesIds,
+ ticketPackagingIds,
+ withWarehouse,
+ negative,
+ myOptions
+ );
+
+ if (tx) await tx.commit();
+
+ return clonedTickets;
+ } catch (e) {
+ if (tx) await tx.rollback();
+ throw e;
+ }
+ };
+};
diff --git a/modules/ticket/back/methods/ticket/closeAll.js b/modules/ticket/back/methods/ticket/closeAll.js
index 9d0aa8c13..143c0a3f0 100644
--- a/modules/ticket/back/methods/ticket/closeAll.js
+++ b/modules/ticket/back/methods/ticket/closeAll.js
@@ -93,8 +93,8 @@ module.exports = Self => {
SUM(t.isDeleted) hasErrorDeleted,
SUM(itc.id IS NULL) hasErrorItemTaxCountry,
SUM(a.id IS NULL) hasErrorAddress,
- SUM(ios.code IS NOT NULL
- AND(ad.customsAgentFk IS NULL
+ SUM(ios.code IS NOT NULL
+ AND(ad.customsAgentFk IS NULL
OR ad.incotermsFk IS NULL)) hasErrorInfoTaxAreaWorld,
t.clientFk clientFk
FROM ticket t
@@ -113,24 +113,24 @@ module.exports = Self => {
LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
LEFT JOIN itemTaxCountry itc ON itc.itemFk = i.id
AND itc.countryFk = su.countryFk
- LEFT JOIN vn.invoiceOutSerial ios ON ios.taxAreaFk = 'WORLD'
- AND ios.code = invoiceSerial(t.clientFk, t.companyFk, 'M')
+ LEFT JOIN vn.invoiceOutSerial ios ON ios.taxAreaFk = 'WORLD'
+ AND ios.code = invoiceSerial(t.clientFk, t.companyFk, 'multiple')
WHERE (al.code = 'PACKED' OR (am.code = 'refund' AND al.code <> 'delivered'))
AND DATE(t.shipped) BETWEEN ? - INTERVAL 2 DAY AND util.dayEnd(?)
AND t.refFk IS NULL
AND IFNULL(a.hasDailyInvoice, co.hasDailyInvoice)
- GROUP BY ticketFk
- HAVING hasErrorToInvoice
- OR hasErrorTaxDataChecked
- OR hasErrorDeleted
- OR hasErrorItemTaxCountry
- OR hasErrorAddress
+ GROUP BY ticketFk
+ HAVING hasErrorToInvoice
+ OR hasErrorTaxDataChecked
+ OR hasErrorDeleted
+ OR hasErrorItemTaxCountry
+ OR hasErrorAddress
OR hasErrorInfoTaxAreaWorld
)sub
)sub2
) SELECT IF(errors = '{"tickets": null}',
'No errors',
- util.notification_send('invoice-ticket-closure', errors, NULL))
+ util.notification_send('invoice-ticket-closure', errors, NULL))
FROM ticketNotInvoiceable`, [toDate, toDate]);
await closure(ctx, Self, tickets);
diff --git a/modules/ticket/back/methods/ticket/invoiceTickets.js b/modules/ticket/back/methods/ticket/invoiceTickets.js
index 53400e724..3c725c4a7 100644
--- a/modules/ticket/back/methods/ticket/invoiceTickets.js
+++ b/modules/ticket/back/methods/ticket/invoiceTickets.js
@@ -95,7 +95,7 @@ module.exports = function(Self) {
FROM vn.ticket
WHERE id IN (?)
`, [ticketsIds], myOptions);
- return models.Ticket.makeInvoice(ctx, 'R', companyId, Date.vnNew(), invoiceCorrection, myOptions);
+ return models.Ticket.makeInvoice(ctx, 'quick', companyId, Date.vnNew(), invoiceCorrection, myOptions);
}
};
diff --git a/modules/ticket/back/methods/ticket/refund.js b/modules/ticket/back/methods/ticket/refund.js
deleted file mode 100644
index 7365f34df..000000000
--- a/modules/ticket/back/methods/ticket/refund.js
+++ /dev/null
@@ -1,58 +0,0 @@
-module.exports = Self => {
- Self.remoteMethodCtx('refund', {
- description: 'Create refund tickets with all their sales and services',
- accessType: 'WRITE',
- accepts: [
- {
- arg: 'ticketsIds',
- type: ['number'],
- required: true
- },
- {
- arg: 'withWarehouse',
- type: 'boolean',
- required: true
- }
- ],
- returns: {
- type: ['object'],
- root: true
- },
- http: {
- path: `/refund`,
- verb: 'POST'
- }
- });
-
- Self.refund = async(ctx, ticketsIds, withWarehouse, options) => {
- const models = Self.app.models;
- const myOptions = {};
- let tx;
-
- if (typeof options == 'object')
- Object.assign(myOptions, options);
-
- if (!myOptions.transaction) {
- tx = await Self.beginTransaction({});
- myOptions.transaction = tx;
- }
-
- try {
- const filter = {where: {ticketFk: {inq: ticketsIds}}};
- const sales = await models.Sale.find(filter, myOptions);
- const salesIds = sales.map(sale => sale.id);
-
- const services = await models.TicketService.find(filter, myOptions);
- const servicesIds = services.map(service => service.id);
-
- const refundedTickets = await models.Sale.clone(ctx, salesIds, servicesIds, withWarehouse, true, myOptions);
-
- if (tx) await tx.commit();
-
- return refundedTickets;
- } catch (e) {
- if (tx) await tx.rollback();
- throw e;
- }
- };
-};
diff --git a/modules/ticket/back/methods/ticket/specs/clone.spec.js b/modules/ticket/back/methods/ticket/specs/clone.spec.js
deleted file mode 100644
index ccc0dcdf3..000000000
--- a/modules/ticket/back/methods/ticket/specs/clone.spec.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const models = require('vn-loopback/server/server').models;
-
-describe('Ticket cloning - clone function', () => {
- const ctx = beforeAll.getCtx();
- let options;
- let tx;
- const ticketId = 1;
- const shipped = Date.vnNew();
-
- beforeEach(async() => {
- options = {transaction: tx};
- tx = await models.Ticket.beginTransaction({});
- options.transaction = tx;
- });
-
- afterEach(async() => {
- await tx.rollback();
- });
-
- it('should clone a new ticket without warehouse', async() => {
- const originalTicket = await models.Ticket.findById(ticketId, null, options);
-
- const newTicketId = await models.Ticket.clone(ctx, ticketId, shipped, false, options);
- const newTicket = await models.Ticket.findById(newTicketId, null, options);
-
- expect(newTicket.clientFk).toEqual(originalTicket.clientFk);
- expect(newTicket.companyFk).toEqual(originalTicket.companyFk);
- expect(newTicket.addressFk).toEqual(originalTicket.addressFk);
- expect(newTicket.warehouseFk).toBeFalsy();
- });
-
- it('should clone a new ticket with warehouse', async() => {
- const originalTicket = await models.Ticket.findById(ticketId, null, options);
-
- const newTicketId = await models.Ticket.clone(ctx, ticketId, shipped, true, options);
- const newTicket = await models.Ticket.findById(newTicketId, null, options);
-
- expect(newTicket.clientFk).toEqual(originalTicket.clientFk);
- expect(newTicket.companyFk).toEqual(originalTicket.companyFk);
- expect(newTicket.addressFk).toEqual(originalTicket.addressFk);
- expect(newTicket.warehouseFk).toEqual(originalTicket.warehouseFk);
- });
-});
diff --git a/modules/ticket/back/methods/ticket/specs/cloneAll.spec.js b/modules/ticket/back/methods/ticket/specs/cloneAll.spec.js
new file mode 100644
index 000000000..4788df2c2
--- /dev/null
+++ b/modules/ticket/back/methods/ticket/specs/cloneAll.spec.js
@@ -0,0 +1,53 @@
+const models = require('vn-loopback/server/server').models;
+const LoopBackContext = require('loopback-context');
+
+describe('Ticket cloning - cloneAll function', () => {
+ const activeCtx = {
+ accessToken: {userId: 1},
+ http: {
+ req: {
+ headers: {origin: 'http://localhost'}
+ }
+ }
+ };
+ const ctx = {req: activeCtx};
+ let options;
+ let tx;
+ const ticketIds = [1, 2];
+ const withWarehouse = true;
+ const negative = false;
+
+ beforeEach(async() => {
+ spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({active: ctx.req});
+ tx = await models.Ticket.beginTransaction({});
+ options = {transaction: tx};
+ });
+
+ afterEach(async() => {
+ if (tx)
+ await tx.rollback();
+ });
+
+ it('should clone all provided tickets with their associated sales, services, and packages', async() => {
+ const originalTickets = await models.Ticket.find({where: {id: {inq: ticketIds}}}, options);
+ const originalSales = await models.Sale.find({where: {ticketFk: {inq: ticketIds}}}, options);
+ const originalServices = await models.TicketService.find({where: {ticketFk: {inq: ticketIds}}}, options);
+ const originalTicketPackaging =
+ await models.TicketPackaging.find({where: {ticketFk: {inq: ticketIds}}}, options);
+
+ // Pass the ctx correctly to the cloneAll function
+ const clonedTickets = await models.Ticket.cloneAll(ctx, ticketIds, withWarehouse, negative, options);
+
+ expect(clonedTickets.length).toEqual(originalTickets.length);
+
+ const clonedSales = await models.Sale.find({where: {ticketFk: {inq: clonedTickets.map(t => t.id)}}}, options);
+ const clonedServices =
+ await models.TicketService.find({where: {ticketFk: {inq: clonedTickets.map(t => t.id)}}}, options);
+ const clonedTicketPackaging =
+ await models.TicketPackaging.find({where: {ticketFk: {inq: clonedTickets.map(t => t.id)}}}, options);
+
+ expect(clonedSales.length).toEqual(originalSales.length);
+ expect(clonedServices.length).toEqual(originalServices.length);
+ expect(clonedTicketPackaging.length).toEqual(originalTicketPackaging.length);
+ });
+});
diff --git a/modules/ticket/back/methods/ticket/specs/makeInvoice.spec.js b/modules/ticket/back/methods/ticket/specs/makeInvoice.spec.js
index fea8b2096..88812dc92 100644
--- a/modules/ticket/back/methods/ticket/specs/makeInvoice.spec.js
+++ b/modules/ticket/back/methods/ticket/specs/makeInvoice.spec.js
@@ -3,7 +3,7 @@ const LoopBackContext = require('loopback-context');
describe('ticket makeInvoice()', () => {
const userId = 19;
- const invoiceType = 'R';
+ const invoiceType = 'quick';
const companyFk = 442;
const invoiceDate = Date.vnNew();
const activeCtx = {
diff --git a/modules/ticket/back/models/ticket-methods.js b/modules/ticket/back/models/ticket-methods.js
index 5582dde5c..462862cb3 100644
--- a/modules/ticket/back/models/ticket-methods.js
+++ b/modules/ticket/back/models/ticket-methods.js
@@ -26,7 +26,7 @@ module.exports = function(Self) {
require('../methods/ticket/isLocked')(Self);
require('../methods/ticket/freightCost')(Self);
require('../methods/ticket/getComponentsSum')(Self);
- require('../methods/ticket/refund')(Self);
+ require('../methods/ticket/cloneAll')(Self);
require('../methods/ticket/deliveryNotePdf')(Self);
require('../methods/ticket/deliveryNoteEmail')(Self);
require('../methods/ticket/deliveryNoteCsv')(Self);
@@ -46,5 +46,4 @@ module.exports = function(Self) {
require('../methods/ticket/invoiceTicketsAndPdf')(Self);
require('../methods/ticket/docuwareDownload')(Self);
require('../methods/ticket/myLastModified')(Self);
- require('../methods/ticket/clone')(Self);
};
diff --git a/modules/ticket/front/descriptor-menu/index.js b/modules/ticket/front/descriptor-menu/index.js
index 32f245454..93948def2 100644
--- a/modules/ticket/front/descriptor-menu/index.js
+++ b/modules/ticket/front/descriptor-menu/index.js
@@ -287,15 +287,24 @@ class Controller extends Section {
}
refund(withWarehouse) {
- const params = {ticketsIds: [this.id], withWarehouse: withWarehouse};
- const query = 'Tickets/refund';
+ const params = {
+ ticketsIds: [this.id],
+ withWarehouse: withWarehouse,
+ negative: true // Asumimos que queremos cantidades negativas para reembolsos
+ };
+ const query = 'Tickets/cloneAll';
return this.$http.post(query, params)
.then(res => {
const [refundTicket] = res.data;
- this.vnApp.showSuccess(this.$t('The following refund ticket have been created', {
+ this.vnApp.showSuccess(this.$t('The following refund ticket has been created', {
ticketId: refundTicket.id
}));
this.$state.go('ticket.card.sale', {id: refundTicket.id});
+ })
+ .catch(error => {
+ this.vnApp.showError(this.$t('Error creating refund ticket', {
+ error: error.data?.error?.message || 'Unknown error'
+ }));
});
}
diff --git a/modules/ticket/front/descriptor-menu/index.spec.js b/modules/ticket/front/descriptor-menu/index.spec.js
index 94a991db8..cffbad62e 100644
--- a/modules/ticket/front/descriptor-menu/index.spec.js
+++ b/modules/ticket/front/descriptor-menu/index.spec.js
@@ -217,24 +217,6 @@ describe('Ticket Component vnTicketDescriptorMenu', () => {
});
});
- describe('refund()', () => {
- it('should make a query and go to ticket.card.sale', () => {
- controller.$state.go = jest.fn();
-
- controller._id = ticket.id;
-
- const params = {
- ticketsIds: [16]
- };
- const response = {id: 99};
- $httpBackend.expectPOST('Tickets/refund', params).respond([response]);
- controller.refund();
- $httpBackend.flush();
-
- expect(controller.$state.go).toHaveBeenCalledWith('ticket.card.sale', response);
- });
- });
-
describe('sendChangesSms()', () => {
it('should make a query and open the sms dialog', () => {
controller.$.sms = {open: () => {}};
diff --git a/modules/ticket/front/sale/index.html b/modules/ticket/front/sale/index.html
index 262395d16..dafae8974 100644
--- a/modules/ticket/front/sale/index.html
+++ b/modules/ticket/front/sale/index.html
@@ -81,7 +81,7 @@
-
+
diff --git a/modules/ticket/front/sale/index.js b/modules/ticket/front/sale/index.js
index 7ff8d89e3..4f8494ed0 100644
--- a/modules/ticket/front/sale/index.js
+++ b/modules/ticket/front/sale/index.js
@@ -214,7 +214,7 @@ class Controller extends Section {
const params = {ticketId: this.ticket.id, sales: sales};
this.resetChanges();
this.$http.post(`Claims/createFromSales`, params)
- .then(res => this.$state.go('claim.card.basicData', {id: res.data.id}));
+ .then(async res => window.location.href = await this.vnApp.getUrl(`claim/${res.data.id}/basic-data`));
}
showTransferPopover(event) {
@@ -558,6 +558,10 @@ class Controller extends Section {
changedModelId: saleId
});
}
+
+ async goToLilium(section, id) {
+ window.location.href = await this.vnApp.getUrl(`claim/${id}/${section}`);
+ }
}
ngModule.vnComponent('vnTicketSale', {
diff --git a/modules/ticket/front/sale/index.spec.js b/modules/ticket/front/sale/index.spec.js
index 8200d6b89..931776619 100644
--- a/modules/ticket/front/sale/index.spec.js
+++ b/modules/ticket/front/sale/index.spec.js
@@ -295,20 +295,26 @@ describe('Ticket', () => {
describe('onCreateClaimAccepted()', () => {
it('should perform a query and call window open', () => {
jest.spyOn(controller, 'resetChanges').mockReturnThis();
- jest.spyOn(controller.$state, 'go').mockReturnThis();
+ jest.spyOn(controller.vnApp, 'getUrl').mockReturnThis();
+ Object.defineProperty(window, 'location', {
+ value: {
+ href: () => {}
+ },
+ });
+ jest.spyOn(controller.window.location, 'href');
const newEmptySale = {quantity: 10};
controller.sales.push(newEmptySale);
const firstSale = controller.sales[0];
+ const claimId = 1;
firstSale.checked = true;
const expectedParams = {ticketId: 1, sales: [firstSale]};
- $httpBackend.expect('POST', `Claims/createFromSales`, expectedParams).respond(200, {id: 1});
+ $httpBackend.expect('POST', `Claims/createFromSales`, expectedParams).respond(200, {id: claimId});
controller.onCreateClaimAccepted();
$httpBackend.flush();
expect(controller.resetChanges).toHaveBeenCalledWith();
- expect(controller.$state.go).toHaveBeenCalledWith('claim.card.basicData', {id: 1});
});
});
diff --git a/modules/ticket/front/summary/index.html b/modules/ticket/front/summary/index.html
index 025078d36..7ee260f74 100644
--- a/modules/ticket/front/summary/index.html
+++ b/modules/ticket/front/summary/index.html
@@ -152,13 +152,13 @@
-
+
-
+
-
-
-
diff --git a/modules/worker/front/basic-data/index.js b/modules/worker/front/basic-data/index.js
deleted file mode 100644
index ea75d7b97..000000000
--- a/modules/worker/front/basic-data/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.maritalStatus = [
- {code: 'M', name: this.$t('Married')},
- {code: 'S', name: this.$t('Single')}
- ];
- }
- onSubmit() {
- return this.$.watcher.submit()
- .then(() => this.card.reload());
- }
-}
-
-ngModule.vnComponent('vnWorkerBasicData', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- },
- require: {
- card: '^vnWorkerCard'
- }
-});
diff --git a/modules/worker/front/basic-data/locale/es.yml b/modules/worker/front/basic-data/locale/es.yml
deleted file mode 100644
index edf08de90..000000000
--- a/modules/worker/front/basic-data/locale/es.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-Marital status: Estado civil
-Origin country: País origen
-Education level: Nivel educación
-SSN: NSS
-Married: Casado/a
-Single: Soltero/a
-Business phone: Teléfono de empresa
-Mobile extension: Extensión móvil
-Locker: Taquilla
diff --git a/modules/worker/front/calendar/index.html b/modules/worker/front/calendar/index.html
deleted file mode 100644
index 1b0608633..000000000
--- a/modules/worker/front/calendar/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
- Autonomous worker
-
-
-
-
-
{{'Contract' | translate}} #{{$ctrl.businessId}}
-
- {{'Used' | translate}} {{$ctrl.contractHolidays.holidaysEnjoyed || 0}}
- {{'of' | translate}} {{$ctrl.contractHolidays.totalHolidays || 0}} {{'days' | translate}}
-
-
- {{'Spent' | translate}} {{$ctrl.contractHolidays.hoursEnjoyed || 0}}
- {{'of' | translate}} {{$ctrl.contractHolidays.totalHours || 0}} {{'hours' | translate}}
-
-
- {{'Paid holidays' | translate}} {{$ctrl.contractHolidays.payedHolidays || 0}} {{'days' | translate}}
-
-
-
-
-
{{'Year' | translate}} {{$ctrl.year}}
-
- {{'Used' | translate}} {{$ctrl.yearHolidays.holidaysEnjoyed || 0}}
- {{'of' | translate}} {{$ctrl.yearHolidays.totalHolidays || 0}} {{'days' | translate}}
-
-
- {{'Spent' | translate}} {{$ctrl.yearHolidays.hoursEnjoyed || 0}}
- {{'of' | translate}} {{$ctrl.yearHolidays.totalHours || 0}} {{'hours' | translate}}
-
-
-
-
-
-
-
-
- #{{businessFk}}
-
- {{started | date: 'dd/MM/yyyy'}} - {{ended ? (ended | date: 'dd/MM/yyyy') : 'Indef.'}}
-
-
-
-
-
-
-
-
-
-
- {{absenceType.name}}
-
-
-
-
-
-
- Festive
-
-
-
-
- Current day
-
-
-
-
-
-
-
-
diff --git a/modules/worker/front/calendar/index.js b/modules/worker/front/calendar/index.js
deleted file mode 100644
index 5606ad0ce..000000000
--- a/modules/worker/front/calendar/index.js
+++ /dev/null
@@ -1,302 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.date = Date.vnNew();
- this.events = {};
- this.buildYearFilter();
- }
-
- get year() {
- return this.date.getFullYear();
- }
-
- set year(value) {
- const newYear = Date.vnNew();
- newYear.setFullYear(value);
-
- this.date = newYear;
-
- this.refresh()
- .then(() => this.repaint())
- .then(() => this.getContractHolidays())
- .then(() => this.getYearHolidays());
- }
-
- get businessId() {
- return this._businessId;
- }
-
- set businessId(value) {
- if (!this.card.hasWorkCenter) return;
-
- this._businessId = value;
- if (value) {
- this.refresh()
- .then(() => this.repaint())
- .then(() => this.getContractHolidays())
- .then(() => this.getYearHolidays());
- }
- }
-
- get date() {
- return this._date;
- }
-
- set date(value) {
- this._date = value;
- value.setHours(0, 0, 0, 0);
-
- this.months = new Array(12);
-
- for (let i = 0; i < this.months.length; i++) {
- const now = new Date(value.getTime());
- now.setDate(1);
- now.setMonth(i);
- this.months[i] = now;
- }
- }
-
- get worker() {
- return this._worker;
- }
-
- set worker(value) {
- this._worker = value;
- if (value) {
- this.getIsSubordinate();
- this.getActiveContract();
- }
- }
-
- buildYearFilter() {
- const now = Date.vnNew();
- now.setFullYear(now.getFullYear() + 1);
-
- const maxYear = now.getFullYear();
- const minRange = maxYear - 5;
-
- const years = [];
- for (let i = maxYear; i > minRange; i--)
- years.push({year: i});
-
- this.yearFilter = years;
- }
-
- getIsSubordinate() {
- this.$http.get(`Workers/${this.worker.id}/isSubordinate`)
- .then(res => this.isSubordinate = res.data);
- }
-
- getActiveContract() {
- this.$http.get(`Workers/${this.worker.id}/activeContract`)
- .then(res => {
- if (res.data) this.businessId = res.data.businessFk;
- });
- }
-
- getContractHolidays() {
- this.getHolidays({
- businessFk: this.businessId,
- year: this.year
- }, data => this.contractHolidays = data);
- }
-
- getYearHolidays() {
- this.getHolidays({
- year: this.year
- }, data => this.yearHolidays = data);
- }
-
- getHolidays(params, cb) {
- this.$http.get(`Workers/${this.worker.id}/holidays`, {params})
- .then(res => cb(res.data));
- }
-
- onData(data) {
- this.events = {};
- this.calendar = data.calendar;
-
- let addEvent = (day, newEvent) => {
- const timestamp = new Date(day).getTime();
- const event = this.events[timestamp];
-
- if (event) {
- const oldName = event.name;
- Object.assign(event, newEvent);
- event.name = `${oldName}, ${event.name}`;
- } else
- this.events[timestamp] = newEvent;
- };
-
- if (data.holidays) {
- data.holidays.forEach(holiday => {
- const holidayDetail = holiday.detail && holiday.detail.name;
- const holidayType = holiday.type && holiday.type.name;
- const holidayName = holidayDetail || holidayType;
-
- addEvent(holiday.dated, {
- name: holidayName,
- className: 'festive'
- });
- });
- }
- if (data.absences) {
- data.absences.forEach(absence => {
- let type = absence.absenceType;
- addEvent(absence.dated, {
- name: type.name,
- color: type.rgb,
- type: type.code,
- absenceId: absence.id
- });
- });
- }
- }
-
- repaint() {
- let calendars = this.element.querySelectorAll('vn-calendar');
- for (let calendar of calendars)
- calendar.$ctrl.repaint();
- }
-
- formatDay(day, element) {
- let event = this.events[day.getTime()];
- if (!event) return;
-
- let dayNumber = element.firstElementChild;
- dayNumber.title = event.name;
- dayNumber.style.backgroundColor = event.color;
-
- if (event.border)
- dayNumber.style.border = event.border;
-
- if (event.className)
- dayNumber.classList.add(event.className);
- }
-
- pick(absenceType) {
- if (!this.isSubordinate) return;
- if (absenceType == this.absenceType)
- absenceType = null;
-
- this.absenceType = absenceType;
- }
-
- onSelection($event, $days) {
- if (!this.absenceType)
- return this.vnApp.showMessage(this.$t('Choose an absence type from the right menu'));
-
- const day = $days[0];
- const stamp = day.getTime();
- const event = this.events[stamp];
- const calendar = $event.target.closest('vn-calendar').$ctrl;
-
- if (event && event.absenceId) {
- if (event.type == this.absenceType.code)
- this.delete(calendar, day, event);
- else
- this.edit(calendar, event);
- } else
- this.create(calendar, day);
- }
-
- create(calendar, dated) {
- const absenceType = this.absenceType;
- const params = {
- dated: dated,
- absenceTypeId: absenceType.id,
- businessFk: this.businessId
- };
-
- const path = `Workers/${this.$params.id}/createAbsence`;
- this.$http.post(path, params).then(res => {
- const newEvent = res.data;
- this.events[dated.getTime()] = {
- name: absenceType.name,
- color: absenceType.rgb,
- type: absenceType.code,
- absenceId: newEvent.id
- };
-
- this.repaintCanceller(() =>
- this.refresh()
- .then(calendar.repaint())
- .then(() => this.getContractHolidays())
- .then(() => this.getYearHolidays())
- .then(() => this.repaint())
- );
- });
- }
-
- edit(calendar, event) {
- const absenceType = this.absenceType;
- const params = {
- absenceId: event.absenceId,
- absenceTypeId: absenceType.id
- };
- const path = `Workers/${this.$params.id}/updateAbsence`;
- this.$http.patch(path, params).then(() => {
- event.color = absenceType.rgb;
- event.name = absenceType.name;
- event.type = absenceType.code;
-
- this.repaintCanceller(() =>
- this.refresh()
- .then(calendar.repaint())
- .then(() => this.getContractHolidays())
- .then(() => this.getYearHolidays())
- );
- });
- }
-
- delete(calendar, day, event) {
- const params = {absenceId: event.absenceId};
- const path = `Workers/${this.$params.id}/deleteAbsence`;
- this.$http.delete(path, {params}).then(() => {
- delete this.events[day.getTime()];
-
- this.repaintCanceller(() =>
- this.refresh()
- .then(calendar.repaint())
- .then(() => this.getContractHolidays())
- .then(() => this.getYearHolidays())
- .then(() => this.repaint())
- );
- });
- }
-
- repaintCanceller(cb) {
- if (this.canceller) {
- clearTimeout(this.canceller);
- this.canceller = null;
- }
-
- this.canceller = setTimeout(
- () => cb(), 500);
- }
-
- refresh() {
- const params = {
- workerFk: this.$params.id,
- businessFk: this.businessId,
- year: this.year
- };
- return this.$http.get(`Calendars/absences`, {params})
- .then(res => this.onData(res.data));
- }
-}
-
-ngModule.vnComponent('vnWorkerCalendar', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- },
- require: {
- card: '^vnWorkerCard'
- }
-});
diff --git a/modules/worker/front/calendar/index.spec.js b/modules/worker/front/calendar/index.spec.js
deleted file mode 100644
index 5d7ae0795..000000000
--- a/modules/worker/front/calendar/index.spec.js
+++ /dev/null
@@ -1,346 +0,0 @@
-import './index';
-
-describe('Worker', () => {
- describe('Component vnWorkerCalendar', () => {
- let $httpBackend;
- let $httpParamSerializer;
- let $scope;
- let controller;
- let year = Date.vnNew().getFullYear();
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpParamSerializer_, _$httpBackend_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- const $element = angular.element('');
- controller = $componentController('vnWorkerCalendar', {$element, $scope});
- controller.isSubordinate = true;
- controller.absenceType = {id: 1, name: 'Holiday', code: 'holiday', rgb: 'red'};
- controller.$params.id = 1106;
- controller._worker = {id: 1106};
- controller.card = {
- hasWorkCenter: true
- };
- }));
-
- describe('year() getter', () => {
- it(`should return the year number of the calendar date`, () => {
- expect(controller.year).toEqual(year);
- });
- });
-
- describe('year() setter', () => {
- it(`should set the year of the calendar date`, () => {
- jest.spyOn(controller, 'refresh').mockReturnValue(Promise.resolve());
-
- const previousYear = year - 1;
- controller.year = previousYear;
-
- expect(controller.year).toEqual(previousYear);
- expect(controller.date.getFullYear()).toEqual(previousYear);
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('businessId() setter', () => {
- it(`should set the contract id and then call to the refresh method`, () => {
- jest.spyOn(controller, 'refresh').mockReturnValue(Promise.resolve());
-
- controller.businessId = 1106;
-
- expect(controller.refresh).toHaveBeenCalledWith();
- });
- });
-
- describe('months property', () => {
- it(`should return an array of twelve months length`, () => {
- const started = new Date(year, 0, 1);
- const ended = new Date(year, 11, 1);
-
- expect(controller.months.length).toEqual(12);
- expect(controller.months[0]).toEqual(started);
- expect(controller.months[11]).toEqual(ended);
- });
- });
-
- describe('worker() setter', () => {
- it(`should perform a get query and set the reponse data on the model`, () => {
- controller.getIsSubordinate = jest.fn();
- controller.getActiveContract = jest.fn();
-
- let today = Date.vnNew();
- let tomorrow = new Date(today.getTime());
- tomorrow.setDate(tomorrow.getDate() + 1);
-
- let yesterday = new Date(today.getTime());
- yesterday.setDate(yesterday.getDate() - 1);
-
- controller.worker = {id: 1107};
-
- expect(controller.getIsSubordinate).toHaveBeenCalledWith();
- expect(controller.getActiveContract).toHaveBeenCalledWith();
- });
- });
-
- describe('getIsSubordinate()', () => {
- it(`should return whether the worker is a subordinate`, () => {
- $httpBackend.expect('GET', `Workers/1106/isSubordinate`).respond(true);
- controller.getIsSubordinate();
- $httpBackend.flush();
-
- expect(controller.isSubordinate).toBe(true);
- });
- });
-
- describe('getActiveContract()', () => {
- it(`should return the current contract and then set the businessId property`, () => {
- jest.spyOn(controller, 'refresh').mockReturnValue(Promise.resolve());
-
- $httpBackend.expect('GET', `Workers/1106/activeContract`).respond({businessFk: 1106});
- controller.getActiveContract();
- $httpBackend.flush();
-
- expect(controller.businessId).toEqual(1106);
- });
- });
-
- describe('getContractHolidays()', () => {
- it(`should return the worker holidays amount and then set the contractHolidays property`, () => {
- const today = Date.vnNew();
- const year = today.getFullYear();
-
- const serializedParams = $httpParamSerializer({year});
- $httpBackend.expect('GET', `Workers/1106/holidays?${serializedParams}`).respond({totalHolidays: 28});
- controller.getContractHolidays();
- $httpBackend.flush();
-
- expect(controller.contractHolidays).toEqual({totalHolidays: 28});
- });
- });
-
- describe('formatDay()', () => {
- it(`should set the day element style`, () => {
- const today = Date.vnNew();
-
- controller.events[today.getTime()] = {
- name: 'Holiday',
- color: '#000'
- };
-
- const dayElement = angular.element('')[0];
- const dayNumber = dayElement.firstElementChild;
-
- controller.formatDay(today, dayElement);
-
- expect(dayNumber.title).toEqual('Holiday');
- expect(dayNumber.style.backgroundColor).toEqual('rgb(0, 0, 0)');
- });
- });
-
- describe('pick()', () => {
- it(`should set the absenceType property to null if they match with the current one`, () => {
- const absenceType = {id: 1, name: 'Holiday'};
- controller.absenceType = absenceType;
- controller.pick(absenceType);
-
- expect(controller.absenceType).toBeNull();
- });
-
- it(`should set the absenceType property`, () => {
- const absenceType = {id: 1, name: 'Holiday'};
- const expectedAbsence = {id: 2, name: 'Leave of absence'};
- controller.absenceType = absenceType;
- controller.pick(expectedAbsence);
-
- expect(controller.absenceType).toEqual(expectedAbsence);
- });
- });
-
- describe('onSelection()', () => {
- it(`should show an snackbar message if no absence type is selected`, () => {
- jest.spyOn(controller.vnApp, 'showMessage').mockReturnThis();
-
- const $event = {};
- const $days = [];
- controller.absenceType = null;
- controller.onSelection($event, $days);
-
- expect(controller.vnApp.showMessage).toHaveBeenCalledWith('Choose an absence type from the right menu');
- });
-
- it(`should call to the create() method`, () => {
- jest.spyOn(controller, 'create').mockReturnThis();
-
- const selectedDay = Date.vnNew();
- const $event = {
- target: {
- closest: () => {
- return {$ctrl: {}};
- }
- }
- };
- const $days = [selectedDay];
- controller.absenceType = {id: 1};
- controller.onSelection($event, $days);
-
- expect(controller.create).toHaveBeenCalledWith(jasmine.any(Object), selectedDay);
- });
-
- it(`should call to the delete() method`, () => {
- jest.spyOn(controller, 'delete').mockReturnThis();
-
- const selectedDay = Date.vnNew();
- const expectedEvent = {
- dated: selectedDay,
- type: 'holiday',
- absenceId: 1
- };
- const $event = {
- target: {
- closest: () => {
- return {$ctrl: {}};
- }
- }
- };
- const $days = [selectedDay];
- controller.events[selectedDay.getTime()] = expectedEvent;
- controller.absenceType = {id: 1, code: 'holiday'};
- controller.onSelection($event, $days);
-
- expect(controller.delete).toHaveBeenCalledWith(jasmine.any(Object), selectedDay, expectedEvent);
- });
-
- it(`should call to the edit() method`, () => {
- jest.spyOn(controller, 'edit').mockReturnThis();
-
- const selectedDay = Date.vnNew();
- const expectedEvent = {
- dated: selectedDay,
- type: 'leaveOfAbsence',
- absenceId: 1
- };
- const $event = {
- target: {
- closest: () => {
- return {$ctrl: {}};
- }
- }
- };
- const $days = [selectedDay];
- controller.events[selectedDay.getTime()] = expectedEvent;
- controller.absenceType = {id: 1, code: 'holiday'};
- controller.onSelection($event, $days);
-
- expect(controller.edit).toHaveBeenCalledWith(jasmine.any(Object), expectedEvent);
- });
- });
-
- describe('create()', () => {
- it(`should make a HTTP POST query and then call to the repaintCanceller() method`, () => {
- jest.spyOn(controller, 'repaintCanceller').mockReturnThis();
-
- const dated = Date.vnNew();
- const calendarElement = {};
- const expectedResponse = {id: 10};
-
- $httpBackend.expect('POST', `Workers/1106/createAbsence`).respond(200, expectedResponse);
- controller.create(calendarElement, dated);
- $httpBackend.flush();
-
- const createdEvent = controller.events[dated.getTime()];
- const absenceType = controller.absenceType;
-
- expect(createdEvent.absenceId).toEqual(expectedResponse.id);
- expect(createdEvent.color).toEqual(absenceType.rgb);
- expect(controller.repaintCanceller).toHaveBeenCalled();
- });
- });
-
- describe('edit()', () => {
- it(`should make a HTTP PATCH query and then call to the repaintCanceller() method`, () => {
- jest.spyOn(controller, 'repaintCanceller').mockReturnThis();
-
- const event = {absenceId: 10};
- const calendarElement = {};
- const newAbsenceType = {
- id: 2,
- name: 'Leave of absence',
- code: 'leaveOfAbsence',
- rgb: 'purple'
- };
- controller.absenceType = newAbsenceType;
-
- const expectedParams = {absenceId: 10, absenceTypeId: 2};
- $httpBackend.expect('PATCH', `Workers/1106/updateAbsence`, expectedParams).respond(200);
- controller.edit(calendarElement, event);
- $httpBackend.flush();
-
- expect(event.name).toEqual(newAbsenceType.name);
- expect(event.color).toEqual(newAbsenceType.rgb);
- expect(event.type).toEqual(newAbsenceType.code);
- expect(controller.repaintCanceller).toHaveBeenCalled();
- });
- });
-
- describe('delete()', () => {
- it(`should make a HTTP DELETE query and then call to the repaintCanceller() method`, () => {
- jest.spyOn(controller, 'repaintCanceller').mockReturnThis();
-
- const expectedParams = {absenceId: 10};
- const calendarElement = {};
- const selectedDay = Date.vnNew();
- const expectedEvent = {
- dated: selectedDay,
- type: 'leaveOfAbsence',
- absenceId: 10
- };
-
- controller.events[selectedDay.getTime()] = expectedEvent;
-
- const serializedParams = $httpParamSerializer(expectedParams);
- $httpBackend.expect('DELETE', `Workers/1106/deleteAbsence?${serializedParams}`).respond(200);
- controller.delete(calendarElement, selectedDay, expectedEvent);
- $httpBackend.flush();
-
- const event = controller.events[selectedDay.getTime()];
-
- expect(event).toBeUndefined();
- expect(controller.repaintCanceller).toHaveBeenCalled();
- });
- });
-
- describe('repaintCanceller()', () => {
- it(`should cancell the callback execution timer`, () => {
- jest.spyOn(window, 'clearTimeout');
- jest.spyOn(window, 'setTimeout');
-
- const timeoutId = 90;
- controller.canceller = timeoutId;
-
- controller.repaintCanceller(() => {
- return 'My callback';
- });
-
- expect(window.clearTimeout).toHaveBeenCalledWith(timeoutId);
- expect(window.setTimeout).toHaveBeenCalledWith(jasmine.any(Function), 500);
- });
- });
-
- describe('refresh()', () => {
- it(`should make a HTTP GET query and then call to the onData() method`, () => {
- jest.spyOn(controller, 'onData').mockReturnThis();
-
- const expecteResponse = [{id: 1}];
- const expectedParams = {workerFk: controller.worker.id, year: year};
- const serializedParams = $httpParamSerializer(expectedParams);
- $httpBackend.expect('GET', `Calendars/absences?${serializedParams}`).respond(200, expecteResponse);
- controller.refresh();
- $httpBackend.flush();
-
- expect(controller.onData).toHaveBeenCalledWith(expecteResponse);
- });
- });
- });
-});
diff --git a/modules/worker/front/calendar/locale/es.yml b/modules/worker/front/calendar/locale/es.yml
deleted file mode 100644
index 50bb4bb52..000000000
--- a/modules/worker/front/calendar/locale/es.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-Calendar: Calendario
-Contract: Contrato
-Festive: Festivo
-Used: Utilizados
-Spent: Utilizadas
-Year: Año
-of: de
-days: días
-hours: horas
-Choose an absence type from the right menu: Elige un tipo de ausencia desde el menú de la derecha
-To start adding absences, click an absence type from the right menu and then on the day you want to add an absence: Para empezar a añadir ausencias, haz clic en un tipo de ausencia desde el menu de la derecha y después en el día que quieres añadir la ausencia
-You can just add absences within the current year: Solo puedes añadir ausencias dentro del año actual
-Current day: Día actual
-Paid holidays: Vacaciones pagadas
-Autonomous worker: Trabajador autónomo
diff --git a/modules/worker/front/calendar/style.scss b/modules/worker/front/calendar/style.scss
deleted file mode 100644
index e99f64689..000000000
--- a/modules/worker/front/calendar/style.scss
+++ /dev/null
@@ -1,65 +0,0 @@
-@import "variables";
-
-vn-worker-calendar {
- .calendars {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- align-items: center;
- box-sizing: border-box;
- padding: $spacing-md;
-
- & > vn-calendar {
- border: $border-thin;
- margin: $spacing-md;
- padding: $spacing-xs;
- max-width: 288px;
- }
- }
-
- vn-chip.selectable {
- cursor: pointer
- }
-
- vn-chip.selectable:hover {
- opacity: 0.8
- }
-
- vn-chip vn-avatar {
- text-align: center;
- color: white
- }
-
- vn-icon[icon="info"] {
- position: absolute;
- top: 16px;
- right: 16px
- }
-
- vn-side-menu div > .input {
- border-bottom: $border-thin;
- }
-
- .festive,
- vn-avatar.today {
- color: $color-font;
- width: 24px;
- min-width: 24px;
- height: 24px
- }
-
- .festive {
- border: 2px solid $color-alert
- }
-
- vn-avatar.today {
- border: 2px solid $color-font-link
- }
-
- .check {
- margin-top: 0.5px;
- margin-left: -3px;
- font-size: 125%;
- }
-}
diff --git a/modules/worker/front/create/index.html b/modules/worker/front/create/index.html
deleted file mode 100644
index 3030ffecd..000000000
--- a/modules/worker/front/create/index.html
+++ /dev/null
@@ -1,198 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/worker/front/create/index.js b/modules/worker/front/create/index.js
deleted file mode 100644
index e6d65221f..000000000
--- a/modules/worker/front/create/index.js
+++ /dev/null
@@ -1,141 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.worker = {companyFk: this.vnConfig.user.companyFk};
- this.$http.get(`WorkerConfigs/findOne`, {field: ['payMethodFk']}).then(res => {
- if (res.data) this.worker.payMethodFk = res.data.payMethodFk;
- });
- }
-
- onSubmit() {
- if (!this.worker.iban && !this.worker.bankEntityFk) {
- delete this.worker.iban;
- delete this.worker.bankEntityFk;
- }
-
- return this.$.watcher.submit().then(json => {
- this.$state.go('worker.card.basicData', {id: json.data.id});
- });
- }
-
- get ibanCountry() {
- if (!this.worker || !this.worker.iban) return false;
-
- let countryCode = this.worker.iban.substr(0, 2);
-
- return countryCode;
- }
-
- autofillBic() {
- if (!this.worker || !this.worker.iban) return;
-
- let bankEntityId = parseInt(this.worker.iban.substr(4, 4));
- let filter = {where: {id: bankEntityId}};
-
- this.$http.get(`BankEntities`, {filter}).then(response => {
- const hasData = response.data && response.data[0];
-
- if (hasData)
- this.worker.bankEntityFk = response.data[0].id;
- else if (!hasData)
- this.worker.bankEntityFk = null;
- });
- }
-
- generateCodeUser() {
- if (!this.worker.firstName || !this.worker.lastNames) return;
-
- const totalName = this.worker.firstName.concat(' ' + this.worker.lastNames).toLowerCase();
- const totalNameArray = totalName.split(' ');
- let newCode = '';
-
- for (let part of totalNameArray)
- newCode += part.charAt(0);
-
- this.worker.code = newCode.toUpperCase().slice(0, 3);
- this.worker.name = totalNameArray[0] + newCode.slice(1);
-
- if (!this.worker.companyFk)
- this.worker.companyFk = this.vnConfig.user.companyFk;
- }
-
- get province() {
- return this._province;
- }
-
- // Province auto complete
- set province(selection) {
- this._province = selection;
-
- if (!selection) return;
-
- const country = selection.country;
-
- if (!this.worker.countryFk)
- this.worker.countryFk = country.id;
- }
-
- get town() {
- return this._town;
- }
-
- // Town auto complete
- set town(selection) {
- this._town = selection;
-
- if (!selection) return;
-
- const province = selection.province;
- const country = province.country;
- const postcodes = selection.postcodes;
-
- if (!this.worker.provinceFk)
- this.worker.provinceFk = province.id;
-
- if (!this.worker.countryFk)
- this.worker.countryFk = country.id;
-
- if (postcodes.length === 1)
- this.worker.postcode = postcodes[0].code;
- }
-
- get postcode() {
- return this._postcode;
- }
-
- // Postcode auto complete
- set postcode(selection) {
- this._postcode = selection;
-
- if (!selection) return;
-
- const town = selection.town;
- const province = town.province;
- const country = province.country;
-
- if (!this.worker.city)
- this.worker.city = town.name;
-
- if (!this.worker.provinceFk)
- this.worker.provinceFk = province.id;
-
- if (!this.worker.countryFk)
- this.worker.countryFk = country.id;
- }
-
- onResponse(response) {
- this.worker.postcode = response.code;
- this.worker.city = response.city;
- this.worker.provinceFk = response.provinceFk;
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnWorkerCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/worker/front/create/index.spec.js b/modules/worker/front/create/index.spec.js
deleted file mode 100644
index c2e9acce0..000000000
--- a/modules/worker/front/create/index.spec.js
+++ /dev/null
@@ -1,133 +0,0 @@
-import './index';
-
-describe('Worker', () => {
- describe('Component vnWorkerCreate', () => {
- let $scope;
- let $state;
- let controller;
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($componentController, $rootScope, _$state_) => {
- $scope = $rootScope.$new();
- $state = _$state_;
- $scope.watcher = {
- submit: () => {
- return {
- then: callback => {
- callback({data: {id: '1234'}});
- }
- };
- }
- };
- const $element = angular.element('');
- controller = $componentController('vnWorkerCreate', {$element, $scope});
- controller.worker = {};
- controller.vnConfig = {user: {companyFk: 1}};
- }));
-
- describe('onSubmit()', () => {
- it(`should call submit() on the watcher then expect a callback`, () => {
- jest.spyOn($state, 'go');
- controller.onSubmit();
-
- expect(controller.$state.go).toHaveBeenCalledWith('worker.card.basicData', {id: '1234'});
- });
- });
-
- describe('province() setter', () => {
- it(`should set countryFk property`, () => {
- controller.worker.countryFk = null;
- controller.province = {
- id: 1,
- name: 'New york',
- country: {
- id: 2,
- name: 'USA'
- }
- };
-
- expect(controller.worker.countryFk).toEqual(2);
- });
- });
-
- describe('town() setter', () => {
- it(`should set provinceFk property`, () => {
- controller.town = {
- provinceFk: 1,
- code: 46001,
- province: {
- id: 1,
- name: 'New york',
- country: {
- id: 2,
- name: 'USA'
- }
- },
- postcodes: []
- };
-
- expect(controller.worker.provinceFk).toEqual(1);
- });
-
- it(`should set provinceFk property and fill the postalCode if there's just one`, () => {
- controller.town = {
- provinceFk: 1,
- code: 46001,
- province: {
- id: 1,
- name: 'New york',
- country: {
- id: 2,
- name: 'USA'
- }
- },
- postcodes: [{code: '46001'}]
- };
-
- expect(controller.worker.provinceFk).toEqual(1);
- expect(controller.worker.postcode).toEqual('46001');
- });
- });
-
- describe('postcode() setter', () => {
- it(`should set the town, provinceFk and contryFk properties`, () => {
- controller.postcode = {
- townFk: 1,
- code: 46001,
- town: {
- id: 1,
- name: 'New York',
- province: {
- id: 1,
- name: 'New york',
- country: {
- id: 2,
- name: 'USA'
- }
- }
- }
- };
-
- expect(controller.worker.city).toEqual('New York');
- expect(controller.worker.provinceFk).toEqual(1);
- expect(controller.worker.countryFk).toEqual(2);
- });
- });
-
- describe('generateCodeUser()', () => {
- it(`should generate worker code, name and company `, () => {
- controller.worker = {
- firstName: 'default',
- lastNames: 'generate worker'
- };
-
- controller.generateCodeUser();
-
- expect(controller.worker.code).toEqual('DGW');
- expect(controller.worker.name).toEqual('defaultgw');
- expect(controller.worker.companyFk).toEqual(controller.vnConfig.user.companyFk);
- });
- });
- });
-});
diff --git a/modules/worker/front/create/locale/es.yml b/modules/worker/front/create/locale/es.yml
deleted file mode 100644
index 4e8d2df1e..000000000
--- a/modules/worker/front/create/locale/es.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-Firstname: Nombre
-Lastname: Apellidos
-Fi: DNI/NIF/NIE
-Birth: Fecha de nacimiento
-Worker code: Código de trabajador
-Province: Provincia
-City: Población
-ProfileType: Tipo de perfil
-Street: Dirección
-Postcode: Código postal
-Web user: Usuario Web
-Access permission: Permiso de acceso
-Pay method: Método de pago
diff --git a/modules/worker/front/dms/create/index.html b/modules/worker/front/dms/create/index.html
deleted file mode 100644
index 0f2d51dd3..000000000
--- a/modules/worker/front/dms/create/index.html
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/worker/front/dms/create/index.js b/modules/worker/front/dms/create/index.js
deleted file mode 100644
index ff6112211..000000000
--- a/modules/worker/front/dms/create/index.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.dms = {
- files: [],
- hasFile: false,
- hasFileAttached: false
- };
- }
-
- get worker() {
- return this._worker;
- }
-
- set worker(value) {
- this._worker = value;
-
- if (value) {
- this.setDefaultParams();
- this.getAllowedContentTypes();
- }
- }
-
- getAllowedContentTypes() {
- this.$http.get('DmsContainers/allowedContentTypes').then(res => {
- const contentTypes = res.data.join(', ');
- this.allowedContentTypes = contentTypes;
- });
- }
-
- get contentTypesInfo() {
- return this.$t('ContentTypesInfo', {
- allowedContentTypes: this.allowedContentTypes
- });
- }
-
- setDefaultParams() {
- const params = {filter: {
- where: {code: 'hhrrData'}
- }};
- this.$http.get('DmsTypes/findOne', {params}).then(res => {
- const dmsType = res.data && res.data;
- const companyId = this.vnConfig.companyFk;
- const warehouseId = this.vnConfig.warehouseFk;
- const defaultParams = {
- reference: this.worker.id,
- warehouseId: warehouseId,
- companyId: companyId,
- dmsTypeId: dmsType.id,
- description: this.$t('WorkerFileDescription', {
- dmsTypeName: dmsType.name,
- workerId: this.worker.id,
- workerName: this.worker.name
- }).toUpperCase()
- };
-
- this.dms = Object.assign(this.dms, defaultParams);
- });
- }
-
- onSubmit() {
- const query = `Workers/${this.worker.id}/uploadFile`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
-
- for (let i = 0; i < files.length; i++)
- formData.append(files[i].name, files[i]);
-
- return formData;
- },
- data: this.dms.files
- };
- this.$http(options).then(res => {
- if (res) {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.watcher.updateOriginalData();
- this.$state.go('worker.card.dms.index');
- }
- });
- }
-
- onFileChange(files) {
- let hasFileAttached = false;
-
- if (files.length > 0)
- hasFileAttached = true;
-
- this.$.$applyAsync(() => {
- this.dms.hasFileAttached = hasFileAttached;
- });
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnWorkerDmsCreate', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- }
-});
diff --git a/modules/worker/front/dms/create/index.spec.js b/modules/worker/front/dms/create/index.spec.js
deleted file mode 100644
index 08a2a5981..000000000
--- a/modules/worker/front/dms/create/index.spec.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import './index';
-
-describe('Client', () => {
- describe('Component vnWorkerDmsCreate', () => {
- let $element;
- let controller;
- let $scope;
- let $httpBackend;
- let $httpParamSerializer;
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($compile, $rootScope, _$httpBackend_, _$httpParamSerializer_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $element = $compile(``)($rootScope);
- controller = $element.controller('vnWorkerDmsCreate');
- controller._worker = {id: 1101, name: 'Bruce wayne'};
- $httpBackend.whenRoute('GET', `Warehouses?filter=%7B%7D`).respond([{$oldData: {}}]);
- }));
-
- describe('worker() setter', () => {
- it('should set the worker data and then call setDefaultParams() and getAllowedContentTypes()', () => {
- jest.spyOn(controller, 'setDefaultParams');
- jest.spyOn(controller, 'getAllowedContentTypes');
- controller.worker = {
- id: 15,
- name: 'Bruce wayne'
- };
-
- expect(controller.worker).toBeDefined();
- expect(controller.setDefaultParams).toHaveBeenCalledWith();
- expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
- });
- });
-
- describe('setDefaultParams()', () => {
- it('should perform a GET query and define the dms property on controller', () => {
- $httpBackend.whenRoute('GET', `DmsTypes`).respond({id: 12, code: 'hhrrData'});
- const params = {filter: {
- where: {code: 'hhrrData'}
- }};
- let serializedParams = $httpParamSerializer(params);
- $httpBackend.when('GET', `DmsTypes/findOne?${serializedParams}`).respond({id: 12, code: 'hhrrData'});
- controller.setDefaultParams();
- $httpBackend.flush();
-
- expect(controller.dms).toBeDefined();
- expect(controller.dms.reference).toEqual(1101);
- expect(controller.dms.dmsTypeId).toEqual(12);
- });
- });
-
- describe('onFileChange()', () => {
- it('should set dms hasFileAttached property to true if has any files', () => {
- const files = [{id: 1, name: 'MyFile'}];
- controller.onFileChange(files);
- $scope.$apply();
-
- expect(controller.dms.hasFileAttached).toBeTruthy();
- });
- });
-
- describe('getAllowedContentTypes()', () => {
- it('should make an HTTP GET request to get the allowed content types', () => {
- const expectedResponse = ['image/png', 'image/jpg'];
- $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond(expectedResponse);
- controller.getAllowedContentTypes();
- $httpBackend.flush();
-
- expect(controller.allowedContentTypes).toBeDefined();
- expect(controller.allowedContentTypes).toEqual('image/png, image/jpg');
- });
- });
- });
-});
diff --git a/modules/worker/front/dms/create/style.scss b/modules/worker/front/dms/create/style.scss
deleted file mode 100644
index 73f136fc1..000000000
--- a/modules/worker/front/dms/create/style.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
-
diff --git a/modules/worker/front/dms/edit/index.html b/modules/worker/front/dms/edit/index.html
deleted file mode 100644
index 39d4af801..000000000
--- a/modules/worker/front/dms/edit/index.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
diff --git a/modules/worker/front/dms/edit/index.js b/modules/worker/front/dms/edit/index.js
deleted file mode 100644
index 31d4c2853..000000000
--- a/modules/worker/front/dms/edit/index.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-class Controller extends Section {
- get worker() {
- return this._worker;
- }
-
- set worker(value) {
- this._worker = value;
-
- if (value) {
- this.setDefaultParams();
- this.getAllowedContentTypes();
- }
- }
-
- getAllowedContentTypes() {
- this.$http.get('DmsContainers/allowedContentTypes').then(res => {
- const contentTypes = res.data.join(', ');
- this.allowedContentTypes = contentTypes;
- });
- }
-
- get contentTypesInfo() {
- return this.$t('ContentTypesInfo', {
- allowedContentTypes: this.allowedContentTypes
- });
- }
-
- setDefaultParams() {
- const path = `Dms/${this.$params.dmsId}`;
- this.$http.get(path).then(res => {
- const dms = res.data && res.data;
- this.dms = {
- reference: dms.reference,
- warehouseId: dms.warehouseFk,
- companyId: dms.companyFk,
- dmsTypeId: dms.dmsTypeFk,
- description: dms.description,
- hasFile: dms.hasFile,
- hasFileAttached: false,
- files: []
- };
- });
- }
-
- onSubmit() {
- const query = `dms/${this.$params.dmsId}/updateFile`;
- const options = {
- method: 'POST',
- url: query,
- params: this.dms,
- headers: {
- 'Content-Type': undefined
- },
- transformRequest: files => {
- const formData = new FormData();
-
- for (let i = 0; i < files.length; i++)
- formData.append(files[i].name, files[i]);
-
- return formData;
- },
- data: this.dms.files
- };
- this.$http(options).then(res => {
- if (res) {
- this.vnApp.showSuccess(this.$t('Data saved!'));
- this.$.watcher.updateOriginalData();
- this.$state.go('worker.card.dms.index');
- }
- });
- }
-
- onFileChange(files) {
- let hasFileAttached = false;
- if (files.length > 0)
- hasFileAttached = true;
-
- this.$.$applyAsync(() => {
- this.dms.hasFileAttached = hasFileAttached;
- });
- }
-}
-
-ngModule.vnComponent('vnWorkerDmsEdit', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- }
-});
diff --git a/modules/worker/front/dms/edit/index.spec.js b/modules/worker/front/dms/edit/index.spec.js
deleted file mode 100644
index 0b69f2894..000000000
--- a/modules/worker/front/dms/edit/index.spec.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import './index';
-
-describe('Worker', () => {
- describe('Component vnClientDmsEdit', () => {
- let controller;
- let $scope;
- let $element;
- let $httpBackend;
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $scope = $rootScope.$new();
- $httpBackend = _$httpBackend_;
- $element = angular.element(` {
- it('should set the worker data and then call setDefaultParams() and getAllowedContentTypes()', () => {
- jest.spyOn(controller, 'setDefaultParams');
- jest.spyOn(controller, 'getAllowedContentTypes');
- controller._worker = undefined;
- controller.worker = {
- id: 1106
- };
-
- expect(controller.setDefaultParams).toHaveBeenCalledWith();
- expect(controller.worker).toBeDefined();
- expect(controller.getAllowedContentTypes).toHaveBeenCalledWith();
- });
- });
-
- describe('setDefaultParams()', () => {
- it('should perform a GET query and define the dms property on controller', () => {
- const dmsId = 4;
- const expectedResponse = {
- reference: 1101,
- warehouseFk: 1,
- companyFk: 442,
- dmsTypeFk: 3,
- description: 'Test',
- hasFile: false,
- hasFileAttached: false
- };
-
- $httpBackend.expect('GET', `Dms/${dmsId}`).respond(expectedResponse);
- controller.setDefaultParams();
- $httpBackend.flush();
-
- expect(controller.dms).toBeDefined();
- expect(controller.dms.reference).toEqual(1101);
- expect(controller.dms.dmsTypeId).toEqual(3);
- });
- });
-
- describe('onFileChange()', () => {
- it('should set dms hasFileAttached property to true if has any files', () => {
- const files = [{id: 1, name: 'MyFile'}];
- controller.dms = {hasFileAttached: false};
- controller.onFileChange(files);
- $scope.$apply();
-
- expect(controller.dms.hasFileAttached).toBeTruthy();
- });
- });
-
- describe('getAllowedContentTypes()', () => {
- it('should make an HTTP GET request to get the allowed content types', () => {
- const expectedResponse = ['image/png', 'image/jpg'];
- $httpBackend.expect('GET', `DmsContainers/allowedContentTypes`).respond(expectedResponse);
- controller.getAllowedContentTypes();
- $httpBackend.flush();
-
- expect(controller.allowedContentTypes).toBeDefined();
- expect(controller.allowedContentTypes).toEqual('image/png, image/jpg');
- });
- });
- });
-});
diff --git a/modules/worker/front/dms/edit/style.scss b/modules/worker/front/dms/edit/style.scss
deleted file mode 100644
index 73f136fc1..000000000
--- a/modules/worker/front/dms/edit/style.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-vn-ticket-request {
- .vn-textfield {
- margin: 0!important;
- max-width: 100px;
- }
-}
-
diff --git a/modules/worker/front/dms/index/index.html b/modules/worker/front/dms/index/index.html
deleted file mode 100644
index 310fb95d1..000000000
--- a/modules/worker/front/dms/index/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
-
-
-
- Id
- Order
- Reference
- Description
- Original
- File
- Created
-
-
-
-
-
-
-
- {{::document.id}}
-
-
- {{::document.dms.hardCopyNumber}}
-
-
-
-
- {{::document.dms.reference}}
-
-
-
-
- {{::document.dms.description}}
-
-
-
-
-
-
-
-
- {{::document.dms.file}}
-
-
-
- {{::document.dms.created | date:'dd/MM/yyyy HH:mm'}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/worker/front/dms/index/index.js b/modules/worker/front/dms/index/index.js
deleted file mode 100644
index 6fdc46dbb..000000000
--- a/modules/worker/front/dms/index/index.js
+++ /dev/null
@@ -1,75 +0,0 @@
-import ngModule from '../../module';
-import Component from 'core/lib/component';
-import './style.scss';
-
-class Controller extends Component {
- constructor($element, $, vnFile) {
- super($element, $);
- this.vnFile = vnFile;
- this.filter = {
- include: {
- relation: 'dms',
- scope: {
- fields: [
- 'dmsTypeFk',
- 'reference',
- 'hardCopyNumber',
- 'workerFk',
- 'description',
- 'hasFile',
- 'file',
- 'created',
- 'companyFk',
- 'warehouseFk',
- ],
- include: [
- {
- relation: 'dmsType',
- scope: {
- fields: ['name'],
- },
- },
- {
- relation: 'worker',
- scope: {
- fields: ['id'],
- include: {
- relation: 'user',
- scope: {
- fields: ['name'],
- },
- },
- },
- },
- ],
- },
- },
- };
- }
-
- deleteDms(index) {
- const workerDmsId = this.workerDms[index].dmsFk;
- return this.$http.post(`WorkerDms/${workerDmsId}/removeFile`)
- .then(() => {
- this.$.model.remove(index);
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- downloadFile(dmsId, isDocuware) {
- if (isDocuware) return this.vnFile.download(`api/workerDms/${dmsId}/docuwareDownload`);
- this.vnFile.download(`api/workerDms/${dmsId}/downloadFile`);
- }
-
- async openDocuware() {
- const url = await this.vnApp.getUrl(`WebClient`, 'docuware');
- if (url) window.open(url).focus();
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnFile'];
-
-ngModule.vnComponent('vnWorkerDmsIndex', {
- template: require('./index.html'),
- controller: Controller,
-});
diff --git a/modules/worker/front/dms/index/index.spec.js b/modules/worker/front/dms/index/index.spec.js
deleted file mode 100644
index 9c1e87011..000000000
--- a/modules/worker/front/dms/index/index.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import './index';
-import crudModel from 'core/mocks/crud-model';
-
-describe('Worker', () => {
- describe('Component vnWorkerDmsIndex', () => {
- let $scope;
- let $httpBackend;
- let controller;
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
- $scope = $rootScope.$new();
- controller = $componentController('vnWorkerDmsIndex', {$element: null, $scope});
- controller.$.model = crudModel;
- }));
-
- describe('deleteDms()', () => {
- it('should make an HTTP Post query', () => {
- jest.spyOn(controller.vnApp, 'showSuccess');
- jest.spyOn(controller.$.model, 'remove');
-
- const workerDmsId = 4;
- const dmsIndex = 0;
- controller.workerDms = [{id: 1, dmsFk: 4}];
-
- $httpBackend.expectPOST(`WorkerDms/${workerDmsId}/removeFile`).respond();
- controller.deleteDms(dmsIndex);
- $httpBackend.flush();
-
- expect(controller.$.model.remove).toHaveBeenCalledWith(dmsIndex);
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
- });
-});
diff --git a/modules/worker/front/dms/index/locale/es.yml b/modules/worker/front/dms/index/locale/es.yml
deleted file mode 100644
index b6feb4206..000000000
--- a/modules/worker/front/dms/index/locale/es.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-Are you sure?: Estas seguro?
-Download file: Descargar fichero
-File: Fichero
-File deleted: Fichero eliminado
-Hard copy: Copia
-My documentation: Mi documentacion
-Remove file: Eliminar fichero
-This file will be deleted: Este fichero va a ser borrado
-Type: Tipo
\ No newline at end of file
diff --git a/modules/worker/front/dms/index/style.scss b/modules/worker/front/dms/index/style.scss
deleted file mode 100644
index a6758e2e6..000000000
--- a/modules/worker/front/dms/index/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-vn-client-risk-index {
- .totalBox {
- display: table;
- float: right;
- }
-}
\ No newline at end of file
diff --git a/modules/worker/front/dms/locale/en.yml b/modules/worker/front/dms/locale/en.yml
deleted file mode 100644
index 766853fca..000000000
--- a/modules/worker/front/dms/locale/en.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-ClientFileDescription: "{{dmsTypeName}} from client {{clientName}} id {{clientId}}"
-ContentTypesInfo: Allowed file types {{allowedContentTypes}}
\ No newline at end of file
diff --git a/modules/worker/front/dms/locale/es.yml b/modules/worker/front/dms/locale/es.yml
deleted file mode 100644
index fa4178d35..000000000
--- a/modules/worker/front/dms/locale/es.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-Reference: Referencia
-Description: Descripción
-Company: Empresa
-Upload file: Subir fichero
-Edit file: Editar fichero
-Upload: Subir
-File: Fichero
-WorkerFileDescription: "{{dmsTypeName}} del empleado {{workerName}} id {{workerId}}"
-ContentTypesInfo: "Tipos de archivo permitidos: {{allowedContentTypes}}"
-Generate identifier for original file: Generar identificador para archivo original
-Are you sure you want to continue?: ¿Seguro que quieres continuar?
-File management: Gestión documental
-Hard copy: Copia
-This file will be deleted: Este fichero va a ser borrado
-Are you sure?: ¿Seguro?
-File deleted: Fichero eliminado
-Remove file: Eliminar fichero
-Download file: Descargar fichero
-Created: Creado
-Employee: Empleado
\ No newline at end of file
diff --git a/modules/worker/front/index.js b/modules/worker/front/index.js
index 5c03dc8de..26cb403bb 100644
--- a/modules/worker/front/index.js
+++ b/modules/worker/front/index.js
@@ -1,24 +1,9 @@
export * from './module';
import './main';
-import './index/';
import './summary';
import './card';
-import './create';
import './descriptor';
import './descriptor-popover';
-import './search-panel';
-import './basic-data';
-import './pbx';
-import './pda';
import './department';
-import './calendar';
-import './time-control';
-import './log';
-import './dms/index';
-import './dms/create';
-import './dms/edit';
-import './note/index';
-import './note/create';
-import './notifications';
diff --git a/modules/worker/front/index/index.html b/modules/worker/front/index/index.html
deleted file mode 100644
index 7044ca551..000000000
--- a/modules/worker/front/index/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/worker/front/index/index.js b/modules/worker/front/index/index.js
deleted file mode 100644
index 77dd872e1..000000000
--- a/modules/worker/front/index/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- preview(event, worker) {
- if (event.defaultPrevented) return;
-
- event.preventDefault();
- event.stopPropagation();
-
- this.selectedWorker = worker;
- this.$.preview.show();
- }
-
- goToTimeControl(event, workerId) {
- if (event.defaultPrevented) return;
-
- event.preventDefault();
- event.stopPropagation();
- this.$state.go('worker.card.timeControl', {id: workerId}, {absolute: true});
- }
-
- onMoreChange(callback) {
- callback.call(this);
- }
-}
-
-ngModule.vnComponent('vnWorkerIndex', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/worker/front/index/locale/es.yml b/modules/worker/front/index/locale/es.yml
deleted file mode 100644
index df6383273..000000000
--- a/modules/worker/front/index/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-New worker: Nuevo trabajador
diff --git a/modules/worker/front/log/index.html b/modules/worker/front/log/index.html
deleted file mode 100644
index 090dbf2e3..000000000
--- a/modules/worker/front/log/index.html
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/modules/worker/front/log/index.js b/modules/worker/front/log/index.js
deleted file mode 100644
index e30ce7e22..000000000
--- a/modules/worker/front/log/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-ngModule.vnComponent('vnWorkerLog', {
- template: require('./index.html'),
- controller: Section,
-});
diff --git a/modules/worker/front/main/index.html b/modules/worker/front/main/index.html
index 376c8f534..e69de29bb 100644
--- a/modules/worker/front/main/index.html
+++ b/modules/worker/front/main/index.html
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/worker/front/main/index.js b/modules/worker/front/main/index.js
index d97a2d636..29da1bcc1 100644
--- a/modules/worker/front/main/index.js
+++ b/modules/worker/front/main/index.js
@@ -1,7 +1,15 @@
import ngModule from '../module';
import ModuleMain from 'salix/components/module-main';
-export default class Worker extends ModuleMain {}
+export default class Worker extends ModuleMain {
+ constructor($element, $) {
+ super($element, $);
+ }
+ async $onInit() {
+ this.$state.go('home');
+ window.location.href = await this.vnApp.getUrl(`worker/`);
+ }
+}
ngModule.vnComponent('vnWorker', {
controller: Worker,
diff --git a/modules/worker/front/note/create/index.html b/modules/worker/front/note/create/index.html
deleted file mode 100644
index d09fc2da5..000000000
--- a/modules/worker/front/note/create/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/modules/worker/front/note/create/index.js b/modules/worker/front/note/create/index.js
deleted file mode 100644
index 81ee247db..000000000
--- a/modules/worker/front/note/create/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.note = {
- workerFk: parseInt(this.$params.id),
- text: null
- };
- }
-
- cancel() {
- this.$state.go('worker.card.note.index', {id: this.$params.id});
- }
-}
-
-ngModule.vnComponent('vnNoteWorkerCreate', {
- template: require('./index.html'),
- controller: Controller
-});
diff --git a/modules/worker/front/note/create/index.spec.js b/modules/worker/front/note/create/index.spec.js
deleted file mode 100644
index d900c8ee0..000000000
--- a/modules/worker/front/note/create/index.spec.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import './index';
-
-describe('Worker', () => {
- describe('Component vnNoteWorkerCreate', () => {
- let $state;
- let controller;
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($componentController, _$state_) => {
- $state = _$state_;
- $state.params.id = '1234';
- const $element = angular.element('');
- controller = $componentController('vnNoteWorkerCreate', {$element, $state});
- }));
-
- it('should define workerFk using $state.params.id', () => {
- expect(controller.note.workerFk).toBe(1234);
- expect(controller.note.worker).toBe(undefined);
- });
- });
-});
diff --git a/modules/worker/front/note/create/locale/es.yml b/modules/worker/front/note/create/locale/es.yml
deleted file mode 100644
index bfe773f48..000000000
--- a/modules/worker/front/note/create/locale/es.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-New note: Nueva nota
-Note: Nota
\ No newline at end of file
diff --git a/modules/worker/front/note/index/index.html b/modules/worker/front/note/index/index.html
deleted file mode 100644
index 9f5c27008..000000000
--- a/modules/worker/front/note/index/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
- {{::note.user.nickname}}
- {{::note.created | date:'dd/MM/yyyy HH:mm'}}
-
-
- {{::note.text}}
-
-
-
-
-
-
-
diff --git a/modules/worker/front/note/index/index.js b/modules/worker/front/note/index/index.js
deleted file mode 100644
index d20971413..000000000
--- a/modules/worker/front/note/index/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import ngModule from '../../module';
-import Section from 'salix/components/section';
-import './style.scss';
-
-export default class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- this.filter = {
- order: 'created DESC',
- };
- }
-}
-
-Controller.$inject = ['$element', '$scope'];
-
-ngModule.vnComponent('vnWorkerNote', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- }
-});
diff --git a/modules/worker/front/note/index/style.scss b/modules/worker/front/note/index/style.scss
deleted file mode 100644
index 5ff6baf4f..000000000
--- a/modules/worker/front/note/index/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-vn-worker-note {
- .note:last-child {
- margin-bottom: 0;
- }
-}
\ No newline at end of file
diff --git a/modules/worker/front/notifications/index.html b/modules/worker/front/notifications/index.html
deleted file mode 100644
index 7fb3b870e..000000000
--- a/modules/worker/front/notifications/index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/modules/worker/front/notifications/index.js b/modules/worker/front/notifications/index.js
deleted file mode 100644
index 622892979..000000000
--- a/modules/worker/front/notifications/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- }
-
- async $onInit() {
- const url = await this.vnApp.getUrl(`worker/${this.$params.id}/notifications`);
- window.open(url).focus();
- }
-}
-
-ngModule.vnComponent('vnWorkerNotifications', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- ticket: '<'
- }
-});
diff --git a/modules/worker/front/pbx/index.html b/modules/worker/front/pbx/index.html
deleted file mode 100644
index e1ca61a4a..000000000
--- a/modules/worker/front/pbx/index.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
diff --git a/modules/worker/front/pbx/index.js b/modules/worker/front/pbx/index.js
deleted file mode 100644
index 3b6443d3c..000000000
--- a/modules/worker/front/pbx/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- onSubmit() {
- const sip = this.worker.sip;
- const params = {
- userFk: this.worker.id,
- extension: sip.extension
- };
- this.$.watcher.check();
- this.$http.patch('Sips', params).then(() => {
- this.$.watcher.updateOriginalData();
- this.vnApp.showSuccess(this.$t('Data saved! User must access web'));
- });
- }
-}
-
-ngModule.vnComponent('vnWorkerPbx', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- }
-});
diff --git a/modules/worker/front/pda/index.js b/modules/worker/front/pda/index.js
deleted file mode 100644
index c3616b41e..000000000
--- a/modules/worker/front/pda/index.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-
-class Controller extends Section {
- constructor($element, $) {
- super($element, $);
- }
-
- async $onInit() {
- const url = await this.vnApp.getUrl(`worker/${this.$params.id}/pda`);
- this.$state.go('worker.card.summary', {id: this.$params.id});
- window.location.href = url;
- }
-}
-
-ngModule.vnComponent('vnWorkerPda', {
- controller: Controller
-});
diff --git a/modules/worker/front/routes.json b/modules/worker/front/routes.json
index 489b4346a..9b3a50230 100644
--- a/modules/worker/front/routes.json
+++ b/modules/worker/front/routes.json
@@ -9,23 +9,6 @@
{"state": "worker.index", "icon": "icon-worker"},
{"state": "worker.department", "icon": "work"}
],
- "card": [
- {"state": "worker.card.basicData", "icon": "settings"},
- {"state": "worker.card.note.index", "icon": "insert_drive_file"},
- {"state": "worker.card.timeControl", "icon": "access_time"},
- {"state": "worker.card.calendar", "icon": "icon-calendar"},
- {"state": "worker.card.pda", "icon": "phone_android"},
- {"state": "worker.card.notifications", "icon": "notifications"},
- {"state": "worker.card.pbx", "icon": "icon-pbx"},
- {"state": "worker.card.dms.index", "icon": "cloud_upload"},
- {
- "icon": "icon-wiki",
- "external":true,
- "url": "http://wiki.verdnatura.es",
- "description": "Wikipedia"
- },
- {"state": "worker.card.workerLog", "icon": "history"}
- ],
"department": [
{"state": "worker.department.card.basicData", "icon": "settings"}
]
@@ -43,12 +26,14 @@
"abstract": true,
"component": "vn-worker",
"description": "Workers"
- }, {
+ },
+ {
"url": "/index?q",
"state": "worker.index",
"component": "vn-worker-index",
"description": "Workers"
- }, {
+ },
+ {
"url" : "/summary",
"state": "worker.card.summary",
"component": "vn-worker-summary",
@@ -56,91 +41,14 @@
"params": {
"worker": "$ctrl.worker"
}
- }, {
- "url": "/:id",
- "state": "worker.card",
- "component": "vn-worker-card",
- "abstract": true,
- "description": "Detail"
- }, {
- "url": "/basic-data",
- "state": "worker.card.basicData",
- "component": "vn-worker-basic-data",
- "description": "Basic data",
- "params": {
- "worker": "$ctrl.worker"
- },
- "acl": ["hr"]
- }, {
- "url" : "/log",
- "state": "worker.card.workerLog",
- "component": "vn-worker-log",
- "description": "Log",
- "acl": ["hr"]
- }, {
- "url": "/note",
- "state": "worker.card.note",
- "component": "ui-view",
- "abstract": true
- }, {
- "url": "/index",
- "state": "worker.card.note.index",
- "component": "vn-worker-note",
- "description": "Notes",
- "params": {
- "worker": "$ctrl.worker"
- },
- "acl": ["hr"]
- }, {
- "url": "/create",
- "state": "worker.card.note.create",
- "component": "vn-note-worker-create",
- "description": "New note"
- }, {
- "url": "/pbx",
- "state": "worker.card.pbx",
- "component": "vn-worker-pbx",
- "description": "Private Branch Exchange",
- "params": {
- "worker": "$ctrl.worker"
- },
- "acl": ["hr"]
- }, {
- "url": "/calendar",
- "state": "worker.card.calendar",
- "component": "vn-worker-calendar",
- "description": "Calendar",
- "params": {
- "worker": "$ctrl.worker"
- }
- }, {
- "url": "/notifications",
- "state": "worker.card.notifications",
- "component": "vn-worker-notifications",
- "description": "Notifications",
- "params": {
- "worker": "$ctrl.worker"
- }
- }, {
- "url": "/time-control?timestamp",
- "state": "worker.card.timeControl",
- "component": "vn-worker-time-control",
- "description": "Time control",
- "params": {
- "worker": "$ctrl.worker"
- }
- }, {
+ },
+ {
"url": "/department?q",
"state": "worker.department",
"component": "vn-worker-department",
"description":"Departments"
- }, {
- "url": "/:id",
- "state": "worker.department.card",
- "component": "vn-worker-department-card",
- "abstract": true,
- "description": "Detail"
- }, {
+ },
+ {
"url" : "/summary",
"state": "worker.department.card.summary",
"component": "vn-worker-department-summary",
@@ -148,62 +56,6 @@
"params": {
"department": "$ctrl.department"
}
- },
- {
- "url": "/basic-data",
- "state": "worker.department.card.basicData",
- "component": "vn-worker-department-basic-data",
- "description": "Basic data",
- "params": {
- "department": "$ctrl.department"
- }
- },
- {
- "url": "/dms",
- "state": "worker.card.dms",
- "abstract": true,
- "component": "ui-view"
- },
- {
- "url": "/index",
- "state": "worker.card.dms.index",
- "component": "vn-worker-dms-index",
- "description": "My documentation",
- "acl": ["employee"]
- },
- {
- "url": "/create",
- "state": "worker.card.dms.create",
- "component": "vn-worker-dms-create",
- "description": "Upload file",
- "params": {
- "worker": "$ctrl.worker"
- },
- "acl": ["hr"]
- },
- {
- "url": "/:dmsId/edit",
- "state": "worker.card.dms.edit",
- "component": "vn-worker-dms-edit",
- "description": "Edit file",
- "params": {
- "worker": "$ctrl.worker"
- },
- "acl": ["hr"]
- },
- {
- "url": "/create",
- "state": "worker.create",
- "component": "vn-worker-create",
- "description": "New worker",
- "acl": ["hr"]
- },
- {
- "url": "/pda",
- "state": "worker.card.pda",
- "component": "vn-worker-pda",
- "description": "PDA",
- "acl": ["hr", "productionAssi"]
}
]
}
diff --git a/modules/worker/front/search-panel/index.html b/modules/worker/front/search-panel/index.html
deleted file mode 100644
index c93eef78b..000000000
--- a/modules/worker/front/search-panel/index.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
diff --git a/modules/worker/front/search-panel/index.js b/modules/worker/front/search-panel/index.js
deleted file mode 100644
index ac7405e78..000000000
--- a/modules/worker/front/search-panel/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import ngModule from '../module';
-import SearchPanel from 'core/components/searchbar/search-panel';
-
-ngModule.vnComponent('vnWorkerSearchPanel', {
- template: require('./index.html'),
- controller: SearchPanel
-});
diff --git a/modules/worker/front/time-control/index.html b/modules/worker/front/time-control/index.html
deleted file mode 100644
index c34a1e3ca..000000000
--- a/modules/worker/front/time-control/index.html
+++ /dev/null
@@ -1,219 +0,0 @@
-
-
-
-
-
-
-
-
- {{::$ctrl.weekdayNames[$index].name}}
-
- {{::weekday.dated | date: 'dd'}}
-
- {{::weekday.dated | date: 'MMMM'}}
-
-
-
-
-
-
- {{::weekday.event.name}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{::hour.timed | date: 'HH:mm'}}
-
-
-
-
-
-
-
-
- {{$ctrl.formatHours(weekday.workedHours)}} h.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Hours
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Are you sure you want to send it?
-
-
-
-
-
-
diff --git a/modules/worker/front/time-control/index.js b/modules/worker/front/time-control/index.js
deleted file mode 100644
index 2993e3986..000000000
--- a/modules/worker/front/time-control/index.js
+++ /dev/null
@@ -1,507 +0,0 @@
-import ngModule from '../module';
-import Section from 'salix/components/section';
-import './style.scss';
-import UserError from 'core/lib/user-error';
-
-class Controller extends Section {
- constructor($element, $, vnWeekDays, moment) {
- super($element, $);
- this.weekDays = [];
- this.weekdayNames = vnWeekDays.locales;
- this.moment = moment;
- this.entryDirections = [
- {code: 'in', description: this.$t('In')},
- {code: 'middle', description: this.$t('Intermediate')},
- {code: 'out', description: this.$t('Out')}
- ];
- }
-
- $postLink() {
- const timestamp = this.$params.timestamp;
- let initialDate = Date.vnNew();
-
- if (timestamp) {
- initialDate = new Date(timestamp * 1000);
- this.$.calendar.defaultDate = initialDate;
- }
-
- this.date = initialDate;
-
- this.getMailStates(this.date);
- }
-
- get isHr() {
- return this.aclService.hasAny(['hr']);
- }
-
- get isHimSelf() {
- const userId = window.localStorage.currentUserWorkerId;
- return userId == this.$params.id;
- }
-
- get worker() {
- return this._worker;
- }
-
- get weekNumber() {
- return this.getWeekNumber(this.date);
- }
-
- set weekNumber(value) {
- this._weekNumber = value;
- }
-
- set worker(value) {
- this._worker = value;
- this.fetchHours();
- if (this.date)
- this.getWeekData();
- }
-
- /**
- * Worker hours data
- */
- get hours() {
- return this._hours;
- }
-
- set hours(value) {
- this._hours = value;
-
- for (const weekDay of this.weekDays) {
- if (value) {
- let day = weekDay.dated.getDay();
- weekDay.hours = value
- .filter(hour => new Date(hour.timed).getDay() == day)
- .sort((a, b) => new Date(a.timed) - new Date(b.timed));
- } else
- weekDay.hours = null;
- }
- }
-
- /**
- * The current selected date
- */
- get date() {
- return this._date;
- }
-
- set date(value) {
- this._date = value;
- value.setHours(0, 0, 0, 0);
-
- let weekOffset = value.getDay() - 1;
- if (weekOffset < 0) weekOffset = 6;
-
- let started = new Date(value.getTime());
- started.setDate(started.getDate() - weekOffset);
- this.started = started;
-
- let ended = new Date(started.getTime());
- ended.setHours(23, 59, 59, 59);
- ended.setDate(ended.getDate() + 6);
- this.ended = ended;
-
- this.weekDays = [];
- let dayIndex = new Date(started.getTime());
-
- while (dayIndex < ended) {
- this.weekDays.push({
- dated: new Date(dayIndex.getTime())
- });
- dayIndex.setDate(dayIndex.getDate() + 1);
- }
-
- if (this.worker) {
- this.fetchHours();
- this.getWeekData();
- }
- }
-
- set weekTotalHours(totalHours) {
- this._weekTotalHours = this.formatHours(totalHours);
- }
-
- get weekTotalHours() {
- return this._weekTotalHours;
- }
-
- getWeekData() {
- const filter = {
- where: {
- workerFk: this.$params.id,
- year: this._date.getFullYear(),
- week: this.getWeekNumber(this._date)
- },
- };
- this.$http.get('WorkerTimeControlMails', {filter})
- .then(res => {
- if (!res.data.length) {
- this.state = null;
- return;
- }
- const [mail] = res.data;
- this.state = mail.state;
- this.reason = mail.reason;
- });
- this.canBeResend();
- }
-
- canBeResend() {
- this.canResend = false;
- const filter = {
- where: {
- year: this._date.getFullYear(),
- week: this.getWeekNumber(this._date)
- },
- limit: 1
- };
- this.$http.get('WorkerTimeControlMails', {filter})
- .then(res => {
- if (res.data.length)
- this.canResend = true;
- });
- }
-
- fetchHours() {
- if (!this.worker || !this.date) return;
-
- const params = {workerFk: this.$params.id};
- const filter = {
- where: {and: [
- {timed: {gte: this.started}},
- {timed: {lte: this.ended}}
- ]}
- };
- this.$.model.applyFilter(filter, params).then(() => {
- this.getWorkedHours(this.started, this.ended);
- this.getAbsences();
- });
- }
-
- getWorkedHours(from, to) {
- this.weekTotalHours = null;
- let weekTotalHours = 0;
- let params = {
- id: this.$params.id,
- from: from,
- to: to
- };
- const query = `Workers/${this.$params.id}/getWorkedHours`;
- return this.$http.get(query, {params}).then(res => {
- const workDays = res.data;
- const map = new Map();
-
- for (const workDay of workDays) {
- workDay.dated = new Date(workDay.dated);
- map.set(workDay.dated, workDay);
- weekTotalHours += workDay.workedHours;
- }
-
- for (const weekDay of this.weekDays) {
- const workDay = workDays.find(day => {
- let from = new Date(day.dated);
- from.setHours(0, 0, 0, 0);
-
- let to = new Date(day.dated);
- to.setHours(23, 59, 59, 59);
-
- return weekDay.dated >= from && weekDay.dated <= to;
- });
-
- if (workDay) {
- weekDay.expectedHours = workDay.expectedHours;
- weekDay.workedHours = workDay.workedHours;
- }
- }
- this.weekTotalHours = weekTotalHours;
- });
- }
-
- getAbsences() {
- const fullYear = this.started.getFullYear();
- let params = {
- workerFk: this.$params.id,
- businessFk: null,
- year: fullYear
- };
-
- return this.$http.get(`Calendars/absences`, {params})
- .then(res => this.onData(res.data));
- }
-
- hasEvents(day) {
- return day >= this.started && day < this.ended;
- }
-
- onData(data) {
- const events = {};
-
- const addEvent = (day, event) => {
- events[new Date(day).getTime()] = event;
- };
-
- if (data.holidays) {
- data.holidays.forEach(holiday => {
- const holidayDetail = holiday.detail && holiday.detail.description;
- const holidayType = holiday.type && holiday.type.name;
- const holidayName = holidayDetail || holidayType;
-
- addEvent(holiday.dated, {
- name: holidayName,
- color: '#ff0'
- });
- });
- }
- if (data.absences) {
- data.absences.forEach(absence => {
- const type = absence.absenceType;
- addEvent(absence.dated, {
- name: type.name,
- color: type.rgb
- });
- });
- }
-
- this.weekDays.forEach(day => {
- const timestamp = day.dated.getTime();
- if (events[timestamp])
- day.event = events[timestamp];
- });
- }
-
- getFinishTime() {
- if (!this.weekDays) return;
-
- let today = Date.vnNew();
- today.setHours(0, 0, 0, 0);
-
- let todayInWeek = this.weekDays.find(day => day.dated.getTime() === today.getTime());
-
- if (todayInWeek && todayInWeek.hours && todayInWeek.hours.length) {
- const remainingTime = todayInWeek.workedHours ?
- ((todayInWeek.expectedHours - todayInWeek.workedHours) * 1000) : null;
- const lastKnownEntry = todayInWeek.hours[todayInWeek.hours.length - 1];
- const lastKnownTime = new Date(lastKnownEntry.timed).getTime();
- const finishTimeStamp = lastKnownTime && remainingTime ? lastKnownTime + remainingTime : null;
-
- if (finishTimeStamp) {
- let finishDate = new Date(finishTimeStamp);
- let hour = finishDate.getHours();
- let minute = finishDate.getMinutes();
-
- if (hour < 10) hour = `0${hour}`;
- if (minute < 10) minute = `0${minute}`;
-
- return `${hour}:${minute} h.`;
- }
- }
- }
-
- formatHours(timestamp = 0) {
- let hour = Math.floor(timestamp / 3600);
- let min = Math.floor(timestamp / 60 - 60 * hour);
-
- if (hour < 10) hour = `0${hour}`;
- if (min < 10) min = `0${min}`;
-
- return `${hour}:${min}`;
- }
-
- showAddTimeDialog(weekday) {
- const timed = new Date(weekday.dated.getTime());
- timed.setHours(0, 0, 0, 0);
-
- this.newTimeEntry = {
- workerFk: this.$params.id,
- timed: timed
- };
- this.selectedWeekday = weekday;
- this.$.addTimeDialog.show();
- }
-
- addTime() {
- try {
- const entry = this.newTimeEntry;
- if (!entry.direction)
- throw new Error(`The entry type can't be empty`);
-
- const query = `WorkerTimeControls/${this.worker.id}/addTimeEntry`;
- this.$http.post(query, entry)
- .then(() => {
- this.fetchHours();
- this.getMailStates(this.date);
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
-
- return true;
- }
-
- showDeleteDialog($event, hour) {
- $event.preventDefault();
-
- this.timeEntryToDelete = hour;
- this.$.deleteEntryDialog.show();
- }
-
- deleteTimeEntry() {
- const entryId = this.timeEntryToDelete.id;
-
- this.$http.post(`WorkerTimeControls/${entryId}/deleteTimeEntry`).then(() => {
- this.fetchHours();
- this.getMailStates(this.date);
- this.vnApp.showSuccess(this.$t('Entry removed'));
- });
- }
-
- edit($event, hour) {
- if ($event.defaultPrevented) return;
-
- this.selectedRow = hour;
- this.$.editEntry.show($event);
- }
-
- getWeekNumber(date) {
- const tempDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
- return this.moment(tempDate).isoWeek();
- }
-
- isSatisfied() {
- this.updateWorkerTimeControlMail('CONFIRMED');
- }
-
- isUnsatisfied() {
- if (!this.reason) throw new UserError(`You must indicate a reason`);
- this.updateWorkerTimeControlMail('REVISE', this.reason);
- }
-
- updateWorkerTimeControlMail(state, reason) {
- const params = {
- year: this.date.getFullYear(),
- week: this.weekNumber,
- state
- };
-
- if (reason)
- params.reason = reason;
-
- const query = `WorkerTimeControls/${this.worker.id}/updateMailState`;
- this.$http.post(query, params).then(() => {
- this.getMailStates(this.date);
- this.getWeekData();
- this.vnApp.showSuccess(this.$t('Data saved!'));
- });
- }
-
- state(state, reason) {
- this.state = state;
- this.reason = reason;
- this.repaint();
- }
-
- save() {
- try {
- const entry = this.selectedRow;
- if (!entry.direction)
- throw new Error(`The entry type can't be empty`);
-
- const query = `WorkerTimeControls/${entry.id}/updateTimeEntry`;
- if (entry.direction !== entry.$orgRow.direction) {
- this.$http.post(query, {direction: entry.direction})
- .then(() => this.vnApp.showSuccess(this.$t('Data saved!')))
- .then(() => this.$.editEntry.hide())
- .then(() => this.fetchHours())
- .then(() => this.getMailStates(this.date));
- }
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- }
- }
-
- resendEmail() {
- const params = {
- recipient: this.worker.user.emailUser.email,
- week: this.weekNumber,
- year: this.date.getFullYear(),
- workerId: this.worker.id,
- state: 'SENDED'
- };
- this.$http.post(`WorkerTimeControls/weekly-hour-record-email`, params)
- .then(() => {
- this.getMailStates(this.date);
- this.vnApp.showSuccess(this.$t('Email sended'));
- });
- }
-
- getTime(timeString) {
- const [hours, minutes, seconds] = timeString.split(':');
- return [parseInt(hours), parseInt(minutes), parseInt(seconds)];
- }
-
- getMailStates(date) {
- const params = {
- month: date.getMonth() + 1,
- year: date.getFullYear()
- };
- const query = `WorkerTimeControls/${this.$params.id}/getMailStates`;
- this.$http.get(query, {params})
- .then(res => {
- this.workerTimeControlMails = res.data;
- this.repaint();
- });
- }
-
- formatWeek($element) {
- const weekNumberHTML = $element.firstElementChild;
- const weekNumberValue = weekNumberHTML.innerHTML;
-
- if (!this.workerTimeControlMails) return;
- const workerTimeControlMail = this.workerTimeControlMails.find(
- workerTimeControlMail => workerTimeControlMail.week == weekNumberValue
- );
-
- if (!workerTimeControlMail) return;
- const state = workerTimeControlMail.state;
-
- if (state == 'CONFIRMED') {
- weekNumberHTML.classList.remove('revise');
- weekNumberHTML.classList.remove('sended');
-
- weekNumberHTML.classList.add('confirmed');
- weekNumberHTML.setAttribute('title', 'Conforme');
- }
- if (state == 'REVISE') {
- weekNumberHTML.classList.remove('confirmed');
- weekNumberHTML.classList.remove('sended');
-
- weekNumberHTML.classList.add('revise');
- weekNumberHTML.setAttribute('title', 'No conforme');
- }
- if (state == 'SENDED') {
- weekNumberHTML.classList.add('sended');
- weekNumberHTML.setAttribute('title', 'Pendiente');
- }
- }
-
- repaint() {
- let calendars = this.element.querySelectorAll('vn-calendar');
- for (let calendar of calendars)
- calendar.$ctrl.repaint();
- }
-}
-
-Controller.$inject = ['$element', '$scope', 'vnWeekDays', 'moment'];
-
-ngModule.vnComponent('vnWorkerTimeControl', {
- template: require('./index.html'),
- controller: Controller,
- bindings: {
- worker: '<'
- },
- require: {
- card: '^vnWorkerCard'
- }
-});
diff --git a/modules/worker/front/time-control/index.spec.js b/modules/worker/front/time-control/index.spec.js
deleted file mode 100644
index 3868ded75..000000000
--- a/modules/worker/front/time-control/index.spec.js
+++ /dev/null
@@ -1,286 +0,0 @@
-import './index.js';
-
-describe('Component vnWorkerTimeControl', () => {
- let $httpBackend;
- let $scope;
- let $element;
- let controller;
- let $httpParamSerializer;
-
- beforeEach(ngModule('worker'));
-
- beforeEach(inject(($componentController, $rootScope, $stateParams, _$httpBackend_, _$httpParamSerializer_) => {
- $stateParams.id = 1;
- $httpBackend = _$httpBackend_;
- $httpParamSerializer = _$httpParamSerializer_;
- $scope = $rootScope.$new();
- $element = angular.element('');
- controller = $componentController('vnWorkerTimeControl', {$element, $scope});
- controller.card = {
- hasWorkCenter: true
- };
- }));
-
- describe('date() setter', () => {
- it(`should set the weekDays and the date in the controller`, () => {
- let today = Date.vnNew();
- jest.spyOn(controller, 'fetchHours').mockReturnThis();
-
- controller.date = today;
-
- expect(controller._date).toEqual(today);
- expect(controller.started).toBeDefined();
- expect(controller.ended).toBeDefined();
- expect(controller.weekDays.length).toEqual(7);
- });
- });
-
- describe('hours() setter', () => {
- it(`should set hours data at it's corresponding week day`, () => {
- let today = Date.vnNew();
- jest.spyOn(controller, 'fetchHours').mockReturnThis();
-
- controller.date = today;
-
- let hours = [
- {
- id: 1,
- timed: controller.started.toJSON(),
- userFk: 1
- }, {
- id: 2,
- timed: controller.ended.toJSON(),
- userFk: 1
- }, {
- id: 3,
- timed: controller.ended.toJSON(),
- userFk: 1
- }
- ];
-
- controller.hours = hours;
-
- expect(controller.weekDays.length).toEqual(7);
- expect(controller.weekDays[0].hours.length).toEqual(1);
- expect(controller.weekDays[6].hours.length).toEqual(2);
- });
- });
-
- describe('getWorkedHours() ', () => {
- it('should set the weekdays expected and worked hours plus the total worked hours', () => {
- let today = Date.vnNew();
- jest.spyOn(controller, 'fetchHours').mockReturnThis();
-
- controller.date = today;
-
- let sixHoursInSeconds = 6 * 60 * 60;
- let tenHoursInSeconds = 10 * 60 * 60;
- let response = [
- {
- dated: today,
- expectedHours: sixHoursInSeconds,
- workedHours: tenHoursInSeconds,
-
- },
- ];
- $httpBackend.whenRoute('GET', 'Workers/:id/getWorkedHours')
- .respond(response);
-
- $httpBackend.whenRoute('GET', 'WorkerTimeControlMails')
- .respond([]);
-
- today.setHours(0, 0, 0, 0);
-
- let weekOffset = today.getDay() - 1;
- if (weekOffset < 0) weekOffset = 6;
-
- let started = new Date(today.getTime());
- started.setDate(started.getDate() - weekOffset);
- controller.started = started;
-
- let ended = new Date(started.getTime());
- ended.setHours(23, 59, 59, 59);
- ended.setDate(ended.getDate() + 6);
- controller.ended = ended;
-
- controller.getWorkedHours(controller.started, controller.ended);
- $httpBackend.flush();
-
- expect(controller.weekDays.length).toEqual(7);
- expect(controller.weekDays[weekOffset].expectedHours).toEqual(response[0].expectedHours);
- expect(controller.weekDays[weekOffset].workedHours).toEqual(response[0].workedHours);
- expect(controller.weekTotalHours).toEqual('10:00');
- });
-
- describe('formatHours() ', () => {
- it(`should format a passed timestamp to hours and minutes`, () => {
- const result = controller.formatHours(3600);
-
- expect(result).toEqual('01:00');
- });
- });
-
- describe('save() ', () => {
- it(`should make a query an then call to the fetchHours() method`, () => {
- const today = Date.vnNew();
-
- jest.spyOn(controller, 'getWeekData').mockReturnThis();
- jest.spyOn(controller, 'getMailStates').mockReturnThis();
-
- controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
- controller.date = today;
- controller.fetchHours = jest.fn();
- controller.selectedRow = {id: 1, timed: Date.vnNew(), direction: 'in', $orgRow: {direction: null}};
- controller.$.editEntry = {
- hide: () => {}
- };
- const expectedParams = {direction: 'in'};
- $httpBackend.expect('POST', 'WorkerTimeControls/1/updateTimeEntry', expectedParams).respond(200);
- controller.save();
- $httpBackend.flush();
-
- expect(controller.fetchHours).toHaveBeenCalledWith();
- });
- });
-
- describe('$postLink() ', () => {
- it(`should set the controller date as today if no timestamp is defined`, () => {
- controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
- controller.$params = {timestamp: undefined};
- controller.$postLink();
-
- expect(controller.date).toEqual(jasmine.any(Date));
- });
-
- it(`should set the controller date using the received timestamp`, () => {
- const timestamp = 1;
- const date = new Date(timestamp);
-
- controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
- controller.$.calendar = {};
- controller.$params = {timestamp: timestamp};
-
- controller.$postLink();
-
- expect(controller.date.toDateString()).toEqual(date.toDateString());
- });
- });
-
- describe('getWeekData() ', () => {
- it(`should make a query an then update the state and reason`, () => {
- const today = Date.vnNew();
- const response = [
- {
- state: 'SENDED',
- reason: null
- }
- ];
-
- controller._date = today;
-
- $httpBackend.whenRoute('GET', 'WorkerTimeControlMails')
- .respond(response);
-
- controller.getWeekData();
- $httpBackend.flush();
-
- expect(controller.state).toBe('SENDED');
- expect(controller.reason).toBe(null);
- });
- });
-
- describe('isSatisfied() ', () => {
- it(`should make a query an then call three methods`, () => {
- const today = Date.vnNew();
- jest.spyOn(controller, 'getWeekData').mockReturnThis();
- jest.spyOn(controller, 'getMailStates').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
- controller.worker = {id: 1};
- controller.date = today;
- controller.weekNumber = 1;
-
- $httpBackend.expect('POST', 'WorkerTimeControls/1/updateMailState').respond();
- controller.isSatisfied();
- $httpBackend.flush();
-
- expect(controller.getMailStates).toHaveBeenCalledWith(controller.date);
- expect(controller.getWeekData).toHaveBeenCalled();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('isUnsatisfied() ', () => {
- it(`should throw an error is reason is empty`, () => {
- let error;
- try {
- controller.isUnsatisfied();
- } catch (e) {
- error = e;
- }
-
- expect(error).toBeDefined();
- expect(error.message).toBe(`You must indicate a reason`);
- });
-
- it(`should make a query an then call three methods`, () => {
- const today = Date.vnNew();
- jest.spyOn(controller, 'getWeekData').mockReturnThis();
- jest.spyOn(controller, 'getMailStates').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
- controller.worker = {id: 1};
- controller.date = today;
- controller.weekNumber = 1;
- controller.reason = 'reason';
-
- $httpBackend.expect('POST', 'WorkerTimeControls/1/updateMailState').respond();
- controller.isSatisfied();
- $httpBackend.flush();
-
- expect(controller.getMailStates).toHaveBeenCalledWith(controller.date);
- expect(controller.getWeekData).toHaveBeenCalled();
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('resendEmail() ', () => {
- it(`should make a query an then call showSuccess method`, () => {
- const today = Date.vnNew();
-
- jest.spyOn(controller, 'getWeekData').mockReturnThis();
- jest.spyOn(controller, 'getMailStates').mockReturnThis();
- jest.spyOn(controller.vnApp, 'showSuccess');
-
- controller.$.model = {applyFilter: jest.fn().mockReturnValue(Promise.resolve())};
- controller.worker = {id: 1};
- controller.worker = {user: {emailUser: {email: 'employee@verdnatura.es'}}};
- controller.date = today;
- controller.weekNumber = 1;
-
- $httpBackend.expect('POST', 'WorkerTimeControls/weekly-hour-record-email').respond();
- controller.resendEmail();
- $httpBackend.flush();
-
- expect(controller.vnApp.showSuccess).toHaveBeenCalled();
- });
- });
-
- describe('getMailStates() ', () => {
- it(`should make a query an then call showSuccess method`, () => {
- const today = Date.vnNew();
- jest.spyOn(controller, 'repaint').mockReturnThis();
-
- controller.$params = {id: 1};
-
- $httpBackend.expect('GET', `WorkerTimeControls/1/getMailStates?month=1&year=2001`).respond();
- controller.getMailStates(today);
- $httpBackend.flush();
-
- expect(controller.repaint).toHaveBeenCalled();
- });
- });
- });
-});
diff --git a/modules/worker/front/time-control/locale/es.yml b/modules/worker/front/time-control/locale/es.yml
deleted file mode 100644
index 091c01baa..000000000
--- a/modules/worker/front/time-control/locale/es.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-In: Entrada
-Out: Salida
-Intermediate: Intermedio
-Hour: Hora
-Hours: Horas
-Add time: Añadir hora
-Week total: Total semana
-Current week: Semana actual
-This time entry will be deleted: Se eliminará la hora fichada
-Are you sure you want to delete this entry?: ¿Seguro que quieres eliminarla?
-Finish at: Termina a las
-Entry removed: Fichada borrada
-The entry type can't be empty: El tipo de fichada no puede quedar vacía
-Satisfied: Conforme
-Not satisfied: No conforme
-Reason: Motivo
-Resend: Reenviar
-Email sended: Email enviado
-You must indicate a reason: Debes indicar un motivo
-Send time control email: Enviar email control horario
-Are you sure you want to send it?: ¿Seguro que quieres enviarlo?
-Resend email of this week to the user: Reenviar email de esta semana al usuario
diff --git a/modules/worker/front/time-control/style.scss b/modules/worker/front/time-control/style.scss
deleted file mode 100644
index 9d7545aaf..000000000
--- a/modules/worker/front/time-control/style.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-@import "variables";
-
-vn-worker-time-control {
- vn-thead > vn-tr > vn-td > div.weekday {
- margin-bottom: 5px;
- color: $color-main
- }
- vn-td.hours {
- min-width: 100px;
- vertical-align: top;
-
- & > section {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 4px 0;
-
- & > vn-icon {
- color: $color-font-secondary;
- padding-right: 1px;
- }
- }
- }
- .totalBox {
- max-width: none
- }
-
-}
-
-.reasonDialog{
- min-width: 500px;
-}
-
-.edit-time-entry {
- width: 200px
-}
-
-.right {
- float: right;
- }
-
-.confirmed {
- color: #97B92F;
-}
-
-.revise {
- color: #f61e1e;
-}
-
-.sended {
- color: #d19b25;
-}
diff --git a/package.json b/package.json
index 5e7040f36..61a9cf46c 100644
--- a/package.json
+++ b/package.json
@@ -118,7 +118,10 @@
"test:front": "jest --watch",
"back": "nodemon --inspect -w modules ./node_modules/gulp/bin/gulp.js back",
"lint": "eslint ./ --cache --ignore-pattern .gitignore",
- "watch:db": "node ./db/dbWatcher.js"
+ "watch:db": "node ./db/dbWatcher.js",
+ "commitlint": "commitlint --edit",
+ "prepare": "npx husky install",
+ "addReferenceTag": "node .husky/addReferenceTag.js"
},
"jest": {
"projects": [
diff --git a/print/templates/reports/buy-label/sql/buy.sql b/print/templates/reports/buy-label/sql/buy.sql
index 72765baa9..26efeb06e 100644
--- a/print/templates/reports/buy-label/sql/buy.sql
+++ b/print/templates/reports/buy-label/sql/buy.sql
@@ -22,7 +22,7 @@ labels AS (
b.id,
b.itemFk,
p.name producer,
- IF(i2.id, i2.comment, i.comment) comment
+ IFNULL(i2.comment, i.comment) comment
FROM buy b
JOIN item i ON i.id = b.itemFk
LEFT JOIN producer p ON p.id = i.producerFk
diff --git a/print/templates/reports/collection-label/collection-label.html b/print/templates/reports/collection-label/collection-label.html
index 65709ead0..1f57fc3d9 100644
--- a/print/templates/reports/collection-label/collection-label.html
+++ b/print/templates/reports/collection-label/collection-label.html
@@ -10,14 +10,10 @@
{{dashIfEmpty(labelData.shipped)}} |
-
+
|
{{dashIfEmpty(labelData.workerCode)}} |
-
- |
- {{dashIfEmpty(labelData.workerCode)}} |
-
{{labelCount || labelData.labelCount || 0}} |
diff --git a/print/templates/reports/collection-label/collection-label.js b/print/templates/reports/collection-label/collection-label.js
index f2f697ae6..4aeaca854 100644
--- a/print/templates/reports/collection-label/collection-label.js
+++ b/print/templates/reports/collection-label/collection-label.js
@@ -1,7 +1,5 @@
-const {DOMImplementation, XMLSerializer} = require('xmldom');
const vnReport = require('../../../core/mixins/vn-report.js');
const {toDataURL} = require('qrcode');
-const jsBarcode = require('jsbarcode');
module.exports = {
name: 'collection-label',
@@ -30,11 +28,8 @@ module.exports = {
const labels = await this.rawSqlFromDef('labelsData', [ticketIds]);
- const [{scannableCodeType}] = await this.rawSqlFromDef('barcodeType');
- if (scannableCodeType === 'qr') {
- for (const labelData of labels)
- labelData.qrData = await this.getQr(labelData?.ticketFk, labelData?.workerFk);
- }
+ for (const labelData of labels)
+ labelData.qrData = await this.getQr(labelData?.ticketFk, labelData?.workerFk);
this.labelsData = labels;
this.checkMainEntity(this.labelsData);
@@ -50,20 +45,6 @@ module.exports = {
});
return toDataURL(QRdata, {margin: 0});
},
- getBarcode(id) {
- const xmlSerializer = new XMLSerializer();
- const document = new DOMImplementation().createDocument('http://www.w3.org/1999/xhtml', 'html', null);
- const svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
-
- jsBarcode(svgNode, id, {
- xmlDocument: document,
- format: 'code128',
- displayValue: false,
- width: 3.8,
- height: 115,
- });
- return xmlSerializer.serializeToString(svgNode);
- },
getVertical(labelData) {
let value;
if (labelData.collectionFk) {
diff --git a/print/templates/reports/collection-label/sql/barcodeType.sql b/print/templates/reports/collection-label/sql/barcodeType.sql
deleted file mode 100644
index 0700c95a2..000000000
--- a/print/templates/reports/collection-label/sql/barcodeType.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-SELECT scannableCodeType
- FROM productionConfig
- LIMIT 1
\ No newline at end of file
diff --git a/print/templates/reports/entry-order/assets/css/style.css b/print/templates/reports/entry-order/assets/css/style.css
index cabdadf9f..767b1185a 100644
--- a/print/templates/reports/entry-order/assets/css/style.css
+++ b/print/templates/reports/entry-order/assets/css/style.css
@@ -1,14 +1,20 @@
-
-
h3 {
font-weight: 100;
color: #555
}
-
.report-info {
font-size: 20px
}
-
.description strong {
text-transform: uppercase;
+}
+.nowrap {
+ white-space: nowrap;
+}
+.padding {
+ padding: 16px;
+}
+.tags {
+ font-size: 10px;
+ margin: 0;
}
\ No newline at end of file
diff --git a/print/templates/reports/entry-order/entry-order.html b/print/templates/reports/entry-order/entry-order.html
index ddf0e9b5d..e5d3bfb6d 100644
--- a/print/templates/reports/entry-order/entry-order.html
+++ b/print/templates/reports/entry-order/entry-order.html
@@ -4,23 +4,23 @@
-
+
{{$t('title')}}
+
-
{{$t('title')}}
- {{$t('entryId')}} |
+ {{$t('entryId')}} |
{{entry.id}} |
- {{$t('date')}} |
+ {{$t('date')}} |
{{formatDate(entry.landed,'%d-%m-%Y')}} |
- {{$t('ref')}} |
- {{entry.invoiceNumber}} |
+ {{$t('ref')}} |
+ {{entry.invoiceNumber | dashIfEmpty}} |
@@ -38,42 +38,56 @@
-
+
{{$t('boxes')}} |
+ |
{{$t('packing')}} |
- {{$t('concept')}} |
+ {{$t('concept')}} |
+ {{$t('reference')}} |
+ {{$t('tags')}} |
{{$t('quantity')}} |
+ |
{{$t('price')}} |
+ |
{{$t('amount')}} |
- {{buy.box}} |
+ {{buy.stickers}} |
+ x |
{{buy.packing}} |
- {{buy.itemName}} |
+ {{buy.name}} |
+ {{buy.comment}} |
+
+ {{buy.tag5}} → {{buy.value5}}
+ {{buy.tag6}} → {{buy.value6}}
+ {{buy.tag7}} → {{buy.value7}}
+ |
{{buy.quantity | number($i18n.locale)}} |
+ x |
{{buy.buyingValue | currency('EUR', $i18n.locale)}} |
+ = |
{{buy.buyingValue * buy.quantity | currency('EUR', $i18n.locale)}}
|
-
-
- {{buy.tag5}} {{buy.value5}}
- {{buy.tag6}} {{buy.value6}}
- {{buy.tag7}} {{buy.value7}}
- |
-
-
-
- {{$t('total')}}
- |
- {{getTotal() | currency('EUR', $i18n.locale)}} |
+
+ {{getTotalBy('stickers')}} |
+ |
+ |
+ |
+ |
+ |
+ {{getTotalBy('quantity') | number($i18n.locale)}} |
+ |
+ |
+ |
+ {{getTotalBy('amount') | currency('EUR', $i18n.locale)}} |
diff --git a/print/templates/reports/entry-order/entry-order.js b/print/templates/reports/entry-order/entry-order.js
index d31ad1a36..56356e068 100755
--- a/print/templates/reports/entry-order/entry-order.js
+++ b/print/templates/reports/entry-order/entry-order.js
@@ -13,13 +13,17 @@ module.exports = {
return {totalBalance: 0.00};
},
methods: {
- getTotal() {
- let total = 0.00;
- this.buys.forEach(buy => {
- total += buy.quantity * buy.buyingValue;
- });
-
- return total;
+ getTotalBy(property) {
+ return this.buys.reduce((total, buy) => {
+ switch (property) {
+ case 'amount':
+ return total + buy.quantity * buy.buyingValue;
+ case 'quantity':
+ return total + buy.quantity;
+ case 'stickers':
+ return total + buy.stickers;
+ }
+ }, 0);
}
},
props: {
diff --git a/print/templates/reports/entry-order/locale/es.yml b/print/templates/reports/entry-order/locale/es.yml
index 5c633aeaa..5a6716ba1 100644
--- a/print/templates/reports/entry-order/locale/es.yml
+++ b/print/templates/reports/entry-order/locale/es.yml
@@ -2,7 +2,7 @@ reportName: pedido-de-entrada
title: Pedido
supplierName: Proveedor
supplierStreet: Dirección
-entryId: Referencia interna
+entryId: Nº Entrada
date: Fecha
ref: Nº Factura
boxes: Cajas
@@ -14,4 +14,6 @@ concept: Descripción
total: Total
entry: Entrada {0}
supplierData: Datos del proveedor
-notes: Notas
\ No newline at end of file
+notes: Notas
+reference: Referencia
+tags: Tags
\ No newline at end of file
diff --git a/print/templates/reports/entry-order/sql/buys.sql b/print/templates/reports/entry-order/sql/buys.sql
index 5bf9f2dfe..92c055483 100644
--- a/print/templates/reports/entry-order/sql/buys.sql
+++ b/print/templates/reports/entry-order/sql/buys.sql
@@ -1,16 +1,17 @@
-SELECT
- b.itemFk,
- b.quantity,
- b.buyingValue,
- b.stickers box,
- b.packing,
- i.name itemName,
- i.tag5,
- i.value5,
- i.tag6,
- i.value6,
- i.tag7,
- i.value7
-FROM buy b
- JOIN item i ON i.id = b.itemFk
-WHERE b.entryFk = ?
\ No newline at end of file
+SELECT b.itemFk,
+ b.quantity,
+ b.buyingValue,
+ b.stickers,
+ b.packing,
+ i.name,
+ IFNULL(i2.comment, i.comment) comment,
+ i.tag5,
+ i.value5,
+ i.tag6,
+ i.value6,
+ i.tag7,
+ i.value7
+ FROM buy b
+ JOIN item i ON i.id = b.itemFk
+ LEFT JOIN item i2 ON i2.id = b.itemOriginalFk
+ WHERE b.entryFk = ?
diff --git a/print/templates/reports/entry-order/sql/entry.sql b/print/templates/reports/entry-order/sql/entry.sql
index c30eebca8..2ab599123 100644
--- a/print/templates/reports/entry-order/sql/entry.sql
+++ b/print/templates/reports/entry-order/sql/entry.sql
@@ -1,9 +1,8 @@
-SELECT
- e.id,
- e.invoiceNumber,
- c.code companyCode,
- t.landed
-FROM entry e
- JOIN travel t ON t.id = e.travelFk
- JOIN company c ON c.id = e.companyFk
-WHERE e.id = ?
+SELECT e.id,
+ e.invoiceNumber,
+ c.code companyCode,
+ t.landed
+ FROM entry e
+ JOIN travel t ON t.id = e.travelFk
+ JOIN company c ON c.id = e.companyFk
+ WHERE e.id = ?
diff --git a/print/templates/reports/entry-order/sql/supplier.sql b/print/templates/reports/entry-order/sql/supplier.sql
index 81ed7e883..214f7913f 100644
--- a/print/templates/reports/entry-order/sql/supplier.sql
+++ b/print/templates/reports/entry-order/sql/supplier.sql
@@ -1,11 +1,10 @@
-SELECT
- s.name,
- s.street,
- s.nif,
- s.postCode,
- s.city,
- p.name province
-FROM supplier s
- JOIN entry e ON e.supplierFk = s.id
- LEFT JOIN province p ON p.id = s.provinceFk
-WHERE e.id = ?
+SELECT s.name,
+ s.street,
+ s.nif,
+ s.postCode,
+ s.city,
+ p.name province
+ FROM supplier s
+ JOIN entry e ON e.supplierFk = s.id
+ LEFT JOIN province p ON p.id = s.provinceFk
+ WHERE e.id = ?