109 lines
4.0 KiB
JavaScript
109 lines
4.0 KiB
JavaScript
|
|
module.exports = Self => {
|
|
Self.remoteMethodCtx('addFromBuy', {
|
|
description: 'Modify a field of a buy or creates a new one with default values',
|
|
accessType: 'WRITE',
|
|
accepts: [{
|
|
arg: 'id',
|
|
type: 'number',
|
|
required: true,
|
|
description: 'The entry id',
|
|
http: {source: 'path'}
|
|
}, {
|
|
arg: 'item',
|
|
type: 'number',
|
|
required: true,
|
|
description: 'The item id',
|
|
}, {
|
|
arg: 'printedStickers',
|
|
type: 'number',
|
|
required: true,
|
|
description: 'The field to modify',
|
|
}],
|
|
returns: {
|
|
type: 'object',
|
|
root: true
|
|
},
|
|
http: {
|
|
path: `/:id/addFromBuy`,
|
|
verb: 'POST'
|
|
}
|
|
});
|
|
|
|
Self.addFromBuy = async(ctx, options) => {
|
|
const args = ctx.args;
|
|
const models = Self.app.models;
|
|
const userId = ctx.req.accessToken.userId;
|
|
const myOptions = {userId};
|
|
let tx;
|
|
|
|
if (typeof options == 'object')
|
|
Object.assign(myOptions, options);
|
|
|
|
if (!myOptions.transaction) {
|
|
tx = await Self.beginTransaction({});
|
|
myOptions.transaction = tx;
|
|
}
|
|
|
|
try {
|
|
let buy = await models.Buy.findOne({where: {entryFk: args.id, itemFk: args.item}}, myOptions);
|
|
if (buy)
|
|
await buy.updateAttribute('printedStickers', args.printedStickers, myOptions);
|
|
else {
|
|
const userConfig = await models.UserConfig.findById(userId, {fields: ['warehouseFk']}, myOptions);
|
|
await Self.rawSql(
|
|
'CALL vn.buyUltimate(?,?)',
|
|
[userConfig.warehouseFk, null],
|
|
myOptions
|
|
);
|
|
let buyUltimate = await Self.rawSql(
|
|
`SELECT buyFk
|
|
FROM tmp.buyUltimate
|
|
WHERE itemFk = ?`,
|
|
[args.item],
|
|
myOptions
|
|
);
|
|
buyUltimate = await models.Buy.findById(buyUltimate[0].buyFk, null, myOptions);
|
|
buy = await models.Buy.create({
|
|
entryFk: args.id,
|
|
itemFk: args.item,
|
|
quantity: 0,
|
|
dispatched: buyUltimate.dispatched,
|
|
buyingValue: buyUltimate.buyingValue,
|
|
freightValue: buyUltimate.freightValue,
|
|
isIgnored: buyUltimate.isIgnored,
|
|
stickers: buyUltimate.stickers,
|
|
packing: buyUltimate.packing,
|
|
grouping: buyUltimate.grouping,
|
|
groupingMode: buyUltimate.groupingMode,
|
|
containerFk: buyUltimate.containerFk,
|
|
comissionValue: buyUltimate.comissionValue,
|
|
packageValue: buyUltimate.packageValue,
|
|
location: buyUltimate.location,
|
|
packagingFk: buyUltimate.packagingFk,
|
|
price1: buyUltimate.price1,
|
|
price2: buyUltimate.price2,
|
|
price3: buyUltimate.price3,
|
|
minPrice: buyUltimate.minPrice,
|
|
workerFk: buyUltimate.workerFk,
|
|
isChecked: buyUltimate.isChecked,
|
|
isPickedOff: buyUltimate.isPickedOff,
|
|
created: buyUltimate.created,
|
|
ektFk: buyUltimate.ektFk,
|
|
weight: buyUltimate.weight,
|
|
deliveryFk: buyUltimate.deliveryFk,
|
|
itemOriginalFk: buyUltimate.itemOriginalFk
|
|
}, myOptions);
|
|
if (buy)
|
|
await buy.updateAttribute('printedStickers', args.printedStickers, myOptions);
|
|
}
|
|
|
|
if (tx) await tx.commit();
|
|
return buy;
|
|
} catch (e) {
|
|
if (tx) await tx.rollback();
|
|
throw e;
|
|
}
|
|
};
|
|
};
|