danfe
Version:
Módulo node.js para gerar DANFEs em .pdf
495 lines (383 loc) • 13.8 kB
JavaScript
'use strict';
var gammautils = require('gammautils'),
eDataValida = gammautils.date.isValidDate,
ie = require('inscricaoestadual'),
brasil = require('brasil'),
formatarDinheiro = brasil.formatacoes.dinheiro,
formatarData = brasil.formatacoes.data,
formatarHora = brasil.formatacoes.hora,
removerMascara = brasil.formatacoes.removerMascara,
formatarSerie = brasil.nfe.formatarSerie,
formatarNumero = brasil.nfe.formatarNumero,
formatarChaveDeAcesso = brasil.nfe.formatarChaveDeAcesso,
eChaveDeAcesso = brasil.nfe.validarChaveDeAcesso,
Impostos = require('./impostos'),
Emitente = require('./emitente'),
Destinatario = require('./destinatario'),
Protocolo = require('./protocolo'),
Transportador = require('./transportador'),
Volumes = require('./volumes');
var Danfe = (function() {
function Danfe() {
this.comOrientacao('retrato');
this.comEmitente(new Emitente());
this.comDestinatario(new Destinatario());
this.comTransportador(new Transportador());
this.comProtocolo(new Protocolo());
this.comImpostos(new Impostos());
this.comVolumes(new Volumes());
this._itens = [];
}
Danfe.prototype.getProtocolo = function() {
return this._protocolo;
};
Danfe.prototype.comProtocolo = function(_protocolo) {
this._protocolo = _protocolo;
return this;
};
Danfe.prototype.getFormularioDeSeguranca = function() {
return this._formularioDeSeguranca;
};
Danfe.prototype.comFormularioDeSeguranca = function(_formularioDeSeguranca) {
if(_formularioDeSeguranca.getJustificativa().length < 15) {
throw new Error([
'A justificativa da entrada em contingência deve conter 15 caracteres ou mais'
].join(''));
}
_formularioDeSeguranca.comDanfe(this);
this._formularioDeSeguranca = _formularioDeSeguranca;
return this;
};
Danfe.prototype.getEmitente = function() {
return this._emitente;
};
Danfe.prototype.comEmitente = function(_emitente) {
this._emitente = _emitente;
return this;
};
Danfe.prototype.getDestinatario = function() {
return this._destinatario;
};
Danfe.prototype.comDestinatario = function(_destinatario) {
this._destinatario = _destinatario;
return this;
};
Danfe.prototype.getTransportador = function() {
return this._transportador;
};
Danfe.prototype.comTransportador = function(_transportador) {
this._transportador = _transportador;
return this;
};
Danfe.prototype.getImpostos = function() {
return this._impostos;
};
Danfe.prototype.comImpostos = function(_impostos) {
this._impostos = _impostos;
return this;
};
Danfe.prototype.adicionarItem = function(_item) {
this._itens.push(_item);
return this;
};
Danfe.prototype.getFatura = function() {
return this._fatura;
};
Danfe.prototype.comFatura = function(_fatura) {
this._fatura = _fatura;
return this;
};
Danfe.prototype.getDuplicatas = function() {
return this._duplicatas || [];
};
Danfe.prototype.comDuplicatas = function(_duplicatas) {
this._duplicatas = _duplicatas;
return this;
};
Danfe.prototype.adicionarDuplicata = function(duplicata) {
if(!this._duplicatas) {
this._duplicatas = [];
}
this._duplicatas.push(duplicata);
return this;
};
Danfe.prototype.getItens = function() {
return this._itens;
};
Danfe.prototype.comItens = function(_itens) {
this._itens = _itens;
return this;
};
Danfe.prototype.getInformacoesComplementares = function() {
return this._informacoesComplementares || '';
};
Danfe.prototype.comInformacoesComplementares = function(_informacoesComplementares) {
if(!_informacoesComplementares) {
return this;
}
this._informacoesComplementares = _informacoesComplementares.toString();
return this;
};
Danfe.prototype.getValorTotalDaNota = function() {
return this._valorTotalDaNota || 0;
};
Danfe.prototype.getValorTotalDaNotaFormatado = function(simbolo) {
return formatarDinheiro(this.getValorTotalDaNota(), {
simbolo: (simbolo === false ? '' : 'R$ ')
});
};
Danfe.prototype.comValorTotalDaNota = function(_valorTotalDaNota) {
this._valorTotalDaNota = parseFloat(_valorTotalDaNota);
return this;
};
Danfe.prototype.getValorTotalDosProdutos = function() {
return this._valorTotalDosProdutos || 0;
};
Danfe.prototype.getValorTotalDosProdutosFormatado = function() {
return formatarDinheiro(this.getValorTotalDosProdutos(), {
simbolo: ''
});
};
Danfe.prototype.comValorTotalDosProdutos = function(_valorTotalDosProdutos) {
this._valorTotalDosProdutos = parseFloat(_valorTotalDosProdutos);
return this;
};
Danfe.prototype.getValorTotalDosServicos = function() {
return this._valorTotalDosServicos || 0;
};
Danfe.prototype.getValorTotalDosServicosFormatado = function() {
return formatarDinheiro(this.getValorTotalDosServicos(), {
simbolo: ''
});
};
Danfe.prototype.comValorTotalDosServicos = function(_valorTotalDosServicos) {
this._valorTotalDosServicos = parseFloat(_valorTotalDosServicos);
return this;
};
Danfe.prototype.getOrientacao = function() {
return this._orientacao;
};
Danfe.prototype.comOrientacao = function(_orientacao) {
if(['retrato', 'paisagem'].indexOf(_orientacao) === -1) {
throw new Error('Os valores permitidos são as strings "retrato" e "paisagem"');
}
this._orientacao = _orientacao;
return this;
};
Danfe.prototype.getInscricaoEstadualDoSubstitutoTributario = function() {
return this._inscricaoEstadualDoSubstitutoTributario || '';
};
Danfe.prototype.comInscricaoEstadualDoSubstitutoTributario = function(_inscricaoEstadualDoSubstitutoTributario) {
if(!ie(_inscricaoEstadualDoSubstitutoTributario)) {
throw new Error('Não é uma inscrição estadual válida');
}
this._inscricaoEstadualDoSubstitutoTributario = removerMascara(_inscricaoEstadualDoSubstitutoTributario);
return this;
};
Danfe.prototype.getValorDoFrete = function() {
return this._valorDoFrete || 0;
};
Danfe.prototype.getValorDoFreteFormatado = function() {
return formatarDinheiro(this.getValorDoFrete(), {
simbolo: ''
});
};
Danfe.prototype.comValorDoFrete = function(_valorDoFrete) {
this._valorDoFrete = _valorDoFrete;
return this;
};
Danfe.prototype.getValorDoSeguro = function() {
return this._valorDoSeguro || 0;
};
Danfe.prototype.getValorDoSeguroFormatado = function() {
return formatarDinheiro(this.getValorDoSeguro(), {
simbolo: ''
});
};
Danfe.prototype.comValorDoSeguro = function(_valorDoSeguro) {
this._valorDoSeguro = _valorDoSeguro;
return this;
};
Danfe.prototype.getDesconto = function() {
return this._desconto || 0;
};
Danfe.prototype.getDescontoFormatado = function() {
return formatarDinheiro(this.getDesconto(), {
simbolo: ''
});
};
Danfe.prototype.comDesconto = function(_desconto) {
this._desconto = _desconto;
return this;
};
Danfe.prototype.getOutrasDespesas = function() {
return this._outrasDespesas || 0;
};
Danfe.prototype.getOutrasDespesasFormatado = function() {
return formatarDinheiro(this.getOutrasDespesas(), {
simbolo: ''
});
};
Danfe.prototype.comOutrasDespesas = function(_outrasDespesas) {
this._outrasDespesas = _outrasDespesas;
return this;
};
Danfe.prototype.getTipo = function() {
return this._tipo;
};
Danfe.prototype.getTipoFormatado = function() {
return {
entrada: '0',
saida: '1'
}[this.getTipo()] || '';
};
Danfe.prototype.comTipo = function(_tipo) {
if(['entrada', 'saida'].indexOf(_tipo) === -1) {
throw new Error('Os valores permitidos são as strings "entrada" e "saida"');
}
this._tipo = _tipo;
return this;
};
Danfe.prototype.getNumero = function() {
return this._numero;
};
Danfe.prototype.getNumeroFormatado = function() {
if(this.getNumero()) {
return 'Nº. ' + formatarNumero(this.getNumero());
}
return '';
};
Danfe.prototype.comNumero = function(_numero) {
_numero = parseInt(_numero, 10);
if(isNaN(_numero)) {
throw new Error('Não é um número válido. Valor encontrado: ' + _numero);
}
if(_numero < 1 || _numero > 999999999) {
throw new Error('O número deve ser um valor entre 1 e 999.999.999');
}
this._numero = _numero;
return this;
};
Danfe.prototype.getSerie = function() {
return this._serie;
};
Danfe.prototype.getSerieFormatada = function() {
if(this.getSerie()) {
return 'SÉRIE ' + formatarSerie(this.getSerie());
}
return '';
};
Danfe.prototype.comSerie = function(_serie) {
_serie = parseInt(_serie, 10);
if(isNaN(_serie)) {
throw new Error('Não é um número válido. Valor encontrado: ' + _serie);
}
if(_serie < 1 || _serie > 999) {
throw new Error('A série deve ser um valor entre 1 e 999');
}
this._serie = _serie;
return this;
};
Danfe.prototype.getChaveDeAcesso = function() {
return this._chaveDeAcesso || '';
};
Danfe.prototype.getChaveDeAcessoFormatada = function() {
return formatarChaveDeAcesso(this.getChaveDeAcesso());
};
Danfe.prototype.comChaveDeAcesso = function(_chaveDeAcesso) {
if(!eChaveDeAcesso(_chaveDeAcesso)) {
throw new Error('A chave de acesso é inválida');
}
this._chaveDeAcesso = removerMascara(_chaveDeAcesso);
return this;
};
Danfe.prototype.getDataDaEmissao = function() {
return this._dataDaEmissao;
};
Danfe.prototype.getDataDaEmissaoFormatada = function() {
if(this.getDataDaEmissao()) {
return formatarData(this.getDataDaEmissao());
}
return '';
};
Danfe.prototype.comDataDaEmissao = function(_dataDaEmissao) {
if(typeof _dataDaEmissao === 'string') {
_dataDaEmissao = new Date(_dataDaEmissao);
}
if(!eDataValida(_dataDaEmissao)) {
throw new Error('Não é uma data válida');
}
this._dataDaEmissao = _dataDaEmissao;
return this;
};
Danfe.prototype.getDataDaEntradaOuSaida = function() {
return this._dataDaEntradaOuSaida;
};
Danfe.prototype.getDataDaEntradaOuSaidaFormatada = function() {
if(this.getDataDaEntradaOuSaida()) {
return formatarData(this.getDataDaEntradaOuSaida());
}
return '';
};
Danfe.prototype.getHorarioDaEntradaOuSaida = function() {
if(this.getDataDaEntradaOuSaida()) {
return formatarHora(this.getDataDaEntradaOuSaida());
}
return '';
};
Danfe.prototype.comDataDaEntradaOuSaida = function(_dataDaEntradaOuSaida) {
if(typeof _dataDaEntradaOuSaida === 'string') {
_dataDaEntradaOuSaida = new Date(_dataDaEntradaOuSaida);
}
if(!eDataValida(_dataDaEntradaOuSaida)) {
throw new Error('Não é uma data válida');
}
this._dataDaEntradaOuSaida = _dataDaEntradaOuSaida;
return this;
};
Danfe.prototype.getVolumes = function() {
return this._volumes;
};
Danfe.prototype.comVolumes = function(_volumes) {
this._volumes = _volumes;
return this;
};
Danfe.prototype.getModalidadeDoFrete = function() {
return this._modalidadeDoFrete;
};
Danfe.prototype.comModalidadeDoFrete = function(_modalidadeDoFrete) {
if([
'semFrete',
'porContaDoEmitente',
'porContaDoDestinatarioRemetente',
'porContaDeTerceiros'
].indexOf(_modalidadeDoFrete) === -1) {
throw new Error([
'Os valores permitidos são as strings',
'"semFrete",',
'"porContaDoEmitente",',
'"porContaDoDestinatarioRemetente",',
'"porContaDeTerceiros"',
].join(' '));
}
this._modalidadeDoFrete = _modalidadeDoFrete;
return this;
};
Danfe.prototype.getModalidadeDoFreteFormatada = function() {
return {
semFrete: '(9) Sem Frete',
porContaDoEmitente: '(0) Emitente',
porContaDoDestinatarioRemetente: '(1) Dest/Rem',
porContaDeTerceiros: '(2) Terceiros'
}[this.getModalidadeDoFrete()] || '';
};
Danfe.prototype.getNaturezaDaOperacao = function() {
return this._naturezaDaOperacao || '';
};
Danfe.prototype.comNaturezaDaOperacao = function(_naturezaDaOperacao) {
this._naturezaDaOperacao = _naturezaDaOperacao;
return this;
};
return Danfe;
})();
module.exports = Danfe;