facturajs icon indicating copy to clipboard operation
facturajs copied to clipboard

Obtener PDF

Open lghamie opened this issue 5 years ago • 17 comments

Tienen idea si hay algun endpoint que permita generar el PDF de la factura?

Saludos!

lghamie avatar Nov 27 '18 17:11 lghamie

AFAIK Afip no provee eso, tenes que disenarla y generarla vos. Si te sirve de algo, yo estoy generandolo a partir de html con pupeteer y usando esta fuente https://github.com/Holger-Will/2of5-font para el codigo de barras.

mbenedettini avatar Dec 04 '18 01:12 mbenedettini

Busqué lo mismo en su momento para guardarme algún comprobante pero no hay me dijeron en la AFIP. @mbenedettini para diseñar uno la factura tiene muchas vueltas en cuanto a normativa ? Capaz es una linda funcionalidad que le podemos agregar a la lib. Si tenes alguna info/código pasa!

Gracias

emilioastarita avatar Dec 04 '18 10:12 emilioastarita

Mil gracias!

lghamie avatar Dec 04 '18 12:12 lghamie

@emilioastarita no mucho, de todas maneras yo me basé en el diseño de la afip y sí es obligatorio el código de barras (https://www.afip.gob.ar/genericos/guiavirtual/consultas_detalle.aspx?id=129672). Tengo algo armado pero en este momento está super tightly coupled con LoopbackJS que es lo que uso en backend. Voy a ver si me hago algo de tiempo y armo una librería.

mbenedettini avatar Dec 04 '18 14:12 mbenedettini

Estoy laburando en esto. Un html (muy simple) que se renderice en PNG (no encontré fácil pasar de HTML a PDF, tampoco busqué mucho) incluyendo el QR obligatorio de la AFIP. ¡Novedades pronto!

tulsidas avatar Mar 26 '21 12:03 tulsidas

@tulsidas te paso el html2pdf que hice, es super viejo y probablemente hoy en día se pueda hacer más limpio con puppeteer https://gist.github.com/mbenedettini/e88b5d09a980944783f0705d248ae43a

mbenedettini avatar Mar 26 '21 13:03 mbenedettini

@mbenedettini joya, lo voy a pispear. Bajé un modulo npm que supuestamente hacía html-to-pdf usando puppeteer y no me funcionó, igual no le dediqué ni 5 minutos, por ahora estoy laburando en generar la factura bien, después convertirla a PDF, PNG o cualquier otro formato son detalles

tulsidas avatar Mar 26 '21 13:03 tulsidas

@tulsidas me olvidé, si tengo el circuito completo más nuevo. Este es otro snippet que incluye desde la generacion del html con barcode hasta el pdf con puppeteer https://gist.github.com/mbenedettini/59d51076e813f5bbb14e42cae4895455

mbenedettini avatar Mar 26 '21 16:03 mbenedettini

bueno ya tengo esto funcionando (por ahora sólo en el entorno de homologación), enchulo el código y mando pull request

tulsidas avatar Mar 28 '21 14:03 tulsidas

Buenas! Una actualización por el tema del código de barras, para el que no lo había visto ya. Ahora es obligatorio un QR, la info acá: https://www.afip.gob.ar/fe/qr.

hbjav avatar May 19 '21 20:05 hbjav

Yo tengo código que arma factura cheta con QR y toda la pompa, recién veo que el 28 de Marzo dije que iba a subir el código y nunca lo hice. Juro armar pull request pronto!

tulsidas avatar May 19 '21 22:05 tulsidas

incomprobable!! hasta que no lo veamos XD

emilioastarita avatar May 19 '21 22:05 emilioastarita

Hice un fork y cambié quichicientas cosas (mea culpa), por lo que veo 3 opciones:

  1. subo todo a mi fork así como está y vemos con tiempo de mergearlo, mientras tanto cada cual puede ver cómo lo hice
  2. mergeo todo lindo y lo dejo bien cheto, pero me va a llevar un buen rato
  3. subo sólo los archivos relacionados a la generación de la factura (no sé si aplica realmente porque debe haber dependencias con otros cambios)

Opiniones?

tulsidas avatar May 20 '21 13:05 tulsidas

como prefieras che y depende mucho de los tiempos de cada uno.

Para reintegrar acá debería ser 1 PR / 1 FEATURE así podemos hacer review porque al menos yo lo uso comercialmente en prod y necesito mantenerlo estable.

Pero también si te resulta más sencillo por la cantidad de cambios, hacer un fork y subirlo, tampoco hay problema. Ahi podemos mirar que features incorporaste y cuales tienen sentido para facturajs y luego se ve como podemos ir migrandolas por PR.

Obviamente todo esto con todo el tiempo del mundo que estamos todxs con mil cosas

slds

emilioastarita avatar May 20 '21 13:05 emilioastarita

Bueno ahí lo subí a mi fork, básicamente hice unos retoques estéticos porque soy un obse, agregué algunas interfaces porque amo los tipos, y el quid del asunto es RenderService.ts que genera la factura y factura.html que es el template html que se usa para generar el PNG.

factura.html tiene varias cosas con @@ que habría que cambiar (lo tenía hardcodeado) o bien parametrizar

Como nota de color hice este desarrollo/fork para la cooperadora de una escuela que tiene que emitir factura cada mes para cada alumno que paga la cuota y es un parto, de esta forma se automatiza, pienso compartirlo con otras cooperadoras una vez que esté más pulido, gracias por el código de base <3

Acepto todo tipo de comentarios, sugerencias y puteadas.

tulsidas avatar May 20 '21 18:05 tulsidas

Yo realmente creo que la generacion de la factura le escapa al proposito de esta libreria (que es proveer una api javascript contra el ws de la afip).

Problemas que veo:

  1. Hasta ahora en esta libreria, para los datos de una factura, la informacion va en una sola direccion: afip -> facturajs -> tu aplicacion. Si introducis la impresion tenes que fetchear la factura en tu sistema y pasarsela a la rutina de impresion, y si se te ocurrio guardar la factura de manera ligeramente distinta a como te la manda la afip vas a tener que reconvertir eso antes de mandarlo a imprimir (ejemplo clasico: manejar internamente estructuras de datos con nombres de atributos/columnas en ingles).
  2. El disenio de la factura: esta bien proveer un disenio base pero tiene que ser facil de customizar, si no realmente ya conviene arrancar algo propio desde 0 ya que de otra manera va a ser un dolor de cabeza grande.
  3. Si vas a usar algo basado en puppeteer en un entorno productivo con cierto trafico vas a tener problemas si no parametrizas bien la triada puppeteer + chrome (o chromium) + docker, por cuestiones de memoria y performance de chrome. Por esto es que yo prefiero usar puppeteer pelado y construir sobre el y eventualmente tener la posibilidad de tener un microservicio que se dedica exclusivamente a generar facturas.

Sorry por mi vision negativa, de todas maneras no deja de ser solo una opinion.

mbenedettini avatar May 24 '21 00:05 mbenedettini

coincido un poco con lo que dice Mariano, habría que buscarle la vuelta para que se pueda usar con flexibilidad. No sé si escapa al propósito de la librería, que para mí es que te solucione poder facturar y cumplir con los requisitos de la Afip. Si eso ahora incluye generar una factura, trataría que la librería lo aborde.

Voy a investigar un poco que opciones tenemos para esto.

Por otro lado ya que en este issue se habla de poco un todo, les cuento que estuve chusmeando wsdl-to-typescript que te genera toda la info de métodos en interfaces typescript del webservice. El output sale bastante bugueado por lo que vi, pero está interesante para poder automatizar la creación de métodos y ofrecer todo el abanico de WS que ofrece el servicio.

emilioastarita avatar Jun 12 '21 02:06 emilioastarita