reporte.py 2.5 KB
from Libmod import  funciones
import xlsxwriter
import time
class Reporte():
    COLUMNA = funciones.COLUMNA()
    anchos = funciones.ColumnaTamaño()

    def __init__(self):
        self.fecha = time.strftime("%y%m%d")
        self.archivo = "tmp/reporte"+ self.fecha + ".xlsx"
        self.QUERY = []
        self.Encabesado = []
 
    def NombreArchivo(self, nombre):
        self.archivo = "tmp/"+ nombre + self.fecha + ".xlsx"

    def __generarLibro__(self):
        self.Libro = xlsxwriter.Workbook(self.archivo)
        self.bold = self.Libro.add_format({'bold': True})
        self.Hoja1 = self.Libro.add_worksheet("Totalizado")

    def __escribir_linea__(self, datos, linea):
        formato = self.Libro.add_format({'bg_color': '#e6ffff'})
        formato.set_border()
        mod = linea % 2
        if mod > 0:
            formato = self.Libro.add_format({'bg_color': '#ffe6ff'})
            formato.set_border()
        n = 0
        for dato in datos:
            celda = Reporte.COLUMNA[n] + str(linea)
            self.Hoja1.write(celda, str(dato), formato)
            self.__calculoAncho__(n, dato)
            n = n + 1
        self.ancho = Reporte.COLUMNA[n]

    def __calculoAncho__(self, n, dato):
        """incremento el valor de una columna en funcion de la cantidad de letras"""
        letras = len(str(dato))
        lmaximo = Reporte.anchos[Reporte.COLUMNA[n]]
        if letras > lmaximo:
            #print(Reporte.COLUMNA[n], letras)
            Reporte.anchos.update({Reporte.COLUMNA[n]: letras})

    def __escribir_global(self):
        n = 2
        for query in self.QUERY:
            self.__escribir_linea__(query, n)
            n = n + 1
        self.alto = str(n)

    def __ajuste__(self):
        #Pn = self.ancho + self.alto
        #print(Pn)
        for columna in Reporte.anchos.keys():
            a = Reporte.anchos[columna]
            #print(columna, a)
            self.Hoja1.set_column(columna+":"+columna, a)## esa desde hasta A:A

    def __encabesado__(self):
        #print(self.Encabesado)
        if self.Encabesado == []:
            #print("me salto los titulos")
            return()
        n = 0
        for celda in self.Encabesado:
            c = Reporte.COLUMNA[n] + "1"
            self.Hoja1.write(c, str(celda))
            n = n + 1

    def ArmarLibro(self, estado="1"):
        self.__generarLibro__()
        self.__escribir_global()
        self.__encabesado__()
        self.__ajuste__()
        self.fin()
        return(self.archivo)

    def fin(self):
        self.Libro.close()