Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6921_addFromDelivery
gitea/salix/pipeline/pr-dev There was a failure building this commit
Details
gitea/salix/pipeline/pr-dev There was a failure building this commit
Details
This commit is contained in:
commit
ae88a8a281
|
@ -33,16 +33,23 @@ module.exports = Self => {
|
||||||
// Schedule to remove current token
|
// Schedule to remove current token
|
||||||
setTimeout(async() => {
|
setTimeout(async() => {
|
||||||
try {
|
try {
|
||||||
await Self.logout(token.id);
|
const exists = await models.AccessToken.findById(token.id);
|
||||||
|
exists && await Self.logout(token.id);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
}, courtesyTime * 1000);
|
}, courtesyTime * 1000);
|
||||||
|
|
||||||
|
// Get scopes
|
||||||
|
|
||||||
|
let createTokenOptions = {};
|
||||||
|
const {scopes} = token;
|
||||||
|
if (scopes)
|
||||||
|
createTokenOptions = {scopes: [scopes[0]]};
|
||||||
// Create new accessToken
|
// Create new accessToken
|
||||||
const user = await Self.findById(token.userId);
|
const user = await Self.findById(token.userId);
|
||||||
const accessToken = await user.createAccessToken();
|
const accessToken = await user.accessTokens.create(createTokenOptions);
|
||||||
|
|
||||||
return {id: accessToken.id, ttl: accessToken.ttl};
|
return {id: accessToken.id, ttl: accessToken.ttl};
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,6 +33,17 @@ describe('Renew Token', () => {
|
||||||
const {id} = await models.VnUser.renewToken(ctx);
|
const {id} = await models.VnUser.renewToken(ctx);
|
||||||
|
|
||||||
expect(id).not.toEqual(ctx.req.accessToken.id);
|
expect(id).not.toEqual(ctx.req.accessToken.id);
|
||||||
|
|
||||||
|
await models.VnUser.logout(ctx.req.accessToken.id);
|
||||||
|
jasmine.clock().tick(70 * 1000);
|
||||||
|
let tokenNotExists;
|
||||||
|
try {
|
||||||
|
tokenNotExists = await models.AccessToken.findById(ctx.req.accessToken.id);
|
||||||
|
} catch (e) {
|
||||||
|
error = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(tokenNotExists).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('NOT should renew', async() => {
|
it('NOT should renew', async() => {
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
const TOKEN_MULTIMEDIA = 'read:multimedia';
|
||||||
describe('Share Token', () => {
|
describe('Share Token', () => {
|
||||||
let ctx = null;
|
let ctx = null;
|
||||||
|
const startingTime = Date.now();
|
||||||
|
let multimediaToken = null;
|
||||||
beforeAll(async() => {
|
beforeAll(async() => {
|
||||||
const unAuthCtx = {
|
const unAuthCtx = {
|
||||||
req: {
|
req: {
|
||||||
|
@ -17,11 +20,45 @@ describe('Share Token', () => {
|
||||||
ctx = {req: {accessToken: accessToken}};
|
ctx = {req: {accessToken: accessToken}};
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should renew token', async() => {
|
beforeEach(async() => {
|
||||||
const multimediaToken = await models.VnUser.shareToken(ctx);
|
multimediaToken = await models.VnUser.shareToken(ctx);
|
||||||
|
jasmine.clock().install();
|
||||||
|
jasmine.clock().mockDate(new Date(startingTime));
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jasmine.clock().uninstall();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should generate token', async() => {
|
||||||
expect(Object.keys(multimediaToken).length).toEqual(1);
|
expect(Object.keys(multimediaToken).length).toEqual(1);
|
||||||
expect(multimediaToken.multimediaToken.userId).toEqual(ctx.req.accessToken.userId);
|
expect(multimediaToken.multimediaToken.userId).toEqual(ctx.req.accessToken.userId);
|
||||||
expect(multimediaToken.multimediaToken.scopes[0]).toEqual('read:multimedia');
|
expect(multimediaToken.multimediaToken.scopes[0]).toEqual(TOKEN_MULTIMEDIA);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('NOT should renew', async() => {
|
||||||
|
let error;
|
||||||
|
let response;
|
||||||
|
try {
|
||||||
|
response = await models.VnUser.renewToken(ctx);
|
||||||
|
} catch (e) {
|
||||||
|
error = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(error).toBeUndefined();
|
||||||
|
expect(response.id).toEqual(ctx.req.accessToken.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should renew token', async() => {
|
||||||
|
const mockDate = new Date(startingTime + 26600000);
|
||||||
|
jasmine.clock().mockDate(mockDate);
|
||||||
|
|
||||||
|
const newShareToken = await models.VnUser.renewToken({req: {accessToken: multimediaToken.multimediaToken}});
|
||||||
|
const {id} = newShareToken;
|
||||||
|
|
||||||
|
expect(id).not.toEqual(ctx.req.accessToken.id);
|
||||||
|
const newMultimediaToken = await models.AccessToken.findById(id);
|
||||||
|
|
||||||
|
expect(newMultimediaToken.scopes[0]).toEqual(TOKEN_MULTIMEDIA);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -2551,15 +2551,15 @@ INSERT INTO `vn`.`duaEntry` (`duaFk`, `entryFk`, `value`, `customsValue`, `euroV
|
||||||
REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issued`, `created`, `supplierRef`, `isBooked`, `companyFk`, `docFk`)
|
REPLACE INTO `vn`.`invoiceIn`(`id`, `serialNumber`,`serial`, `supplierFk`, `issued`, `created`, `supplierRef`, `isBooked`, `companyFk`, `docFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1001, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1234, 0, 442, 1),
|
(1, 1001, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1234, 0, 442, 1),
|
||||||
(2, 1002, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1235, 1, 442, 1),
|
(2, 1002, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1235, 0, 442, 1),
|
||||||
(3, 1003, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1236, 0, 442, 1),
|
(3, 1003, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1236, 0, 442, 1),
|
||||||
(4, 1004, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1237, 0, 442, 1),
|
(4, 1004, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1237, 0, 442, 1),
|
||||||
(5, 1005, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1238, 1, 442, 1),
|
(5, 1005, 'R', 1, util.VN_CURDATE(), util.VN_CURDATE(), 1238, 0, 442, 1),
|
||||||
(6, 1006, 'R', 2, util.VN_CURDATE(), util.VN_CURDATE(), 1239, 0, 442, 1),
|
(6, 1006, 'R', 2, util.VN_CURDATE(), util.VN_CURDATE(), 1239, 0, 442, 1),
|
||||||
(7, 1007, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1240, 1, 442, 1),
|
(7, 1007, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1240, 0, 442, 1),
|
||||||
(8, 1008, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1241, 1, 442, 1),
|
(8, 1008, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1241, 0, 442, 1),
|
||||||
(9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 1, 442, 1),
|
(9, 1009, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1242, 0, 442, 1),
|
||||||
(10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 1, 442, 1);
|
(10, 1010, 'R', 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1243, 0, 442, 1);
|
||||||
|
|
||||||
INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageWithholdingFk`, `daysAgo`)
|
INSERT INTO `vn`.`invoiceInConfig` (`id`, `retentionRate`, `retentionName`, `sageWithholdingFk`, `daysAgo`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -2614,6 +2614,10 @@ INSERT INTO `vn`.`invoiceInIntrastat` (`invoiceInFk`, `net`, `intrastatFk`, `amo
|
||||||
(2, 13.20, 5080000, 15.00, 580, 5),
|
(2, 13.20, 5080000, 15.00, 580, 5),
|
||||||
(2, 16.10, 6021010, 25.00, 80, 5);
|
(2, 16.10, 6021010, 25.00, 80, 5);
|
||||||
|
|
||||||
|
UPDATE `vn`.`invoiceIn`
|
||||||
|
SET isBooked = TRUE
|
||||||
|
WHERE id IN (2, 5, 7, 8, 9, 10);
|
||||||
|
|
||||||
INSERT INTO `vn`.`ticketRecalc`(`ticketFk`)
|
INSERT INTO `vn`.`ticketRecalc`(`ticketFk`)
|
||||||
SELECT t.id
|
SELECT t.id
|
||||||
FROM vn.ticket t
|
FROM vn.ticket t
|
||||||
|
|
|
@ -147,7 +147,7 @@ proc:BEGIN
|
||||||
(@t := IF(i.stems, i.stems, 1)) * e.pri / IFNULL(i.stemMultiplier, 1) buyingValue,
|
(@t := IF(i.stems, i.stems, 1)) * e.pri / IFNULL(i.stemMultiplier, 1) buyingValue,
|
||||||
IFNULL(vItem, vDefaultEntry) itemFk,
|
IFNULL(vItem, vDefaultEntry) itemFk,
|
||||||
e.qty stickers,
|
e.qty stickers,
|
||||||
@pac := IFNULL(i.stemMultiplier, 1) * e.pac / @t packing,
|
@pac := GREATEST(1, IFNULL(i.stemMultiplier * e.pac / @t, 0)) packing,
|
||||||
IFNULL(b.`grouping`, e.pac),
|
IFNULL(b.`grouping`, e.pac),
|
||||||
@pac * e.qty,
|
@pac * e.qty,
|
||||||
vForceToPacking,
|
vForceToPacking,
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
DELIMITER $$
|
||||||
|
$$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE floranet.catalogue_findById(vSelf INT)
|
||||||
|
READS SQL DATA
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Returns one recordset from catalogue
|
||||||
|
*
|
||||||
|
* @param vCatalogueFk Identifier de floranet.catalogue
|
||||||
|
*/
|
||||||
|
SELECT * FROM catalogue WHERE id = vSelf;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,41 +1,21 @@
|
||||||
DROP PROCEDURE IF EXISTS floranet.order_put;
|
|
||||||
|
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
$$
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE floranet.order_put(vJsonData JSON)
|
||||||
CREATE DEFINER=`root`@`localhost` PROCEDURE floranet.order_put(vOrder JSON)
|
|
||||||
READS SQL DATA
|
READS SQL DATA
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Get and process an order.
|
* Get and process an order.
|
||||||
*
|
*
|
||||||
* @param vOrder Data of the order
|
* @param vJsonData The order data in json format
|
||||||
*
|
|
||||||
* Customer data: <customerName>, <email>, <customerPhone>
|
|
||||||
*
|
|
||||||
* Item data: <catalogueFk>, <message>
|
|
||||||
*
|
|
||||||
* Delivery data: <deliveryName>, <address>, <deliveryPhone>
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
INSERT IGNORE INTO `order`(
|
INSERT INTO `order`
|
||||||
catalogueFk,
|
SET catalogueFk = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.products[0].id')),
|
||||||
customerName,
|
customerName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerName')),
|
||||||
email,
|
email = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.email')),
|
||||||
customerPhone,
|
customerPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.customerPhone')),
|
||||||
message,
|
message= JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.message')),
|
||||||
deliveryName,
|
deliveryName = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryName')),
|
||||||
address,
|
address = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.address')),
|
||||||
deliveryPhone
|
deliveryPhone = JSON_UNQUOTE(JSON_EXTRACT(vJsonData, '$.customer.customerData.deliveryPhone'));
|
||||||
)
|
|
||||||
VALUES (JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.catalogueFk')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.customerName')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.email')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.customerPhone')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.message')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.deliveryName')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.address')),
|
|
||||||
JSON_UNQUOTE(JSON_EXTRACT(vOrder,'$.deliveryPhone'))
|
|
||||||
);
|
|
||||||
|
|
||||||
SELECT LAST_INSERT_ID() orderFk;
|
SELECT LAST_INSERT_ID() orderFk;
|
||||||
END$$
|
END$$
|
||||||
|
|
|
@ -3,6 +3,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `hedera`.`order_doRecalc`
|
||||||
ON SCHEDULE EVERY 10 SECOND
|
ON SCHEDULE EVERY 10 SECOND
|
||||||
STARTS '2019-08-29 14:18:04.000'
|
STARTS '2019-08-29 14:18:04.000'
|
||||||
ON COMPLETION PRESERVE
|
ON COMPLETION PRESERVE
|
||||||
ENABLE
|
DISABLE
|
||||||
DO CALL order_doRecalc$$
|
DO CALL order_doRecalc$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -10,6 +10,7 @@ proc: BEGIN
|
||||||
LEAVE proc;
|
LEAVE proc;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
INSERT INTO orderRecalc SET orderFk = vSelf;
|
-- #4409 Disable order recalc
|
||||||
|
-- INSERT INTO orderRecalc SET orderFk = vSelf;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -6,16 +6,24 @@ BEGIN
|
||||||
*/
|
*/
|
||||||
DECLARE vSlowQueryLog INT DEFAULT @@slow_query_log;
|
DECLARE vSlowQueryLog INT DEFAULT @@slow_query_log;
|
||||||
DECLARE vSqlLogBin INT DEFAULT @@SESSION.sql_log_bin;
|
DECLARE vSqlLogBin INT DEFAULT @@SESSION.sql_log_bin;
|
||||||
|
DECLARE vLogExists BOOL;
|
||||||
|
|
||||||
SET sql_log_bin = OFF;
|
SET sql_log_bin = OFF;
|
||||||
SET GLOBAL slow_query_log = OFF;
|
SET GLOBAL slow_query_log = OFF;
|
||||||
|
|
||||||
RENAME TABLE `mysql`.`slow_log` TO `mysql`.`slow_log_temp`;
|
SELECT COUNT(*) > 0 INTO vLogExists
|
||||||
|
FROM information_schema.TABLES
|
||||||
|
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'slow_log';
|
||||||
|
|
||||||
DELETE FROM `mysql`.`slow_log_temp`
|
IF vLogExists THEN
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS mysql.slow_log_temp;
|
||||||
|
RENAME TABLE mysql.slow_log TO mysql.slow_log_temp;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DELETE FROM mysql.slow_log_temp
|
||||||
WHERE start_time < TIMESTAMPADD(WEEK, -1, util.VN_NOW());
|
WHERE start_time < TIMESTAMPADD(WEEK, -1, util.VN_NOW());
|
||||||
|
|
||||||
RENAME TABLE `mysql`.`slow_log_temp` TO `mysql`.`slow_log`;
|
RENAME TABLE mysql.slow_log_temp TO mysql.slow_log;
|
||||||
|
|
||||||
SET GLOBAL slow_query_log = vSlowQueryLog;
|
SET GLOBAL slow_query_log = vSlowQueryLog;
|
||||||
SET sql_log_bin = vSqlLogBin;
|
SET sql_log_bin = vSqlLogBin;
|
||||||
|
|
|
@ -10,6 +10,8 @@ BEGIN
|
||||||
DECLARE vLines INT;
|
DECLARE vLines INT;
|
||||||
DECLARE vHasDistinctTransactions INT;
|
DECLARE vHasDistinctTransactions INT;
|
||||||
|
|
||||||
|
CALL invoiceIn_checkBooked(vInvoiceInFk);
|
||||||
|
|
||||||
SELECT taxRowLimit INTO vTaxRowLimit FROM invoiceInConfig;
|
SELECT taxRowLimit INTO vTaxRowLimit FROM invoiceInConfig;
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vLines
|
SELECT COUNT(*) INTO vLines
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceIn_checkBooked`(
|
||||||
|
vSelf INT
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Comprueba si una factura recibida está contabilizada,
|
||||||
|
* y si lo está retorna un throw.
|
||||||
|
*
|
||||||
|
* @param vSelf Id invoiceIn
|
||||||
|
*/
|
||||||
|
DECLARE vIsBooked BOOL;
|
||||||
|
|
||||||
|
SELECT isBooked INTO vIsBooked
|
||||||
|
FROM invoiceIn
|
||||||
|
WHERE id = vSelf;
|
||||||
|
|
||||||
|
IF vIsBooked THEN
|
||||||
|
CALL util.throw('InvoiceIn is already booked');
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -13,6 +13,7 @@ BEGIN
|
||||||
* @param vQuantity a dar de alta/baja
|
* @param vQuantity a dar de alta/baja
|
||||||
* @param vAddressFk id address
|
* @param vAddressFk id address
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DECLARE vTicketFk INT;
|
DECLARE vTicketFk INT;
|
||||||
DECLARE vClientFk INT;
|
DECLARE vClientFk INT;
|
||||||
DECLARE vDefaultCompanyFk INT;
|
DECLARE vDefaultCompanyFk INT;
|
||||||
|
@ -33,7 +34,7 @@ BEGIN
|
||||||
|
|
||||||
SELECT a.clientFk INTO vClientFk
|
SELECT a.clientFk INTO vClientFk
|
||||||
FROM address a
|
FROM address a
|
||||||
WHERE a.id = vAddressFk;
|
WHERE a.id = vAddressShortage;
|
||||||
|
|
||||||
SELECT t.id INTO vTicketFk
|
SELECT t.id INTO vTicketFk
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
|
@ -65,7 +66,7 @@ BEGIN
|
||||||
INSERT INTO sale(ticketFk, itemFk, concept, quantity)
|
INSERT INTO sale(ticketFk, itemFk, concept, quantity)
|
||||||
SELECT vTicketFk,
|
SELECT vTicketFk,
|
||||||
vItemFk,
|
vItemFk,
|
||||||
CONCAT(longName,' ', worker_getCode(), ' ', LEFT(CAST(util.VN_NOW() AS TIME),5)),
|
name,
|
||||||
vQuantity
|
vQuantity
|
||||||
FROM item
|
FROM item
|
||||||
WHERE id = vItemFk;
|
WHERE id = vItemFk;
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInCorrection_beforeDelete`
|
||||||
|
BEFORE DELETE ON `invoiceInCorrection`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.correctingFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInCorrection_beforeInsert`
|
||||||
|
BEFORE INSERT ON `invoiceInCorrection`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(NEW.correctingFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInCorrection_beforeUpdate`
|
||||||
|
BEFORE UPDATE ON `invoiceInCorrection`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.correctingFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInDueDay_beforeDelete`
|
||||||
|
BEFORE DELETE ON `invoiceInDueDay`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.invoiceInFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -5,6 +5,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInDueDay_befor
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vIsNotified BOOLEAN;
|
DECLARE vIsNotified BOOLEAN;
|
||||||
|
|
||||||
|
CALL invoiceIn_checkBooked(NEW.invoiceInFk);
|
||||||
|
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
|
||||||
SELECT isNotified INTO vIsNotified
|
SELECT isNotified INTO vIsNotified
|
||||||
|
|
|
@ -5,6 +5,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInDueDay_befor
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vIsNotified BOOLEAN;
|
DECLARE vIsNotified BOOLEAN;
|
||||||
|
|
||||||
|
CALL invoiceIn_checkBooked(OLD.invoiceInFk);
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
|
||||||
SELECT isNotified INTO vIsNotified
|
SELECT isNotified INTO vIsNotified
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInIntrastat_beforeDelete`
|
||||||
|
BEFORE DELETE ON `invoiceInIntrastat`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.invoiceInFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInIntrastat_beforeInsert`
|
||||||
|
BEFORE INSERT ON `invoiceInIntrastat`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(NEW.invoiceInFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInIntrastat_beforeUpdate`
|
||||||
|
BEFORE UPDATE ON `invoiceInIntrastat`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.invoiceInFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInTax_beforeDelete`
|
||||||
|
BEFORE DELETE ON `invoiceInTax`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.invoiceInFk);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -3,6 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceInTax_beforeUp
|
||||||
BEFORE UPDATE ON `invoiceInTax`
|
BEFORE UPDATE ON `invoiceInTax`
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.invoiceInFk);
|
||||||
|
|
||||||
IF NOT (NEW.invoiceInFk <=> OLD.invoiceInFk) THEN
|
IF NOT (NEW.invoiceInFk <=> OLD.invoiceInFk) THEN
|
||||||
CALL invoiceInTax_afterUpsert(NEW.invoiceInFk);
|
CALL invoiceInTax_afterUpsert(NEW.invoiceInFk);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
|
@ -3,7 +3,6 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceIn_afterUpdate
|
||||||
AFTER UPDATE ON `invoiceIn`
|
AFTER UPDATE ON `invoiceIn`
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
IF NEW.issued != OLD.issued
|
IF NEW.issued != OLD.issued
|
||||||
OR NEW.currencyFk != OLD.currencyFk THEN
|
OR NEW.currencyFk != OLD.currencyFk THEN
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceIn_beforeDelete`
|
||||||
|
BEFORE DELETE ON `invoiceIn`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.id);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -5,6 +5,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`invoiceIn_beforeUpdat
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vWithholdingSageFk INT;
|
DECLARE vWithholdingSageFk INT;
|
||||||
|
|
||||||
|
IF NEW.isBooked = OLD.isBooked THEN
|
||||||
|
CALL invoiceIn_checkBooked(OLD.id);
|
||||||
|
END IF;
|
||||||
|
|
||||||
IF NOT (NEW.supplierRef <=> OLD.supplierRef) AND NOT util.checkPrintableChars(NEW.supplierRef) THEN
|
IF NOT (NEW.supplierRef <=> OLD.supplierRef) AND NOT util.checkPrintableChars(NEW.supplierRef) THEN
|
||||||
CALL util.throw('The invoiceIn reference contains invalid characters');
|
CALL util.throw('The invoiceIn reference contains invalid characters');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
UPDATE salix.ACL SET principalId = "hr" WHERE property IN ('find','findById','findOne') AND model = "Worker";
|
||||||
|
|
||||||
|
INSERT INTO salix.ACL (model, property, accessType, permission, principalType, principalId)
|
||||||
|
VALUES ('Worker', '__get__summary', 'READ', 'ALLOW', 'ROLE', 'employee');
|
|
@ -2,7 +2,6 @@ import selectors from '../../helpers/selectors.js';
|
||||||
import getBrowser from '../../helpers/puppeteer';
|
import getBrowser from '../../helpers/puppeteer';
|
||||||
|
|
||||||
describe('Worker summary path', () => {
|
describe('Worker summary path', () => {
|
||||||
const workerId = 3;
|
|
||||||
let browser;
|
let browser;
|
||||||
let page;
|
let page;
|
||||||
beforeAll(async() => {
|
beforeAll(async() => {
|
||||||
|
@ -10,7 +9,7 @@ describe('Worker summary path', () => {
|
||||||
page = browser.page;
|
page = browser.page;
|
||||||
await page.loginAndModule('employee', 'worker');
|
await page.loginAndModule('employee', 'worker');
|
||||||
const httpDataResponse = page.waitForResponse(response => {
|
const httpDataResponse = page.waitForResponse(response => {
|
||||||
return response.status() === 200 && response.url().includes(`Workers/${workerId}`);
|
return response.status() === 200 && response.url().includes(`Workers/summary`);
|
||||||
});
|
});
|
||||||
await page.accessToSearchResult('agencyNick');
|
await page.accessToSearchResult('agencyNick');
|
||||||
await httpDataResponse;
|
await httpDataResponse;
|
||||||
|
|
|
@ -352,5 +352,6 @@
|
||||||
"The line could not be marked": "La linea no puede ser marcada",
|
"The line could not be marked": "La linea no puede ser marcada",
|
||||||
"This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario",
|
"This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario",
|
||||||
"They're not your subordinate": "No es tu subordinado/a.",
|
"They're not your subordinate": "No es tu subordinado/a.",
|
||||||
"No results found": "No se han encontrado resultados"
|
"No results found": "No se han encontrado resultados",
|
||||||
|
"InvoiceIn is already booked": "La factura recibida está contabilizada"
|
||||||
}
|
}
|
|
@ -19,7 +19,7 @@ module.exports = Self => {
|
||||||
if (ticket.ticketFk != claim.ticketFk)
|
if (ticket.ticketFk != claim.ticketFk)
|
||||||
throw new UserError(`Cannot create a new claimBeginning from a different ticket`);
|
throw new UserError(`Cannot create a new claimBeginning from a different ticket`);
|
||||||
}
|
}
|
||||||
// await claimIsEditable(ctx);
|
await claimIsEditable(ctx);
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.observe('before delete', async ctx => {
|
Self.observe('before delete', async ctx => {
|
||||||
|
@ -36,7 +36,7 @@ module.exports = Self => {
|
||||||
if (ctx.options && ctx.options.transaction)
|
if (ctx.options && ctx.options.transaction)
|
||||||
myOptions.transaction = ctx.options.transaction;
|
myOptions.transaction = ctx.options.transaction;
|
||||||
|
|
||||||
const claimBeginning = await Self.findById(ctx.where.id);
|
const claimBeginning = ctx.instance ?? await Self.findById(ctx.where.id);
|
||||||
|
|
||||||
const filter = {
|
const filter = {
|
||||||
where: {id: claimBeginning.claimFk},
|
where: {id: claimBeginning.claimFk},
|
||||||
|
|
|
@ -13,11 +13,10 @@ describe('invoiceInDueDay new()', () => {
|
||||||
|
|
||||||
it('should correctly create a new due day', async() => {
|
it('should correctly create a new due day', async() => {
|
||||||
const userId = 9;
|
const userId = 9;
|
||||||
const invoiceInFk = 6;
|
const invoiceInFk = 3;
|
||||||
|
|
||||||
const ctx = {
|
const ctx = {
|
||||||
req: {
|
req: {
|
||||||
|
|
||||||
accessToken: {userId: userId},
|
accessToken: {userId: userId},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -158,7 +158,7 @@ describe('InvoiceIn filter()', () => {
|
||||||
|
|
||||||
const result = await models.InvoiceIn.filter(ctx, {}, options);
|
const result = await models.InvoiceIn.filter(ctx, {}, options);
|
||||||
|
|
||||||
expect(result.length).toEqual(6);
|
expect(result.length).toEqual(4);
|
||||||
|
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -92,5 +92,87 @@
|
||||||
"model": "WorkerTeamCollegues",
|
"model": "WorkerTeamCollegues",
|
||||||
"foreignKey": "workerFk"
|
"foreignKey": "workerFk"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"scopes":{
|
||||||
|
"summary": {
|
||||||
|
"include": [
|
||||||
|
{
|
||||||
|
"relation": "user",
|
||||||
|
"scope": {
|
||||||
|
"fields": ["email", "name", "nickname", "roleFk"],
|
||||||
|
"include": [
|
||||||
|
{
|
||||||
|
"relation": "role",
|
||||||
|
"scope": {
|
||||||
|
"fields": ["name"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "emailUser",
|
||||||
|
"scope": {
|
||||||
|
"fields": ["email"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"relation": "department",
|
||||||
|
"scope": {
|
||||||
|
"include": {
|
||||||
|
"relation": "department"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"relation": "boss"
|
||||||
|
}, {
|
||||||
|
"relation": "client",
|
||||||
|
"scope": {
|
||||||
|
"fields": [
|
||||||
|
"id",
|
||||||
|
"name",
|
||||||
|
"fi",
|
||||||
|
"socialName",
|
||||||
|
"contact",
|
||||||
|
"street",
|
||||||
|
"city",
|
||||||
|
"postcode",
|
||||||
|
"email",
|
||||||
|
"mobile",
|
||||||
|
"isActive",
|
||||||
|
"credit",
|
||||||
|
"creditInsurance",
|
||||||
|
"iban",
|
||||||
|
"dueDay",
|
||||||
|
"isEqualizated",
|
||||||
|
"isFreezed",
|
||||||
|
"hasToInvoiceByAddress",
|
||||||
|
"hasToInvoice",
|
||||||
|
"isToBeMailed",
|
||||||
|
"hasSepaVnl",
|
||||||
|
"hasLcr",
|
||||||
|
"hasCoreVnl",
|
||||||
|
"hasCoreVnh",
|
||||||
|
"hasIncoterms",
|
||||||
|
"isTaxDataChecked",
|
||||||
|
"eypbc",
|
||||||
|
"quality",
|
||||||
|
"isVies",
|
||||||
|
"isRelevant",
|
||||||
|
"accountingAccount",
|
||||||
|
"created",
|
||||||
|
"sageTaxTypeFk",
|
||||||
|
"sageTransactionTypeFk",
|
||||||
|
"businessTypeFk",
|
||||||
|
"salesPersonFk",
|
||||||
|
"hasElectronicInvoice",
|
||||||
|
"rating",
|
||||||
|
"recommendedCredit"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"relation": "sip"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,37 +4,13 @@ import ModuleCard from 'salix/components/module-card';
|
||||||
class Controller extends ModuleCard {
|
class Controller extends ModuleCard {
|
||||||
reload() {
|
reload() {
|
||||||
const filter = {
|
const filter = {
|
||||||
include: [
|
where: {
|
||||||
{
|
id: this.$params.id}
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['name', 'emailVerified'],
|
|
||||||
include: {
|
|
||||||
relation: 'emailUser',
|
|
||||||
scope: {
|
|
||||||
fields: ['email']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
relation: 'sip',
|
|
||||||
scope: {
|
|
||||||
fields: ['extension', 'secret']
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
relation: 'department',
|
|
||||||
scope: {
|
|
||||||
include: {
|
|
||||||
relation: 'department'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
this.$http.get(`Workers/${this.$params.id}`, {filter})
|
this.$http.get(`Workers/summary`, {filter})
|
||||||
.then(res => this.worker = res.data),
|
.then(res => this.worker = res.data[0]),
|
||||||
this.$http.get(`Workers/${this.$params.id}/activeContract`)
|
this.$http.get(`Workers/${this.$params.id}/activeContract`)
|
||||||
.then(res => this.hasWorkCenter = res.data?.workCenterFk)
|
.then(res => this.hasWorkCenter = res.data?.workCenterFk)
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -37,41 +37,11 @@ class Controller extends Descriptor {
|
||||||
|
|
||||||
loadData() {
|
loadData() {
|
||||||
const filter = {
|
const filter = {
|
||||||
include: [
|
where: {id: this.id},
|
||||||
{
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['name', 'emailVerified'],
|
|
||||||
include: {
|
|
||||||
relation: 'emailUser',
|
|
||||||
scope: {
|
|
||||||
fields: ['email']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
relation: 'client',
|
|
||||||
scope: {
|
|
||||||
fields: ['fi']
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
relation: 'sip',
|
|
||||||
scope: {
|
|
||||||
fields: ['extension']
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
relation: 'department',
|
|
||||||
scope: {
|
|
||||||
include: {
|
|
||||||
relation: 'department'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return this.getData(`Workers/${this.id}`, {filter})
|
return this.getData(`Workers/summary`, {filter})
|
||||||
.then(res => this.entity = res.data);
|
.then(res => this.entity = res.data[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
getPassRequirements() {
|
getPassRequirements() {
|
||||||
|
|
|
@ -14,14 +14,14 @@ describe('vnWorkerDescriptor', () => {
|
||||||
describe('loadData()', () => {
|
describe('loadData()', () => {
|
||||||
it(`should perform a get query to store the worker data into the controller`, () => {
|
it(`should perform a get query to store the worker data into the controller`, () => {
|
||||||
const id = 1;
|
const id = 1;
|
||||||
const response = 'foo';
|
const response = ['foo'];
|
||||||
|
|
||||||
$httpBackend.whenGET('UserConfigs/getUserConfig').respond({});
|
$httpBackend.whenGET('UserConfigs/getUserConfig').respond({});
|
||||||
$httpBackend.expectRoute('GET', `Workers/${id}`).respond(response);
|
$httpBackend.expectRoute('GET', `Workers/summary`).respond(response);
|
||||||
controller.id = id;
|
controller.id = id;
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
expect(controller.worker).toEqual(response);
|
expect([controller.worker]).toEqual(response);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -10,53 +10,14 @@ class Controller extends Summary {
|
||||||
this.$.worker = null;
|
this.$.worker = null;
|
||||||
if (!value) return;
|
if (!value) return;
|
||||||
|
|
||||||
const query = `Workers/${value.id}`;
|
|
||||||
const filter = {
|
const filter = {
|
||||||
include: [
|
where: {
|
||||||
{
|
id: value.id
|
||||||
relation: 'user',
|
}
|
||||||
scope: {
|
|
||||||
fields: ['name', 'roleFk'],
|
|
||||||
include: [{
|
|
||||||
relation: 'role',
|
|
||||||
scope: {
|
|
||||||
fields: ['name']
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'emailUser',
|
|
||||||
scope: {
|
|
||||||
fields: ['email']
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'client',
|
|
||||||
scope: {fields: ['fi', 'phone']}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'boss',
|
|
||||||
scope: {fields: ['id', 'name']}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'sip',
|
|
||||||
scope: {fields: ['extension']}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'department',
|
|
||||||
scope: {
|
|
||||||
include: {
|
|
||||||
relation: 'department',
|
|
||||||
scope: {fields: ['id', 'code', 'name']}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
this.$http.get(query, {params: {filter}}).then(res => {
|
this.$http.get(`Workers/summary`, {filter}).then(res => {
|
||||||
this.$.worker = res.data;
|
this.$.worker = res.data[0];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue