index.js 4.17 KB
module.exports = function(config) {

  return {
    getEntity: function (message) {

      return new Promise(function(resolve, reject) {

        var promise;

        if (message.queryString) {

          promise = knex.schema.raw(message.queryString);
        } else {

          promise = knex(message.tableName).where(message.where).select('*');
        }

        promise.then(function (data) {

          message.data = data[0];
          resolve(message);
        });
      });
    },

    guardarComprobante: function (body) {

      console.log('recibo datos guardarComprobante en estación');
      console.log(body);

      return new Promise((resolve, reject) => {

        delete body.cabecera.idTransaccion;
        delete body.cabecera.GLN;
        delete body.cabecera.C_HD2;
        delete body.cabecera.E_HD2;

        //smalldatetime
        body.cabecera.FEC = new Date(body.cabecera.FEC).toISOString().slice(0, 19).replace('T', ' ');
        body.cabecera.FECCAI = new Date(body.cabecera.FECCAI).toISOString().slice(0, 19).replace('T', ' ');
        body.cabecera.FECVEN = new Date(body.cabecera.FECVEN).toISOString().slice(0, 19).replace('T', ' ');
        //datetime
        body.cabecera.FEV = moment(body.cabecera.FEV).format('YYYYMMDD');
        body.cabecera.FEP = moment(body.cabecera.FEP).format('YYYYMMDD');

        knex('PMAEFACT').insert(body.cabecera).then(() => {

          var promesas = [
            knex('PCOBYPAG').insert({
              COD: body.cabecera.COD,
              FEP: body.cabecera.FEC,
              TIP: body.cabecera.TIP,
              TCO: body.cabecera.TCO,
              SUC: body.cabecera.SUC,
              NCO: body.cabecera.NCO,
              IPA: body.cabecera.TOT,
              SAL: 0,
              TCA: 1,
              ZONA: body.cabecera.ZON,
              FPA: body.cabecera.FPA,
              REC: 0,
              FER: '19000101 00:00',
              PRO: '',
              FEV: body.cabecera.FEV,
              ANU: '',
              PLA: 0,
              LUG: 0,
              RES: 0,
              CCU: 0,
              UCU: 0,
              HOS: '',
              E_HD: '',
              C_HD: ''
            }),
          ];

          body.cuerpo.forEach(cuerpo => {

            if (cuerpo.estado != 'rechazado' && !(cuerpo.COD == 0 && cuerpo.ART == 0)) {

              promesas.push(knex('AMOVSTOC').insert({
                SEC: cuerpo.COD,
                ART: cuerpo.ART,
                FEC: body.cabecera.FEC,
                CYV: 'C',
                TIP: body.cabecera.TIP,
                TCO: body.cabecera.TCO,
                PVE: body.cabecera.SUC,
                NCO: body.cabecera.NCO,
                ORD: cuerpo.ORD,
                CAN: cuerpo.cantidadRecibida,
                PUN: cuerpo.PUN,
                COD: body.cabecera.COD,
                DTO: cuerpo.DTO,
                IMI: cuerpo.IMI,
                PLA: 0,
                LUG: 0,
                ANU: '',
                TIM: 'Co',
                OPE: -888, // <= TODO: Cuando se haga el login poner codigo operario
                IMI2: cuerpo.IMI2,
                E_HD: '',
                C_HD: '',
                JUS: 'PLANEX',
                NLC: 0,
                IMI3: cuerpo.IMI3,
                JJN: '',
                JDJ: '',
                ID_MOTIVO_NANB: 0
              }));
            };

            cuerpo.estado == 'rechazado' ? cuerpo.cantidadRecibida = 0 : false;

            delete cuerpo.GLN;
            delete cuerpo.C_HD2;
            delete cuerpo.E_HD2;
            delete cuerpo.codigoBarras;
            delete cuerpo.estado;
            delete cuerpo.recibido;
            delete cuerpo.input;
            delete cuerpo.tempRecibido;

            cuerpo.LI0 = cuerpo.LI0.slice(0, 29);
            cuerpo.TIO = cuerpo.TIO.slice(0, 29);

            promesas.push(knex('PMOVFACT').insert(cuerpo));

          });

          Promise.all(promesas)
            .then(function() {

              console.log('comprobantes guardados con éxito');
              resolve();

            })
            .catch(function(e) {
              console.log(e);
              reject('Ocurrió un error');
            });

        })
        .catch(reject);

      });
    }
  }
}