module.exports = Self => { Self.remoteMethodCtx('newCollection', { description: 'Make a new collection of tickets', accessType: 'WRITE', accepts: [{ arg: 'collectionFk', type: 'Number', required: false, description: 'The collection id' }, { arg: 'sectorFk', type: 'Number', required: true, description: 'The sector of worker' }, { arg: 'vWagons', type: 'Number', required: true, description: 'The number of wagons' }], returns: { type: 'Object', root: true }, http: { path: `/newCollection`, verb: 'POST' } }); Self.newCollection = async(ctx, collectionFk, sectorFk, vWagons) => { let query = ''; const userId = ctx.req.accessToken.userId; if (!collectionFk) { query = `CALL vn.collectionTrain_newBeta(?,?,?)`; const [result] = await Self.rawSql(query, [sectorFk, vWagons, userId], {userId}); if (result.length == 0) throw new Error(`No collections for today`); collectionFk = result[0].vCollectionFk; } query = `CALL vn.collectionTicket_get(?)`; const [tickets] = await Self.rawSql(query, [collectionFk], {userId}); query = `CALL vn.collectionSale_get(?)`; const [sales] = await Self.rawSql(query, [collectionFk], {userId}); query = `CALL vn.collectionPlacement_get(?)`; const [placements] = await Self.rawSql(query, [collectionFk], {userId}); query = `CALL vn.collectionSticker_print(?,?)`; await Self.rawSql(query, [collectionFk, sectorFk], {userId}); return makeCollection(tickets, sales, placements, collectionFk); }; /** * Returns a collection json * @param {*} tickets - Request tickets * @param {*} sales - Request sales * @param {*} placements - Request placements * @param {*} collectionFk - Request placements * @return {Object} Collection JSON */ async function makeCollection(tickets, sales, placements, collectionFk) { let collection = []; for (let i = 0; i < tickets.length; i++) { let ticket = {}; ticket['ticketFk'] = tickets[i]['ticketFk']; ticket['level'] = tickets[i]['level']; ticket['agencyName'] = tickets[i]['agencyName']; ticket['warehouseFk'] = tickets[i]['warehouseFk']; ticket['salesPersonFk'] = tickets[i]['salesPersonFk']; let ticketSales = []; for (let x = 0; x < sales.length; x++) { if (sales[x]['ticketFk'] == ticket['ticketFk']) { let sale = {}; sale['collectionFk'] = collectionFk; sale['ticketFk'] = sales[x]['ticketFk']; sale['saleFk'] = sales[x]['saleFk']; sale['itemFk'] = sales[x]['itemFk']; sale['quantity'] = sales[x]['quantity']; if (sales[x]['quantityPicked'] != null) sale['quantityPicked'] = sales[x]['quantityPicked']; else sale['quantityPicked'] = 0; sale['longName'] = sales[x]['longName']; sale['size'] = sales[x]['size']; sale['color'] = sales[x]['color']; sale['discount'] = sales[x]['discount']; sale['price'] = sales[x]['price']; sale['stems'] = sales[x]['stems']; sale['category'] = sales[x]['category']; sale['origin'] = sales[x]['origin']; sale['clientFk'] = sales[x]['clientFk']; sale['productor'] = sales[x]['productor']; sale['reserved'] = sales[x]['reserved']; sale['isPreviousPrepared'] = sales[x]['isPreviousPrepared']; sale['isPrepared'] = sales[x]['isPrepared']; sale['isControlled'] = sales[x]['isControlled']; let salePlacements = []; for (let z = 0; z < placements.length; z++) { if (placements[z]['saleFk'] == sale['saleFk']) { let placement = {}; placement['saleFk'] = placements[z]['saleFk']; placement['itemFk'] = placements[z]['itemFk']; placement['placement'] = placements[z]['placement']; placement['shelving'] = placements[z]['shelving']; placement['created'] = placements[z]['created']; placement['visible'] = placements[z]['visible']; placement['order'] = placements[z]['order']; placement['grouping'] = placements[z]['grouping']; salePlacements.push(placement); } } sale['placements'] = salePlacements; ticketSales.push(sale); } } ticket['sales'] = ticketSales; collection.push(ticket); } return collection; } };