reporte.py 2.72 KB
import xlsxwriter
import time
class Reporte():
    COLUMNA = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
    "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "Y", "Z")

    anchos = {"A": 12, "B": 12, "C" :12, "D": 12, "E": 12, "F": 12, 
    "G": 12, "H": 12 , "I": 12, "J": 12, "K": 12,"L": 12, "M": 12,
    "N": 12, "O": 12, "P": 12, "Q": 12, "R": 12, "S": 12, "T": 12,
    "U": 12, "V": 12, "Y": 12, "Z": 12}

    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'})
        mod = linea % 2
        if mod > 0:
            formato = self.Libro.add_format({'bg_color': '#ffe6ff'})
        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()