salix/modules/ticket/back/methods/sale/replaceItem.js

79 lines
2.3 KiB
JavaScript

module.exports = Self => {
Self.remoteMethodCtx('replaceItem', {
description: 'Replace item from sale',
accessType: 'WRITE',
accepts: [{
arg: 'saleFk',
type: 'number',
required: true,
},
{
arg: 'substitutionFk',
type: 'number',
required: true
},
{
arg: 'quantity',
type: 'number',
required: true
}
],
returns: {
type: 'object',
root: true
},
http: {
path: `/replaceItem`,
verb: 'POST'
}
});
Self.replaceItem = async(ctx, saleFk, substitutionFk, quantity, options) => {
const myOptions = {userId: ctx.req.accessToken.userId};
let tx;
const $t = ctx.req.__;
const models = Self.app.models;
// const {_saleFk, _substitutionFk, _quantity} = ctx.args;
if (typeof options == 'object')
Object.assign(myOptions, options);
if (!myOptions.transaction) {
tx = await Self.beginTransaction({});
myOptions.transaction = tx;
}
try {
const _replaceItem = {
sql: 'CALL sale_replaceItem(?,?,?)',
query: [saleFk, substitutionFk, quantity]
};
const resultReplaceItem = await Self.rawSql(_replaceItem.sql, _replaceItem.query, myOptions);
const _salesPerson = {
sql: 'SELECT vn.client_getSalesPersonByTicket(?)',
query: [saleFk.ticket.id]
};
const salesPerson = await Self.rawSql(_salesPerson.query, _salesPerson.sql, myOptions);
const message = $t('negativeReplaced', {
oldItemId: itemFk,
oldItemUrl: `${url}item/${itemFk}/summary`,
newItemId: substitutionFk,
newItemUrl: `${url}item/${substitutionFk}/summary`,
ticketId: ticketFk,
ticketUrl: `${url}ticket/${ticketFk}/sale`,
});
await models.Chat.sendCheckingPresence(ctx, salesPerson.id, message);
return resultReplaceItem;
} catch (e) {
if (tx) await tx.rollback();
throw e;
}
};
};