tecnospeed-nfe
Version:
Emit NFe through TecnoSpeed API
127 lines (102 loc) • 2.84 kB
JavaScript
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