const UserError = require('vn-loopback/util/user-error'); module.exports = Self => { Self.remoteMethodCtx('mark', { description: 'Insert an itemShelvingSale and Modify a saleTracking record', accessType: 'WRITE', accepts: [ { arg: 'saleFk', type: 'number', required: true }, { arg: 'originalQuantity', type: 'number', required: true }, { arg: 'code', type: 'string', required: true }, { arg: 'isChecked', type: 'boolean', required: true }, { arg: 'buyFk', type: 'number', required: true }, { arg: 'isScanned', type: 'boolean', }, { arg: 'quantity', type: 'number', required: true }, { arg: 'itemShelvingFk', type: 'number', required: true } ], http: { path: `/mark`, verb: 'POST' } }); Self.mark = async(ctx, saleFk, originalQuantity, code, isChecked, buyFk, isScanned, quantity, itemShelvingFk, options) => { const userId = ctx.req.accessToken.userId; const models = Self.app.models; const myOptions = {}; let tx; if (typeof options == 'object') Object.assign(myOptions, options); if (!myOptions.transaction) { tx = await Self.beginTransaction({}); myOptions.transaction = tx; } try { await models.ItemShelvingSale.create({ itemShelvingFk, saleFk, quantity, userFk: userId }, myOptions); const itemShelving = await models.ItemShelving.findOne({ where: { id: itemShelvingFk } }, myOptions); await itemShelving.updateAttributes({ visible: itemShelving.visible - quantity} , myOptions); await Self.updateAll( {saleFk}, {isChecked: true}, myOptions ); await Self.updateTracking(ctx, saleFk, originalQuantity, code, isChecked, buyFk, isScanned, myOptions); if (tx) await tx.commit(); } catch (e) { if (tx) await tx.rollback(); throw new UserError('The line could not be marked'); } }; };