feat: refs #7984 add currency in order sections
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:
parent
479d81d046
commit
4e1ab2652c
|
@ -4046,9 +4046,10 @@ INSERT INTO vn.workerIrpf (workerFk,spouseNif, geographicMobilityDate)
|
|||
VALUES (1106,'26493101E','2019-09-20');
|
||||
|
||||
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-02-01', 7.6347);
|
||||
(2, '2001-02-01', 7.6347),
|
||||
(2, '2000-12-31', 7.6347);
|
||||
|
||||
INSERT IGNORE INTO vn.osrmConfig (id,url,tolerance)
|
||||
VALUES (1,'https://router.project-osrm.org', 0.002);
|
||||
|
|
|
@ -20,7 +20,7 @@ BEGIN
|
|||
|
||||
CALL order_getTotal;
|
||||
|
||||
SELECT total INTO vTotal FROM tmp.orderTotal;
|
||||
SELECT IFNULL(foreignTotal, total) INTO vTotal FROM tmp.orderTotal;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.`order`,
|
||||
|
|
|
@ -29,7 +29,8 @@ BEGIN
|
|||
oro.amount * oro.price total,
|
||||
s.countryFk,
|
||||
ata.areaFk,
|
||||
itc.taxClassFk
|
||||
itc.taxClassFk,
|
||||
o.currencyFk
|
||||
FROM hedera.orderRow oro
|
||||
JOIN tmp.order tor ON tor.orderFk = oro.orderFk
|
||||
JOIN hedera.`order` o ON o.id = tor.orderFk
|
||||
|
@ -46,7 +47,7 @@ BEGIN
|
|||
tc.code,
|
||||
SUM(o.total) taxableBase,
|
||||
pgc.rate,
|
||||
currency_getRate(o.currencyFk, NULL) *
|
||||
vn.currency_getRate(o.currencyFk, NULL) *
|
||||
SUM(o.total) foreignTaxableBase,
|
||||
o.currencyFk
|
||||
FROM orders o
|
||||
|
@ -70,7 +71,7 @@ BEGIN
|
|||
SUM(CAST(taxableBase * rate / 100 AS DECIMAL(10, 2))) tax,
|
||||
currencyFk,
|
||||
foreignTaxableBase,
|
||||
currency_getRate(o.currencyFk, NULL) *
|
||||
vn.currency_getRate(currencyFk, NULL) *
|
||||
SUM(CAST(taxableBase * rate / 100 AS DECIMAL(10, 2))) foreignTax
|
||||
FROM tmp.orderTax
|
||||
GROUP BY orderFk, `code`;
|
||||
|
|
|
@ -30,14 +30,14 @@ proc: BEGIN
|
|||
JOIN orderRowComponent c ON c.rowFk = r.id
|
||||
WHERE r.orderFk = vSelf;
|
||||
|
||||
UPDATE orderRow r
|
||||
JOIN `order` o ON o.id = r.orderFk
|
||||
UPDATE orderRow r
|
||||
JOIN `order` o ON o.id = r.orderFk
|
||||
LEFT JOIN tmp.ticketComponentPrice p ON p.warehouseFk = r.warehouseFk
|
||||
AND p.itemFk = r.itemFk
|
||||
AND p.rate = r.rate
|
||||
LEFT JOIN tmp.zoneGetShipped t ON t.warehouseFk = r.warehouseFk
|
||||
SET r.price = p.price,
|
||||
r.foreignPrice = currency_getRate(o.currencyFk, NULL) * p.price,
|
||||
r.foreignPrice = vn.currency_getRate(o.currencyFk, NULL) * p.price,
|
||||
r.amount = IF(p.itemFk IS NOT NULL,
|
||||
r.amount + IF(@m := MOD(r.amount, p.`grouping`), p.`grouping` - @m, 0)
|
||||
, 0),
|
||||
|
@ -54,7 +54,7 @@ proc: BEGIN
|
|||
ON t.id = c.componentFk
|
||||
AND (t.classRate IS NULL OR t.classRate = r.rate)
|
||||
WHERE r.orderFk = vSelf;
|
||||
|
||||
|
||||
CALL vn.ticketCalculatePurge;
|
||||
END IF;
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
-- DELIMITER $$
|
||||
-- CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION vn.client_getCompany(vSelf INT)
|
||||
-- RETURNS INT(3)
|
||||
-- DETERMINISTIC
|
||||
-- BEGIN
|
||||
-- /**
|
||||
-- * Devuelve la moneda por defecto del cliente dado
|
||||
-- *
|
||||
-- * @param vSelf id del cliente
|
||||
-- * @return devuelve id de la compañia por defecto
|
||||
-- */
|
||||
-- DECLARE vCompanyFk INT;
|
||||
|
||||
-- SELECT co.currencyFk INTO vCompanyFk
|
||||
-- FROM client c
|
||||
-- JOIN vn.province p ON p.id = c.provinceFk
|
||||
-- JOIN vn.country co ON co.id = p.countryFk
|
||||
-- WHERE c.id = vSelf
|
||||
-- LIMIT 1;
|
||||
|
||||
-- RETURN vCompanyFk;
|
||||
-- END$$
|
||||
-- DELIMITER ;
|
|
@ -0,0 +1,23 @@
|
|||
-- DELIMITER $$
|
||||
-- CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION vn.client_getCurrency(vSelf INT)
|
||||
-- RETURNS INT(3)
|
||||
-- DETERMINISTIC
|
||||
-- BEGIN
|
||||
-- /**
|
||||
-- * Devuelve la moneda por defecto del cliente dado
|
||||
-- *
|
||||
-- * @param vSelf id del cliente
|
||||
-- * @return devuelve id del tipo de moneda
|
||||
-- */
|
||||
-- DECLARE vCurrencyFk INT;
|
||||
|
||||
-- SELECT co.currencyFk INTO vCurrencyFk
|
||||
-- FROM client c
|
||||
-- JOIN vn.province p ON p.id = c.provinceFk
|
||||
-- JOIN vn.country co ON co.id = p.countryFk
|
||||
-- WHERE c.id = vSelf
|
||||
-- LIMIT 1;
|
||||
|
||||
-- RETURN vCurrencyFk;
|
||||
-- END$$
|
||||
-- DELIMITER ;
|
|
@ -20,7 +20,7 @@ BEGIN
|
|||
SELECT value INTO vForeignRate
|
||||
FROM referenceRate
|
||||
WHERE dated = IFNULL(vDated, util.yesterday())
|
||||
AND id = vSelf
|
||||
AND currencyFk = vSelf
|
||||
ORDER BY dated DESC
|
||||
LIMIT 1;
|
||||
|
||||
|
|
|
@ -3,23 +3,25 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`orderCreate`(
|
|||
vLanded DATE,
|
||||
vAgencyMode INT,
|
||||
vAddress INT,
|
||||
vCompany INT,
|
||||
vCurrency INT,
|
||||
vSourceApp VARCHAR(10),
|
||||
OUT vOrderId INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE vDeliveryMethod INT;
|
||||
DECLARE vClient INT;
|
||||
|
||||
|
||||
SELECT deliveryMethodFk INTO vDeliveryMethod
|
||||
FROM vn.agencyMode
|
||||
FROM vn.agencyMode
|
||||
WHERE id = vAgencyMode;
|
||||
|
||||
|
||||
SELECT clientFk INTO vClient
|
||||
FROM vn.address
|
||||
WHERE id = vAddress;
|
||||
|
||||
INSERT INTO hedera.order(date_send,customer_id,delivery_method_id,agency_id,address_id,source_app)
|
||||
VALUES( vLanded,vClient ,vDeliveryMethod,vAgencyMode ,vAddress ,vSourceApp);
|
||||
|
||||
INSERT INTO hedera.order(date_send,customer_id,delivery_method_id,agency_id,address_id,company_id,currencyFk,source_app)
|
||||
VALUES( vLanded,vClient ,vDeliveryMethod,vAgencyMode,vAddress,vCompany,vCurrency,vSourceApp);
|
||||
|
||||
SET vOrderId = LAST_INSERT_ID();
|
||||
|
||||
|
|
|
@ -3,12 +3,14 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`orderListCreate`(
|
|||
vLanded DATE,
|
||||
vAgencyMode INT,
|
||||
vAddress INT,
|
||||
vCompany INT,
|
||||
vCurrency INT,
|
||||
vSourceApp VARCHAR(10))
|
||||
BEGIN
|
||||
|
||||
DECLARE vOrderId INT;
|
||||
CALL vn.orderCreate(vLanded,vAgencyMode,vAddress,vSourceApp,vOrderId);
|
||||
CALL vn.orderCreate(vLanded,vAgencyMode,vAddress,vCompany,vCurrency,vSourceApp,vOrderId);
|
||||
SELECT vOrderId;
|
||||
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -15,7 +15,7 @@ ALTER TABLE vn.company DROP FOREIGN KEY IF EXISTS company_currency_FK;
|
|||
ALTER TABLE vn.company ADD CONSTRAINT company_currency_FK FOREIGN KEY (currencyFk)
|
||||
REFERENCES vn.currency(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE vn.ticket ADD `currencyFk` tinyint(3) UNSIGNED DEFAULT 1 NOT NULL AFTER totalWithoutVat;
|
||||
ALTER TABLE vn.ticket ADD `currencyFk` tinyint(3) UNSIGNED DEFAULT 1 NOT NULL AFTER totalWithoutVat;
|
||||
ALTER TABLE vn.ticket ADD `foreignTotalWithVat` decimal(10,2) NULL AFTER currencyFk;
|
||||
ALTER TABLE vn.ticket ADD `foreignTotalWithoutVat` decimal(10,2) NULL AFTER foreignTotalWithVat;
|
||||
|
||||
|
@ -52,3 +52,31 @@ FROM `hedera`.`orderRow` `t`;
|
|||
|
||||
|
||||
|
||||
ALTER TABLE vn.country ADD IF NOT EXISTS `companyFk` int(10) UNSIGNED DEFAULT 442 NOT NULL;
|
||||
ALTER TABLE vn.country DROP FOREIGN KEY IF EXISTS country_defaultCompany_FK;
|
||||
ALTER TABLE vn.country ADD CONSTRAINT country_defaultCompany_FK FOREIGN KEY (companyFk)
|
||||
REFERENCES vn.company(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE vn.client ADD IF NOT EXISTS `defaultCompanyFk` int(10) UNSIGNED DEFAULT 442 NOT NULL;
|
||||
ALTER TABLE vn.client ADD IF NOT EXISTS `defaultCurrencyFk` tinyint(3) UNSIGNED DEFAULT 1 NOT NULL;
|
||||
|
||||
|
||||
ALTER TABLE vn.client DROP FOREIGN KEY IF EXISTS client_defaultCompany_FK;
|
||||
ALTER TABLE vn.client DROP FOREIGN KEY IF EXISTS client_defaultCurrency_FK;
|
||||
|
||||
ALTER TABLE vn.client ADD CONSTRAINT client_defaultCompany_FK FOREIGN KEY (defaultCompanyFk)
|
||||
REFERENCES vn.company(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE vn.client ADD CONSTRAINT client_defaultCurrency_FK FOREIGN KEY (defaultCurrencyFk)
|
||||
REFERENCES vn.currency(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
UPDATE vn.client c
|
||||
JOIN vn.province p ON p.id = c.provinceFk
|
||||
JOIN vn.country co ON co.id = p.countryFk
|
||||
SET c.defaultCompanyFk = co.companyFk,
|
||||
c.defaultCurrencyFk = co.currencyFk;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -147,8 +147,13 @@
|
|||
},
|
||||
"hasDailyInvoice": {
|
||||
"type": "boolean"
|
||||
}
|
||||
|
||||
},
|
||||
"defaultCompanyFk": {
|
||||
"type": "number"
|
||||
},
|
||||
"defaultCurrencyFk": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"relations": {
|
||||
"account": {
|
||||
|
@ -256,7 +261,17 @@
|
|||
"model": "Supplier",
|
||||
"foreignKey": "fi",
|
||||
"primaryKey": "nif"
|
||||
}
|
||||
},
|
||||
"currency": {
|
||||
"type": "belongsTo",
|
||||
"model": "Currency",
|
||||
"foreignKey": "defaultCurrencyFk"
|
||||
},
|
||||
"company": {
|
||||
"type": "belongsTo",
|
||||
"model": "Comapny",
|
||||
"foreignKey": "defaultCompanyFk"
|
||||
}
|
||||
},
|
||||
"scopes": {
|
||||
"isActive": {
|
||||
|
|
|
@ -92,11 +92,12 @@ module.exports = Self => {
|
|||
// Calculate items
|
||||
const order = await Self.findById(orderFk, null, myOptions);
|
||||
stmts.push(new ParameterizedSQL(
|
||||
'CALL vn.catalog_calculate(?, ?, ?, ?)', [
|
||||
'CALL vn.catalog_calculate(?, ?, ?, ?, ?)', [
|
||||
order.landed,
|
||||
order.address_id,
|
||||
order.agency_id,
|
||||
false
|
||||
order.currencyFk,
|
||||
false,
|
||||
]
|
||||
));
|
||||
|
||||
|
@ -119,7 +120,9 @@ module.exports = Self => {
|
|||
w.firstName,
|
||||
tci.priceKg,
|
||||
ink.hex,
|
||||
tci.minQuantity
|
||||
tci.minQuantity,
|
||||
tci.foreignPrice,
|
||||
tci.foreignPriceKg
|
||||
FROM tmp.ticketCalculateItem tci
|
||||
JOIN vn.item i ON i.id = tci.itemFk
|
||||
JOIN vn.itemType it ON it.id = i.typeFk
|
||||
|
@ -161,9 +164,11 @@ module.exports = Self => {
|
|||
`SELECT tcp.itemFk,
|
||||
tcp.grouping,
|
||||
tcp.price,
|
||||
tcp.foreignPrice,
|
||||
tcp.rate,
|
||||
tcp.warehouseFk,
|
||||
tcp.priceKg,
|
||||
tcp.foreignPriceKg,
|
||||
w.name warehouse
|
||||
FROM tmp.ticketComponentPrice tcp
|
||||
JOIN vn.warehouse w ON w.id = tcp.warehouseFk`) - 1;
|
||||
|
|
|
@ -62,11 +62,12 @@ module.exports = Self => {
|
|||
stmts.push(stmt);
|
||||
|
||||
stmt = new ParameterizedSQL(
|
||||
'CALL vn.catalog_calculate(?, ?, ?, ?)', [
|
||||
'CALL vn.catalog_calculate(?, ?, ?, ?, ?)', [
|
||||
order.landed,
|
||||
order.addressFk,
|
||||
order.agencyModeFk,
|
||||
false
|
||||
order.currencyFk,
|
||||
false,
|
||||
]
|
||||
);
|
||||
stmts.push(stmt);
|
||||
|
|
|
@ -10,7 +10,7 @@ module.exports = Self => {
|
|||
http: {source: 'path'}
|
||||
}],
|
||||
returns: {
|
||||
type: 'number',
|
||||
type: 'object',
|
||||
root: true
|
||||
},
|
||||
http: {
|
||||
|
@ -25,9 +25,22 @@ module.exports = Self => {
|
|||
if (typeof options == 'object')
|
||||
Object.assign(myOptions, options);
|
||||
|
||||
const query = `SELECT hedera.order_getTotal(?) total;`;
|
||||
const [total] = await Self.rawSql(query, [orderFk], myOptions);
|
||||
const query = `
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.order;
|
||||
CREATE TEMPORARY TABLE tmp.order
|
||||
ENGINE = MEMORY
|
||||
SELECT ? orderFk;
|
||||
|
||||
return total.total;
|
||||
CALL hedera.order_getTotal;
|
||||
SELECT total, foreignTotal FROM tmp.orderTotal;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.order,
|
||||
tmp.orderTotal;`;
|
||||
|
||||
const totals = await Self.rawSql(query, [orderFk], myOptions);
|
||||
const INDEX_QUERY = 3;
|
||||
|
||||
return totals[INDEX_QUERY][0];
|
||||
};
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ module.exports = Self => {
|
|||
http: {source: 'path'}
|
||||
}],
|
||||
returns: {
|
||||
type: 'number',
|
||||
type: 'object',
|
||||
root: true
|
||||
},
|
||||
http: {
|
||||
|
@ -25,12 +25,19 @@ module.exports = Self => {
|
|||
if (typeof options == 'object')
|
||||
Object.assign(myOptions, options);
|
||||
|
||||
let totalTax = 0.00;
|
||||
let vat = 0.00;
|
||||
let foreignVat = 0.00;
|
||||
const taxes = await Self.app.models.Order.getTaxes(orderId, myOptions);
|
||||
|
||||
taxes.forEach(tax => {
|
||||
totalTax += tax.tax;
|
||||
vat += tax.tax;
|
||||
foreignVat += tax.foreignTax;
|
||||
});
|
||||
|
||||
return Math.round(totalTax * 100) / 100;
|
||||
return {vat: round(vat), foreignVat: round(foreignVat)};
|
||||
};
|
||||
|
||||
function round(amount) {
|
||||
return Math.round(amount * 100) / 100;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -20,6 +20,16 @@ module.exports = Self => {
|
|||
description: 'The agencyMode for the order',
|
||||
type: 'number',
|
||||
required: true
|
||||
}, {
|
||||
arg: 'companyId',
|
||||
description: 'The company for the order',
|
||||
type: 'number',
|
||||
required: true
|
||||
}, {
|
||||
arg: 'currencyId',
|
||||
description: 'The currency for the order',
|
||||
type: 'number',
|
||||
required: true
|
||||
}
|
||||
],
|
||||
returns: {
|
||||
|
@ -32,7 +42,7 @@ module.exports = Self => {
|
|||
}
|
||||
});
|
||||
|
||||
Self.new = async(ctx, landed, addressId, agencyModeId, options) => {
|
||||
Self.new = async(ctx, landed, addressId, agencyModeId, companyId, currencyId, options) => {
|
||||
const myOptions = {userId: ctx.req.accessToken.userId};
|
||||
let tx;
|
||||
|
||||
|
@ -59,11 +69,13 @@ module.exports = Self => {
|
|||
throw new UserError(`You can't create an order for an inactive client`);
|
||||
}
|
||||
|
||||
query = `CALL vn.orderListCreate(?, ?, ?, ?);`;
|
||||
query = `CALL vn.orderListCreate(?, ?, ?, ?, ?, ?);`;
|
||||
[result] = await Self.rawSql(query, [
|
||||
landed,
|
||||
agencyModeId,
|
||||
addressId,
|
||||
companyId,
|
||||
currencyId,
|
||||
'SALIX'
|
||||
], myOptions);
|
||||
|
||||
|
|
|
@ -57,6 +57,8 @@ module.exports = Self => {
|
|||
'landed',
|
||||
'agencyModeFk',
|
||||
'note',
|
||||
'companyFk',
|
||||
'currencyFk',
|
||||
]);
|
||||
if (Object.keys(updateParams).length)
|
||||
await order.updateAttributes(updateParams, myOptions);
|
||||
|
|
|
@ -30,6 +30,9 @@
|
|||
"price": {
|
||||
"type": "number"
|
||||
},
|
||||
"foreignPrice": {
|
||||
"type": "number"
|
||||
},
|
||||
"rate": {
|
||||
"type": "number"
|
||||
},
|
||||
|
|
|
@ -82,6 +82,9 @@
|
|||
},
|
||||
"total": {
|
||||
"type": "number"
|
||||
},
|
||||
"currencyFk": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"relations": {
|
||||
|
@ -114,6 +117,11 @@
|
|||
"type": "belongsTo",
|
||||
"model": "Company",
|
||||
"foreignKey": "company_id"
|
||||
},
|
||||
"currency": {
|
||||
"type": "belongsTo",
|
||||
"model": "Currency",
|
||||
"foreignKey": "currencyFk"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue