Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6553-workerBusiness
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
ddecfee24b
|
@ -19,7 +19,7 @@ module.exports = Self => {
|
||||||
if (acl.principalType == 'ROLE' && acl.permission == 'ALLOW') {
|
if (acl.principalType == 'ROLE' && acl.permission == 'ALLOW') {
|
||||||
const staticAcl = {
|
const staticAcl = {
|
||||||
model: model.name,
|
model: model.name,
|
||||||
property: '*',
|
property: acl.property,
|
||||||
accessType: acl.accessType,
|
accessType: acl.accessType,
|
||||||
permission: acl.permission,
|
permission: acl.permission,
|
||||||
principalType: acl.principalType,
|
principalType: acl.principalType,
|
||||||
|
|
|
@ -974,26 +974,30 @@ INSERT INTO `vn`.`itemFamily`(`code`, `description`)
|
||||||
('SER', 'Services'),
|
('SER', 'Services'),
|
||||||
('VT', 'Sales');
|
('VT', 'Sales');
|
||||||
|
|
||||||
INSERT INTO `vn`.`item`(`id`, `typeFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenseFk`,
|
INSERT INTO `vn`.`item`(
|
||||||
`comment`, `relevancy`, `image`, `subName`, `minPrice`, `family`, `isFloramondo`, `genericFk`, `itemPackingTypeFk`, `hasMinPrice`, `weightByPiece`)
|
`id`, `typeFk`, `stems`, `originFk`, `description`, `producerFk`, `intrastatFk`, `expenseFk`,
|
||||||
VALUES
|
`comment`, `relevancy`, `image`, `subName`, `minPrice`, `family`, `isFloramondo`, `genericFk`,
|
||||||
(1, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 'EMB', 0, NULL, 'V', 0, 3),
|
`itemPackingTypeFk`, `hasMinPrice`, `weightByPiece`, `isCustomInspectionRequired`
|
||||||
(2, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '2', NULL, 0, 'VT', 0, NULL, 'H', 0, 2),
|
)
|
||||||
(3, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '3', NULL, 0, 'VT', 0, NULL, NULL, 0, 5),
|
VALUES
|
||||||
(4, 1, 1, 1, 'Increases block', 1, 05080000, 4751000000, NULL, 0, '4', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(1, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '1', NULL, 0, 'EMB', 0, NULL, 'V', 0, 3, 1),
|
||||||
(5, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '5', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(2, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '2', NULL, 0, 'VT', 0, NULL, 'H', 0, 2, 1),
|
||||||
(6, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '6', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(3, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '3', NULL, 0, 'VT', 0, NULL, NULL, 0, 5, 0),
|
||||||
(7, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '7', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(4, 1, 1, 1, 'Increases block', 1, 05080000, 4751000000, NULL, 0, '4', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(8, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '8', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(5, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '5', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(9, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '9', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL),
|
(6, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '6', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(10, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '10', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(7, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '7', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(11, 1, 1, 1, NULL, 1, 05080000, 4751000000, NULL, 0, '11', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(8, 2, 1, 1, NULL, 1, 06021010, 2000000000, NULL, 0, '8', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(12, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '12', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL),
|
(9, 2, 1, 2, NULL, 1, 06021010, 2000000000, NULL, 0, '9', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL, 0),
|
||||||
(13, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '13', NULL, 1, 'VT', 1, NULL, NULL, 1, NULL),
|
(10, 1, 1, 3, NULL, 1, 05080000, 4751000000, NULL, 0, '10', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(14, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL),
|
(11, 1, 1, 1, NULL, 1, 05080000, 4751000000, NULL, 0, '11', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(15, 4, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL),
|
(12, 3, 1, 2, NULL, 2, 06021010, 4751000000, NULL, 0, '12', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0),
|
||||||
(16, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL),
|
(13, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '13', NULL, 1, 'VT', 1, NULL, NULL, 1, NULL, 0),
|
||||||
(71, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL);
|
(14, 5, 1, 2, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 1, NULL, NULL, 0, NULL, 0),
|
||||||
|
(15, 4, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL, 0),
|
||||||
|
(16, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'EMB', 0, NULL, NULL, 0, NULL, 0),
|
||||||
|
(71, 6, NULL, 1, NULL, NULL, 06021010, 4751000000, NULL, 0, '', NULL, 0, 'VT', 0, NULL, NULL, 0, NULL, 0);
|
||||||
|
|
||||||
|
|
||||||
-- Update the taxClass after insert of the items
|
-- Update the taxClass after insert of the items
|
||||||
UPDATE `vn`.`itemTaxCountry` SET `taxClassFk` = 2
|
UPDATE `vn`.`itemTaxCountry` SET `taxClassFk` = 2
|
||||||
|
@ -1516,7 +1520,8 @@ INSERT INTO `vn`.`travel`(`id`,`shipped`, `landed`, `warehouseInFk`, `warehouseO
|
||||||
(8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2, 10, FALSE, NULL),
|
(8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2, 10, FALSE, NULL),
|
||||||
(10, DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), 5, 1, 1, 50.00, 500, 'nineth travel', 1, 2, 10, TRUE, 2),
|
(10, DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), 5, 1, 1, 50.00, 500, 'nineth travel', 1, 2, 10, TRUE, 2),
|
||||||
(11, util.VN_CURDATE() - INTERVAL 1 DAY , util.VN_CURDATE(), 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
(11, util.VN_CURDATE() - INTERVAL 1 DAY , util.VN_CURDATE(), 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
||||||
(12, util.VN_CURDATE() , util.VN_CURDATE() + INTERVAL 1 DAY, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL);
|
(12, util.VN_CURDATE() , util.VN_CURDATE() + INTERVAL 1 DAY, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
||||||
|
(13, util.VN_CURDATE() - INTERVAL 1 MONTH - INTERVAL 1 DAY, util.VN_CURDATE() - INTERVAL 1 MONTH, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL);
|
||||||
|
|
||||||
INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `evaNotes`, `typeFk`)
|
INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `evaNotes`, `typeFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -1529,8 +1534,9 @@ INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed
|
||||||
(7, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2007', 'Movement 7', 0, 'observation seven', 'product'),
|
(7, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2007', 'Movement 7', 0, 'observation seven', 'product'),
|
||||||
(8, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2008', 'Movement 8', 1, '', 'product'),
|
(8, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 7, 0, 442, 'IN2008', 'Movement 8', 1, '', 'product'),
|
||||||
(9, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 9', 1, '', 'product'),
|
(9, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 9', 1, '', 'product'),
|
||||||
(10, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2009', 'Movement 10',1, '', 'product'),
|
(10, 2, DATE_ADD(util.VN_CURDATE(), INTERVAL +2 DAY), 10, 0, 442, 'IN2010', 'Movement 10',1, '', 'product'),
|
||||||
(11, 4, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 1, 442, 'IN2001', 'Movement 11',0, '', 'product'),
|
(11, 4, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), 1, 1, 442, 'IN2011', 'Movement 11',0, '', 'product'),
|
||||||
|
(12, 4, util.VN_CURDATE() - INTERVAL 1 MONTH, 13, 1, 442, 'IN2012', 'Movement 12',0, '', 'product'),
|
||||||
(99, 69, util.VN_CURDATE() - INTERVAL 1 MONTH, 11, 0, 442, 'IN2009', 'Movement 99',0, '', 'product');
|
(99, 69, util.VN_CURDATE() - INTERVAL 1 MONTH, 11, 0, 442, 'IN2009', 'Movement 99',0, '', 'product');
|
||||||
|
|
||||||
INSERT INTO `vn`.`entryConfig` (`defaultEntry`, `inventorySupplierFk`, `defaultSupplierFk`)
|
INSERT INTO `vn`.`entryConfig` (`defaultEntry`, `inventorySupplierFk`, `defaultSupplierFk`)
|
||||||
|
@ -1572,7 +1578,8 @@ INSERT INTO `bs`.`waste`(`buyerFk`, `year`, `week`, `itemFk`, `itemTypeFk`, `sal
|
||||||
(14, 7, 2, 5, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 'grouping', NULL, 0.00, 7.30, 7.00, 0, 1, 0, 4, util.VN_CURDATE()),
|
(14, 7, 2, 5, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 'grouping', NULL, 0.00, 7.30, 7.00, 0, 1, 0, 4, util.VN_CURDATE()),
|
||||||
(15, 7, 4, 1.25, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
|
(15, 7, 4, 1.25, 0, 3, 1, 2.000, 2.000, 0.000, 10, 10, 'grouping', NULL, 0.00, 1.75, 1.67, 0, 1, 0, 4, util.VN_CURDATE()),
|
||||||
(16, 99,1,50.0000, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.60, 99.40, 0, 1, 0, 1.00, '2024-07-30 08:13:51.000'),
|
(16, 99,1,50.0000, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.60, 99.40, 0, 1, 0, 1.00, '2024-07-30 08:13:51.000'),
|
||||||
(17, 11, 1, 50, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 2 MONTH);
|
(17, 11, 1, 50, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'packing', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 2 MONTH),
|
||||||
|
(18, 12, 1, 50, 5000, 4, 1, 1.500, 1.500, 0.000, 1, 1, 'grouping', NULL, 0.00, 99.6, 99.4, 0, 1, 0, 1, util.VN_CURDATE() - INTERVAL 2 MONTH);
|
||||||
|
|
||||||
INSERT INTO `hedera`.`order`(`id`, `date_send`, `customer_id`, `delivery_method_id`, `agency_id`, `address_id`, `company_id`, `note`, `source_app`, `confirmed`,`total`, `date_make`, `first_row_stamp`, `confirm_date`)
|
INSERT INTO `hedera`.`order`(`id`, `date_send`, `customer_id`, `delivery_method_id`, `agency_id`, `address_id`, `company_id`, `note`, `source_app`, `confirmed`,`total`, `date_make`, `first_row_stamp`, `confirm_date`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -3965,7 +3972,7 @@ VALUES(1, '');
|
||||||
|
|
||||||
INSERT INTO dipole.expedition_PrintOut (expeditionFk, ticketFk, addressFk, street, postalCode, city, shopName, isPrinted, created, printerFk, routeFk, parkingCode,
|
INSERT INTO dipole.expedition_PrintOut (expeditionFk, ticketFk, addressFk, street, postalCode, city, shopName, isPrinted, created, printerFk, routeFk, parkingCode,
|
||||||
truckName, clientFk, phone, province, agency, m3, workerCode, itemFk, quantity, longName, shelvingFk, comments)
|
truckName, clientFk, phone, province, agency, m3, workerCode, itemFk, quantity, longName, shelvingFk, comments)
|
||||||
VALUES(1, 1, 0, ' ', ' ', ' ', ' ', 0, '2001-01-01 00:00:00', 1, 0, ' ', ' ', 0, NULL, '', NULL, 0.000, NULL, 10, NULL, NULL, 'NCC', NULL);
|
VALUES(1, 1, 0, ' ', ' ', ' ', ' ', 0, '2001-01-01 00:00:00', 1, 0, ' ', ' ', 0, NULL, '', NULL, 0.000, NULL, 10, NULL, 'Ranged Reinforced weapon sniper rifle 700mm' , 'NCC', NULL);
|
||||||
|
|
||||||
INSERT INTO vn.accountDetail
|
INSERT INTO vn.accountDetail
|
||||||
(id, value, accountDetailTypeFk, supplierAccountFk)
|
(id, value, accountDetailTypeFk, supplierAccountFk)
|
||||||
|
@ -4038,7 +4045,7 @@ INSERT IGNORE INTO vn.saySimpleConfig (url, defaultChannel)
|
||||||
INSERT INTO vn.workerIrpf (workerFk,spouseNif, geographicMobilityDate)
|
INSERT INTO vn.workerIrpf (workerFk,spouseNif, geographicMobilityDate)
|
||||||
VALUES (1106,'26493101E','2019-09-20');
|
VALUES (1106,'26493101E','2019-09-20');
|
||||||
|
|
||||||
INSERT INTO vn.referenceRate (currencyFk, dated, value)
|
INSERT INTO vn.referenceRate (currencyFk, dated, value)
|
||||||
VALUES (2, '2000-12-01', 1.0495),
|
VALUES (2, '2000-12-01', 1.0495),
|
||||||
(2, '2001-01-01', 1.0531),
|
(2, '2001-01-01', 1.0531),
|
||||||
(2, '2001-02-01', 7.6347);
|
(2, '2001-02-01', 7.6347);
|
||||||
|
|
|
@ -22,6 +22,7 @@ BEGIN
|
||||||
OR !(NEW.workerFk <=> OLD.workerFk)
|
OR !(NEW.workerFk <=> OLD.workerFk)
|
||||||
OR !(NEW.m3 <=> OLD.m3)
|
OR !(NEW.m3 <=> OLD.m3)
|
||||||
OR !(NEW.agencyModeFk <=> OLD.agencyModeFk)
|
OR !(NEW.agencyModeFk <=> OLD.agencyModeFk)
|
||||||
|
OR !(NEW.dated <=> OLD.dated)
|
||||||
OR !(NEW.vehicleFk <=> OLD.vehicleFk)THEN
|
OR !(NEW.vehicleFk <=> OLD.vehicleFk)THEN
|
||||||
CALL route_calcCommission(NEW.id);
|
CALL route_calcCommission(NEW.id);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
ALTER TABLE `vn`.`item`
|
||||||
|
ADD COLUMN `isCustomInspectionRequired` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Indicates if the item requires physical inspection at customs';
|
|
@ -246,8 +246,9 @@
|
||||||
"ticketLostExpedition": "The ticket [{{ticketId}}]({{{ticketUrl}}}) has the following lost expedition:{{ expeditionId }}",
|
"ticketLostExpedition": "The ticket [{{ticketId}}]({{{ticketUrl}}}) has the following lost expedition:{{ expeditionId }}",
|
||||||
"The raid information is not correct": "The raid information is not correct",
|
"The raid information is not correct": "The raid information is not correct",
|
||||||
"Payment method is required": "Payment method is required",
|
"Payment method is required": "Payment method is required",
|
||||||
"Sales already moved": "Sales already moved",
|
"Sales already moved": "Sales already moved",
|
||||||
"Holidays to past days not available": "Holidays to past days not available",
|
"Holidays to past days not available": "Holidays to past days not available",
|
||||||
"Price cannot be blank": "Price cannot be blank",
|
"Price cannot be blank": "Price cannot be blank",
|
||||||
"There are tickets to be invoiced": "There are tickets to be invoiced"
|
"There are tickets to be invoiced": "There are tickets to be invoiced",
|
||||||
}
|
"The address of the customer must have information about Incoterms and Customs Agent": "The address of the customer must have information about Incoterms and Customs Agent"
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
module.exports = function(Self) {
|
module.exports = function(Self) {
|
||||||
Self.remoteMethod('canBeInvoiced', {
|
Self.remoteMethod('canBeInvoiced', {
|
||||||
description: 'Change property isEqualizated in all client addresses',
|
description: 'Check if a client can be invoiced',
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
accepts: [
|
accepts: [
|
||||||
{
|
{
|
||||||
|
@ -38,7 +38,7 @@ module.exports = function(Self) {
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
const client = await models.Client.findById(id, {
|
const client = await models.Client.findById(id, {
|
||||||
fields: ['id', 'isTaxDataChecked', 'hasToInvoice', 'payMethodFk'],
|
fields: ['id', 'isTaxDataChecked', 'hasToInvoice', 'payMethodFk', 'isActive'],
|
||||||
include:
|
include:
|
||||||
{
|
{
|
||||||
relation: 'payMethod',
|
relation: 'payMethod',
|
||||||
|
@ -53,9 +53,6 @@ module.exports = function(Self) {
|
||||||
if (client.payMethod().code === 'wireTransfer' && !company.supplierAccountFk)
|
if (client.payMethod().code === 'wireTransfer' && !company.supplierAccountFk)
|
||||||
throw new UserError('The company has not informed the supplier account for bank transfers');
|
throw new UserError('The company has not informed the supplier account for bank transfers');
|
||||||
|
|
||||||
if (client.isTaxDataChecked && client.hasToInvoice)
|
return client.isTaxDataChecked && client.hasToInvoice && client.isActive;
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,8 @@ describe('client canBeInvoiced()', () => {
|
||||||
const activeCtx = {
|
const activeCtx = {
|
||||||
accessToken: {userId: userId}
|
accessToken: {userId: userId}
|
||||||
};
|
};
|
||||||
|
let tx;
|
||||||
|
let options;
|
||||||
|
|
||||||
beforeAll(async() => {
|
beforeAll(async() => {
|
||||||
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
spyOn(LoopBackContext, 'getCurrentContext').and.returnValue({
|
||||||
|
@ -15,60 +17,45 @@ describe('client canBeInvoiced()', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
beforeEach(async() => {
|
||||||
|
tx = await models.Client.beginTransaction({});
|
||||||
|
options = {transaction: tx};
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async() => {
|
||||||
|
await tx.rollback();
|
||||||
|
});
|
||||||
|
|
||||||
it('should return falsy for a client without the data checked', async() => {
|
it('should return falsy for a client without the data checked', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const client = await models.Client.findById(clientId, null, options);
|
||||||
|
await client.updateAttribute('isTaxDataChecked', false, options);
|
||||||
|
|
||||||
try {
|
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
||||||
const options = {transaction: tx};
|
|
||||||
|
|
||||||
const client = await models.Client.findById(clientId, null, options);
|
expect(canBeInvoiced).toEqual(false);
|
||||||
await client.updateAttribute('isTaxDataChecked', false, options);
|
});
|
||||||
|
|
||||||
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
it('should return falsy for a client not active', async() => {
|
||||||
|
const client = await models.Client.findById(clientId, null, options);
|
||||||
|
await client.updateAttribute('isActive', false, options);
|
||||||
|
|
||||||
expect(canBeInvoiced).toEqual(false);
|
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
||||||
|
|
||||||
await tx.rollback();
|
expect(canBeInvoiced).toEqual(false);
|
||||||
} catch (e) {
|
|
||||||
await tx.rollback();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return falsy for a client with invoicing disabled', async() => {
|
it('should return falsy for a client with invoicing disabled', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const client = await models.Client.findById(clientId, null, options);
|
||||||
|
await client.updateAttribute('hasToInvoice', false, options);
|
||||||
|
|
||||||
try {
|
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
||||||
const options = {transaction: tx};
|
|
||||||
|
|
||||||
const client = await models.Client.findById(clientId, null, options);
|
expect(canBeInvoiced).toEqual(false);
|
||||||
await client.updateAttribute('hasToInvoice', false, options);
|
|
||||||
|
|
||||||
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
|
||||||
|
|
||||||
expect(canBeInvoiced).toEqual(false);
|
|
||||||
|
|
||||||
await tx.rollback();
|
|
||||||
} catch (e) {
|
|
||||||
await tx.rollback();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return truthy for an invoiceable client', async() => {
|
it('should return truthy for an invoiceable client', async() => {
|
||||||
const tx = await models.Client.beginTransaction({});
|
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
||||||
|
|
||||||
try {
|
expect(canBeInvoiced).toEqual(true);
|
||||||
const options = {transaction: tx};
|
|
||||||
|
|
||||||
const canBeInvoiced = await models.Client.canBeInvoiced(clientId, companyId, options);
|
|
||||||
|
|
||||||
expect(canBeInvoiced).toEqual(true);
|
|
||||||
|
|
||||||
await tx.rollback();
|
|
||||||
} catch (e) {
|
|
||||||
await tx.rollback();
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
const UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethodCtx('clientsToInvoice', {
|
Self.remoteMethodCtx('clientsToInvoice', {
|
||||||
description: 'Get the clients to make global invoicing',
|
description: 'Get the clients to make global invoicing',
|
||||||
|
@ -47,7 +49,12 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Packaging liquidation
|
const clientCanBeInvoiced =
|
||||||
|
await Self.app.models.Client.canBeInvoiced(clientId, companyFk, myOptions);
|
||||||
|
|
||||||
|
if (!clientCanBeInvoiced)
|
||||||
|
throw new UserError(`This client can't be invoiced`);
|
||||||
|
|
||||||
const vIsAllInvoiceable = false;
|
const vIsAllInvoiceable = false;
|
||||||
await Self.rawSql('CALL ticketPackaging_add(?, ?, ?, ?)', [
|
await Self.rawSql('CALL ticketPackaging_add(?, ?, ?, ?)', [
|
||||||
clientId,
|
clientId,
|
||||||
|
@ -71,9 +78,6 @@ module.exports = Self => {
|
||||||
AND t.shipped BETWEEN ? AND util.dayEnd(?)
|
AND t.shipped BETWEEN ? AND util.dayEnd(?)
|
||||||
AND (t.clientFk = ? OR ? IS NULL )
|
AND (t.clientFk = ? OR ? IS NULL )
|
||||||
AND t.companyFk = ?
|
AND t.companyFk = ?
|
||||||
AND c.hasToInvoice
|
|
||||||
AND c.isTaxDataChecked
|
|
||||||
AND c.isActive
|
|
||||||
AND NOT t.isDeleted
|
AND NOT t.isDeleted
|
||||||
GROUP BY IF(c.hasToInvoiceByAddress, a.id, c.id)
|
GROUP BY IF(c.hasToInvoiceByAddress, a.id, c.id)
|
||||||
HAVING SUM(t.totalWithVat) > 0;`;
|
HAVING SUM(t.totalWithVat) > 0;`;
|
||||||
|
|
|
@ -4,11 +4,11 @@ describe('InvoiceOut clientsToInvoice()', () => {
|
||||||
const userId = 1;
|
const userId = 1;
|
||||||
const clientId = 1101;
|
const clientId = 1101;
|
||||||
const companyFk = 442;
|
const companyFk = 442;
|
||||||
const maxShipped = new Date();
|
const maxShipped = Date.vnNew();
|
||||||
maxShipped.setMonth(11);
|
maxShipped.setMonth(11);
|
||||||
maxShipped.setDate(31);
|
maxShipped.setDate(31);
|
||||||
maxShipped.setHours(23, 59, 59, 999);
|
maxShipped.setHours(23, 59, 59, 999);
|
||||||
const invoiceDate = new Date();
|
const invoiceDate = Date.vnNew();
|
||||||
const activeCtx = {
|
const activeCtx = {
|
||||||
getLocale: () => {
|
getLocale: () => {
|
||||||
return 'en';
|
return 'en';
|
||||||
|
|
|
@ -29,10 +29,12 @@ module.exports = Self => {
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
|
||||||
const stmt = new ParameterizedSQL(
|
const stmt = new ParameterizedSQL(
|
||||||
`SELECT w.id AS warehouseFk,
|
`SELECT i.id itemFk,
|
||||||
w.name AS warehouse,
|
w.id warehouseFk,
|
||||||
tr.landed,
|
w.name warehouse,
|
||||||
b.id AS buyFk,
|
CAST(tr.landed AS CHAR) landed,
|
||||||
|
tr.landed landedDate,
|
||||||
|
b.id buyFk,
|
||||||
b.entryFk,
|
b.entryFk,
|
||||||
b.isIgnored,
|
b.isIgnored,
|
||||||
b.price2,
|
b.price2,
|
||||||
|
@ -47,15 +49,18 @@ module.exports = Self => {
|
||||||
b.buyingValue +
|
b.buyingValue +
|
||||||
b.freightValue +
|
b.freightValue +
|
||||||
b.comissionValue +
|
b.comissionValue +
|
||||||
b.packageValue AS cost,
|
b.packageValue cost,
|
||||||
b.buyingValue,
|
b.buyingValue,
|
||||||
b.freightValue,
|
b.freightValue,
|
||||||
b.comissionValue,
|
b.comissionValue,
|
||||||
b.packageValue,
|
b.packageValue,
|
||||||
b.packagingFk ,
|
b.packagingFk ,
|
||||||
s.id AS supplierFk,
|
s.id supplierFk,
|
||||||
s.name AS supplier,
|
s.name supplier,
|
||||||
b.printedStickers
|
b.printedStickers,
|
||||||
|
c.inventoried,
|
||||||
|
ic.supplierFk inventorySupplierFk,
|
||||||
|
s.id = ic.supplierFk isInventorySupplier
|
||||||
FROM itemType it
|
FROM itemType it
|
||||||
RIGHT JOIN (entry e
|
RIGHT JOIN (entry e
|
||||||
LEFT JOIN supplier s ON s.id = e.supplierFk
|
LEFT JOIN supplier s ON s.id = e.supplierFk
|
||||||
|
@ -66,9 +71,14 @@ module.exports = Self => {
|
||||||
LEFT JOIN warehouse w ON w.id = tr.warehouseInFk
|
LEFT JOIN warehouse w ON w.id = tr.warehouseInFk
|
||||||
LEFT JOIN origin o ON o.id = i.originFk
|
LEFT JOIN origin o ON o.id = i.originFk
|
||||||
) ON it.id = i.typeFk
|
) ON it.id = i.typeFk
|
||||||
LEFT JOIN edi.ekt ek ON b.ektFk = ek.id`
|
LEFT JOIN edi.ekt ek ON b.ektFk = ek.id
|
||||||
|
JOIN config c
|
||||||
|
JOIN inventoryConfig ic`
|
||||||
);
|
);
|
||||||
stmt.merge(conn.makeSuffix(filter));
|
|
||||||
|
stmt.merge(conn.makeWhere(filter.where));
|
||||||
|
stmt.merge('AND IF(s.id = ic.supplierFk, tr.landed = DATE(c.inventoried), TRUE)');
|
||||||
|
stmt.merge(conn.makePagination(filter));
|
||||||
|
|
||||||
return conn.executeStmt(stmt, myOptions);
|
return conn.executeStmt(stmt, myOptions);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,16 +1,22 @@
|
||||||
const {models} = require('vn-loopback/server/server');
|
const {models} = require('vn-loopback/server/server');
|
||||||
|
const itemFk = 1;
|
||||||
|
|
||||||
|
const today = Date.vnNew();
|
||||||
|
today.setHours(23, 59, 59, 999);
|
||||||
|
|
||||||
|
const twoMonthsAgo = Date.vnNew();
|
||||||
|
twoMonthsAgo.setHours(0, 0, 0, 0);
|
||||||
|
twoMonthsAgo.setMonth(twoMonthsAgo.getMonth() - 2, 1);
|
||||||
describe('item lastEntriesFilter()', () => {
|
describe('item lastEntriesFilter()', () => {
|
||||||
it('should return two entry for the given item', async() => {
|
it('should return two entry for the given item', async() => {
|
||||||
const minDate = Date.vnNew();
|
const minDate = Date.vnNew();
|
||||||
minDate.setHours(0, 0, 0, 0);
|
minDate.setHours(0, 0, 0, 0);
|
||||||
const maxDate = Date.vnNew();
|
|
||||||
maxDate.setHours(23, 59, 59, 59);
|
|
||||||
|
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const filter = {where: {itemFk: 1, landed: {between: [minDate, maxDate]}}};
|
const filter = {where: {itemFk, landed: {between: [minDate, today]}}};
|
||||||
const result = await models.Item.lastEntriesFilter(filter, options);
|
const result = await models.Item.lastEntriesFilter(filter, options);
|
||||||
|
|
||||||
expect(result.length).toEqual(2);
|
expect(result.length).toEqual(2);
|
||||||
|
@ -23,22 +29,14 @@ describe('item lastEntriesFilter()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return six entries for the given item', async() => {
|
it('should return six entries for the given item', async() => {
|
||||||
const minDate = Date.vnNew();
|
|
||||||
minDate.setHours(0, 0, 0, 0);
|
|
||||||
minDate.setMonth(minDate.getMonth() - 2, 1);
|
|
||||||
|
|
||||||
const maxDate = Date.vnNew();
|
|
||||||
maxDate.setHours(23, 59, 59, 59);
|
|
||||||
|
|
||||||
const tx = await models.Item.beginTransaction({});
|
const tx = await models.Item.beginTransaction({});
|
||||||
const options = {transaction: tx};
|
const options = {transaction: tx};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const itemFk = 1;
|
const filter = {where: {itemFk, landed: {between: [twoMonthsAgo, today]}}};
|
||||||
const filter = {where: {itemFk, landed: {between: [minDate, maxDate]}}};
|
|
||||||
const result = await models.Item.lastEntriesFilter(filter, options);
|
const result = await models.Item.lastEntriesFilter(filter, options);
|
||||||
const minDateUtc = new Date(minDate).getTime();
|
const twoMonthsAgoUtc = twoMonthsAgo.getTime();
|
||||||
const maxDateUtc = new Date(maxDate).getTime();
|
const todayUtc = today.getTime();
|
||||||
|
|
||||||
const resultMatch = (
|
const resultMatch = (
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
|
@ -50,8 +48,8 @@ describe('item lastEntriesFilter()', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const isItemFkValid = itemRecord?.id === itemFk;
|
const isItemFkValid = itemRecord?.id === itemFk;
|
||||||
const landedDate = new Date(item.landed).getTime();
|
const landedDate = Date.vnNew(item.landed).getTime();
|
||||||
const isLandedValid = landedDate >= minDateUtc && landedDate <= maxDateUtc;
|
const isLandedValid = landedDate >= twoMonthsAgoUtc && landedDate <= todayUtc;
|
||||||
|
|
||||||
return isItemFkValid && isLandedValid;
|
return isItemFkValid && isLandedValid;
|
||||||
})
|
})
|
||||||
|
@ -66,4 +64,31 @@ describe('item lastEntriesFilter()', () => {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should return just the inventoried inventory', async() => {
|
||||||
|
const tx = await models.Item.beginTransaction({});
|
||||||
|
const options = {transaction: tx};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const filter = {where: {itemFk, landed: {between: [twoMonthsAgo, today]}}};
|
||||||
|
const result = await models.Item.lastEntriesFilter(filter, options);
|
||||||
|
|
||||||
|
const {supplierFk} = await models.InventoryConfig.findOne(options);
|
||||||
|
const {inventoried} = await models.Config.findOne(options);
|
||||||
|
|
||||||
|
let hasInventoriedDate = false;
|
||||||
|
result.forEach(entry => {
|
||||||
|
if (entry.supplierFk === supplierFk &&
|
||||||
|
entry.landedDate.getTime() === inventoried.getTime()
|
||||||
|
)hasInventoriedDate = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(hasInventoriedDate).toEqual(true);
|
||||||
|
|
||||||
|
await tx.rollback();
|
||||||
|
} catch (e) {
|
||||||
|
await tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -154,6 +154,9 @@
|
||||||
},
|
},
|
||||||
"photoMotivation": {
|
"photoMotivation": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
},
|
||||||
|
"isCustomInspectionRequired": {
|
||||||
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
@ -222,4 +225,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,8 @@ module.exports = Self => {
|
||||||
su.name scannerUserName,
|
su.name scannerUserName,
|
||||||
es.scanned,
|
es.scanned,
|
||||||
est.description state,
|
est.description state,
|
||||||
de.longName
|
de.longName,
|
||||||
|
de.itemFk
|
||||||
FROM vn.expedition e
|
FROM vn.expedition e
|
||||||
LEFT JOIN vn.expeditionStateType est ON est.id = e.stateTypeFk
|
LEFT JOIN vn.expeditionStateType est ON est.id = e.stateTypeFk
|
||||||
INNER JOIN vn.item i1 ON i1.id = e.freightItemFk
|
INNER JOIN vn.item i1 ON i1.id = e.freightItemFk
|
||||||
|
|
|
@ -77,6 +77,8 @@ describe('ticket makeInvoice()', () => {
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
}
|
}
|
||||||
|
|
||||||
expect(error.message).toEqual(`The address of the customer must have information about Incoterms and Customs Agent`);
|
expect(error.message).toEqual(
|
||||||
|
`The address of the customer must have information about Incoterms and Customs Agent`
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -132,18 +132,18 @@ module.exports = Self => {
|
||||||
CAST(SUM(b.weight * b.stickers) AS DECIMAL(10,0)) loadedKg,
|
CAST(SUM(b.weight * b.stickers) AS DECIMAL(10,0)) loadedKg,
|
||||||
CAST(
|
CAST(
|
||||||
SUM(
|
SUM(
|
||||||
vc.aerealVolumetricDensity *
|
vc.aerealVolumetricDensity *
|
||||||
b.stickers *
|
b.stickers *
|
||||||
IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000
|
IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000
|
||||||
) AS DECIMAL(10,0)
|
) AS DECIMAL(10,0)
|
||||||
) volumeKg,
|
) volumeKg,
|
||||||
CAST(
|
CAST(
|
||||||
GREATEST(
|
GREATEST(
|
||||||
SUM(b.weight * b.stickers) ,
|
SUM(b.weight * b.stickers) ,
|
||||||
SUM(vc.aerealVolumetricDensity *
|
SUM(vc.aerealVolumetricDensity *
|
||||||
b.stickers *
|
b.stickers *
|
||||||
IF(pkg.volume,
|
IF(pkg.volume,
|
||||||
pkg.volume,
|
pkg.volume,
|
||||||
pkg.width * pkg.depth * pkg.height) / 1000000)
|
pkg.width * pkg.depth * pkg.height) / 1000000)
|
||||||
) / t.kg * 100 AS INT
|
) / t.kg * 100 AS INT
|
||||||
) percentageKg
|
) percentageKg
|
||||||
|
@ -185,11 +185,12 @@ module.exports = Self => {
|
||||||
CAST(SUM(b.weight * b.stickers) AS DECIMAL(10,0)) as loadedkg,
|
CAST(SUM(b.weight * b.stickers) AS DECIMAL(10,0)) as loadedkg,
|
||||||
CAST(
|
CAST(
|
||||||
SUM(
|
SUM(
|
||||||
vc.aerealVolumetricDensity *
|
vc.aerealVolumetricDensity *
|
||||||
b.stickers *
|
b.stickers *
|
||||||
IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000
|
IF(pkg.volume, pkg.volume, pkg.width * pkg.depth * pkg.height) / 1000000
|
||||||
) AS DECIMAL(10,0)
|
) AS DECIMAL(10,0)
|
||||||
) as volumeKg
|
) as volumeKg,
|
||||||
|
MAX(i.isCustomInspectionRequired) isCustomInspectionRequired
|
||||||
FROM tmp.travel tr
|
FROM tmp.travel tr
|
||||||
JOIN entry e ON e.travelFk = tr.id
|
JOIN entry e ON e.travelFk = tr.id
|
||||||
JOIN buy b ON b.entryFk = e.id
|
JOIN buy b ON b.entryFk = e.id
|
||||||
|
|
|
@ -112,4 +112,17 @@ describe('Travel extraCommunityFilter()', () => {
|
||||||
|
|
||||||
expect(result.length).toEqual(2);
|
expect(result.length).toEqual(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should return field isCustomInspectionRequired true', async() => {
|
||||||
|
const ctx = {
|
||||||
|
args: {
|
||||||
|
id: 2
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await app.models.Travel.extraCommunityFilter(ctx, filter);
|
||||||
|
|
||||||
|
expect(result[0].entries[0].isCustomInspectionRequired).toBeTruthy();
|
||||||
|
expect(result[0].entries[1].isCustomInspectionRequired).toBeFalsy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue