UNPKG

tecnospeed-nfe

Version:

Emit NFe through TecnoSpeed API

127 lines (102 loc) 2.84 kB
'use strict' const axios = require('axios') const qs = require('qs') const Note = require('./note') class Client { constructor(settings = {}) { this.settings = settings this.settings.httpOptions = this.settings.httpOptions || {} } /** * @param {object} auth */ getHttpRequest() { return axios.create({ baseURL: 'https://managersaas.tecnospeed.com.br:8081/ManagerAPIWeb', ...this.httpOptions }) } setStorage(storage) { this.settings.storage = storage } setPreferences(preferences) { this.settings.prefs = preferences } /** * @param {Note} note */ getEmitParams(note) { const params = { cnpj: note.getCompany().getRegistrationNumber(), grupo: note.getGroup(), arquivo: note.toTX2() } return qs.stringify(params) } getCancelParams(note, reason) { const params = { cnpj: note.getCompany().getRegistrationNumber(), grupo: note.getGroup(), ChaveNota: note.getCode(), justificativa: reason, } return qs.stringify(params) } getDownloadParams(note) { const params = { cnpj: note.getCompany().getRegistrationNumber(), grupo: note.getGroup(), ChaveNota: note.getCode(), url: 1, } return qs.stringify(params) } /** * @param {Note} note * @returns {Promise<String>} */ async emit(note) { const api = this.getHttpRequest() const payload = await api.post('/nfce/envia', this.getEmitParams(note)) const info = payload.data.split(',') if (info[3] === 'Autorizado o uso da NF-e\n') { note.setCode(info[1]) return { success: true, note, msg: 'Nota Eletrônica emitida' } } return { success: false, error: payload.data } } /** * @param {Note} note * @returns {Promise<Boolean>} */ async cancel(note, reason) { const api = this.getHttpRequest() const payload = await api.post('/nfce/cancela', this.getCancelParams(note, 'Testando o sistema...')) const info = payload.data.split(',') if (info[2] === 'Evento registrado e vinculado a NF-e') { return { success: true, reference: info[0], msg: 'Nota Eletrônica cancelada' } } return { success: false, error: payload.data } } /** * @param {Note} note * @returns {Promise<String>} */ async getPrintableLink(note) { const api = this.getHttpRequest() const payload = await api.get('/nfce/imprime?' + this.getDownloadParams(note)) const info = payload.data if (info.startsWith('http://')) { return { success: true, pdf: info.replace('http://', 'https://') } } return { success: false, error: info } } /** * @param {Note} note * @returns {Promise<String>} */ async getDownloadLink(note) { return this.getPrintableLink(note) } } module.exports = Client