Exemple #1
0
# -*-coding: utf-8-*-

from openpyxl import load_workbook
from openpyxl.styles import Alignment, Font
from openpyxl.styles.borders import Border, Side
from openpyxl.styles import PatternFill
from openpyxl import drawing
from Generales import settings
import win32com.client
import os
import string
import xlsxwriter

conn = settings.conectionDB_pymmsql()

thin_border = Border(left=Side(style='thin'),
                     right=Side(style='thin'),
                     top=Side(style='thin'),
                     bottom=Side(style='thin'))

titleFill = PatternFill(start_color='D9D9D9',
                        end_color='D9D9D9',
                        fill_type='solid')


def pasajeRural(id):
    informacion = []
    if len(id) == 20:
        cursor = conn.cursor()
        cursor.execute(
            "SELECT COSTO_EMP FROM TB_PEA_RURAL_EMP WHERE IDEMP = '{}'".format(
Exemple #2
0
def Listado003ccppSeccion(ubigeos, WorkSpace, VW_DISTRITO, SEGM_R_RUTAS, SEGM_R_CCPPRUTAS, EscudoNacional, LogoInei):

    #   CREADO ESTILOS DE TEXTO
    h1 = PS(
        name='Heading1',
        fontSize=7,
        leading=8
    )

    h3 = PS(
        name='Normal',
        fontSize=6.5,
        leading=10,
        alignment=TA_CENTER
    )
    h4 = PS(
        name='Normal',
        fontSize=6.5,
        leading=10,
        alignment=TA_LEFT
    )

    h5 = PS(
        name='Heading1',
        fontSize=7,
        leading=8,
        alignment=TA_RIGHT
    )

    h_sub_tile = PS(
        name='Heading1',
        fontSize=10,
        leading=14,
        alignment=TA_CENTER
    )
    h_sub_tile_2 = PS(
        name='Heading1',
        fontSize=11,
        leading=14,
        alignment=TA_CENTER
    )

    for ubigeo in [x for x in arcpy.da.SearchCursor(VW_DISTRITO, ["UBIGEO", "DEPARTAMENTO", "PROVINCIA", "DISTRITO"], "UBIGEO = '{}'".format(ubigeos))]:
        departamento = ubigeo[1]
        coddep = ubigeo[0][0:2]
        provincia = ubigeo[2]
        codprov = ubigeo[0][2:4]
        distrito = ubigeo[3]
        coddist = ubigeo[0][4:6]

        conn = settings.conectionDB_pymmsql()
        cursorsql = conn.cursor()
        cursorsql.execute("DELETE FROM SEGM_R_SCR WHERE UBIGEO = '{}'".format(ubigeo[0])) # FLUJO NORMAL
        # cursorsql.execute("DELETE FROM SEGM_R_SCR WHERE UBIGEO = '{}' AND FLAG_NUEVO = 1".format(ubigeo[0])) # CON CCPP NUEVOS
        conn.commit()


        for seccion in list(set([x[0]for x in arcpy.da.SearchCursor(SEGM_R_RUTAS, ["IDSCR"], "UBIGEO = '{}' AND FLAG_NUEVO = 1".format(ubigeo[0]))])):
            scr = seccion[11:14]

            infoscr = [x[0] for x in arcpy.da.SearchCursor(SEGM_R_CCPPRUTAS, ["VIV_CCPP"], "IDSCR = '{}'".format(seccion))]
            ccppscr = len(infoscr)
            vivscr = sum(infoscr)

            # cursorsql.execute("INSERT INTO SEGM_R_SCR (UBIGEO, IDSCR, SCR, EST_IMP, FLAG_LEGAJO, VIV_SCR, CCPP_SCR) VALUES ('{}', '{}', '{}', '0', '0', {}, {})".format(ubigeo[0], seccion, scr, vivscr, ccppscr)) # FLUJO NORMAL
            cursorsql.execute("INSERT INTO SEGM_R_SCR (UBIGEO, IDSCR, SCR, EST_IMP, FLAG_LEGAJO, VIV_SCR, CCPP_SCR, FLAG_NUEVO) VALUES ('{}', '{}', '{}', '0', '0', {}, {}, '1')".format(ubigeo[0], seccion, scr, vivscr, ccppscr)) # CON CCPP NUEVOS
            conn.commit()
            #   LISTA QUE CONTIENE LOS ELEMENTOS A GRAFICAR EN EL PDF

            Elementos = []

            #   AGREGANDO IMAGENES, TITULOS Y SUBTITULOS

            Titulo = Paragraph(u'CENSOS NACIONALES 2017: XII DE POBLACIÓN, VII DE VIVIENDA Y III DE COMUNIDADES INDÍGENAS', h_sub_tile)
            Titulo2 = Paragraph(u'III Censo de Comunidades Nativas y I Censo de Comunidades Campesinas', h_sub_tile)
            SubTitulo = Paragraph(u'<strong>LISTADO DE CENTROS POBLADOS DE LA SECCIÓN CENSAL RURAL</strong>', h_sub_tile_2)

            CabeceraPrincipal = [[Titulo, '', ''],
                                 [Image(EscudoNacional, width=50, height=50), Titulo2,
                                  Image(LogoInei, width=50, height=50)],
                                 ['', SubTitulo, '']]

            Tabla0 = Table(CabeceraPrincipal, colWidths=[2 * cm, 14 * cm, 2 * cm])

            Tabla0.setStyle(TableStyle([
                ('GRID', (0, 0), (-1, -1), 1, colors.white),
                ('SPAN', (0, 1), (0, 2)),
                ('SPAN', (2, 1), (2, 2)),
                ('SPAN', (0, 0), (2, 0)),
                ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
                ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')
            ]))

            Elementos.append(Tabla0)
            Elementos.append(Spacer(0,10))


            #   CREACION DE LAS TABLAS PARA LA ORGANIZACION DEL TEXTO
            #   Se debe cargar la informacion en aquellos espacios donde se encuentra el texto 'R'

            Filas = [
                        ['', '', '', '', Paragraph('<b>Doc.CPV.03.78</b>', h5), '', ''],
                        [Paragraph('<b>A. UBICACIÓN GEOGRÁFICA</b>', h1), '', '', '', Paragraph('<b>B. UBICACIÓN CENSAL</b>', h1), '', ''],
                        [Paragraph('<b>DEPARTAMENTO</b>', h1), u'{}'.format(coddep), u'{}'.format(departamento), '', Paragraph(u'<b>SECCIÓN Nº</b>', h1), '{}'.format(scr), ''],
                        [Paragraph('<b>PROVINCIA</b>', h1), u'{}'.format(codprov),u'{}'.format(provincia), '', '','', ''],
                        [Paragraph('<b>DISTRITO</b>', h1), u'{}'.format(coddist), u'{}'.format(distrito),'', Paragraph('<b>C. TOTAL DE VIVIENDAS DE LA SECCIÓN.</b>', h1), '', '{}'.format(vivscr)],
                        ['', '', '','', '','']
                    ]

            #   Permite el ajuste del ancho de la tabla

            Tabla1 = Table(Filas, colWidths=[3.7 * cm, 1 * cm, 7.1 * cm, 0.3 * cm, 3.7 * cm, 1.5 * cm, 1.5 * cm])


            #   Se cargan los estilos, como bordes, alineaciones, fondos, etc

            Tabla1.setStyle(TableStyle([
                        ('FONTSIZE', (0, 0), (-1, -1), 7),
                        ('TEXTCOLOR', (0, 0), (6, 0), colors.white),
                        ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                        ('ALIGN', (5, 2), (6, 2), 'CENTER'),
                        ('ALIGN', (6, 4), (6, 5), 'CENTER'),
                        ('ALIGN', (1, 2), (1, 4), 'CENTER'),
                        ('GRID', (0, 1), (2, 4), 1, colors.black),
                        ('GRID', (4, 4), (5, 5), 1, colors.black),
                        ('GRID', (4, 1), (6, 2), 1, colors.black),
                        ('GRID', (4, 4), (6, 5), 1, colors.black),
                        ('SPAN', (0, 1), (2, 1)),
                        ('SPAN', (4, 4), (5, 5)),
                        ('SPAN', (6, 4), (6, 5)),
                        ('SPAN', (4, 1), (6, 1)),
                        ('SPAN', (5, 2), (6, 2)),
                        ('SPAN', (4, 0), (6, 0)),
                        ('BACKGROUND', (0, 1), (2, 1), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (4, 1), (6, 1), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (0, 2), (0, 4), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (4, 2), (4, 2), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (4, 4), (5, 5), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255))
                    ]))


            #   AGREGANDO LAS TABLAS A LA LISTA DE ELEMENTOS DEL PDF

            Elementos.append(Tabla1)
            Elementos.append(Spacer(0,10))


            #   AGREGANDO CABECERA N° 2

            Filas2 = [
                [Paragraph(e, h3) for e in [u"<strong>D. INFORMACIÓN DE CENTROS POBLADOS Y VIVIENDAS</strong>", "", "", "", "", ""]],
                [Paragraph(e, h3) for e in [u"<strong>AER Nº</strong>", "", u"<strong>CENTRO POBLADO</strong>", "", "", u"<strong>N° DE VIVIENDAS</strong>"]],
                [Paragraph(e, h3) for e in [u"<strong>INICIAL</strong>", u"<strong>FINAL</strong>", u"<strong>CÓDIGO</strong>", u"<strong>NOMBRE</strong>", u"<strong>CATEGORÍA</strong>", ""]],
                ]

            Tabla2 = Table(Filas2,
                      colWidths = [1.3 * cm, 1.3 * cm, 1.7 * cm, 9 * cm, 3.5 * cm, 2 * cm], repeatRows=1)

            Tabla2.setStyle(TableStyle(
                [
                    ('GRID', (1, 1), (-2, -2), 1, colors.black),
                    ('GRID', (0, 0), (-1, -1), 1, colors.black),
                    ('GRID', (0, 0), (-1, -1), 1, colors.black),
                    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                    ('FONTSIZE', (0, 0), (-1, -1), 7),
                    ('BACKGROUND', (0, 0), (-1, 0), colors.Color(220.0/255, 220.0/255, 220.0/255)),
                    ('BACKGROUND', (0, 0), (-1, -1), colors.Color(220.0/255, 220.0/255, 220.0/255)),
                    ('SPAN', (0, 0), (5, 0)),
                    ('SPAN', (0, 1), (1, 1)),
                    ('SPAN', (2, 1), (4, 1)),
                    ('SPAN', (5, 1), (5, 2)),
                    ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black),
                    ('BACKGROUND', (0, 0), (-1, 0), colors.Color(220.0/255, 220.0/255, 220.0/255)),
                ]
            ))

            Elementos.append(Tabla2)



            #CUERPO QUE CONTIENE LOS LA INFORMACION A MOSTRAR

            nrows = len([x[0] for x in arcpy.da.SearchCursor(SEGM_R_CCPPRUTAS, ["CODCCPP"], "IDSCR = '{}'".format(seccion))])
            cursor = [x for x in arcpy.da.SearchCursor(SEGM_R_CCPPRUTAS, ["AER_INI", "AER_FIN", "CODCCPP", "NOMCCPP", "CAT_CCPP", "VIV_CCPP"] , "IDSCR = '{}'".format(seccion))]
            cursor.sort(key = lambda n:(n[0], n[2]))

            if nrows > 27:

                SeccionesRegistros = registros(nrows)

                SeccionesRegistros.append((0, 27))

                SeccionesRegistros.sort(key = lambda n:n[0])

                for rangos in SeccionesRegistros:

                    for ccpp in cursor[rangos[0]:rangos[1]]:
                        aeriniccpp = ccpp[0]
                        aerfinccpp = ccpp[1]
                        codccpp = ccpp[2]
                        nomccpp = ccpp[3]
                        categoriaccpp = ccpp[4]
                        numviv = ccpp[5]

                        Filas3 = [[u'{}'.format(aeriniccpp), u'{}'.format(aerfinccpp), u'{}'.format(codccpp), Paragraph(u'{}'.format(nomccpp), h4), Paragraph(u'{}'.format(categoriaccpp), h4), u'{}'.format(numviv)]]
                        # Filas3 = [[u'{}'.format(contador), u'{}'.format(codccpp), Paragraph(u'{}'.format(nomccpp), h4), Paragraph(u'{}'.format(catccpp), h4), Paragraph(u'{}'.format(nomci), h4), Paragraph(u'{}'.format(tipoci), h4), u'{}'.format(vivccpp)]]

                        RegistrosIngresados = Table(Filas3,
                                  colWidths = [1.3 * cm, 1.3 * cm, 1.7 * cm, 9 * cm, 3.5 * cm, 2 * cm],
                                  rowHeights=[0.7 * cm])

                        RegistrosIngresados.setStyle(TableStyle(
                            [
                                ('GRID', (1, 1), (-2, -2), 1, colors.black),
                                ('GRID', (0, 0), (-1, -1), 1, colors.black),
                                ('GRID', (0, 0), (-1, -1), 1, colors.black),
                                ('FONTSIZE', (0, 0), (5, 0), 7),
                                ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                                ('ALIGN', (5, 0), (5, 0), 'CENTER'),
                                ('ALIGN', (0, 0), (2, 0), 'CENTER'),
                            ]
                        ))
                        Elementos.append(RegistrosIngresados)
                    Elementos.append(PageBreak())
                    Elementos.append(Tabla2)
                del Elementos[-1]
                del Elementos[-1]
            else:
                for ccpp in cursor:
                    aeriniccpp = ccpp[0]
                    aerfinccpp = ccpp[1]
                    codccpp = ccpp[2]
                    nomccpp = ccpp[3]
                    categoriaccpp = ccpp[4]
                    numviv = ccpp[5]

                    Filas3= [[u'{}'.format(aeriniccpp), u'{}'.format(aerfinccpp), u'{}'.format(codccpp), Paragraph(u'{}'.format(nomccpp), h4), Paragraph(u'{}'.format(categoriaccpp), h4), u'{}'.format(numviv)]]

                    RegistrosIngresados = Table(Filas3,
                              colWidths = [1.3 * cm, 1.3 * cm, 1.7 * cm, 9 * cm, 3.5 * cm, 2 * cm],
                              rowHeights=[0.7 * cm])

                    RegistrosIngresados.setStyle(TableStyle([
                            ('GRID', (0, 0), (-1, -1), 1, colors.black),
                            ('FONTSIZE', (0, 0), (5, 0), 7),
                            ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                            ('ALIGN', (5, 0), (5, 0), 'CENTER'),
                            ('ALIGN', (0, 0), (2, 0), 'CENTER'),]))

                    Elementos.append(RegistrosIngresados)

            # COMPROBAR SI TIENE CCP CON ESTADO -1

            ccppFuera1 = ccppFuera(ubigeos)
            scr = [x[0] for x in ccppFuera1]
            if seccion in scr:
                infoccppFuera = ccppFueraVal(seccion)

                #   AGREGANDO CABECERA N° 3
                Filas4 = [[Paragraph(u"<strong>E. OBSERVACIONES:</strong>", h3)]]

                ObservacionesCabecera = Table(Filas4, colWidths=[19.8 * cm],
                                              style=[('GRID', (0, 0), (-1, -1), 1, colors.black),
                                                     ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                                                     ('BACKGROUND', (0, 0), (-1, -1),
                                                      colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                                                     ])

                Elementos.append(Spacer(0, 20))
                Elementos.append(ObservacionesCabecera)

                #   CUERPO QUE CONTIENE OBSERVACION REFERENTE A LOS CCPP CON ESTADO -1

                if len(infoccppFuera) == 1:
                    nota = u"EL CENTRO POBLADO {} NO FIGURA EN EL DOC.CPV.03.25 LISTADO DE CENTROS POBLADOS Y VIVIENDAS DEL ÁREA DE EMPADRONAMIENTO RURAL. ".format(infoccppFuera[0]) + "<br/>" + u"CONTROLE EL EMPADRONAMIENTO DE LAS VIVIENDAS Y PERSONAS DEL CENTRO POBLADO DE ACUERDO A LA PROGRAMACIÓN DE RUTAS ESTABLECIDA."  # ACEPTA 302 CARACTERES
                    Filas5 = [[Paragraph(u"<strong>{}</strong>".format(nota), h4)]]
                    NotaEmpadronador = Table(Filas5, colWidths=[19.8 * cm], rowHeights=[1.5 * cm],
                                             style=[('GRID', (0, 0), (-1, -1), 1, colors.black),
                                                    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')])
                    Elementos.append(NotaEmpadronador)
                elif len(infoccppFuera) >= 1:
                    nota = u"LOS CENTROS POBLADOS {} NO FIGURAN EN EL DOC.CPV.03.25 LISTADO DE CENTROS POBLADOS Y VIVIENDAS DEL ÁREA DE EMPADRONAMIENTO RURAL.".format(', '.join(infoccppFuera)) + "<br/>" + u"CONTROLE EL EMPADONAMIENTO DE LAS VIVIENDAS Y PERSONAS DE LOS CENTROS POBLADOS DE ACUERDO A LA PROGRAMACIÓN DE RUTAS ESTABLECIDA." # ACEPTA 302 CARACTERES
                    Filas5 = [[Paragraph(u"<strong>{}</strong>".format(nota), h4)]]
                    NotaEmpadronador = Table(Filas5, colWidths=[19.8 * cm], rowHeights=[1.5 * cm],
                                             style=[('GRID', (0, 0), (-1, -1), 1, colors.black),
                                                    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')])
                    Elementos.append(NotaEmpadronador)

            #   SE DETERMINAN LAS CARACTERISTICAS DEL PDF (RUTA DE ALMACENAJE, TAMAÑO DE LA HOJA, ETC)


            PathPDFsec = r"{}\Rural\{}\{}.pdf".format(WorkSpace, ubigeo[0], seccion)
            print PathPDFsec

            pdfsec = SimpleDocTemplate(PathPDFsec, pagesize = A4, rightMargin=65,
                                leftMargin=65,
                                topMargin=0.5 *cm,
                                bottomMargin=0.5 *cm,)


            #   GENERACION DEL PDF FISICO

            pdfsec.build(Elementos)

        #   IMPRESION DE FINALIZADO

        cursorsql.close()
        conn.close()
    finalizado = "Finalizado"
    return finalizado
def listado005ComunidadesIndigenas(ubigeos, WorkSpace, VW_DISTRITO,
                                   SEGM_R_CCPPRUTA, SEGM_R_EMP, SEGM_R_AER,
                                   EscudoNacional, LogoInei):
    settings.conectionDB_arcpy()

    #   CREADO ESTILOS DE TEXTO

    h1 = PS(name='Heading1', fontSize=7, leading=8)

    h3 = PS(name='Normal', fontSize=6.5, leading=10, alignment=TA_CENTER)

    h4 = PS(name='Normal', fontSize=6.5, leading=10, alignment=TA_LEFT)

    h5 = PS(name='Heading1', fontSize=7, leading=8, alignment=TA_RIGHT)

    h_sub_tile = PS(name='Heading1',
                    fontSize=10,
                    leading=14,
                    alignment=TA_CENTER)
    h_sub_tile_2 = PS(name='Heading1',
                      fontSize=11,
                      leading=14,
                      alignment=TA_CENTER)

    for ubigeo in [
            x for x in arcpy.da.SearchCursor(VW_DISTRITO, [
                "UBIGEO", "DEPARTAMENTO", "PROVINCIA", "DISTRITO"
            ], "UBIGEO = '{}'".format(ubigeos))
    ]:

        conexion = settings.conectionDB_pymmsql()
        cursor1 = conexion.cursor()
        cursor1.execute("EXEC ACTUALIZAR_CCPP_INDIGENAS '{}'".format(
            ubigeo[0]))
        conexion.commit()

        cursor = conexion.cursor()
        cursor.execute("EXEC USP_ACTUALIZA_COMIND '{}'".format(ubigeo[0]))
        conexion.commit()

        coddep = ubigeo[0][0:2]
        departamento = ubigeo[1]
        codprov = ubigeo[0][2:4]
        provincia = ubigeo[2]
        coddist = ubigeo[0][4:6]
        distrito = ubigeo[3]

        contadorci = 0
        orderbyci = (None, 'ORDER BY OR_CCPP ASC')
        for ci in [
                x for x in arcpy.da.SearchCursor(
                    SEGM_R_CCPPRUTA, ["IDCCPP"],
                    "UBIGEO = {} AND (COD_CC IS NOT NULL OR COD_CN IS NOT NULL OR NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL)"
                    .format(ubigeo[0]), None, False, orderbyci)
        ]:
            contadorci = contadorci + 1
            orci = str(contadorci).zfill(3)
            idci = "{}{}".format(ci[0], orci)
            cursor.execute(
                "UPDATE SEGM_R_CCPPRUTA SET OR_CI = '{}', IDCI = '{}' WHERE IDCCPP = '{}'"
                .format(orci, idci, ci[0]))
            conexion.commit()

        orderby = (None, 'ORDER BY EMP ASC')
        for emp in [
                x for x in arcpy.da.SearchCursor(
                    SEGM_R_EMP, ["IDSCR", "EMP", "IDRUTA"],
                    "UBIGEO = '{}' AND FLAG_COMIND = 1".format(
                        ubigeo[0]), None, False, orderby)
        ]:

            scr = emp[0][11:14]
            empadronador = emp[1]
            aersruta = list(
                set([
                    x[0] for x in arcpy.da.SearchCursor(
                        SEGM_R_CCPPRUTA, ["IDAER"],
                        "IDRUTA = '{}' AND (NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL) "
                        .format(emp[2]))
                ]))

            for aer in aersruta:

                viviendas = sum([
                    x[0] for x in arcpy.da.SearchCursor(
                        SEGM_R_CCPPRUTA, ["VIV_CCPP"],
                        "IDRUTA = '{}' AND (NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL) AND IDAER = '{}'"
                        .format(emp[2], aer))
                ])
                aerini = aer[6:9]
                aerfin = aer[9:12]

                #   LISTA QUE CONTIENE LOS ELEMENTOS A GRAFICAR EN EL PDF

                Elementos = []

                #   AGREGANDO IMAGENES, TITULOS Y SUBTITULOS

                Titulo = Paragraph(
                    u'CENSOS NACIONALES 2017: XII DE POBLACIÓN, VII DE VIVIENDA Y III DE COMUNIDADES INDÍGENAS',
                    h_sub_tile)
                Titulo2 = Paragraph(
                    u'III Censo de Comunidades Nativas y I Censo de Comunidades Campesinas',
                    h_sub_tile)
                SubTitulo = Paragraph(
                    u'<strong>LISTADO DE CENTROS POBLADOS DONDE SE REALIZA EL EMPADRONAMIENTO DEL CENSO A COMUNIDADES NATIVAS Y CAMPESINAS DEL ÁREA DE EMPADRONAMIENTO RURAL</strong>',
                    h_sub_tile_2)

                CabeceraPrincipal = [[Titulo, '', ''],
                                     [
                                         Image(EscudoNacional,
                                               width=50,
                                               height=50), Titulo2,
                                         Image(LogoInei, width=50, height=50)
                                     ], ['', SubTitulo, '']]

                Tabla0 = Table(CabeceraPrincipal,
                               colWidths=[2 * cm, 14 * cm, 2 * cm])

                Tabla0.setStyle(
                    TableStyle([('GRID', (0, 0), (-1, -1), 1, colors.white),
                                ('SPAN', (0, 1), (0, 2)),
                                ('SPAN', (2, 1), (2, 2)),
                                ('SPAN', (0, 0), (2, 0)),
                                ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
                                ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')]))

                Elementos.append(Tabla0)
                Elementos.append(Spacer(0, 10))

                #   CREACION DE LAS TABLAS PARA LA ORGANIZACION DEL TEXTO
                #   Se debe cargar la informacion en aquellos espacios donde se encuentra el texto 'R'

                Filas = [[
                    '', '', '', '', '',
                    Paragraph(u'<b>Doc.CPV.03.25B</b>', h5)
                ],
                         [
                             Paragraph(u'<b>A. UBICACIÓN GEOGRÁFICA</b>', h1),
                             '', '', '',
                             Paragraph(u'<b>B. UBICACIÓN CENSAL</b>', h1), ''
                         ],
                         [
                             Paragraph(u'<b>DEPARTAMENTO</b>',
                                       h1), u'{}'.format(coddep),
                             u'{}'.format(departamento), '',
                             Paragraph(u'<b>SECCIÓN Nº</b>',
                                       h1), u'{}'.format(scr)
                         ],
                         [
                             Paragraph(u'<b>PROVINCIA</b>',
                                       h1), u'{}'.format(codprov),
                             u'{}'.format(provincia), '',
                             Paragraph(u'<b>A.E.R. Nº</b>', h1),
                             u'DEL {} AL {}'.format(aerini, aerfin)
                         ],
                         [
                             Paragraph(u'<b>DISTRITO</b>', h1),
                             u'{}'.format(coddist), u'{}'.format(distrito), '',
                             Paragraph(u'<b>EMPADRONADOR N°</b>',
                                       h1), u'{}'.format(empadronador)
                         ],
                         [
                             '', '', '', '',
                             Paragraph(u'<b>C. TOTAL DE VIVIENDAS</b>', h1),
                             u'{}'.format(viviendas)
                         ]]

                #   Permite el ajuste del ancho de la tabla

                Tabla1 = Table(Filas,
                               colWidths=[
                                   3.7 * cm, 1 * cm, 7.1 * cm, 0.3 * cm,
                                   5 * cm, 2.7 * cm
                               ])

                #   Se cargan los estilos, como bordes, alineaciones, fondos, etc

                Tabla1.setStyle(
                    TableStyle([
                        ('TEXTCOLOR', (0, 0), (5, 0), colors.black),
                        ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                        ('ALIGN', (1, 2), (1, 4), 'CENTER'),
                        ('ALIGN', (5, 2), (5, 5), 'CENTER'),
                        ('ALIGN', (0, 1), (2, 1), 'CENTER'),
                        ('ALIGN', (4, 1), (5, 1), 'CENTER'),
                        ('FONTSIZE', (0, 0), (-1, -1), 7),
                        ('GRID', (0, 1), (2, 4), 1, colors.black),
                        ('GRID', (4, 1), (5, 5), 1, colors.black),
                        ('SPAN', (0, 1), (2, 1)), ('SPAN', (4, 1), (5, 1)),
                        ('BACKGROUND', (0, 1), (2, 1),
                         colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (0, 2), (0, 4),
                         colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (4, 1), (5, 1),
                         colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('BACKGROUND', (4, 2), (4, 5),
                         colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255))
                    ]))

                #   AGREGANDO LAS TABLAS A LA LISTA DE ELEMENTOS DEL PDF

                Elementos.append(Tabla1)
                Elementos.append(Spacer(0, 10))

                Filas2 = [
                    [
                        Paragraph(e, h3) for e in [
                            u"<strong>D. INFORMACIÓN DE LA COMUNIDAD NATIVA Y/O CAMPESINA</strong>",
                            "", "", "", "", "", ""
                        ]
                    ],
                    [
                        Paragraph(e, h3) for e in [
                            u"<strong>Nº</strong>",
                            u"<strong>Centro Poblado</strong>", "", "",
                            u"<strong>Nombre de la Comunidad</strong>",
                            u"<strong>TIPO DE<br/>COMUNIDAD</strong>",
                            u"<strong>N° de<br/>viviendas</strong>"
                        ]
                    ],
                    [
                        Paragraph(e, h3) for e in [
                            "", u"<strong>Código</strong>",
                            u"<strong>Nombre</strong>",
                            u"<strong>Categoría</strong>", "", "", ""
                        ]
                    ],
                ]

                Tabla2 = Table(Filas2,
                               colWidths=[
                                   0.8 * cm, 1.5 * cm, 5.7 * cm, 2 * cm,
                                   5.7 * cm, 2.5 * cm, 1.6 * cm
                               ])

                Tabla2.setStyle(
                    TableStyle([
                        ('GRID', (0, 0), (-1, -1), 1, colors.black),
                        ('VALIGN', (0, 0), (-1, -1), 'CENTER'),
                        ('BACKGROUND', (0, 0), (-1, -1),
                         colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                        ('SPAN', (0, 0), (6, 0)),
                        ('SPAN', (0, 1), (0, 2)),
                        ('SPAN', (1, 1), (3, 1)),
                        ('SPAN', (4, 1), (4, 2)),
                        ('SPAN', (5, 1), (5, 2)),
                        ('SPAN', (6, 1), (6, 2)),
                    ]))

                Elementos.append(Tabla2)

                contador = 0

                for ci in [
                        x for x in arcpy.da.SearchCursor(
                            SEGM_R_CCPPRUTA, [
                                "CODCCPP", "NOMCCPP", "CAT_CCPP", "NOM_CC",
                                "NOM_CN", "VIV_CCPP"
                            ],
                            "IDAER = '{}' AND IDRUTA = '{}' AND (NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL)"
                            .format(aer, emp[2]))
                ]:
                    contador = contador + 1
                    codccpp = ci[0]
                    nomccpp = ci[1]
                    catccpp = ci[2]
                    nomci = ci[4] if ci[3] is None else ci[3]
                    # tipoci = 'NATIVA' if ci[3] is None else 'CAMPESINA'
                    if (ci[3] is not None) and (ci[4] is not None):
                        tipoci = 'NATIVA / CAMPESINA'
                    elif (ci[3] is not None) and (ci[4] is None):
                        tipoci = 'CAMPESINA'
                    elif (ci[4] is not None) and (ci[3] is None):
                        tipoci = 'NATIVA'

                    vivccpp = ci[5]

                    Filas3 = [[
                        u'{}'.format(contador), u'{}'.format(codccpp),
                        Paragraph(u'{}'.format(nomccpp), h4),
                        Paragraph(u'{}'.format(catccpp), h4),
                        Paragraph(u'{}'.format(nomci), h4),
                        Paragraph(u'{}'.format(tipoci), h4),
                        u'{}'.format(vivccpp)
                    ]]

                    RegistrosIngresados = Table(Filas3,
                                                colWidths=[
                                                    0.8 * cm, 1.5 * cm,
                                                    5.7 * cm, 2 * cm, 5.7 * cm,
                                                    2.5 * cm, 1.6 * cm
                                                ],
                                                rowHeights=[1 * cm])

                    RegistrosIngresados.setStyle(
                        TableStyle([
                            ('GRID', (0, 0), (-1, -1), 1, colors.black),
                            ('FONTSIZE', (0, 0), (-1, -1), 6.5),
                            ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                            ('ALIGN', (0, 0), (1, 0), 'CENTER'),
                            ('ALIGN', (6, 0), (6, 0), 'CENTER'),
                        ]))

                    Elementos.append(RegistrosIngresados)

                Elementos.append(Spacer(0, 10))

                Filas4 = [[
                    Paragraph(u"<strong>E. OBSERVACIONES:</strong>", h3)
                ]]
                Observaciones = Table(
                    Filas4,
                    colWidths=[19.8 * cm],
                    style=[
                        ('GRID', (0, 0), (-1, -1), 1, colors.black),
                        ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                        ('BACKGROUND', (0, 0), (-1, -1),
                         colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                    ])
                Elementos.append(Observaciones)

                nota = u"<strong>{}</strong>".format(
                    '.' * 909)  # ACEPTA 302 CARACTERES
                Filas5 = [[Paragraph(u"<strong>{}</strong>".format(nota), h4)]]
                NotaEmpadronador = Table(Filas5,
                                         colWidths=[19.8 * cm],
                                         rowHeights=[1.5 * cm],
                                         style=[('GRID', (0, 0), (-1, -1), 1,
                                                 colors.black),
                                                ('VALIGN', (0, 0), (-1, -1),
                                                 'MIDDLE')])
                Elementos.append(NotaEmpadronador)

                num = ([
                    x[0] for x in arcpy.da.SearchCursor(
                        SEGM_R_AER, ["AER_POS"], "IDAER = '{}'".format(aer))
                ])[0]

                PathPDF = r"{}\Rural\{}\{}{}{}-CI.pdf".format(
                    WorkSpace, ubigeo[0], emp[2], empadronador, num)
                print PathPDF

                pdf = SimpleDocTemplate(
                    PathPDF,
                    pagesize=A4,
                    rightMargin=65,
                    leftMargin=65,
                    topMargin=0.5 * cm,
                    bottomMargin=0.5 * cm,
                )

                #   GENERACION DEL PDF FISICO

                pdf.build(Elementos)
def SegmentacionRural(carpeta, DIST_FC_ORIG, Coneccion_SDE, ConexionGDB,
                      SEGM_R_AER, SEGM_R_CCPP, SEGM_R_VIV, SEGM_R_AER_POST):

    conexion = settings.conectionDB_pymmsql()
    cursor = conexion.cursor()

    cursor.execute(
        "update  CPV_SEGMENTACION_GDB.sde.TB_VIVIENDA_R set IDVIV = ubigeo + codccpp + right('000' + CAST(isnull (id_reg_or, 0) as varchar(4)), 4)"
    )
    conexion.commit()
    cursor.execute(
        "update CPV_SEGMENTACION_GDB.sde.TB_CPV0301_VIVIENDA_R set IDVIV = ubigeo + codccpp + right('000' + CAST(isnull (id_reg_or, 0) as varchar(4)), 4)"
    )
    conexion.commit()

    #    SELECCION DE UBIGEOS A PROCESAR

    ubigeos_originales = [
        x[0] for x in arcpy.da.SearchCursor(DIST_FC_ORIG, ["UBIGEO"])
    ]

    ActualizarJefeHogar(ubigeos_originales, conexion)

    sql = Expresion(ubigeos_originales, "#", "UBIGEO")

    AER_FC_ORIG_mfl_0 = arcpy.MakeQueryLayer_management(
        Coneccion_SDE, 'AER_mfl',
        "SELECT * FROM  CPV_SEGMENTACION_GDB.sde.TB_AER where {}".format(sql),
        'UBIGEO;AER_INI;AER_FIN', 'POLYGON', '4326',
        arcpy.SpatialReference(4326))

    CCPP_FC_ORIG_mfl_0 = arcpy.MakeQueryLayer_management(
        Coneccion_SDE, "CCPP_mfl",
        "SELECT * FROM CPV_SEGMENTACION_GDB.sde.TB_CCPP where {}".format(sql),
        'LLAVE_CCPP', 'POINT', '4326', arcpy.SpatialReference(4326))

    VIV_FC_ORIG_mfl_0 = arcpy.MakeQueryLayer_management(
        Coneccion_SDE, 'VIV_mfl',
        "SELECT * FROM VW_R_VIV where {}".format(sql), 'IDVIV', 'POINT',
        '4326', arcpy.SpatialReference(4326))

    ubigeo_aer = list(
        set([
            x[0] for x in arcpy.da.SearchCursor(AER_FC_ORIG_mfl_0, ["UBIGEO"])
        ]))
    ubigeo_ccpp = list(
        set([
            x[0] for x in arcpy.da.SearchCursor(CCPP_FC_ORIG_mfl_0, ["UBIGEO"])
        ]))
    ubigeo_viv = list(
        set([
            x[0] for x in arcpy.da.SearchCursor(VIV_FC_ORIG_mfl_0, ["UBIGEO"])
        ]))

    longitudes = [[ubigeo_aer,
                   len(ubigeo_aer)], [ubigeo_ccpp,
                                      len(ubigeo_ccpp)],
                  [ubigeo_viv, len(ubigeo_viv)]]

    if 0 not in [x[1] for x in longitudes]:

        longitudes.sort(key=lambda minimo: minimo[1], reverse=False)

        for ubigeo in longitudes[0][0]:
            if ubigeo in longitudes[1][0] and ubigeo in longitudes[2][0]:
                continue
            else:
                (longitudes[0][0]).remove(ubigeo)

        UbigeosParaProcesar = longitudes[0][0]

        sql2 = Expresion(UbigeosParaProcesar, "#", "UBIGEO")
        print sql2

        DIST_FC_ORIG_mfl = arcpy.MakeFeatureLayer_management(
            DIST_FC_ORIG, "distrito", sql2)
        AER_FC_ORIG_mfl = arcpy.MakeFeatureLayer_management(
            AER_FC_ORIG_mfl_0, "aer", sql2)
        CCPP_FC_ORIG_mfl = arcpy.MakeFeatureLayer_management(
            CCPP_FC_ORIG_mfl_0, "ccpp", sql2)
        VIV_FC_ORIG_mfl = arcpy.MakeFeatureLayer_management(
            VIV_FC_ORIG_mfl_0, "vivienda", sql2)

        # ------------------------------------------------------------------------------------------------------------------------
        # ------------------------------------------------------------------------------------------------------------------------

        DIST_FC_ORIG_copy = arcpy.CopyFeatures_management(
            DIST_FC_ORIG_mfl, carpeta + '\DistBD.shp')
        CCPP_FC_ORIG_copy = arcpy.CopyFeatures_management(
            CCPP_FC_ORIG_mfl, carpeta + '\CcppBD.shp')
        AER_FC_ORIG_copy = arcpy.CopyFeatures_management(
            AER_FC_ORIG_mfl, carpeta + '\\' + 'AersBD.shp')
        VIV_FC_ORIG_copy = arcpy.CopyFeatures_management(
            VIV_FC_ORIG_mfl, carpeta + '\\' + 'VivsBD.shp')
        # areaSecciones_copy = arcpy.CopyFeatures_management(areaSecciones, carpeta + '\\' + 'SeccBD.shp')

        #Asociando informacion a la GDB generada

        lista = Plantillas_TMP(carpeta)

        distritos = arcpy.Describe(lista[0])
        areasempadronamiento = arcpy.Describe(lista[1])
        centrospoblados = arcpy.Describe(lista[2])
        viviendas = arcpy.Describe(lista[3])

        #Declarando el espacio de trabajo

        arcpy.env.workspace = distritos.path
        arcpy.env.overwriteOutput = True

        arcpy.Append_management(DIST_FC_ORIG_copy,
                                distritos.path + "\\" + distritos.name,
                                "NO_TEST")
        arcpy.Append_management(
            AER_FC_ORIG_copy,
            areasempadronamiento.path + "\\" + areasempadronamiento.name,
            "NO_TEST")
        arcpy.Append_management(
            CCPP_FC_ORIG_copy,
            centrospoblados.path + "\\" + centrospoblados.name, "NO_TEST")
        arcpy.Append_management(VIV_FC_ORIG_copy,
                                viviendas.path + "\\" + viviendas.name,
                                "NO_TEST")

        # Rutas de feature class extraidas

        DIST_FC = distritos.path + "\\" + distritos.name
        AER_FC = areasempadronamiento.path + "\\" + areasempadronamiento.name
        CCPP_FC = centrospoblados.path + "\\" + centrospoblados.name
        VIV_FC = viviendas.path + "\\" + viviendas.name

        for ubigeo in UbigeosParaProcesar:
            print ubigeo
            # CCPPRutas = arcpy.MakeQueryLayer_management(Coneccion_SDE, 'CCPPRutas2', "SELECT * FROM SEGM_R_CCPPRUTA WHERE UBIGEO = '{}' AND FLAG_NUEVO = 1".format(ubigeo))    # FLUJO CON CCPP NUEVOS
            CCPPRutas = arcpy.MakeQueryLayer_management(
                Coneccion_SDE, 'CCPPRutas2',
                "SELECT * FROM SEGM_R_CCPPRUTA WHERE UBIGEO = '{}'".format(
                    ubigeo))  # FLUJO NORMAL
            # Rutas = arcpy.MakeQueryLayer_management(Coneccion_SDE, 'Rutas', "SELECT * FROM SEGM_R_RUTA WHERE UBIGEO = '{}' AND FLAG_NUEVO = 1".format(ubigeo))                 # FLUJO CON CCPP NUEVOS
            Rutas = arcpy.MakeQueryLayer_management(
                Coneccion_SDE, 'Rutas',
                "SELECT * FROM SEGM_R_RUTA WHERE UBIGEO = '{}'".format(
                    ubigeo))  # FLUJO NORMAL

            correlativo = 0
            with arcpy.da.UpdateCursor(AER_FC, [
                    "IDAER", "CCPP_AER", "VIV_AER", "AER_POS", "AER_INI",
                    "AER_FIN"
            ], "UBIGEO = '{}'".format(ubigeo)) as cursorUC:
                for aer in cursorUC:
                    infoRuta = [
                        ccpp[0] for ccpp in arcpy.da.SearchCursor(
                            CCPPRutas, ["VIV_CCPP"], "IDAER = '{}'".format(
                                aer[0]))
                    ]
                    aer[0] = ubigeo + aer[4] + aer[5]
                    aer[1] = len(infoRuta)
                    aer[2] = sum(infoRuta)
                    aer[3] = (str(correlativo + 1)).zfill(2)
                    correlativo = correlativo + 1
                    cursorUC.updateRow(aer)
            del cursorUC

            with arcpy.da.UpdateCursor(
                    CCPP_FC, ["IDCCPP", "CODCCPP", "IDSCR", "IDRUTA"],
                    "UBIGEO = '{}'".format(ubigeo)) as cursorUC:
                for ccpp in cursorUC:
                    if ccpp[1] in [
                            codccpp[0] for codccpp in arcpy.da.SearchCursor(
                                CCPPRutas, ["CODCCPP"], "UBIGEO = '{}'".format(
                                    ubigeo))
                    ]:
                        idccpp = "{}{}".format(ubigeo, ccpp[1])
                        ccpp[0] = "{}".format(idccpp)
                        ccpp[2] = ([
                            idscr[0] for idscr in arcpy.da.SearchCursor(
                                CCPPRutas, ["IDSCR"], "IDCCPP = '{}'".format(
                                    idccpp))
                        ])[0]
                        ccpp[3] = ([
                            idruta[0] for idruta in arcpy.da.SearchCursor(
                                CCPPRutas, ["IDRUTA"], "IDCCPP = '{}'".format(
                                    idccpp))
                        ])[0]
                        cursorUC.updateRow(ccpp)
            del cursorUC

            for ccpp in arcpy.da.SearchCursor(
                    CCPPRutas,
                ["IDCCPP", "CODCCPP", "IDSCR", "IDAER", "IDRUTA", "OR_CCPP"]):
                with arcpy.da.UpdateCursor(
                        VIV_FC,
                    ["IDCCPP", "IDSCR", "IDAER", "IDRUTA", "OR_CCPP_DIST"],
                        "UBIGEO = '{}' AND CODCCPP = '{}'".format(
                            ubigeo, ccpp[1])) as cursorUC:
                    for viv in cursorUC:
                        viv[0] = ccpp[0]
                        viv[1] = ccpp[2]
                        viv[2] = ccpp[3]
                        viv[3] = ccpp[4]
                        viv[4] = ccpp[5]
                        cursorUC.updateRow(viv)
                del cursorUC
            # print len(CCPPRutas)

            orderby = (None,
                       'ORDER BY {}, {} ASC'.format('OR_CCPP_DIST',
                                                    'ID_REG_OR'))
            for ccpp in arcpy.da.SearchCursor(CCPPRutas, ["IDCCPP"]):
                contador = 0
                with arcpy.da.UpdateCursor(
                        VIV_FC,
                    [
                        "OR_VIV_RUTA"
                    ], "IDCCPP = '{}' AND ([P29] = 1 OR [P29] = 3 OR ( [P29] = 6 AND ( [P29M] =1 OR [P29M] =3 )))"
                        .format(ccpp[0]), None, False, orderby) as cursorUC:
                    for row in cursorUC:
                        row[0] = contador + 1
                        contador = contador + 1
                        cursorUC.updateRow(row)
                del cursorUC

        AER_tmp = arcpy.MakeFeatureLayer_management(SEGM_R_AER, "AER_tmp_1",
                                                    sql2)
        CCPP_tmp = arcpy.MakeFeatureLayer_management(SEGM_R_CCPP, "CCPP_tmp_1",
                                                     sql2)
        VIV_tmp = arcpy.MakeFeatureLayer_management(SEGM_R_VIV, "VIV_tmp_1",
                                                    sql2)
        for eliminar in [AER_tmp, CCPP_tmp, VIV_tmp]:
            arcpy.DeleteRows_management(eliminar)

        arcpy.Append_management(AER_FC, SEGM_R_AER, "NO_TEST")
        arcpy.Append_management(CCPP_FC, SEGM_R_CCPP, "NO_TEST")
        arcpy.Append_management(VIV_FC, SEGM_R_VIV, "NO_TEST")

        with arcpy.da.UpdateCursor(SEGM_R_AER, [
                'EST_SEG', 'EST_CROQUIS', 'EST_CONT', 'CONT_RUR_ERROR_01',
                'CONT_RUR_ERROR_02', 'CONT_RUR_ERROR_03', 'CONT_RUR_ERROR_04'
        ], sql2) as cursorUC:
            for x in cursorUC:
                x[0], x[1], x[2], x[3], x[4], x[5], x[6] = 4, 0, 0, 0, 0, 0, 0
                cursorUC.updateRow(x)
        del cursorUC

        conexion = settings.conectionDB_pymmsql()
        cursor = conexion.cursor()

        for eliminar in UbigeosParaProcesar:
            cursor.execute(
                "DELETE FROM SEGM_R_AER_POST WHERE UBIGEO = '{}'".format(
                    eliminar))
        conexion.commit()

        TableAER = arcpy.TableToTable_conversion(SEGM_R_AER, 'in_memory',
                                                 'TableAER')

        sql3 = Expresion_DB(UbigeosParaProcesar, "#", "A.UBIGEO")

        arcpy.Append_management(TableAER, SEGM_R_AER_POST, "NO_TEST")

        SQL_ProcAlm_CCPP = """UPDATE A SET A.VIV_CCPP = B.VIV_CCPP, A.IDSCR = B.IDSCR, A.IDAER = B.IDAER, A.IDRUTA = B.IDRUTA FROM CPV_SEGMENTACION_GDB.sde.TB_CCPP A INNER JOIN CPV_SEGMENTACION_GDB.sde.SEGM_R_CCPP_TMP B ON A.LLAVE_CCPP COLLATE DATABASE_DEFAULT = B.IDCCPP COLLATE DATABASE_DEFAULT WHERE {}""".format(
            sql3)

        SQL_ProcAlm_VIV = """UPDATE A SET A.OR_CCPP_DIST = B.OR_CCPP_DIST, A.IDSCR = B.IDSCR, A.IDAER = B.IDAER, A.IDRUTA = B.IDRUTA, A.OR_VIV_RUTA = B.OR_VIV_RUTA from CPV_SEGMENTACION_GDB.sde.TB_VIVIENDA_R A INNER JOIN CPV_SEGMENTACION_GDB.sde.SEGM_R_VIV_TMP B ON A.IDVIV COLLATE DATABASE_DEFAULT = B.IDVIV COLLATE DATABASE_DEFAULT WHERE {}""".format(
            sql3)

        cursor.execute(SQL_ProcAlm_CCPP)
        conexion.commit()

        cursor.execute(SQL_ProcAlm_VIV)
        conexion.commit()

    cursor.close()
    conexion.close()

    return sql2
def listado006ComunidadesIndigenasDistrital(ubigeos, WorkSpace, VW_DISTRITO, SEGM_R_CCPPRUTA, CCPP_INDIGENAS, SEGM_R_EMP, SEGM_R_AER, EscudoNacional, LogoInei):
    settings.conectionDB_arcpy()

    #   CREADO ESTILOS DE TEXTO

    h1 = PS(
        name='Heading1',
        fontSize=7,
        leading=8
    )

    h3 = PS(
        name='Normal',
        fontSize=6.5,
        leading=10,
        alignment=TA_CENTER
    )

    h4 = PS(
        name='Normal',
        fontSize=6.5,
        leading=10,
        alignment=TA_LEFT
    )

    h5 = PS(
        name='Heading1',
        fontSize=7,
        leading=8,
        alignment=TA_RIGHT
    )

    h_sub_tile = PS(
        name='Heading1',
        fontSize=10,
        leading=14,
        alignment=TA_CENTER
    )
    h_sub_tile_2 = PS(
        name='Heading1',
        fontSize=11,
        leading=14,
        alignment=TA_CENTER
    )

    for ubigeo in [x for x in arcpy.da.SearchCursor(VW_DISTRITO, ["UBIGEO", "DEPARTAMENTO", "PROVINCIA", "DISTRITO"], "UBIGEO = '{}'".format(ubigeos))]:

        conexion = settings.conectionDB_pymmsql()
        cursor = conexion.cursor()
        cursor.execute("EXEC USP_ACTUALIZA_COMIND '{}'".format(ubigeo[0]))
        conexion.commit()

        coddep = ubigeo[0][0:2]
        departamento = ubigeo[1]
        codprov = ubigeo[0][2:4]
        provincia = ubigeo[2]
        coddist = ubigeo[0][4:6]
        distrito = ubigeo[3]

        contadorci = 0
        orderbyci = (None, 'ORDER BY OR_CCPP ASC')
        for ci in [x for x in arcpy.da.SearchCursor(SEGM_R_CCPPRUTA, ["IDCCPP"], "UBIGEO = {} AND (COD_CC IS NOT NULL OR COD_CN IS NOT NULL OR NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL)".format(ubigeo[0]), None, False, orderbyci)]:
            contadorci = contadorci + 1
            orci = str(contadorci).zfill(2)
            idci = "{}{}".format(ci[0], orci)
            cursor.execute("UPDATE SEGM_R_CCPPRUTA SET OR_CI = '{}', IDCI = '{}' WHERE IDCCPP = '{}'".format(orci, idci, ci[0]))
            conexion.commit()

        # Extraer Emp

        viviendas_r = sum([x[0] for x in arcpy.da.SearchCursor(SEGM_R_CCPPRUTA, ["VIV_CCPP"], "UBIGEO = '{}' AND (NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL)".format(ubigeos))])
        viviendas_u = sum([x[0] for x in arcpy.da.SearchCursor(CCPP_INDIGENAS, ["AREA"], "UBIGEO = '{}' AND (NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL) AND AREA = '1'".format(ubigeos))])
        viviendas_existentes = viviendas_r + viviendas_u
        viviendas = viviendas_r

        Elementos = []

        #   AGREGANDO IMAGENES, TITULOS Y SUBTITULOS

        Titulo = Paragraph(u'CENSOS NACIONALES 2017: XII DE POBLACIÓN, VII DE VIVIENDA Y III DE COMUNIDADES INDÍGENAS', h_sub_tile)
        Titulo2 = Paragraph(u'III Censo de Comunidades Nativas y I Censo de Comunidades Campesinas', h_sub_tile)
        SubTitulo = Paragraph(u'<strong>LISTADO DE CENTROS POBLADOS DONDE SE REALIZA EL EMPADRONAMIENTO DEL CENSO A COMUNIDADES NATIVAS Y CAMPESINAS DEL DISTRITO</strong>', h_sub_tile_2)

        CabeceraPrincipal = [[Titulo, '', ''],
                             [Image(EscudoNacional, width=50, height=50), Titulo2,
                              Image(LogoInei, width=50, height=50)],
                             ['', SubTitulo, '']]

        Tabla0 = Table(CabeceraPrincipal, colWidths=[2 * cm, 14 * cm, 2 * cm])

        Tabla0.setStyle(TableStyle([
            ('GRID', (0, 0), (-1, -1), 1, colors.white),
            ('SPAN', (0, 1), (0, 2)),
            ('SPAN', (2, 1), (2, 2)),
            ('SPAN', (0, 0), (2, 0)),
            ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
            ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')
        ]))

        Elementos.append(Tabla0)
        Elementos.append(Spacer(0, 10))

        #   CREACION DE LAS TABLAS PARA LA ORGANIZACION DEL TEXTO
        #   Se debe cargar la informacion en aquellos espacios donde se encuentra el texto 'R'

        Filas = [
            ['', '', '', '', '', Paragraph(u'<b>Doc.CPV.03.25C</b>', h5)],
            [Paragraph(u'<b>A. UBICACIÓN GEOGRÁFICA</b>', h1), '', '', '', Paragraph(u'<b>B. TOTAL DE VIVIENDAS</b>', h1), u'{}'.format(viviendas)],
            [Paragraph(u'<b>DEPARTAMENTO</b>', h1), u'{}'.format(coddep), u'{}'.format(departamento), '', '', ''],
            [Paragraph(u'<b>PROVINCIA</b>', h1), u'{}'.format(codprov), u'{}'.format(provincia), '', '', ''],
            [Paragraph(u'<b>DISTRITO</b>', h1), u'{}'.format(coddist), u'{}'.format(distrito), '', '', ''],
            # ['', '', '', '', Paragraph(u'<b>C. TOTAL DE VIVIENDAS</b>', h1), u'{}'.format(viviendas)]
        ]

        #   Permite el ajuste del ancho de la tabla

        Tabla1 = Table(Filas,
                       colWidths=[3.7 * cm, 1 * cm, 7.1 * cm, 0.3 * cm, 5 * cm, 2.7 * cm])


        Tabla1.setStyle(TableStyle([
            ('TEXTCOLOR', (0, 0), (4, 0), colors.black),
            ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
            ('ALIGN', (1, 2), (1, 4), 'CENTER'),
            ('ALIGN', (4, 2), (4, 4), 'CENTER'),
            ('ALIGN', (0, 1), (2, 1), 'CENTER'),
            ('ALIGN', (4, 1), (4, 1), 'CENTER'),
            ('ALIGN', (5, 1), (5, 1), 'CENTER'),
            ('FONTSIZE', (0, 0), (-1, -1), 7),
            ('GRID', (0, 1), (2, 4), 1, colors.black),
            ('GRID', (4, 1), (5, 1), 1, colors.black),
            ('SPAN', (0, 1), (2, 1)),
            ('SPAN', (4, 1), (4, 1)),
            ('BACKGROUND', (0, 1), (2, 1), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
            ('BACKGROUND', (0, 2), (0, 4), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
            ('BACKGROUND', (4, 1), (4, 1), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255))
            # ('BACKGROUND', (4, 2), (4, 4), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
        ]))

        #   AGREGANDO LAS TABLAS A LA LISTA DE ELEMENTOS DEL PDF

        Elementos.append(Tabla1)
        Elementos.append(Spacer(0, 10))



        Filas2 = [
            [Paragraph(e, h3) for e in [u"<strong>C. INFORMACIÓN DE LA COMUNIDAD NATIVA Y/O CAMPESINA</strong>", "", "", "", "", "", "", "", "", "", ""]],
            [Paragraph(e, h3) for e in [u"<strong>Nº</strong>", u"<strong>Centro Poblado</strong>", "", "", "", "", "", "", u"<strong>Nombre de la Comunidad</strong>", u"<strong>Tipo de<br/>Comunidad</strong>", u"<strong>N° de<br/>viviendas</strong>"]],
            [Paragraph(e, h3) for e in["", u"<strong>Área</strong>", u"<strong>Sección</strong>", u"<strong>Aer INI</strong>", u"<strong>Aer FIN</strong>", u"<strong>Código</strong>", u"<strong>Nombre</strong>", u"<strong>Categoría</strong>", "", "", ""]],
            ]

        Tabla2 = Table(Filas2,
                       colWidths=[0.7 * cm, 1.5 * cm, 1.4 * cm, 1.1 * cm, 1.1 * cm, 1.3 * cm, 3.9 * cm, 1.6 * cm, 3.9 * cm, 1.8 * cm, 1.5 * cm])

        Tabla2.setStyle(TableStyle([
            ('GRID', (0, 0), (-1, -1), 1, colors.black),
            ('VALIGN', (0, 0), (-1, -1), 'CENTER'),
            ('BACKGROUND', (0, 0), (-1, -1), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
            ('SPAN', (0, 0), (10, 0)),
            ('SPAN', (0, 1), (0, 2)),
            ('SPAN', (8, 1), (8, 2)),
            ('SPAN', (1, 1), (7, 1)),
            ('SPAN', (9, 1), (9, 2)),
            ('SPAN', (10, 1), (10, 2))
        ]))

        Elementos.append(Tabla2)

        contador = 0

        listaCC_Urbano = [x for x in arcpy.da.SearchCursor(CCPP_INDIGENAS, ["CODCCPP", "NOMCCPP", "CATEGORIA", "NOM_CC", "VIV_CCPP", "VIV_CCPP", "VIV_CCPP", "VIV_CCPP", "VIV_CCPP"], "UBIGEO = '{}' AND (NOM_CC IS NOT NULL) AND AREA = '1'".format(ubigeos))]
        listaCN_Urbano = [x for x in arcpy.da.SearchCursor(CCPP_INDIGENAS, ["CODCCPP", "NOMCCPP", "CATEGORIA", "VIV_CCPP", "NOM_CN", "VIV_CCPP", "VIV_CCPP", "VIV_CCPP", "VIV_CCPP"], "UBIGEO = '{}' AND (NOM_CN IS NOT NULL) AND AREA = '1'".format(ubigeos))]
        listaCCPPindigenasRural = [x for x in arcpy.da.SearchCursor(SEGM_R_CCPPRUTA, ["CODCCPP", "NOMCCPP", "CAT_CCPP", "NOM_CC", "NOM_CN", "VIV_CCPP", "SCR", "AER_INI", "AER_FIN"], "UBIGEO = '{}' AND (NOM_CC IS NOT NULL OR NOM_CN IS NOT NULL)".format(ubigeos))]
        listaCCPPindigenas = listaCC_Urbano + listaCN_Urbano + listaCCPPindigenasRural
        for ci in listaCCPPindigenas:
            contador = contador + 1
            codccpp = ci[0]
            nomccpp = ci[1]
            catccpp = ci[2]

            if (ci[3] is not None) and (ci[4] is not None):
                nomci = ci[4] + ' / ' + ci[3]
            elif (ci[3] is not None) and (ci[4] is None):
                nomci = ci[3]
            elif (ci[4] is not None) and (ci[3] is None):
                nomci = ci[4]

            if (ci[3] is not None) and (ci[4] is not None):
                tipoci = 'NATIVA / CAMPESINA'
            elif (ci[3] is not None) and (ci[4] is None):
                tipoci = 'CAMPESINA'
            elif (ci[4] is not None) and (ci[3] is None):
                tipoci = 'NATIVA'
            # tipoci = 'NATIVA' if ci[3] is None else 'CAMPESINA'
            vivccpp = '' if ci[5] is None else ci[5]
            area = 'URBANO' if ci[6] is None else 'RURAL'
            seccion = '' if ci[6] is None else ci[6]
            aeriniccpp = '' if ci[7] is None else ci[7]
            aerfinccpp = '' if ci[8] is None else ci[8]


            Filas3 = [[u'{}'.format(contador), Paragraph(u'{}'.format(area), h4), u'{}'.format(seccion), u'{}'.format(aeriniccpp), u'{}'.format(aerfinccpp), u'{}'.format(codccpp), Paragraph(u'{}'.format(nomccpp), h4), Paragraph(u'{}'.format(catccpp), h4), Paragraph(u'{}'.format(nomci), h4), Paragraph(u'{}'.format(tipoci), h4), u'{}'.format(vivccpp)]]

            RegistrosIngresados = Table(Filas3, colWidths=[0.7 * cm, 1.5 * cm, 1.4 * cm, 1.1 * cm, 1.1 * cm, 1.3 * cm, 3.9 * cm, 1.6 * cm, 3.9 * cm, 1.8 * cm, 1.5 * cm], rowHeights=[1 * cm])

            RegistrosIngresados.setStyle(TableStyle([
                ('GRID', (0, 0), (-1, -1), 1, colors.black),
                ('FONTSIZE', (0, 0), (-1, -1), 6.5),
                ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                ('ALIGN', (0, 0), (1, 0), 'CENTER'),
                ('ALIGN', (10, 0), (10, 0), 'CENTER'),
            ]))

            Elementos.append(RegistrosIngresados)

        Elementos.append(Spacer(0, 10))

        Filas4 = [[Paragraph(u"<strong>D. OBSERVACIONES:</strong>", h3)]]
        Observaciones = Table(Filas4, colWidths=[19.8 * cm], style=[('GRID', (0, 0), (-1, -1), 1, colors.black),
                                                                    ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
                                                                    ('BACKGROUND', (0, 0), (-1, -1), colors.Color(220.0 / 255, 220.0 / 255, 220.0 / 255)),
                                                                    ])
        Elementos.append(Observaciones)

        nota = u"<strong>{}</strong>".format('.'*909)     # ACEPTA 302 CARACTERES
        Filas5 = [[Paragraph(u"<strong>{}</strong>".format(nota), h4)]]
        NotaEmpadronador = Table(Filas5, colWidths=[19.8 * cm], rowHeights=[1.5 * cm], style=[('GRID', (0, 0), (-1, -1), 1, colors.black), ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')])
        Elementos.append(NotaEmpadronador)


        PathPDF = r"{}\Rural\{}\{}-CI.pdf".format(WorkSpace, ubigeo[0], ubigeo[0])
        print PathPDF

        pdf = SimpleDocTemplate(PathPDF, pagesize=A4, rightMargin=65, leftMargin=65, topMargin=0.5 * cm, bottomMargin=0.5 * cm, )

        #   GENERACION DEL PDF FISICO

        if viviendas_existentes != 0:
            pdf.build(Elementos)