#6427 - SMS Recover Password #2037
|
@ -11,11 +11,16 @@ Required applications.
|
||||||
* Node.js
|
* Node.js
|
||||||
* Docker
|
* Docker
|
||||||
* Git
|
* Git
|
||||||
|
* MYT
|
||||||
|
|
||||||
You will need to install globally the following items.
|
You will need to install globally the following items.
|
||||||
```
|
```
|
||||||
$ sudo npm install -g jest gulp-cli
|
$ sudo npm install -g jest gulp-cli
|
||||||
```
|
```
|
||||||
|
After installing MYT you will need the following item.
|
||||||
|
```
|
||||||
|
$ apt install libkrb5-dev libssl-dev
|
||||||
|
```
|
||||||
|
|
||||||
## Installing dependencies and launching
|
## Installing dependencies and launching
|
||||||
|
|
||||||
|
|
|
@ -18,15 +18,10 @@ module.exports = Self => {
|
||||||
Self.renewToken = async function(ctx) {
|
Self.renewToken = async function(ctx) {
|
||||||
const {accessToken: token} = ctx.req;
|
const {accessToken: token} = ctx.req;
|
||||||
|
|
||||||
// Check if current token is valid
|
const {courtesyTime} = await models.AccessTokenConfig.findOne({
|
||||||
|
fields: ['courtesyTime']
|
||||||
const {renewPeriod, courtesyTime} = await models.AccessTokenConfig.findOne({
|
|
||||||
fields: ['renewPeriod', 'courtesyTime']
|
|
||||||
});
|
});
|
||||||
const now = Date.now();
|
const isNotExceeded = await Self.validateToken(ctx);
|
||||||
const differenceMilliseconds = now - token.created;
|
|
||||||
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
|
|
||||||
const isNotExceeded = differenceSeconds < renewPeriod - courtesyTime;
|
|
||||||
if (isNotExceeded)
|
if (isNotExceeded)
|
||||||
return token;
|
return token;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethodCtx('validateToken', {
|
||||||
|
description: 'Validates the current logged user token',
|
||||||
|
accepts: [],
|
||||||
|
accessType: 'READ',
|
||||||
|
returns: {
|
||||||
|
type: 'Boolean',
|
||||||
|
root: true
|
||||||
|
},
|
||||||
|
http: {
|
||||||
|
path: `/validateToken`,
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.validateToken = async function(ctx) {
|
||||||
|
const {accessToken: token} = ctx.req;
|
||||||
|
|
||||||
|
// Check if current token is valid
|
||||||
|
const {renewPeriod, courtesyTime} = await models.AccessTokenConfig.findOne({
|
||||||
|
fields: ['renewPeriod', 'courtesyTime']
|
||||||
|
});
|
||||||
|
const now = Date.now();
|
||||||
|
const differenceMilliseconds = now - token.created;
|
||||||
|
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
|
||||||
|
const isNotExceeded = differenceSeconds < renewPeriod - courtesyTime;
|
||||||
|
return isNotExceeded;
|
||||||
|
};
|
||||||
|
};
|
|
@ -16,6 +16,7 @@ module.exports = function(Self) {
|
||||||
require('../methods/vn-user/renew-token')(Self);
|
require('../methods/vn-user/renew-token')(Self);
|
||||||
require('../methods/vn-user/share-token')(Self);
|
require('../methods/vn-user/share-token')(Self);
|
||||||
require('../methods/vn-user/update-user')(Self);
|
require('../methods/vn-user/update-user')(Self);
|
||||||
|
require('../methods/vn-user/validate-token')(Self);
|
||||||
|
|
||||||
Self.definition.settings.acls = Self.definition.settings.acls.filter(acl => acl.property !== 'create');
|
Self.definition.settings.acls = Self.definition.settings.acls.filter(acl => acl.property !== 'create');
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,13 @@
|
||||||
"principalId": "$everyone",
|
"principalId": "$everyone",
|
||||||
"permission": "ALLOW"
|
"permission": "ALLOW"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"property": "validateToken",
|
||||||
|
"accessType": "EXECUTE",
|
||||||
|
"principalType": "ROLE",
|
||||||
|
"principalId": "$authenticated",
|
||||||
|
"permission": "ALLOW"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"property": "privileges",
|
"property": "privileges",
|
||||||
"accessType": "*",
|
"accessType": "*",
|
||||||
|
|
|
@ -1205,11 +1205,11 @@ INSERT INTO `vn`.`saleComponent`(`saleFk`, `componentFk`, `value`)
|
||||||
(32, 36, -92.324),
|
(32, 36, -92.324),
|
||||||
(32, 39, 0.994);
|
(32, 39, 0.994);
|
||||||
|
|
||||||
INSERT INTO `vn`.`itemShelving` (`itemFk`, `shelvingFk`, `visible`, `grouping`, `packing`, `userFk`)
|
INSERT INTO `vn`.`itemShelving` (`itemFk`, `shelvingFk`, `visible`, `grouping`, `packing`,`buyFk`, `userFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(2, 'GVC', 1, 1, 1, 1106),
|
(2, 'GVC', 1, 1, 1, 2,1106),
|
||||||
(4, 'HEJ', 1, 1, 1, 1106),
|
(4, 'HEJ', 1, 1, 1, NULL,1106),
|
||||||
(1, 'UXN', 2, 12, 12, 1106);
|
(1, 'UXN', 2, 12, 12, NULL,1106);
|
||||||
|
|
||||||
INSERT INTO `vn`.`itemShelvingSale` (`itemShelvingFk`, `saleFk`, `quantity`, `created`, `userFk`)
|
INSERT INTO `vn`.`itemShelvingSale` (`itemShelvingFk`, `saleFk`, `quantity`, `created`, `userFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
|
|
@ -40,18 +40,25 @@ proc:BEGIN
|
||||||
postalCode,
|
postalCode,
|
||||||
`type`,
|
`type`,
|
||||||
image,
|
image,
|
||||||
description
|
description,
|
||||||
|
addressFk
|
||||||
)
|
)
|
||||||
SELECT i.name,
|
SELECT CONCAT(i.name, ' by ',a.nickname),
|
||||||
i.`size`,
|
i.minPrice + apc.deliveryCost,
|
||||||
i.id,
|
i.id,
|
||||||
vLanded,
|
vLanded,
|
||||||
vPostalCode,
|
vPostalCode,
|
||||||
it.name,
|
it.name,
|
||||||
CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image),
|
CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image),
|
||||||
i.description
|
i.description,
|
||||||
|
apc.addressFk
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
|
JOIN addressPostCode apc
|
||||||
|
ON apc.dayOfWeek = dayOfWeek(vLanded)
|
||||||
|
AND NOW() < vLanded - INTERVAL apc.hoursInAdvance HOUR
|
||||||
|
AND apc.postCode = vPostalCode
|
||||||
|
JOIN vn.address a ON a.id = apc.addressFk
|
||||||
WHERE it.code IN ('FNR','FNP');
|
WHERE it.code IN ('FNR','FNP');
|
||||||
|
|
||||||
SELECT *
|
SELECT *
|
||||||
|
|
|
@ -13,8 +13,17 @@ BEGIN
|
||||||
/**
|
/**
|
||||||
* Set actions for contact request
|
* Set actions for contact request
|
||||||
*
|
*
|
||||||
* @param vPostalCode Delivery address postal code
|
* @param vName Name
|
||||||
|
* @param vPhone Phone number
|
||||||
|
* @param vEmail e-mail
|
||||||
|
* @param vMessage text of the message
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
CALL vn.mail_insert(
|
||||||
|
'floranet@verdnatura.es',
|
||||||
|
vEmail,
|
||||||
|
'Contact request',
|
||||||
|
CONCAT('Phone: ',vPhone, ' Message: ', vMessage)
|
||||||
|
);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -21,7 +21,7 @@ BEGIN
|
||||||
apc.dayOfWeek - vCurrentDayOfWeek,
|
apc.dayOfWeek - vCurrentDayOfWeek,
|
||||||
7 - apc.dayOfWeek
|
7 - apc.dayOfWeek
|
||||||
) DAY nextDay,
|
) DAY nextDay,
|
||||||
NOW() + INTERVAL apc.hoursInAdvance - 12 HOUR minDeliveryTime
|
NOW() + INTERVAL apc.hoursInAdvance HOUR minDeliveryTime
|
||||||
FROM addressPostCode apc
|
FROM addressPostCode apc
|
||||||
WHERE apc.postCode = vPostalCode
|
WHERE apc.postCode = vPostalCode
|
||||||
HAVING nextDay > minDeliveryTime) sub;
|
HAVING nextDay > minDeliveryTime) sub;
|
||||||
|
|
|
@ -1,24 +1,127 @@
|
||||||
DROP PROCEDURE IF EXISTS floranet.order_confirm;
|
|
||||||
|
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
$$
|
$$
|
||||||
|
|
||||||
CREATE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk INT)
|
CREATE OR REPLACE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk INT)
|
||||||
READS SQL DATA
|
READS SQL DATA
|
||||||
|
|
||||||
BEGIN
|
proc:BEGIN
|
||||||
/** Update order.isPaid field.
|
/** Update order.isPaid field, and makes the ticket
|
||||||
*
|
*
|
||||||
* @param vCatalogueFk floranet.catalogue.id
|
* @param vCatalogueFk floranet.catalogue.id
|
||||||
*
|
*
|
||||||
* @returns floranet.order.isPaid
|
* @returns floranet.order.isPaid
|
||||||
*/
|
*/
|
||||||
|
DECLARE vNewTicketFk INT;
|
||||||
|
DECLARE vCustomerEmail VARCHAR(255);
|
||||||
|
DECLARE vFloranetEmail VARCHAR(255);
|
||||||
|
DECLARE vSubjectEmail VARCHAR(100);
|
||||||
|
DECLARE vBodyEmail TEXT;
|
||||||
|
DECLARE vZoneFk INT;
|
||||||
|
|
||||||
|
IF (SELECT isPaid FROM `order` WHERE catalogueFk = vCatalogueFk) THEN
|
||||||
|
CALL util.throw('Esta orden ya está confirmada');
|
||||||
|
END IF;
|
||||||
|
|
||||||
UPDATE `order`
|
UPDATE `order`
|
||||||
SET isPaid = TRUE,
|
SET isPaid = TRUE,
|
||||||
payed = NOW()
|
payed = NOW()
|
||||||
WHERE catalogueFk = vCatalogueFk;
|
WHERE catalogueFk = vCatalogueFk;
|
||||||
|
|
||||||
SELECT isPaid
|
SELECT zoneFk
|
||||||
|
INTO vZoneFk
|
||||||
|
FROM (
|
||||||
|
SELECT zoneFk, COUNT(*) totalCount
|
||||||
|
FROM vn.ticket t
|
||||||
|
JOIN catalogue c ON c.id = vCatalogueFk
|
||||||
|
WHERE t.shipped > util.VN_CURDATE() - INTERVAL 1 YEAR
|
||||||
|
AND t.addressFk = c.addressFk
|
||||||
|
GROUP BY zoneFk
|
||||||
|
ORDER BY totalCount DESC
|
||||||
|
LIMIT 10000000000000000000
|
||||||
|
) sub
|
||||||
|
LIMIT 1;
|
||||||
|
|
||||||
|
INSERT INTO vn.ticket (
|
||||||
|
clientFk,
|
||||||
|
shipped,
|
||||||
|
addressFk,
|
||||||
|
agencyModeFk,
|
||||||
|
nickname,
|
||||||
|
warehouseFk,
|
||||||
|
routeFk,
|
||||||
|
companyFk,
|
||||||
|
landed,
|
||||||
|
zoneFk
|
||||||
|
)
|
||||||
|
SELECT a.clientFk,
|
||||||
|
c.dated - INTERVAL 1 DAY,
|
||||||
|
c.addressFk,
|
||||||
|
a.agencyModeFk,
|
||||||
|
a.nickname,
|
||||||
|
ag.warehouseFk,
|
||||||
|
NULL,
|
||||||
|
co.id,
|
||||||
|
c.dated,
|
||||||
|
vZoneFk
|
||||||
|
FROM vn.address a
|
||||||
|
JOIN vn.agencyMode am ON am.id = a.agencyModeFk
|
||||||
|
JOIN vn.agency ag ON ag.id = am.agencyFk
|
||||||
|
JOIN catalogue c ON c.addressFk = a.id
|
||||||
|
JOIN vn.company co ON co.code = 'VNL'
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
SET vNewTicketFk = LAST_INSERT_ID();
|
||||||
|
|
||||||
|
INSERT INTO vn.sale(
|
||||||
|
ticketFk,
|
||||||
|
itemFk,
|
||||||
|
concept,
|
||||||
|
price,
|
||||||
|
quantity)
|
||||||
|
SELECT
|
||||||
|
vNewTicketFk,
|
||||||
|
c.itemFk,
|
||||||
|
CONCAT('Entrega: ',c.name),
|
||||||
|
- c.price,
|
||||||
|
1
|
||||||
|
FROM catalogue c
|
||||||
|
JOIN addressPostCode apc
|
||||||
|
ON apc.addressFk = c.addressFk
|
||||||
|
AND apc.dayOfWeek = dayOfWeek(c.dated)
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
SELECT cl.email,
|
||||||
|
cf.email,
|
||||||
|
CONCAT('Nuevo pedido FLORANET para entrega el ',c.dated),
|
||||||
|
CONCAT_WS('\n',
|
||||||
|
CONCAT('Producto: ', c.name),
|
||||||
|
CONCAT('Fecha de entrega: ',c.dated),
|
||||||
|
CONCAT('Destinatario: ', o.deliveryName),
|
||||||
|
CONCAT('Dirección: ', o.address),
|
||||||
|
CONCAT('CP: ', c.postalCode),
|
||||||
|
CONCAT('Foto: ', c.image),
|
||||||
|
CONCAT('Mensaje: ', IFNULL(o.message,"Ninguno.")),
|
||||||
|
CONCAT('Teléfono: ',IFNULL(o.deliveryPhone,"--")),
|
||||||
|
CONCAT('Observaciones: ', IFNULL(o.observations,"No hay."))
|
||||||
|
)
|
||||||
|
INTO vCustomerEmail,
|
||||||
|
vFloranetEmail,
|
||||||
|
vSubjectEmail,
|
||||||
|
vBodyEmail
|
||||||
|
FROM vn.client cl
|
||||||
|
JOIN vn.address a ON a.clientFk = cl.id
|
||||||
|
JOIN catalogue c ON c.addressFk = a.id
|
||||||
|
JOIN `order` o ON o.catalogueFk = c.id
|
||||||
|
JOIN config cf
|
||||||
|
WHERE c.id = vCatalogueFk;
|
||||||
|
|
||||||
|
CALL vn.mail_insert(
|
||||||
|
vCustomerEmail,
|
||||||
|
vFloranetEmail,
|
||||||
|
vSubjectEmail,
|
||||||
|
vBodyEmail);
|
||||||
|
|
||||||
|
SELECT isPaid, vNewTicketFk
|
||||||
FROM `order`
|
FROM `order`
|
||||||
WHERE catalogueFk = vCatalogueFk;
|
WHERE catalogueFk = vCatalogueFk;
|
||||||
END$$
|
END$$
|
||||||
|
|
|
@ -9,12 +9,11 @@ BEGIN
|
||||||
* Returns list of url for sliders.
|
* Returns list of url for sliders.
|
||||||
*/
|
*/
|
||||||
SELECT
|
SELECT
|
||||||
CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image) url,
|
CONCAT('https://cdn.verdnatura.es/image/catalog/1600x900/', i.image) url,
|
||||||
i.longName
|
i.longName
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
WHERE it.code IN ('FNR','FNP')
|
WHERE it.code IN ('FNR','FNP')
|
||||||
LIMIT 3;
|
LIMIT 3;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -17,13 +17,15 @@ BEGIN
|
||||||
SELECT
|
SELECT
|
||||||
itemFk,
|
itemFk,
|
||||||
packing,
|
packing,
|
||||||
created
|
created,
|
||||||
|
buyFk
|
||||||
FROM itemShelving
|
FROM itemShelving
|
||||||
WHERE id = vItemShelvingFk
|
WHERE id = vItemShelvingFk
|
||||||
) ish2
|
) ish2
|
||||||
ON ish2.itemFk = ish.itemFk
|
ON ish2.itemFk = ish.itemFk
|
||||||
AND ish2.packing = ish.packing
|
AND ish2.packing = ish.packing
|
||||||
AND date(ish2.created) = date(ish.created)
|
AND date(ish2.created) = date(ish.created)
|
||||||
|
AND ish2.buyFk = ish.buyFk
|
||||||
WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_unicode_ci;
|
WHERE ish.shelvingFk = vShelvingFk COLLATE utf8_unicode_ci;
|
||||||
|
|
||||||
IF vNewItemShelvingFk THEN
|
IF vNewItemShelvingFk THEN
|
||||||
|
|
|
@ -2,7 +2,6 @@ DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_add`(IN vShelvingFk VARCHAR(8), IN vBarcode VARCHAR(22), IN vQuantity INT, IN vPackagingFk VARCHAR(10), IN vGrouping INT, IN vPacking INT, IN vWarehouseFk INT)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Añade registro o lo actualiza si ya existe.
|
* Añade registro o lo actualiza si ya existe.
|
||||||
*
|
*
|
||||||
|
@ -15,11 +14,23 @@ BEGIN
|
||||||
* @param vWarehouseFk indica el sector
|
* @param vWarehouseFk indica el sector
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
|
|
||||||
DECLARE vItemFk INT;
|
DECLARE vItemFk INT;
|
||||||
|
DECLARE vBuyFk INT;
|
||||||
|
|
||||||
|
SELECT id INTO vBuyFk
|
||||||
|
FROM buy WHERE id = vBarcode;
|
||||||
|
|
||||||
SELECT barcodeToItem(vBarcode) INTO vItemFk;
|
SELECT barcodeToItem(vBarcode) INTO vItemFk;
|
||||||
|
|
||||||
|
IF vBuyFk IS NULL THEN
|
||||||
|
CALL cache.last_buy_refresh(FALSE);
|
||||||
|
|
||||||
|
SELECT buy_id INTO vBuyFk
|
||||||
|
FROM cache.last_buy
|
||||||
|
WHERE item_id = vItemFk
|
||||||
|
AND warehouse_id = vWarehouseFk;
|
||||||
|
END IF;
|
||||||
|
|
||||||
IF vPacking IS NULL
|
IF vPacking IS NULL
|
||||||
THEN
|
THEN
|
||||||
SET vPacking = itemPacking(vBarcode, vWarehouseFk);
|
SET vPacking = itemPacking(vBarcode, vWarehouseFk);
|
||||||
|
@ -29,31 +40,32 @@ BEGIN
|
||||||
IF (SELECT COUNT(*) FROM itemShelving
|
IF (SELECT COUNT(*) FROM itemShelving
|
||||||
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
|
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk
|
||||||
AND itemFk = vItemFk
|
AND itemFk = vItemFk
|
||||||
AND packing = vPacking) = 1 THEN
|
AND packing = vPacking
|
||||||
|
AND buyFk = vBuyFk) THEN
|
||||||
|
|
||||||
UPDATE itemShelving
|
UPDATE itemShelving
|
||||||
SET visible = visible+vQuantity
|
SET visible = visible + vQuantity
|
||||||
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking;
|
WHERE shelvingFk COLLATE utf8_unicode_ci = vShelvingFk AND itemFk = vItemFk AND packing = vPacking;
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
CALL cache.last_buy_refresh(FALSE);
|
|
||||||
INSERT INTO itemShelving( itemFk,
|
|
||||||
shelvingFk,
|
|
||||||
visible,
|
|
||||||
grouping,
|
|
||||||
packing,
|
|
||||||
packagingFk)
|
|
||||||
|
|
||||||
SELECT vItemFk,
|
INSERT INTO itemShelving(
|
||||||
vShelvingFk,
|
itemFk,
|
||||||
vQuantity,
|
shelvingFk,
|
||||||
IFNULL(vGrouping, b.grouping),
|
visible,
|
||||||
IFNULL(vPacking, b.packing),
|
grouping,
|
||||||
IFNULL(vPackagingFk, b.packagingFk)
|
packing,
|
||||||
FROM item i
|
packagingFk,
|
||||||
LEFT JOIN cache.last_buy lb ON i.id = lb.item_id AND lb.warehouse_id = vWarehouseFk
|
buyFk)
|
||||||
LEFT JOIN buy b ON b.id = lb.buy_id
|
SELECT vItemFk,
|
||||||
WHERE i.id = vItemFk;
|
vShelvingFk,
|
||||||
|
vQuantity,
|
||||||
|
IFNULL(vGrouping, b.grouping),
|
||||||
|
IFNULL(vPacking, b.packing),
|
||||||
|
IFNULL(vPackagingFk, b.packagingFk),
|
||||||
|
id
|
||||||
|
FROM buy b
|
||||||
|
WHERE id = vBuyFk;
|
||||||
END IF;
|
END IF;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_ValuateInventory`(vDated DATE, vIsDetailed BOOLEAN)
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_valuateInventory`(
|
||||||
|
vDated DATE
|
||||||
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE vInventoried DATE;
|
DECLARE vInventoried DATE;
|
||||||
DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
|
DECLARE vHasNotInventory BOOLEAN DEFAULT FALSE;
|
||||||
|
@ -15,8 +17,7 @@ BEGIN
|
||||||
SELECT tr.landed INTO vInventoried
|
SELECT tr.landed INTO vInventoried
|
||||||
FROM travel tr
|
FROM travel tr
|
||||||
JOIN `entry` e ON e.travelFk = tr.id
|
JOIN `entry` e ON e.travelFk = tr.id
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed <= vDateDayEnd
|
||||||
WHERE landed <= vDateDayEnd
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
ORDER BY tr.landed DESC
|
ORDER BY tr.landed DESC
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -27,8 +28,7 @@ BEGIN
|
||||||
SELECT landed INTO vInventoryClone
|
SELECT landed INTO vInventoryClone
|
||||||
FROM travel tr
|
FROM travel tr
|
||||||
JOIN `entry` e ON e.travelFk = tr.id
|
JOIN `entry` e ON e.travelFk = tr.id
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed >= vDated
|
||||||
WHERE landed >= vDated
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
ORDER BY landed ASC
|
ORDER BY landed ASC
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
@ -38,13 +38,14 @@ BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tInventory(
|
CREATE OR REPLACE TEMPORARY TABLE tInventory(
|
||||||
warehouseFk SMALLINT,
|
warehouseFk SMALLINT,
|
||||||
itemFk BIGINT,
|
itemFk BIGINT,
|
||||||
quantity INT,
|
quantity INT,
|
||||||
cost DOUBLE DEFAULT 0,
|
volume DECIMAL(10,2),
|
||||||
total DOUBLE DEFAULT 0,
|
cost DOUBLE DEFAULT 0,
|
||||||
warehouseInventory VARCHAR(20),
|
total DOUBLE DEFAULT 0,
|
||||||
PRIMARY KEY (warehouseInventory, itemFk) USING HASH
|
warehouseInventory VARCHAR(20),
|
||||||
|
PRIMARY KEY (warehouseInventory, itemFk) USING HASH
|
||||||
)
|
)
|
||||||
ENGINE = MEMORY;
|
ENGINE = MEMORY;
|
||||||
|
|
||||||
|
@ -60,9 +61,8 @@ BEGIN
|
||||||
JOIN `entry` e ON e.id = b.entryFk
|
JOIN `entry` e ON e.id = b.entryFk
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN travel tr ON tr.id = e.travelFk
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = warehouseInFk
|
JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed = vDateDayEnd
|
||||||
WHERE landed = vDateDayEnd
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
AND w.valuatedInventory
|
AND w.valuatedInventory
|
||||||
AND t.isInventory
|
AND t.isInventory
|
||||||
|
@ -78,9 +78,8 @@ BEGIN
|
||||||
JOIN `entry` e ON e.id = b.entryFk
|
JOIN `entry` e ON e.id = b.entryFk
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN travel tr ON tr.id = e.travelFk
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = warehouseInFk
|
JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
JOIN entryConfig ec
|
WHERE tr.landed = vInventoried
|
||||||
WHERE landed = vInventoried
|
|
||||||
AND e.supplierFk = vInventorySupplierFk
|
AND e.supplierFk = vInventorySupplierFk
|
||||||
AND w.valuatedInventory
|
AND w.valuatedInventory
|
||||||
AND t.isInventory
|
AND t.isInventory
|
||||||
|
@ -99,7 +98,6 @@ BEGIN
|
||||||
JOIN travel tr ON tr.id = e.travelFk
|
JOIN travel tr ON tr.id = e.travelFk
|
||||||
JOIN itemType t ON t.id = i.typeFk
|
JOIN itemType t ON t.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = tr.warehouseInFk
|
JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
JOIN entryConfig ec
|
|
||||||
WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
|
WHERE tr.landed BETWEEN vInventoried AND vDateDayEnd
|
||||||
AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
|
AND IF(tr.landed = util.VN_CURDATE(), tr.isReceived, TRUE)
|
||||||
AND NOT e.isRaid
|
AND NOT e.isRaid
|
||||||
|
@ -183,52 +181,37 @@ BEGIN
|
||||||
AND e.isConfirmed
|
AND e.isConfirmed
|
||||||
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
|
ON DUPLICATE KEY UPDATE tInventory.quantity = tInventory.quantity + (b.quantity);
|
||||||
|
|
||||||
CALL vn.buyUltimate(NULL, vDateDayEnd);
|
CALL buyUltimate(NULL, vDateDayEnd);
|
||||||
|
|
||||||
|
DELETE FROM tInventory WHERE quantity IS NULL OR NOT quantity;
|
||||||
|
|
||||||
UPDATE tInventory i
|
UPDATE tInventory i
|
||||||
JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.itemFk = bu.itemFk
|
JOIN tmp.buyUltimate bu ON i.warehouseFk = bu.warehouseFk AND i.itemFk = bu.itemFk
|
||||||
JOIN buy b ON b.id = bu.buyFk
|
JOIN buy b ON b.id = bu.buyFk
|
||||||
SET total = i.quantity * (IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)),
|
LEFT JOIN itemCost ic ON ic.itemFk = i.itemFk
|
||||||
cost = IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)
|
AND ic.warehouseFk = i.warehouseFk
|
||||||
WHERE i.quantity;
|
SET i.total = i.quantity * (IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0)),
|
||||||
|
i.cost = IFNULL(b.buyingValue, 0) + IFNULL(b.packageValue, 0) + IFNULL(b.freightValue, 0) + IFNULL(b.comissionValue, 0),
|
||||||
|
i.volume = i.quantity * ic.cm3delivery / 1000000;
|
||||||
|
|
||||||
DELETE FROM tInventory
|
SELECT ti.warehouseFk,
|
||||||
WHERE quantity IS NULL OR NOT quantity;
|
i.id,
|
||||||
|
i.longName,
|
||||||
IF vIsDetailed THEN
|
i.size,
|
||||||
SELECT ti.warehouseFk,
|
ti.quantity,
|
||||||
i.id itemFk,
|
ti.volume,
|
||||||
i.longName,
|
tp.name itemTypeName,
|
||||||
i.size,
|
ic.name itemCategoryName,
|
||||||
ti.quantity,
|
ti.cost,
|
||||||
tp.name Tipo,
|
ti.total,
|
||||||
ic.name Reino,
|
ti.warehouseInventory
|
||||||
ti.cost,
|
FROM tInventory ti
|
||||||
CAST(ti.total AS DECIMAL(10, 2)) total,
|
JOIN warehouse w ON w.id = warehouseFk
|
||||||
ti.warehouseInventory almacen
|
JOIN item i ON i.id = ti.itemFk
|
||||||
FROM tInventory ti
|
JOIN itemType tp ON tp.id = i.typeFk
|
||||||
JOIN warehouse w ON w.id = warehouseFk
|
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
||||||
JOIN item i ON i.id = ti.itemFk
|
WHERE w.valuatedInventory
|
||||||
JOIN itemType tp ON tp.id = i.typeFk
|
AND ti.total > 0;
|
||||||
JOIN itemCategory ic ON ic.id = tp.categoryFk
|
|
||||||
WHERE w.valuatedInventory
|
|
||||||
AND ti.total > 0
|
|
||||||
ORDER BY ti.total DESC;
|
|
||||||
ELSE
|
|
||||||
SELECT i.warehouseInventory Almacen,
|
|
||||||
ic.name Reino,
|
|
||||||
CAST(i.total AS DECIMAL(10, 2)) Euros,
|
|
||||||
w.code Comprador,
|
|
||||||
it.id
|
|
||||||
FROM tInventory i
|
|
||||||
JOIN warehouse wh ON wh.id = warehouseFk
|
|
||||||
JOIN item it ON it.id = i.itemFk
|
|
||||||
JOIN itemType itp ON itp.id = it.typeFk
|
|
||||||
LEFT JOIN worker w ON w.id = itp.workerFk
|
|
||||||
JOIN itemCategory ic ON ic.id = itp.categoryFk
|
|
||||||
WHERE wh.valuatedInventory
|
|
||||||
AND i.total > 0;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE
|
DROP TEMPORARY TABLE
|
||||||
tmp.buyUltimate,
|
tmp.buyUltimate,
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
|
||||||
|
ALTER TABLE floranet.catalogue ADD addressFk int(11) NOT NULL;
|
||||||
|
ALTER TABLE floranet.catalogue ADD CONSTRAINT catalogue_address_FK FOREIGN KEY (addressFk) REFERENCES vn.address(id) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@ -0,0 +1,6 @@
|
||||||
|
ALTER TABLE floranet.builder DROP FOREIGN KEY builder_FK_1;
|
||||||
|
ALTER TABLE floranet.`element` DROP PRIMARY KEY;
|
||||||
|
ALTER TABLE floranet.`element` ADD id INT NOT NULL;
|
||||||
|
ALTER TABLE floranet.`element` ADD CONSTRAINT element_pk PRIMARY KEY (id);
|
||||||
|
ALTER TABLE floranet.builder ADD CONSTRAINT builder_element_FK FOREIGN KEY (elementFk) REFERENCES floranet.`element`(id) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
CREATE OR REPLACE TABLE floranet.config (
|
||||||
|
email varchar(255) DEFAULT 'floranet@verdnatura.es' NOT NULL
|
||||||
|
)
|
||||||
|
ENGINE=InnoDB
|
||||||
|
DEFAULT CHARSET=utf8mb3
|
||||||
|
COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
-- Place your SQL code here
|
||||||
|
DROP TABLE IF EXISTS floranet.builder;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE floranet.`element` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(30) NOT NULL,
|
||||||
|
`itemFk` int(11) DEFAULT NULL,
|
||||||
|
`longNameFilter` varchar(30) DEFAULT NULL,
|
||||||
|
`typeFk` smallint(5) unsigned DEFAULT NULL,
|
||||||
|
`minSize` int(10) unsigned DEFAULT NULL,
|
||||||
|
`maxSize` int(10) unsigned DEFAULT NULL,
|
||||||
|
`inkFk` char(3) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL,
|
||||||
|
`originFk` tinyint(2) unsigned DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `element_FK` (`itemFk`),
|
||||||
|
KEY `element_FK_1` (`typeFk`),
|
||||||
|
KEY `element_FK_2` (`inkFk`),
|
||||||
|
KEY `element_FK_3` (`originFk`),
|
||||||
|
CONSTRAINT `element_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `element_FK_1` FOREIGN KEY (`typeFk`) REFERENCES `vn`.`itemType` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `element_FK_2` FOREIGN KEY (`inkFk`) REFERENCES `vn`.`ink` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `element_FK_3` FOREIGN KEY (`originFk`) REFERENCES `vn`.`origin` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Filtro para localizar posibles items que coincidan con la descripción';
|
||||||
|
|
||||||
|
CREATE OR REPLACE TABLE floranet.`recipe` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`itemFk` int(11) NOT NULL,
|
||||||
|
`elementFk` int(11) NOT NULL,
|
||||||
|
`quantity` int(10) unsigned NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `recipe_FK` (`itemFk`),
|
||||||
|
KEY `recipe_FK_1` (`elementFk`),
|
||||||
|
CONSTRAINT `recipe_FK` FOREIGN KEY (`itemFk`) REFERENCES `vn`.`item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `recipe_element_FK` FOREIGN KEY (`elementFk`) REFERENCES `element` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Links handmade products with their elements';
|
|
@ -51,7 +51,7 @@ describe('Client Add address path', () => {
|
||||||
await page.waitToClick(selectors.clientAddresses.saveButton);
|
await page.waitToClick(selectors.clientAddresses.saveButton);
|
||||||
const message = await page.waitForSnackbar();
|
const message = await page.waitForSnackbar();
|
||||||
|
|
||||||
expect(message.text).toContain('Incoterms is required for a non UEE member');
|
expect(message.text).toContain('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should receive an error after clicking save button as customsAgent is empty`, async() => {
|
it(`should receive an error after clicking save button as customsAgent is empty`, async() => {
|
||||||
|
|
|
@ -69,3 +69,4 @@ Send cau: Enviar cau
|
||||||
By sending this ticket, all the data related to the error, the section, the user, etc., are already sent.: Al enviar este cau ya se envían todos los datos relacionados con el error, la sección, el usuario, etc
|
By sending this ticket, all the data related to the error, the section, the user, etc., are already sent.: Al enviar este cau ya se envían todos los datos relacionados con el error, la sección, el usuario, etc
|
||||||
ExplainReason: Explique el motivo por el que no deberia aparecer este fallo
|
ExplainReason: Explique el motivo por el que no deberia aparecer este fallo
|
||||||
You already have the mailAlias: Ya tienes este alias de correo
|
You already have the mailAlias: Ya tienes este alias de correo
|
||||||
|
Error loading ACLs: Error al cargar los ACLs
|
||||||
|
|
|
@ -7,16 +7,17 @@ import UserError from 'core/lib/user-error';
|
||||||
* @property {Boolean} loggedIn Whether the user is currently logged
|
* @property {Boolean} loggedIn Whether the user is currently logged
|
||||||
*/
|
*/
|
||||||
export default class Auth {
|
export default class Auth {
|
||||||
constructor($http, $q, $state, $transitions, $window, vnToken, vnModules, aclService) {
|
constructor($http, $q, vnApp, $translate, $state, $transitions, $window, vnToken, vnModules) {
|
||||||
Object.assign(this, {
|
Object.assign(this, {
|
||||||
$http,
|
$http,
|
||||||
$q,
|
$q,
|
||||||
|
vnApp,
|
||||||
|
$translate,
|
||||||
$state,
|
$state,
|
||||||
$transitions,
|
$transitions,
|
||||||
$window,
|
$window,
|
||||||
vnToken,
|
vnToken,
|
||||||
vnModules,
|
vnModules,
|
||||||
aclService,
|
|
||||||
loggedIn: false
|
loggedIn: false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -39,9 +40,26 @@ export default class Auth {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this.vnToken.token) {
|
if (this.vnToken.token) {
|
||||||
return this.loadAcls()
|
const loadWithRetry = () => {
|
||||||
.then(() => true)
|
return this.validateToken()
|
||||||
.catch(redirectToLogin);
|
.then(() => true)
|
||||||
|
.catch(err => {
|
||||||
|
switch (err.status) {
|
||||||
|
case 400:
|
||||||
|
case 401:
|
||||||
|
return redirectToLogin();
|
||||||
|
default:
|
||||||
|
return new Promise(resolve => {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.vnApp.showMessage(this.$translate.instant('Loading...'));
|
||||||
|
|
||||||
|
resolve(loadWithRetry());
|
||||||
|
}, 2000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return loadWithRetry();
|
||||||
} else
|
} else
|
||||||
return redirectToLogin();
|
return redirectToLogin();
|
||||||
});
|
});
|
||||||
|
@ -87,13 +105,11 @@ export default class Auth {
|
||||||
headers: {Authorization: json.data.token}
|
headers: {Authorization: json.data.token}
|
||||||
}).then(({data}) => {
|
}).then(({data}) => {
|
||||||
this.vnToken.set(json.data.token, data.multimediaToken.id, now, json.data.ttl, remember);
|
this.vnToken.set(json.data.token, data.multimediaToken.id, now, json.data.ttl, remember);
|
||||||
this.loadAcls().then(() => {
|
let continueHash = this.$state.params.continue;
|
||||||
let continueHash = this.$state.params.continue;
|
if (continueHash)
|
||||||
if (continueHash)
|
this.$window.location = continueHash;
|
||||||
this.$window.location = continueHash;
|
else
|
||||||
else
|
this.$state.go('home');
|
||||||
this.$state.go('home');
|
|
||||||
});
|
|
||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,24 +123,25 @@ export default class Auth {
|
||||||
this.vnToken.unset();
|
this.vnToken.unset();
|
||||||
this.loggedIn = false;
|
this.loggedIn = false;
|
||||||
this.vnModules.reset();
|
this.vnModules.reset();
|
||||||
this.aclService.reset();
|
this.vnModules.aclService.reset();
|
||||||
this.$state.go('login');
|
this.$state.go('login');
|
||||||
|
|
||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
loadAcls() {
|
validateToken() {
|
||||||
return this.aclService.load()
|
return this.$http.get('VnUsers/validateToken')
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.loggedIn = true;
|
this.loggedIn = true;
|
||||||
this.vnModules.reset();
|
this.vnModules.reset();
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
this.vnToken.unset();
|
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Auth.$inject = ['$http', '$q', '$state', '$transitions', '$window', 'vnToken', 'vnModules', 'aclService'];
|
Auth.$inject = [
|
||||||
|
'$http', '$q', 'vnApp', '$translate', '$state',
|
||||||
|
'$transitions', '$window', 'vnToken', 'vnModules'];
|
||||||
|
|
||||||
ngModule.service('vnAuth', Auth);
|
ngModule.service('vnAuth', Auth);
|
||||||
|
|
|
@ -12,7 +12,8 @@ function config($stateProvider, $urlRouterProvider) {
|
||||||
template: '<vn-layout></vn-layout>',
|
template: '<vn-layout></vn-layout>',
|
||||||
resolve: {
|
resolve: {
|
||||||
config: ['vnConfig', vnConfig => vnConfig.initialize()],
|
config: ['vnConfig', vnConfig => vnConfig.initialize()],
|
||||||
token: ['vnToken', vnToken => vnToken.fetchConfig()]
|
token: ['vnToken', vnToken => vnToken.fetchConfig()],
|
||||||
|
acl: ['aclService', aclService => aclService.load()]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.state('outLayout', {
|
.state('outLayout', {
|
||||||
|
|
|
@ -228,5 +228,6 @@
|
||||||
"InvoiceIn is already booked": "InvoiceIn is already booked",
|
"InvoiceIn is already booked": "InvoiceIn is already booked",
|
||||||
"This workCenter is already assigned to this agency": "This workCenter is already assigned to this agency",
|
"This workCenter is already assigned to this agency": "This workCenter is already assigned to this agency",
|
||||||
"You can only have one PDA": "You can only have one PDA",
|
"You can only have one PDA": "You can only have one PDA",
|
||||||
"Credentials not valid": "Credentials not valid"
|
"Credentials not valid": "Credentials not valid",
|
||||||
|
"Incoterms and Customs agent are required for a non UEE member": "Incoterms and Customs agent are required for a non UEE member"
|
||||||
}
|
}
|
|
@ -360,5 +360,6 @@
|
||||||
"ticketCommercial": "El ticket {{ ticket }} para el vendedor {{ salesMan }} está en preparación. (mensaje generado automáticamente)",
|
"ticketCommercial": "El ticket {{ ticket }} para el vendedor {{ salesMan }} está en preparación. (mensaje generado automáticamente)",
|
||||||
"This PDA is already assigned to another user": "Este PDA ya está asignado a otro usuario",
|
"This PDA is already assigned to another user": "Este PDA ya está asignado a otro usuario",
|
||||||
"You can only have one PDA": "Solo puedes tener un PDA",
|
"You can only have one PDA": "Solo puedes tener un PDA",
|
||||||
"Credentials not valid": "Credentials not valid"
|
"Credentials not valid": "Credentials not valid",
|
||||||
|
"Incoterms and Customs agent are required for a non UEE member": "Se requieren Incoterms y agente de aduanas para un no miembro de la UEE"
|
||||||
}
|
}
|
|
@ -92,11 +92,8 @@ module.exports = function(Self) {
|
||||||
}, myOptions);
|
}, myOptions);
|
||||||
|
|
||||||
const isUeeMember = province.country().isUeeMember;
|
const isUeeMember = province.country().isUeeMember;
|
||||||
if (!isUeeMember && !args.incotermsFk)
|
if (!isUeeMember && (!args.incotermsFk || !args.customsAgentFk))
|
||||||
throw new UserError(`Incoterms is required for a non UEE member`);
|
throw new UserError(`Incoterms and Customs agent are required for a non UEE member`);
|
||||||
|
|
||||||
if (!isUeeMember && !args.customsAgentFk)
|
|
||||||
throw new UserError(`Customs agent is required for a non UEE member`);
|
|
||||||
|
|
||||||
delete args.ctx; // Remove unwanted properties
|
delete args.ctx; // Remove unwanted properties
|
||||||
const newAddress = await models.Address.create(args, myOptions);
|
const newAddress = await models.Address.create(args, myOptions);
|
||||||
|
|
|
@ -50,7 +50,7 @@ describe('Address createAddress', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(error).toBeDefined();
|
expect(error).toBeDefined();
|
||||||
expect(error.message).toEqual('Incoterms is required for a non UEE member');
|
expect(error.message).toEqual('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw a non uee member error if no customsAgent is defined', async() => {
|
it('should throw a non uee member error if no customsAgent is defined', async() => {
|
||||||
|
@ -81,7 +81,7 @@ describe('Address createAddress', () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(error).toBeDefined();
|
expect(error).toBeDefined();
|
||||||
expect(error.message).toEqual('Customs agent is required for a non UEE member');
|
expect(error.message).toEqual('Incoterms and Customs agent are required for a non UEE member');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create a new address and set as a client default address', async() => {
|
it('should create a new address and set as a client default address', async() => {
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
url="Tickets"
|
url="Tickets"
|
||||||
label="Ticket"
|
label="Ticket"
|
||||||
search-function="{or: [{id: $search}, {nickname: {like: '%'+$search+'%'}}]}"
|
search-function="{refFk: null, or: [{id: $search}, {nickname: {like: '%'+$search+'%'}}]}"
|
||||||
show-field="id"
|
show-field="id"
|
||||||
value-field="id"
|
value-field="id"
|
||||||
fields="['nickname']"
|
fields="['nickname']"
|
||||||
|
|
Loading…
Reference in New Issue