const axios = require('axios'); const UserError = require('vn-loopback/util/user-error'); const moment = require('moment'); module.exports = Self => { Self.remoteMethod('sendOrders', { description: 'Sends a set of orders', accessType: 'WRITE', accepts: [{ arg: 'tickets', type: ['number'], required: true } ], returns: { type: 'string', root: true }, http: { path: `/sendOrders`, verb: 'POST' } }); Self.sendOrders = async tickets => { const config = await Self.app.models.QuadmindsApiConfig.findOne(); if (!config) throw new UserError('Config params not set'); const pois = await axios.get(`${config.url}pois/search?limit=10000&offset=0`, { headers: { 'Accept': 'application/json', 'X-Saas-Apikey': config.key } }); const poiMap = new Map(pois.data.data.map(poi => [poi.code, poi._id])); let orders = await Self.rawSql(` SELECT a.id poiCode, t.id code, t.shipped date, 'PEDIDO' operation, t.totalWithVat totalAmount, t.totalWithoutVat totalAmountWithoutTaxes FROM ticket t JOIN address a ON a.id = t.addressFk WHERE t.id IN (?) GROUP BY t.id `, [tickets]); // Transformo code en string ya que lo obtenermos como integer orders = orders.map(order => { return { ...order, poiId: poiMap.get(order.poiCode.toString()) || undefined, code: order.code.toString(), date: moment(order.date).format('YYYY-MM-DD'), totalAmount: order.totalAmount || undefined, totalAmountWithoutTaxes: order.totalAmountWithoutTaxes || undefined }; }); await axios.post(`${config.url}orders`, orders, { headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'X-Saas-Apikey': config.key } }); }; };