Ejemplo n.º 1
0
def genera_asistencia_empleado(datos, datos_tabla):
    ubicacion_archivo = dialogo_guardar("Asistencias")

    if ubicacion_archivo is not None:
        # Si no tiene la terminación .pdf se le agrega
        if ubicacion_archivo[-4:].lower() != ".pdf":
            ubicacion_archivo += ".pdf"

        story = []
        cabecera = cabecera_style()
        texto = tabla_celda_just_izquierdo()
        titulo = tabla_celda_just_derecho()

        parrafo = Par("Registro de Asistencias", cabecera)
        story.append(parrafo)
        story.append(Spacer(0, 20))

        # Generar encabezado
        tabla = Table([
            [Par("<b>Empleado:</b>", titulo), Par(datos[0], texto)],
            [Par("<b>Nro. C.I.:</b>", titulo), Par(datos[1], texto)],
            [Par("<b>Nro. Contrato:</b>", titulo), Par(datos[2], texto)],
            [Par("<b>Cargo:</b>", titulo), Par(datos[3], texto)]
        ], [100, 300])
        tabla.setStyle([
            ('ALIGN', (0, 0), (0, -1), 'RIGHT'),  # Alineación de la Primera Columna
            ('ALIGN', (1, 1), (-1, -1), 'LEFT'),  # Alineación de Otras Columnas
            ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),  # Alineación Vertical de la Tabla
            ('TOPPADDING', (0, 0), (-1, -1), 1),  # Espacio Arriba
            ('BOTTOMPADDING', (0, 0), (-1, -1), 3),  # Espacio Abajo
            ('LEFTPADDING', (0, 0), (-1, -1), 3),  # Espacio a la Izquierda
            ('RIGHTPADDING', (0, 0), (-1, -1), 3),  # Espacio a la Derecha
        ])
        story.append(tabla)
        story.append(Spacer(0, 20))

        # Generar Tabla de Asistencias
        tabla = Table(datos_tabla, [125, 75, 50, 175, 75])
        tabla = tabla_style(tabla)
        story.append(tabla)

        doc = SimpleDocTemplate(
            ubicacion_archivo,
            pagesize=A4,  # Tamaño de Página (landscape(A4) hoja horizontal)
            leftMargin=3 * cm,  # Margen Izquierdo
            rightMargin=3 * cm,  # Margen Derecho
            topMargin=2.5 * cm,  # Margen Superior
            bottomMargin=2.5 * cm,  # Margen Inferior
            allowSplitting=1,
            title="Registro de Asistencias",
            author="Sistema Distribuidora"
        )

        try:  # Generar Archivo
            doc.build(story)
            popen(ubicacion_archivo)
        except PermissionError as e:
            error_permiso_archivo(str(e))
    def preparar_pdf(self, grilla):
        datos = grilla.get_model()
        cant = len(datos)

        ubicacion_archivo = dialogo_guardar("Notas de Débito por Ventas")

        if ubicacion_archivo is not None:
            # Si no tiene la terminación .pdf se le agrega
            if ubicacion_archivo[-4:].lower() != ".pdf":
                ubicacion_archivo += ".pdf"

            story = []
            cabecera = cabecera_style()
            parrafo = parrafo_bodytext()
            head = tabla_celda_titulo()
            body_ce = tabla_celda_centrado()
            body_iz = tabla_celda_just_izquierdo()
            body_de = tabla_celda_just_derecho()

            story.append(Par("Notas de Débito por Ventas", cabecera))
            story.append(Spacer(0, 20))

            if self.obj("chk_01").get_active():  # Nro. de Timbrado
                story.append(
                    Par(
                        "Notas de Débito por el Timbrado Nro. <b>" +
                        self.obj("txt_timb").get_text() + "</b>, del " +
                        "Establecimiento Nro. <b>" +
                        self.obj("txt_estab").get_text() + "</b>" +
                        " y la Caja Nro. <b>" +
                        self.obj("txt_caja").get_text() + "</b>", parrafo))

            if self.obj("chk_02").get_active():  # Nro. de Nota de Debito
                story.append(
                    Par(
                        "Números de Nota de Débito entre <b>" +
                        str(self.obj("txt_nro_ini").get_value_as_int()) +
                        "</b> y <b>" +
                        str(self.obj("txt_nro_fin").get_value_as_int()) +
                        "</b>", parrafo))

            if self.obj("chk_03").get_active():  # Cliente
                story.append(
                    Par(
                        "Notas de Débito del Cliente <b>" +
                        self.obj("txt_cliente_02").get_text() + "</b>",
                        parrafo))

            if self.obj("chk_04").get_active():  # Vendedor
                story.append(
                    Par(
                        "Notas de Débito del Vendedor <b>" +
                        self.obj("txt_vendedor_02").get_text() + "</b>",
                        parrafo))

            if self.obj("chk_05").get_active():  # Fecha
                story.append(
                    Par(
                        "Notas de Débito expedidas entre el " + "<b>" +
                        cadena_fecha(self.fecha_ini) + "</b> y el " + "<b>" +
                        cadena_fecha(self.fecha_fin) + "</b>", parrafo))

            if self.obj("chk_06").get_active():  # Total
                if self.idTotal == 1:  # Entre
                    tipo, segundo = "entre", " y <b>" + \
                    str(self.obj("txt_total_fin").get_value()) + "</b>"
                elif self.idTotal == 2:  # Mayor que
                    tipo, segundo = "mayor que", ""
                elif self.idTotal == 3:  # Mayor o igual que
                    tipo, segundo = "mayor o igual que", ""
                elif self.idTotal == 4:  # Menor que
                    tipo, segundo = "menor que", ""
                elif self.idTotal == 5:  # Menor o igual que
                    tipo, segundo = "menor o igual que", ""
                story.append(
                    Par(
                        "Notas de Débito expedidas por un Monto " + tipo +
                        " <b>" + str(self.obj("txt_total_ini").get_value()) +
                        " </b>" + segundo, parrafo))

            story.append(Spacer(0, 20))

            lista = [[
                Par("Nro. Timbrado", head),
                Par("Nro. Nota de Débito", head),
                Par("Fecha de Expedición", head),
                Par("Nro. Doc. Cliente", head),
                Par("Cliente", head),
                Par("Total", head)
            ]]

            for i in range(0, cant):
                lista.append([
                    Par(str(datos[i][0]), body_ce),
                    Par(datos[i][1], body_ce),
                    Par(datos[i][2], body_ce),
                    Par(datos[i][3], body_ce),
                    Par(datos[i][4], body_iz),
                    Par(str(datos[i][5]), body_de)
                ])

            tabla = Table(lista, [100, 100, 150, 100, 175, 75])
            tabla = tabla_style(tabla)
            story.append(tabla)

            doc = SimpleDocTemplate(
                ubicacion_archivo,
                pagesize=landscape(A4),
                leftMargin=3 * cm,  # Margen Izquierdo
                rightMargin=3 * cm,  # Margen Derecho
                topMargin=2.5 * cm,  # Margen Superior
                bottomMargin=2.5 * cm,  # Margen Inferior
                allowSplitting=1,
                title="Notas de Débito por Ventas",
                author="Sistema Distribuidora")

            try:  # Generar Archivo
                doc.build(story)
                popen(ubicacion_archivo)
            except PermissionError as e:
                error_permiso_archivo(str(e))
Ejemplo n.º 3
0
    def preparar_pdf(self, grilla):
        datos = grilla.get_model()
        cant = len(datos)

        ubicacion_archivo = dialogo_guardar("Facturas de Compra")

        if ubicacion_archivo is not None:
            # Si no tiene la terminación .pdf se le agrega
            if ubicacion_archivo[-4:].lower() != ".pdf":
                ubicacion_archivo += ".pdf"

            story = []
            cabecera = cabecera_style()
            parrafo = parrafo_bodytext()
            head = tabla_celda_titulo()
            body_ce = tabla_celda_centrado()
            body_iz = tabla_celda_just_izquierdo()
            body_de = tabla_celda_just_derecho()

            story.append(Par("Facturas de Compra", cabecera))
            story.append(Spacer(0, 20))

            if self.obj("chk_01").get_active():  # Proveedor
                story.append(Par("Facturas del Proveedor <b>" +
                self.obj("txt_prov_02").get_text() + "</b>", parrafo))

            if self.obj("chk_02").get_active():  # Tipo de Factura
                model = self.obj("cmb_tipo_fact").get_model()
                active = self.obj("cmb_tipo_fact").get_active()
                story.append(Par("<b>" + model[active][1] + "</b>", parrafo))

            if self.obj("chk_03").get_active():  # Fecha
                story.append(Par("Facturas expedidas entre el " +
                "<b>" + cadena_fecha(self.fecha_ini) + "</b> y el " +
                "<b>" + cadena_fecha(self.fecha_fin) + "</b>", parrafo))

            if self.obj("chk_04").get_active():  # Total
                if self.idTotal == 1:  # Entre
                    tipo, segundo = "entre", " y <b>" + \
                    str(self.obj("txt_total_fin").get_value()) + "</b>"
                elif self.idTotal == 2:  # Mayor que
                    tipo, segundo = "mayor que", ""
                elif self.idTotal == 3:  # Mayor o igual que
                    tipo, segundo = "mayor o igual que", ""
                elif self.idTotal == 4:  # Menor que
                    tipo, segundo = "menor que", ""
                elif self.idTotal == 5:  # Menor o igual que
                    tipo, segundo = "menor o igual que", ""
                story.append(Par("Facturas expedidas por un Monto " + tipo + " <b>" +
                str(self.obj("txt_total_ini").get_value()) + " </b>" + segundo, parrafo))

            story.append(Spacer(0, 20))

            lista = [[Par("Nro. Timbrado", head), Par("Nro. Factura", head),
                Par("Fecha", head), Par("Tipo de Factura", head),
                Par("Nro. Doc. Prov.", head), Par("Proveedor", head), Par("Total", head)]]

            for i in range(0, cant):
                lista.append([Par(str(datos[i][0]), body_ce), Par(datos[i][1], body_ce),
                    Par(datos[i][2], body_ce), Par(datos[i][3], body_ce), Par(datos[i][4], body_ce),
                    Par(datos[i][5], body_iz), Par(str(datos[i][6]), body_de)])

            tabla = Table(lista, [100, 100, 150, 100, 100, 125, 75])
            tabla = tabla_style(tabla)
            story.append(tabla)

            doc = SimpleDocTemplate(
                ubicacion_archivo,
                pagesize=landscape(A4),
                leftMargin=3 * cm,  # Margen Izquierdo
                rightMargin=3 * cm,  # Margen Derecho
                topMargin=2.5 * cm,  # Margen Superior
                bottomMargin=2.5 * cm,  # Margen Inferior
                allowSplitting=1,
                title="Facturas de Compra",
                author="Sistema Distribuidora"
            )

            try:  # Generar Archivo
                doc.build(story)
                popen(ubicacion_archivo)
            except PermissionError as e:
                error_permiso_archivo(str(e))
Ejemplo n.º 4
0
def genera_comprobante_pago(datos_conexion, nro_comp):
    ubicacion_archivo = dialogo_guardar("Comprobante de Pago")

    if ubicacion_archivo is not None:
        # Si no tiene la terminación .pdf se le agrega
        if ubicacion_archivo[-4:].lower() != ".pdf":
            ubicacion_archivo += ".pdf"

        story = []
        titulo = tabla_celda_titulo()
        texto = tabla_celda_just_izquierdo()
        numero = tabla_celda_just_derecho()
        centro = tabla_celda_centrado()

        tabla = Table([[
            Paragraph(
                "<b><font size=15>Distribuidora María Auxiliadora</font></b><br/><br/>"
                +
                "<i><font size=12>Productos y Servicios S.A.</font></i><br/><br/><br/>"
                + "<font size=8>Caaguazú - Paraguay</font>", centro),
            Paragraph(
                "RUC:<br/><br/>" +
                "<b><font size=15>RECIBO DE PAGO</font></b><br/><br/>" +
                "<i><font size=7>Liquidación de Sueldo y Otras Remuneraciones<br/>"
                +
                "(Conforme al Art. 235 del Código Laboral)</font></i><br/><br/>"
                + "<b><font size=15>" + cadenanumeros(nro_comp, 7) +
                "</font></b>", centro),
        ]], [350, 150])
        tabla.setStyle([
            ('VALIGN', (0, 0), (-1, -1),
             'MIDDLE'),  # Alineación Vertical de la Tabla
            ('BOX', (0, 0), (-1, -1), 0.25,
             colors.black),  # Borde Exterior de la Tabla
            ('INNERGRID', (0, 0), (-1, -1), 0.25,
             colors.black),  # Grilla Interior de la Tabla
        ])
        story.append(tabla)
        story.append(Spacer(0, 20))

        # Establece la conexión con la Base de Datos
        conexion = conectar(datos_conexion)
        cursor = consultar(
            conexion, "idEmpleado, NroDocumento, " +
            "NombreApellido, FechaInicio, FechaFin, TotalPagar",
            "comprobantepagos_s", " WHERE NroComprobante = " + nro_comp)
        datos_comp = cursor.fetchall()

        # Buscar otros datos del Empleado
        cursor = consultar(conexion, "DireccionPrincipal", "personas_s",
                           " WHERE idPersona = " + str(datos_comp[0][0]))
        datos_empl = cursor.fetchall()
        if cursor.rowcount > 0:
            direccion = "" if datos_empl[0][0] is None else datos_empl[0][0]
        else:
            direccion = ""

        # Buscar datos de la Empresa
        cursor = consultar(conexion, "NroPatronalIPS, NroPatronalMJT",
                           "empresas_s", " ORDER BY idEmpresa")
        datos_empr = cursor.fetchall()
        if cursor.rowcount > 0:
            ips = "" if datos_empr[0][0] is None else datos_empr[0][0]
            mjt = "" if datos_empr[0][1] is None else datos_empr[0][1]
        else:
            ips = mjt = ""

        tabla = Table(
            [[
                Paragraph("<b>Lugar y Fecha:</b>", texto),
                Paragraph("Caaguazú, " + fecha_hoy(), texto), '', ''
            ],
             [
                 Paragraph("<b>Trabajador:</b>", texto),
                 Paragraph(datos_comp[0][2], texto),
                 Paragraph("<b>C.I. Nro.:</b>", texto),
                 Paragraph(datos_comp[0][1], texto)
             ],
             [
                 Paragraph("<b>Dirección:</b>", texto),
                 Paragraph(direccion, texto), '', ''
             ],
             [
                 Paragraph("<b>Sucursal:</b>", texto),
                 Paragraph("Caaguazú", texto), '', ''
             ],
             [
                 Paragraph("<b>Periodo de Pago:</b>", texto),
                 Paragraph(
                     "Desde " + mysql_fecha(datos_comp[0][3]) + " hasta " +
                     mysql_fecha(datos_comp[0][4]), texto), '', ''
             ],
             [
                 Paragraph("<b>Nro. Patronal:</b>", texto),
                 Paragraph(ips + " / " + str(mjt), texto), '', ''
             ]], [100, 275, 50, 75])
        tabla.setStyle([
            ('SPAN', (1, 0), (-1, 0)),  # Combina columnas, primera fila
            ('ALIGN', (0, 0), (0, -1),
             'RIGHT'),  # Alineación de la Primera Columna
            ('ALIGN', (1, 1), (-1, -1),
             'LEFT'),  # Alineación de Otras Columnas
            ('VALIGN', (0, 0), (-1, -1),
             'MIDDLE'),  # Alineación Vertical de la Tabla
            ('TOPPADDING', (0, 0), (-1, -1), 1),  # Espacio Arriba
            ('BOTTOMPADDING', (0, 0), (-1, -1), 3),  # Espacio Abajo
            ('LEFTPADDING', (0, 0), (-1, -1), 3),  # Espacio a la Izquierda
            ('RIGHTPADDING', (0, 0), (-1, -1), 3),  # Espacio a la Derecha
            ('SPAN', (1, 2), (-1, 2)),  # Combina columnas, segunda fila
            ('SPAN', (1, 3), (-1, 3)),  # Combina columnas, tercera fila
            ('SPAN', (1, 4), (-1, 4)),  # Combina columnas, cuarta fila
            ('SPAN', (1, 5), (-1, 5)),  # Combina columnas, quinta fila
        ])
        story.append(tabla)
        story.append(Spacer(0, 20))

        cursor = consultar(conexion, "Cantidad, Concepto, Monto",
                           "comprobantepagos_detalles_s",
                           " WHERE NroComprobante = " + nro_comp)
        datos_det = cursor.fetchall()
        cant = cursor.rowcount
        lista = [[
            Paragraph("Cantidad", titulo),
            Paragraph("Descripción", titulo),
            Paragraph("Importe", titulo)
        ]]

        for i in range(0, cant):
            cantidad = "" if datos_det[i][0] is None else str(datos_det[i][0])
            lista.append([
                Paragraph(cantidad, centro),
                Paragraph(datos_det[i][1], texto),
                Paragraph(str(datos_det[i][2]), numero)
            ])

        if cant < 16:  # Completar hasta 16 casillas
            for i in range(cant, 16):
                lista.append(["", "", ""])

        # Total a Pagar
        lista.append([
            Paragraph("Total a Pagar:", numero), '',
            Paragraph(str(datos_comp[0][5]), numero)
        ])

        tabla = Table(lista, [100, 300, 100])
        tabla = tabla_style(tabla)
        tabla.setStyle([
            ('SPAN', (0, -1), (-2, -1)),  # Combina columnas, última fila
        ])
        story.append(tabla)

        #ubicacion_archivo = path.join(path.expanduser("~"), "Desktop", "listado.pdf")
        doc = SimpleDocTemplate(
            ubicacion_archivo,
            pagesize=A4,  # Tamaño de Página (landscape(A4) hoja horizontal)
            leftMargin=3 * cm,  # Margen Izquierdo
            rightMargin=3 * cm,  # Margen Derecho
            topMargin=2.5 * cm,  # Margen Superior
            bottomMargin=2.5 * cm,  # Margen Inferior
            allowSplitting=1,
            title="Comprobante de Pago Nro. " + cadenanumeros(nro_comp, 7),
            author="Sistema Distribuidora")

        try:  # Generar Archivo
            doc.build(story)
            popen(ubicacion_archivo)
        except PermissionError as e:
            error_permiso_archivo(str(e))