Este post surge de la necesidad de poder generar facturas fácilmente recogiendo datos de alumnos que hacen pagos mensuales (pueden ser variables), basándonos en un modelo de factura que incluye la información de la “empresa”.
En este modelo necesitaremos reflejar un monto y de ese monto se calculará el IVA, por lo que el total con el IVA, dependerá del monto que pongamos. Entonces, utilizaremos un modelo en Excel para así poder utilizar fórmulas.

Y finalmente lo que guardarremos es la factura en formato pdf.

Intro

Para poder trabajar, tenemos que instalar las librerías: Aspose.Cells y EPPlus.

nugets

Necesitaremos:

  • Un IActionResult en nuestro controlador AlumnosController
carpetas1
funcion1
  • La vista correspondiente, en la que estará nuestro formulario que recogerá los datos del alumno para la factura
carpetas2

Como se puede apreciar en las imágenes anteriores, tendremos un controlador y una vista:

*en este caso he creado dos helpers que nos ayudarán a tener el código más organizado.

  1. HelperPathProvider para sistema de ficheros.
  2. HelperExcelToPdf para convertir.
carpetas3
  • Si usamos base de datos, necesitaremos un método en el repositorio para guardar la factura en sql:
carpetas4
funcion2
  • Dentro de wwwroot tendremos las carpetas y archivos que necesitemos.
    En mi caso:
carpetas5

Ahora voy a explicaros más detalladamente lo que hacemos en cada componente:

HelperPathProvider

Este helper nos va a ser útil para poder obtener la ruta de archivos que utilizaremos. Necesita dos parámetros: el nombre del archivo y el tipo de carpeta donde se encuentra.

En primer lugar, el tipo de carpeta se especifica a través del enum «Folders» que se pasa como un parámetro al método.

helperpath1

Utilizamos IWebHostEnvironment para acceder al directorio raíz de la aplicación en nuestro servidor.

helperpath2

Con el método MapPath combinamos el directorio raíz de la aplicación con la carpeta y el nombre del archivo para obtener la ruta completa del archivo en el servidor.

*Este método también realiza la conversión de nombres de carpeta de la aplicación a nombres de carpeta del sistema de archivos para que la ruta sea correcta.

GenerarFactura

Dentro de nuestro controlador, AlumnosController, tenemos este método, que genera facturas en formato Excel y las convierte a PDF.

generarfact1

Necesitaremos establecer el contexto de licencia de ExcelPackage (EPPlus) a «Comercial» para poder trabajar con este nuget.

generarfact2

En este caso como vamos a utilizar una plantilla de factura, cogemos la ruta del archivo Excel.
Como os enseñaba antes, nuestro HelperPathProvider para administrar ficheros, nos facilita mucho esta parte.

generarfact3

En la hoja de trabajo del Excel del modelo de factura, añadimos los datos en las celdas correspondientes.

generarfact4

Se realiza el cálculo de todas las fórmulas y se actualizan los valores de las celdas.

generarfact5

Guardamos el archivo Excel en nuestra carpeta facturas con un nombre único basado en el nombre del alumno y el código de factura, que generamos automáticamente desde nuestra función InsertFactAsync en el repositorio que os enseñaré más adelante.

generarfact6

Utilizamos el helperFact para convertir nuestro Excel a formato pdf, pasando las rutas de los archivos. Más abajo os dejo el contenido de este helper.

generarfact7

Por último, se abre el archivo PDF en nuestro navegador y redirigimos a Index.

generarfact8

InsertFactAsync

insertfact1

Nos situamos en nuestro repositorio y desde esta función, devolveremos al controller GenerarFactura, el código único de la factura para guardar los ficheros.

También os dejo por aquí el procedimiento almacenado en sql:

SP_INSERT_FACTURA

insertfact2

HelperExcelToPdf

Este método utiliza la biblioteca de Aspose.Cells para para cargar el archivo de Excel en un objeto Workbook y luego guardar el archivo en formato PDF en la ubicación especificada.

helperpdf

Factura.cshtml

view1

En la vista, simplemente, tendremos un formulario que al hacer submit nos lleva su controlador y a la acción de generar factura.

view2
view3

Aquí podéis ver algunos de los campos que recogemos del formulario.

Autora: Sara Álvarez López
Curso: Desarrollo Web Full Stack + MultiCloud con Azure y AWS
Centro: Tajamar
Año académico: 2022-2023
GitHub: https://github.com/Saraalvarex/ProyectoERP.git
LinkedIn: https://www.linkedin.com/in/saraalvarezlopez

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.