UNPKG

@alexssmusica/node-pdf-nfe

Version:

Modulo que auxilia na geração da Danfe NFe e NFCe.

88 lines (87 loc) 4.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFaturaDuplicata = getFaturaDuplicata; const date_fns_1 = require("date-fns"); const utils_1 = require("../../../../domain/use-cases/utils"); const default_1 = require("./default"); const linha_horizontal_1 = require("./linha-horizontal"); const linha_vertical_1 = require("./linha-vertical"); const secao_1 = require("./secao"); const BOXES_PER_ROW = 8; const BOX_HEIGHT = 27; const BOX_PADDING = 4; const BOX_GAP = 3; const BOX_RADIUS = 2; const BOX_LINE_HEIGHT = 7.5; function getFaturaDuplicata({ y, doc, ajusteX, ajusteY, margemDireita, margemEsquerda, margemTopo, larguraDoFormulario, cobr }) { if (cobr !== undefined && Object.keys(cobr).length > 0) { const baseY = y + 9; (0, secao_1.secao)({ doc, value: 'FATURA / DUPLICATA', x: 1.5, y: y + 0.9, largura: 0, ajusteX, ajusteY, margemEsquerda, margemTopo }); (0, linha_horizontal_1.linhaHorizontal)({ x1: 0, x2: 0, y: baseY, doc, ajusteX, ajusteY, margemDireita, margemEsquerda, margemTopo }); const availableWidth = larguraDoFormulario - BOX_PADDING * 2; const boxWidth = (availableWidth - (BOXES_PER_ROW - 1) * BOX_GAP) / BOXES_PER_ROW; let currentY = baseY + BOX_PADDING; let currentX = BOX_PADDING; let maxBottom = currentY; if (cobr.fat !== undefined) { const fatX = margemEsquerda + ajusteX + BOX_PADDING; const fatY = margemTopo + ajusteY + currentY; doc .font('normal') .fillColor(default_1.DEFAULT_NFE.corDoTitulo) .fontSize(7) .text(`Nº Fatura: ${cobr.fat.nFat} | Orig: ${(0, utils_1.formatNumber)(cobr.fat.vOrig, 2)} | Liq: ${(0, utils_1.formatNumber)(cobr.fat.vLiq, 2)}`, fatX, fatY, { width: larguraDoFormulario - BOX_PADDING * 2 }); currentY += 10; maxBottom = currentY; currentX = BOX_PADDING; } if (cobr.dup !== undefined) { doc.save(); cobr.dup.forEach((dup) => { const boxRealX = margemEsquerda + ajusteX + currentX; const boxRealY = margemTopo + ajusteY + currentY; doc.lineWidth(0.5).strokeColor(default_1.DEFAULT_NFE.corDoLayout).roundedRect(boxRealX, boxRealY, boxWidth, BOX_HEIGHT, BOX_RADIUS).stroke(); const textX = boxRealX + BOX_PADDING; const textWidth = boxWidth - BOX_PADDING * 2; const labelWidth = 22; const valueWidth = textWidth - labelWidth; const lineY = boxRealY + BOX_PADDING; doc.font('normal').fillColor(default_1.DEFAULT_NFE.corDoTitulo).fontSize(7).text('Num.', textX, lineY); doc.font('negrito').text(dup.nDup, textX + textWidth - valueWidth, lineY, { width: valueWidth, align: 'right' }); doc.font('normal').text('Venc.', textX, lineY + BOX_LINE_HEIGHT); doc.font('negrito').text((0, date_fns_1.format)((0, date_fns_1.parseISO)(dup.dVenc), 'dd/MM/yyyy'), textX + textWidth - valueWidth, lineY + BOX_LINE_HEIGHT, { width: valueWidth, align: 'right' }); doc.font('normal').text('Valor', textX, lineY + BOX_LINE_HEIGHT * 2); doc .font('negrito') .fontSize(6) .text(`R$ ${(0, utils_1.formatNumber)(dup.vDup, 2)}`, textX + textWidth - valueWidth, lineY + BOX_LINE_HEIGHT * 2, { width: valueWidth, align: 'right', height: BOX_LINE_HEIGHT, ellipsis: true }); doc.fontSize(7); const boxBottom = currentY + BOX_HEIGHT; if (boxBottom > maxBottom) maxBottom = boxBottom; currentX += boxWidth + BOX_GAP; if (currentX + boxWidth > larguraDoFormulario - BOX_PADDING) { currentX = BOX_PADDING; currentY = maxBottom + BOX_GAP; } }); doc.restore(); } const finalY = maxBottom + BOX_PADDING + 6; (0, linha_horizontal_1.linhaHorizontal)({ x1: 0, x2: 0, y: finalY, doc, ajusteX, ajusteY, margemDireita, margemEsquerda, margemTopo }); (0, linha_vertical_1.linhaVertical)({ y1: baseY, y2: finalY, x: 0, doc, ajusteX, ajusteY, margemEsquerda, margemTopo }); (0, linha_vertical_1.linhaVertical)({ y1: baseY, y2: finalY, x: larguraDoFormulario, doc, ajusteX, ajusteY, margemEsquerda, margemTopo }); doc.y = margemTopo + ajusteY + finalY; } return doc.y; }