7984-addCurrency #3316
|
@ -24,7 +24,9 @@ ALTER TABLE vn.ticket ADD CONSTRAINT ticket_currency_FK FOREIGN KEY (currencyFk)
|
|||
REFERENCES vn.currency(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE vn.sale ADD `foreignPrice` decimal(10,2) NULL AFTER price;
|
||||
ALTER TABLE vn.sale ADD `foreignTotal` decimal(10,2) NULL AFTER total;
|
||||
ALTER TABLE vn.sale
|
||||
ADD COLUMN foreignTotal DECIMAL(10,2)
|
||||
AS (foreignPrice * quantity * (100 - discount) / 100) VIRTUAL AFTER total;
|
||||
|
||||
ALTER TABLE vn.ticketService ADD `foreignPrice` decimal(10,2) NULL AFTER price;
|
||||
|
||||
|
|
|
@ -14,6 +14,10 @@ module.exports = Self => {
|
|||
description: 'The new price',
|
||||
type: 'number',
|
||||
required: true
|
||||
}, {
|
||||
arg: 'isForeign',
|
||||
type: 'boolean',
|
||||
description: 'If should be calculated with the foreign price'
|
||||
}
|
||||
],
|
||||
returns: {
|
||||
|
@ -26,7 +30,7 @@ module.exports = Self => {
|
|||
}
|
||||
});
|
||||
|
||||
Self.updatePrice = async(ctx, id, newPrice, options) => {
|
||||
Self.updatePrice = async(ctx, id, newPrice, isForeign, options) => {
|
||||
const $t = ctx.req.__; // $translate
|
||||
const models = Self.app.models;
|
||||
const myOptions = {userId: ctx.req.accessToken.userId};
|
||||
|
@ -57,15 +61,28 @@ module.exports = Self => {
|
|||
}
|
||||
}
|
||||
},
|
||||
fields: ['id', 'clientFk']
|
||||
fields: ['id', 'clientFk', 'currencyFk']
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const sale = await models.Sale.findById(id, filter, myOptions);
|
||||
|
||||
await models.Sale.canEdit(ctx, [id], myOptions);
|
||||
|
||||
let newForeignPrice;
|
||||
const isForeignCurrency = sale.foreignPrice || sale.foreignPrice === 0;
|
||||
if (isForeignCurrency) {
|
||||
const [{rate}] = await Self.rawSql(
|
||||
'SELECT ticket_getCurrencyRate(?, NULL) rate',
|
||||
[sale.ticketFk],
|
||||
myOptions
|
||||
);
|
||||
if (isForeign) {
|
||||
newForeignPrice = newPrice;
|
||||
newPrice = newPrice / rate;
|
||||
} else
|
||||
newForeignPrice = newPrice * rate;
|
||||
}
|
||||
const oldPrice = sale.price;
|
||||
const userId = ctx.req.accessToken.userId;
|
||||
|
||||
|
@ -104,6 +121,7 @@ module.exports = Self => {
|
|||
|
||||
await sale.updateAttributes({
|
||||
price: newPrice,
|
||||
foreignPrice: newForeignPrice,
|
||||
priceFixed: priceFixed.value
|
||||
}, myOptions);
|
||||
|
||||
|
@ -120,6 +138,7 @@ module.exports = Self => {
|
|||
quantity: sale.quantity,
|
||||
oldPrice: oldPrice,
|
||||
newPrice: newPrice,
|
||||
foreignPrice: newForeignPrice,
|
||||
ticketUrl: `${url}ticket/${sale.ticket().id}/sale`,
|
||||
itemUrl: `${url}item/${sale.itemFk}/summary`
|
||||
});
|
||||
|
@ -128,7 +147,7 @@ module.exports = Self => {
|
|||
|
||||
if (tx) await tx.commit();
|
||||
|
||||
return sale;
|
||||
return await models.Sale.findById(id, filter); // for virutal fields
|
||||
} catch (error) {
|
||||
if (tx) await tx.rollback();
|
||||
throw error;
|
||||
|
|
|
@ -2,13 +2,19 @@ module.exports = Self => {
|
|||
Self.remoteMethod('getSalesPersonMana', {
|
||||
description: 'Returns the mana amount of a salesperson for a ticket',
|
||||
accessType: 'READ',
|
||||
accepts: [{
|
||||
arg: 'id',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'The ticket id',
|
||||
http: {source: 'path'}
|
||||
}],
|
||||
accepts: [
|
||||
{
|
||||
arg: 'id',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'The ticket id',
|
||||
http: {source: 'path'}
|
||||
}, {
|
||||
arg: 'isForeign',
|
||||
type: 'boolean',
|
||||
description: 'If need show with foreign currency',
|
||||
},
|
||||
],
|
||||
returns: {
|
||||
root: true
|
||||
},
|
||||
|
@ -18,7 +24,7 @@ module.exports = Self => {
|
|||
}
|
||||
});
|
||||
|
||||
Self.getSalesPersonMana = async(ticketId, options) => {
|
||||
Self.getSalesPersonMana = async(ticketId, isForeign, options) => {
|
||||
const myOptions = {};
|
||||
const models = Self.app.models;
|
||||
|
||||
|
@ -37,13 +43,18 @@ module.exports = Self => {
|
|||
|
||||
if (!ticket) return 0;
|
||||
|
||||
const mana = await models.WorkerMana.findOne({
|
||||
let {amount} = await models.WorkerMana.findOne({
|
||||
where: {
|
||||
workerFk: ticket.client().salesPersonFk
|
||||
},
|
||||
fields: 'amount'
|
||||
}, myOptions);
|
||||
|
||||
return mana ? mana.amount : 0;
|
||||
if (isForeign) {
|
||||
const [{rate}] = await models.Ticket.rawSql('SELECT ticket_getCurrencyRate(?, NULL) rate', [ticketId]);
|
||||
amount = amount * rate;
|
||||
}
|
||||
|
||||
return amount ?? 0;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -45,6 +45,12 @@
|
|||
},
|
||||
"originalQuantity":{
|
||||
"type": "number"
|
||||
},
|
||||
"total":{
|
||||
"type": "number"
|
||||
},
|
||||
"foreignTotal":{
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"relations": {
|
||||
|
|
Loading…
Reference in New Issue