normativeJsonDanfe method
Gera uma representação normativa em formato JSON do DANFE.
Parâmetros:
danfe: ObjetoDanfecontendo os dados do documento fiscal.mostrarMoeda(opcional): Umboolque define se o símbolo da moeda será exibido. O valor padrão étrue.
Retorno:
- Uma
Stringcontendo o JSON gerado a partir dos dados do DANFE.
Implementation
@override
String normativeJsonDanfe(
Danfe? danfe, {
bool mostrarMoeda = true,
String customFont = 'RobotoMonoRegular',
}) {
String moeda = (mostrarMoeda == true) ? 'R\$' : '';
fontName = customFont;
final helper = JsonPrinterHelper(fontName: customFont);
List<Map> danfeJson = [];
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: true,
fontSize: 18,
italic: false,
content: danfe?.dados?.emit?.xFant ?? (danfe?.dados?.emit?.xNome ?? ''),
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: false,
fontSize: 14,
italic: false,
content:
'CNPJ - ${DanfeUtils.formatCNPJ(danfe?.dados?.emit?.cnpj ?? '')}',
),
);
final String uf = danfe?.dados?.emit?.enderEmit?.uF == null
? ''
: ' - ${danfe!.dados!.emit!.enderEmit!.uF}';
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: false,
fontSize: 14,
italic: false,
content: DanfeUtils.removeAcentos(
'${danfe?.dados?.emit?.enderEmit?.xLgr ?? ''},${danfe?.dados?.emit?.enderEmit?.nro ?? ''} ${danfe?.dados?.emit?.enderEmit?.xBairro ?? ''}$uf',
),
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: false,
fontSize: 14,
italic: false,
content:
'CEP: ${DanfeUtils.formatCep(danfe?.dados?.emit?.enderEmit?.cEP ?? '')}',
),
);
danfeJson.add(helper.divider());
if ((danfe?.tipo ?? TipoDocumento.CFe) == TipoDocumento.CFe) {
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: true,
fontSize: 14,
italic: false,
content: ('Nota Fiscal Eletronica - SAT '),
),
);
} else if ((danfe?.tipo ?? TipoDocumento.NFCe) == TipoDocumento.NFCe) {
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: true,
fontSize: 14,
italic: false,
content: ('Nota Fiscal Eletronica - NFC-E '),
),
);
} else {
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: true,
fontSize: 14,
italic: false,
content: ('Nota Fiscal Eletronica - NFe '),
),
);
}
danfeJson.add(
helper.prepareLine(
aligment: 0,
bold: false,
fontSize: 14,
italic: false,
content:
"CPF/CNPJ do consumidor: ${danfe?.dados?.dest?.cpf ?? danfe?.dados?.dest?.cnpj ?? ''}",
),
);
if (danfe?.dados?.dest?.xNome != '' && danfe?.dados?.dest?.xNome != null) {
danfeJson.add(
helper.prepareLine(
aligment: 0,
bold: false,
fontSize: 14,
italic: false,
content: "Nome: ${danfe?.dados?.dest?.xNome ?? ''}",
),
);
}
danfeJson.add(
helper.prepareLine(
aligment: 0,
bold: false,
fontSize: 14,
italic: false,
content: ("Nota: ${danfe?.dados?.ide?.nNF ?? ''}"),
),
);
danfeJson.add(
helper.prepareLine(
aligment: 0,
bold: false,
fontSize: 14,
italic: false,
content:
('Data: ${DanfeUtils.formatDate(danfe?.dados?.ide?.dataEmissao ?? '')}'),
),
);
if (danfe?.dados?.ide?.dhSaiEnt != null) {
danfeJson.add(
helper.prepareLine(
aligment: 0,
bold: false,
fontSize: 14,
italic: false,
content:
('Data E/S: ${DanfeUtils.formatDate(danfe?.dados?.ide?.dhSaiEnt ?? '')}'),
),
);
}
danfeJson.add(helper.divider());
danfeJson.add(
helper.createColumnItems(paperSize: paperSize, det: danfe?.dados?.det),
);
danfeJson.add(helper.divider());
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'QTD de itens', 'alignment': 0},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatNumber(
danfe?.dados?.det?.length.toString() ?? '',
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'SUBTOTAL', 'alignment': 0, 'bold': true},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe?.dados?.total?.valorTotal ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
'bold': true,
},
paperSize: paperSize,
),
],
),
);
if ((danfe?.dados?.total?.valorFrete ?? '0.00') != '0.00') {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'FRETE', 'alignment': 0},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe?.dados?.total?.valorFrete ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
}
if ((danfe?.dados?.total?.desconto ?? '0.00') != '0.00') {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'Desconto', 'alignment': 0},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe?.dados?.total?.desconto ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
}
if ((danfe?.dados?.total?.acrescimo ?? '0.00') != '0.00') {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'Acréscimo', 'alignment': 0},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe?.dados?.total?.acrescimo ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
}
if ((danfe?.dados?.pgto?.vTroco ?? '0.00') != '0.00') {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'Troco', 'alignment': 0},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe?.dados?.pgto?.vTroco ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
}
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'Total', 'alignment': 0, 'bold': true},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe?.dados?.total?.valorPago ?? '0.00',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
'bold': true,
},
paperSize: paperSize,
),
],
),
);
danfeJson.add(helper.divider());
if (danfe?.dados?.pgto != null) {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {
'text': 'Formas de pagamento',
'alignment': 0,
'bold': true,
},
paperSize: paperSize,
),
helper.createRow(
row: {'text': 'Valor pago', 'alignment': 2, 'bold': true},
paperSize: paperSize,
),
],
),
);
for (MP pagamento in danfe!.dados!.pgto!.formas!) {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {
'text': DanfeUtils.removeAcentos(pagamento.cMP ?? ''),
'alignment': 0,
},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
pagamento.vMP ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
}
danfeJson.add(helper.divider());
}
if (danfe?.dados?.total?.valotTotalTributos != null) {
if (danfe!.dados!.total!.valotTotalTributos != '0.00') {
danfeJson.add(
helper.createColumn(
paperSize: paperSize,
rows: [
helper.createRow(
row: {'text': 'Tributos totais incidentes:', 'alignment': 0},
paperSize: paperSize,
),
helper.createRow(
row: {
'text': DanfeUtils.formatMoneyMilhar(
danfe.dados!.total!.valotTotalTributos ?? '',
modeda: 'pt_BR',
simbolo: moeda,
),
'alignment': 2,
},
paperSize: paperSize,
),
],
),
);
danfeJson.add(helper.prepareJump(1));
}
}
if (danfe?.dados?.transp != null) {
if (danfe?.dados?.transp?.transporta?.xNome != null) {
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: true,
content: 'TRANSPORTADORA',
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content: DanfeUtils.removeAcentos(
danfe?.dados?.transp?.transporta?.xNome ?? '',
),
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content: DanfeUtils.removeAcentos(
danfe?.dados?.transp?.transporta?.xEnder ?? '',
),
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content: DanfeUtils.removeAcentos(
'${danfe?.dados?.transp?.transporta?.xMun ?? ''} ${danfe?.dados?.transp?.transporta?.uf ?? ''}',
),
),
);
danfeJson.add(helper.divider());
}
}
if (danfe?.dados?.cobr != null) {
danfeJson.add(
helper.prepareLine(
aligment: 1,
bold: true,
content: 'COBRANCA',
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content: "Fatura: ${danfe?.dados?.cobr?.fat?.nFat ?? ''}",
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content:
"Valor Original: ${DanfeUtils.formatMoneyMilhar(danfe?.dados?.cobr?.fat?.vOrig ?? '', modeda: 'pt_BR', simbolo: moeda)}",
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content:
"Valor Liquido: ${DanfeUtils.formatMoneyMilhar(danfe?.dados?.cobr?.fat?.vLiq ?? '', modeda: 'pt_BR', simbolo: moeda)}",
),
);
danfeJson.add(helper.divider());
for (var duplicata in danfe?.dados?.cobr?.dup ?? []) {
danfeJson.add(
helper.prepareLine(
aligment: 1,
content: "Duplicata: ${duplicata.nDup ?? ''}",
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content:
"Vencimento: ${DanfeUtils.formatDate(duplicata.dVenc ?? '', dateOnly: true)}",
),
);
danfeJson.add(
helper.prepareLine(
aligment: 1,
content:
"Valor: ${DanfeUtils.formatMoneyMilhar(duplicata.vDup ?? '', modeda: 'pt_BR', simbolo: moeda)}",
),
);
danfeJson.add(helper.divider());
}
}
danfeJson.add(
helper.prepareLine(content: 'CHAVE DE ACESSO DA NOTA FISCAL'),
);
danfeJson.add(
helper.prepareLine(
fontSize: 14,
bold: true,
content: DanfeUtils.splitByLength(
danfe?.dados?.chaveNota ?? '',
4,
' ',
),
),
);
danfeJson.add(
helper.prepareQrcode(
content: danfe?.qrcodePrinter ?? '',
size: 160,
level: 'L',
),
);
if (danfe?.dados?.ide?.serie != null) {
final serie = (danfe?.dados?.ide?.serie ?? '0').padLeft(3, '0');
final nnf = (danfe?.dados?.ide?.nNF ?? '0').padLeft(9, '0');
danfeJson.add(helper.prepareLine(content: 'Nota $nnf Serie $serie '));
}
if (danfe?.dados?.ide?.nserieSAT != null) {
final serie = (danfe?.dados?.ide?.nserieSAT ?? '0').padLeft(3, '0');
final nnf = (danfe?.dados?.ide?.nNF ?? '0').padLeft(9, '0');
danfeJson.add(helper.prepareLine(content: 'Nota $nnf Serie $serie '));
}
if (danfe?.protNFe != null) {
danfeJson.add(
helper.prepareLine(
content: 'Protocolo: ${danfe?.protNFe?.infProt?.nProt ?? ''} ',
),
);
DateTime dateTime = DateTime.parse(
danfe?.protNFe?.infProt?.dhRecbto ?? DateTime.now().toIso8601String(),
);
String formattedDate =
"${dateTime.day.toString().padLeft(2, '0')}/${dateTime.month.toString().padLeft(2, '0')}/${dateTime.year} ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}:${dateTime.second.toString().padLeft(2, '0')}";
danfeJson.add(helper.prepareLine(content: 'Data: $formattedDate '));
}
if (danfe?.dados?.infAdic?.infCpl != null) {
danfeJson.add(
helper.prepareLine(
content: danfe!.dados!.infAdic!.infCpl ?? '',
fontSize: 14,
),
);
}
return json.encode(danfeJson);
}