def interruptos_por_actividades(request):
    anno_actual = datetime.today().year
    mes_actual = datetime.today().month
    categoria_usuario = request.user.perfil_usuario.categoria.nombre
    organismo = request.user.perfil_usuario.organismo
    nombre_organismo = organismo.nombre.encode('utf-8').strip()
    num_anno = anno_actual

    if mes_actual == 12:
        num_anno = anno_actual - 1

    response = HttpResponse(
        content_type=
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    if categoria_usuario == 'interrupto':
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_por_actividades_(%s)_(%s_%s).xlsx" % (
                str(nombre_organismo).replace(
                    " ", "_"), obtener_mes(mes_actual - 1), num_anno)
    else:
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_por_actividades_(%s_%s).xlsx" % (
                obtener_mes(mes_actual - 1), num_anno)

    book = Workbook(response, {'in_memory': True})
    worksheet_data = book.add_worksheet("Interruptos por Provincias")

    formato = book.add_format({'bold': True, 'border': 1})
    formato1 = book.add_format({
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1
    })
    formato5 = book.add_format({'border': 1, 'text_wrap': True})
    formato_organismos = book.add_format({'bold': True, 'border': 1})

    worksheet_data.write("A1", "OACE-OSDE / Actividades", formato1)
    worksheet_data.set_column("A:A", 24)
    worksheet_data.set_column("B:B", 19)
    worksheet_data.set_column("C:C", 21)
    worksheet_data.set_column("D:D", 21)

    actividades = ActividadInterrupto.objects.filter(activo=True).exclude(id=3)
    posicion_total_derecho = actividades.count() + 1
    totales = 0
    lista_totales = []

    for indice, a in enumerate(actividades):
        lista_totales.insert(indice, totales)
        worksheet_data.write(0, indice + 1, a.actividad, formato)

    worksheet_data.write(0, posicion_total_derecho, "Totales", formato)

    if categoria_usuario == 'interrupto':
        if es_oace(organismo):
            osdes = obtener_osdes_de_un_oace(organismo)
            if osdes.__len__() > 0:
                interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                         organismo__id__in=[osde.id for osde in osdes]
                                                         ) | \
                    Interruptos.objects.filter(organismo=organismo)
            else:
                interruptos = Interruptos.objects.filter(
                    fecha_registro__year=anno_actual, organismo=organismo)
            organismos = Organismo.objects.filter(id=organismo.id)
        else:
            interruptos = Interruptos.objects.filter(
                fecha_registro__year=anno_actual, organismo=organismo)
        query = """SELECT id
                        FROM public."SGMGU_interruptos" t where
                            date_part('month',t.fecha_registro)=""" + unicode(
            mes_actual) + """ AND
                            date_part('year',t.fecha_registro)=""" + unicode(
                anno_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = Interruptos.objects.filter(id__in=ids_interruptos)

    elif categoria_usuario == 'administrador':
        query = """SELECT id
                FROM public."SGMGU_interruptos" t where
                    date_part('month',t.fecha_registro)=""" + unicode(
            mes_actual) + """ AND
                    date_part('year',t.fecha_registro)=""" + unicode(
                anno_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = Interruptos.objects.filter(id__in=ids_interruptos)
        organismos = obtener_oaces()

    inicio_fila = 1
    i = 0

    if es_oace(organismo) or categoria_usuario == 'administrador':

        for oace in organismos:

            worksheet_data.write(inicio_fila + i, 0, oace.siglas,
                                 formato_organismos)  # organismo

            totales_a = 0

            for indice, actividad in enumerate(actividades):

                worksheet_data.write(
                    inicio_fila + i, indice + 1,
                    totales_interruptos_organismo_actividades(
                        interruptos, oace, actividad), formato_organismos)
                lista_totales[indice] = lista_totales[
                    indice] + totales_interruptos_organismo_actividades(
                        interruptos, oace, actividad)
                totales_a = totales_a + totales_interruptos_organismo_actividades(
                    interruptos, oace, actividad)

                worksheet_data.write(inicio_fila + i, posicion_total_derecho,
                                     totales_a, formato)

            i = i + 1

            l_interruptos = interruptos.filter(organismo__id=oace.id)
            for interrupto in l_interruptos:

                worksheet_data.write(inicio_fila + i, 0,
                                     interrupto.entidad.e_nombre,
                                     formato5)  # entidad

                totales_a = 0

                for indice, actividad in enumerate(actividades):
                    worksheet_data.write(
                        inicio_fila + i, indice + 1,
                        totales_interruptos_actividades(interrupto, actividad),
                        formato5)
                    totales_a = totales_a + totales_interruptos_actividades(
                        interrupto, actividad)

                    worksheet_data.write(inicio_fila + i,
                                         posicion_total_derecho, totales_a,
                                         formato)

                i = i + 1

            osdes = obtener_osdes_de_un_oace(oace)

            if obtener_osdes_de_un_oace(oace).__len__() > 0:
                for osde in osdes:

                    worksheet_data.write(inicio_fila + i, 0, osde.siglas,
                                         formato_organismos)  # osde

                    totales_a = 0

                    for indice, actividad in enumerate(actividades):

                        worksheet_data.write(
                            inicio_fila + i, indice + 1,
                            totales_interruptos_organismo_actividades(
                                interruptos, osde, actividad),
                            formato_organismos)
                        lista_totales[indice] = lista_totales[
                            indice] + totales_interruptos_organismo_actividades(
                                interruptos, osde, actividad)
                        totales_a = totales_a + totales_interruptos_organismo_actividades(
                            interruptos, osde, actividad)

                        worksheet_data.write(inicio_fila + i,
                                             posicion_total_derecho, totales_a,
                                             formato)

                    i = i + 1

                    l_interruptos = interruptos.filter(organismo_id=osde.id)

                    for interrupto in l_interruptos:

                        worksheet_data.write(inicio_fila + i, 0,
                                             interrupto.entidad.e_nombre,
                                             formato5)  # entidad

                        totales_a = 0

                        for indice, actividad in enumerate(actividades):

                            worksheet_data.write(
                                inicio_fila + i, indice + 1,
                                totales_interruptos_actividades(
                                    interrupto, actividad), formato5)
                            totales_a = totales_a + totales_interruptos_actividades(
                                interrupto, actividad)

                            worksheet_data.write(inicio_fila + i,
                                                 posicion_total_derecho,
                                                 totales_a, formato)

                        i = i + 1

    if not es_oace(organismo):

        worksheet_data.write(inicio_fila + i, 0, organismo.siglas,
                             formato_organismos)  # organismo

        totales_a = 0

        for indice, actividad in enumerate(actividades):
            worksheet_data.write(
                inicio_fila + i, indice + 1,
                totales_interruptos_organismo_actividades(
                    interruptos, organismo, actividad), formato_organismos)
            lista_totales[indice] = lista_totales[
                indice] + totales_interruptos_organismo_actividades(
                    interruptos, organismo, actividad)
            totales_a = totales_a + totales_interruptos_organismo_actividades(
                interruptos, organismo, actividad)

            worksheet_data.write(inicio_fila + i, posicion_total_derecho,
                                 totales_a, formato)

        i = i + 1

        l_interruptos = interruptos.filter(organismo__nombre=organismo)

        for interrupto in l_interruptos:

            worksheet_data.write(inicio_fila + i, 0,
                                 interrupto.entidad.e_nombre,
                                 formato5)  # entidad

            totales_a = 0

            for indice, a in enumerate(actividades):
                worksheet_data.write(
                    inicio_fila + i, indice + 1,
                    totales_interruptos_actividades(interrupto, actividad),
                    formato5)
                totales_a = totales_a + totales_interruptos_actividades(
                    interrupto, actividad)

                worksheet_data.write(inicio_fila + i, posicion_total_derecho,
                                     totales_a, formato)

            i = i + 1

    total = 0

    worksheet_data.write(inicio_fila + i, 0, "TOTALES", formato_organismos)
    for indice, actividad in enumerate(actividades):
        worksheet_data.write(inicio_fila + i, indice + 1,
                             lista_totales[indice], formato_organismos)
        total = total + lista_totales[indice]

        worksheet_data.write(inicio_fila + i, posicion_total_derecho, total,
                             formato)

    book.close()
    return response
def interruptos_por_organismos_sin_entidades(request):
    anno_actual = datetime.today().year
    mes_actual = datetime.today().month
    categoria_usuario = request.user.perfil_usuario.categoria.nombre
    organismo = request.user.perfil_usuario.organismo
    nombre_organismo = organismo.nombre.encode('utf-8').strip()
    num_anno = anno_actual

    if mes_actual == 12:
        num_anno = anno_actual - 1

    response = HttpResponse(
        content_type=
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

    if categoria_usuario == 'interrupto' or categoria_usuario == 'interrupto':
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_por_organismos_(%s)_(%s_%s).xlsx" % (
                str(nombre_organismo).replace(
                    " ", "_"), obtener_mes(mes_actual - 1), num_anno)
    else:
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_por_organismos_(%s_%s).xlsx" % (
                obtener_mes(mes_actual - 1), num_anno)

    book = Workbook(response, {'in_memory': True})
    worksheet_data = book.add_worksheet("Interruptos por Organismos")

    formato1 = book.add_format({
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1
    })
    formato2 = book.add_format({
        'rotation': 45,
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1,
        'text_wrap': True
    })
    formato3 = book.add_format({'align': 'center', 'bold': True, 'border': 1})
    formato4 = book.add_format({
        'rotation': 90,
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1,
        'text_wrap': True
    })
    formato5 = book.add_format({'border': 1, 'text_wrap': True})
    formato_organismos = book.add_format({'bold': True, 'border': 1})

    worksheet_data.merge_range('A1:A4', "OACE-OSDE", formato1)
    worksheet_data.merge_range(
        "B1:O1",
        "Interruptos: %s-%s" % (obtener_mes(mes_actual - 1), num_anno),
        formato3)
    worksheet_data.merge_range("B2:B4", "Total", formato2)
    worksheet_data.merge_range("C2:C4", "Femeninos", formato2)
    worksheet_data.merge_range("D2:D4", "Jovenes", formato2)
    worksheet_data.merge_range("E2:H2", "Tiempo de Interrupcion", formato3)
    worksheet_data.merge_range("I2:O2", "Situacion Actual", formato3)
    worksheet_data.merge_range("E3:E4", "Hasta 30 dias", formato4)
    worksheet_data.merge_range("F3:F4", "Mas de 30 y hasta 60 dias", formato4)
    worksheet_data.merge_range("G3:G4", "Mas de 60 dias y hasta 1 anno",
                               formato4)
    worksheet_data.merge_range("H3:H4", "Mas de 1 anno", formato4)
    worksheet_data.merge_range("I3:K3", "Reubicados Temporales", formato3)
    worksheet_data.write("I4", "En la misma entidad", formato4)
    worksheet_data.write("J4", "En otra entidad del mismo organismo", formato4)
    worksheet_data.write("K4", "En una entidad de otro organismo", formato4)
    worksheet_data.merge_range("L3:L4", "Cobrando Garantia Salarial", formato4)
    worksheet_data.merge_range("M3:M4", "Sin Garantia Salarial", formato4)
    worksheet_data.merge_range("N3:N4", "Bajas", formato4)
    worksheet_data.merge_range("O3:O4", "Propuesto a Disponibles", formato4)

    worksheet_data.set_column("A:A", 20.58)
    worksheet_data.set_row(3, 80)

    if categoria_usuario == 'interrupto':
        if es_oace(organismo):
            osdes = obtener_osdes_de_un_oace(organismo)
            if osdes.__len__() > 0:
                interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                         organismo__id__in=[osde.id for osde in osdes]
                                                         ) | \
                              Interruptos.objects.filter(organismo=organismo)
            else:
                interruptos = Interruptos.objects.filter(
                    fecha_registro__year=anno_actual, organismo=organismo)
            organismos = Organismo.objects.filter(id=organismo.id)
        else:
            interruptos = Interruptos.objects.filter(
                fecha_registro__year=anno_actual, organismo=organismo)

        query = """SELECT id
                        FROM public."SGMGU_interruptos" t where
                            date_part('month',t.fecha_registro)=""" + unicode(
            mes_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = interruptos.filter(id__in=ids_interruptos)

    elif categoria_usuario == 'administrador':

        query = """SELECT id
                FROM public."SGMGU_interruptos" t where
                    date_part('month',t.fecha_registro)=""" + unicode(
            mes_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = Interruptos.objects.filter(
            fecha_registro__year=anno_actual, id__in=ids_interruptos)

        organismos = obtener_oaces()

    inicio_fila = 4
    i = 0

    totales = 0
    totales_femeninos = 0
    totales_jovenes = 0
    totales_hasta_treinta_dias = 0
    totales_mas_treinta_menos_sesenta_dias = 0
    totales_mas_sesenta_dias_menos_un_anno = 0
    totales_mas_un_anno = 0
    totales_reubicados_temporal_misma_entidad = 0
    totales_reubicados_temporal_mismo_organismo = 0
    totales_reubicados_temporal_otro_organismo = 0
    totales_cobrando_garantia_salarial = 0
    totales_sin_garantia_salarial = 0
    totales_baja = 0
    totales_propuesto_disponible = 0

    if es_oace(organismo) or categoria_usuario == 'administrador':

        for oace in organismos:

            org = interruptos.filter(organismo=oace)
            dict_totales = totales_por_organismo(org)
            t = dict_totales['t']
            t_femeninos = dict_totales['t_femeninos']
            t_jovenes = dict_totales['t_jovenes']
            t_hasta_treinta_dias = dict_totales['t_hasta_treinta_dias']
            t_mas_treinta_menos_sesenta_dias = dict_totales[
                't_mas_treinta_menos_sesenta_dias']
            t_mas_sesenta_dias_menos_un_anno = dict_totales[
                't_mas_sesenta_dias_menos_un_anno']
            t_mas_un_anno = dict_totales['t_mas_un_anno']
            t_reubicados_temporal_misma_entidad = dict_totales[
                't_reubicados_temporal_misma_entidad']
            t_reubicados_temporal_mismo_organismo = dict_totales[
                't_reubicados_temporal_mismo_organismo']
            t_reubicados_temporal_otro_organismo = dict_totales[
                't_reubicados_temporal_otro_organismo']
            t_cobrando_garantia_salarial = dict_totales[
                't_cobrando_garantia_salarial']
            t_sin_garantia_salarial = dict_totales['t_sin_garantia_salarial']
            t_baja = dict_totales['t_baja']
            t_propuesto_disponible = dict_totales['t_propuesto_disponible']

            worksheet_data.write(inicio_fila + i, 0, oace.siglas,
                                 formato_organismos)  # organismo
            worksheet_data.write(inicio_fila + i, 1, t, formato5)  # total
            worksheet_data.write(inicio_fila + i, 2, t_femeninos,
                                 formato5)  # totales femeninos
            worksheet_data.write(inicio_fila + i, 3, t_jovenes,
                                 formato5)  # totales jóvenes
            worksheet_data.write(inicio_fila + i, 4, t_hasta_treinta_dias,
                                 formato5)  # menos de 30 dias
            worksheet_data.write(inicio_fila + i, 5,
                                 t_mas_treinta_menos_sesenta_dias,
                                 formato5)  # entre 30 y 60 dias
            worksheet_data.write(inicio_fila + i, 6,
                                 t_mas_sesenta_dias_menos_un_anno,
                                 formato5)  # entre 60 dias y un año
            worksheet_data.write(inicio_fila + i, 7, t_mas_un_anno,
                                 formato5)  # mas de un año
            worksheet_data.write(
                inicio_fila + i, 8, t_reubicados_temporal_misma_entidad,
                formato5)  # reubicado temporal dentro de la misma entidad
            worksheet_data.write(
                inicio_fila + i, 9, t_reubicados_temporal_mismo_organismo,
                formato5)  # reubicado temporal dentro del mismo organismo
            worksheet_data.write(
                inicio_fila + i, 10, t_reubicados_temporal_otro_organismo,
                formato5)  # reubicado temporal dentro de otro organismo
            worksheet_data.write(inicio_fila + i, 11,
                                 t_cobrando_garantia_salarial,
                                 formato5)  # cobrando garantia salarial
            worksheet_data.write(inicio_fila + i, 12, t_sin_garantia_salarial,
                                 formato5)  # sin garantia salarial
            worksheet_data.write(inicio_fila + i, 13, t_baja, formato5)  # baja
            worksheet_data.write(inicio_fila + i, 14, t_propuesto_disponible,
                                 formato5)  # propuesto a disponible

            totales += t
            totales_femeninos += t_femeninos
            totales_jovenes += t_jovenes
            totales_hasta_treinta_dias += t_hasta_treinta_dias
            totales_mas_treinta_menos_sesenta_dias += t_mas_treinta_menos_sesenta_dias
            totales_mas_sesenta_dias_menos_un_anno += t_mas_sesenta_dias_menos_un_anno
            totales_mas_un_anno += t_mas_un_anno
            totales_reubicados_temporal_misma_entidad += t_reubicados_temporal_misma_entidad
            totales_reubicados_temporal_mismo_organismo += t_reubicados_temporal_mismo_organismo
            totales_reubicados_temporal_otro_organismo += t_reubicados_temporal_otro_organismo
            totales_cobrando_garantia_salarial += t_cobrando_garantia_salarial
            totales_sin_garantia_salarial += t_sin_garantia_salarial
            totales_baja += t_baja
            totales_propuesto_disponible += t_propuesto_disponible

            i = i + 1

            # for interrupto in interruptos:
            #     if interrupto.organismo_id == oace.id:
            #         worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad
            #         worksheet_data.write(inicio_fila + i, 1, total_interruptos_por_entidad(interrupto), formato5)  # total
            #         worksheet_data.write(inicio_fila + i, 2, total_femeninos_interruptos_por_entidad(interrupto), formato5)  # totales femeninos
            #         worksheet_data.write(inicio_fila + i, 3, total_jovenes_interruptos_por_entidad(interrupto), formato5)  # totales jóvenes
            #         worksheet_data.write(inicio_fila + i, 4, interruptos_hasta_treinta_dias_por_entidad(interrupto), formato5)  # menos de 30 dias
            #         worksheet_data.write(inicio_fila + i, 5, interruptos_mas_treinta_hasta_sesenta_por_entidad(interrupto), formato5)  # entre 30 y 60 dias
            #         worksheet_data.write(inicio_fila + i, 6, interruptos_mas_sesenta_menos_un_anno_por_entidad(interrupto), formato5)  # entre 60 dias y un año
            #         worksheet_data.write(inicio_fila + i, 7, interruptos_mas_un_anno_por_entidad(interrupto), formato5)  # mas de un año
            #         worksheet_data.write(inicio_fila + i, 8, interruptos_reubicado_misma_entidad_por_entidad(interrupto), formato5)  # reubicado temporal dentro de la misma entidad
            #         worksheet_data.write(inicio_fila + i, 9, interruptos_reubicado_mismo_organismo_por_entidad(interrupto), formato5)  # reubicado temporal dentro del mismo organismo
            #         worksheet_data.write(inicio_fila + i, 10, interruptos_reubicado_otro_organismo_por_entidad(interrupto), formato5)  # reubicado temporal dentro de otro organismo
            #         worksheet_data.write(inicio_fila + i, 11, interruptos_cobrando_garantia_salarial_por_entidad(interrupto), formato5)  # cobrando garantia salarial
            #         worksheet_data.write(inicio_fila + i, 12, interruptos_sin_garantia_salarial_por_entidad(interrupto), formato5)  # sin garantia salarial
            #         worksheet_data.write(inicio_fila + i, 13, interruptos_baja_por_entidad(interrupto), formato5)  # baja
            #         worksheet_data.write(inicio_fila + i, 14, interruptos_propuesto_disponible_por_entidad(interrupto), formato5)  # propuesto a disponible
            #         i = i + 1

            osdes = obtener_osdes_de_un_oace(oace)
            if osdes.__len__() > 0:
                for osde in osdes:
                    org = interruptos.filter(organismo=osde)
                    dict_totales = totales_por_organismo(org)
                    t = dict_totales['t']
                    t_femeninos = dict_totales['t_femeninos']
                    t_jovenes = dict_totales['t_jovenes']
                    t_hasta_treinta_dias = dict_totales['t_hasta_treinta_dias']
                    t_mas_treinta_menos_sesenta_dias = dict_totales[
                        't_mas_treinta_menos_sesenta_dias']
                    t_mas_sesenta_dias_menos_un_anno = dict_totales[
                        't_mas_sesenta_dias_menos_un_anno']
                    t_mas_un_anno = dict_totales['t_mas_un_anno']
                    t_reubicados_temporal_misma_entidad = dict_totales[
                        't_reubicados_temporal_misma_entidad']
                    t_reubicados_temporal_mismo_organismo = dict_totales[
                        't_reubicados_temporal_mismo_organismo']
                    t_reubicados_temporal_otro_organismo = dict_totales[
                        't_reubicados_temporal_otro_organismo']
                    t_cobrando_garantia_salarial = dict_totales[
                        't_cobrando_garantia_salarial']
                    t_sin_garantia_salarial = dict_totales[
                        't_sin_garantia_salarial']
                    t_baja = dict_totales['t_baja']
                    t_propuesto_disponible = dict_totales[
                        't_propuesto_disponible']

                    worksheet_data.write(inicio_fila + i, 0, osde.siglas,
                                         formato_organismos)  # osde
                    worksheet_data.write(inicio_fila + i, 1, t,
                                         formato5)  # total
                    worksheet_data.write(inicio_fila + i, 2, t_femeninos,
                                         formato5)  # totales femeninos
                    worksheet_data.write(inicio_fila + i, 3, t_jovenes,
                                         formato5)  # totales jóvenes
                    worksheet_data.write(inicio_fila + i, 4,
                                         t_hasta_treinta_dias,
                                         formato5)  # menos de 30 dias
                    worksheet_data.write(inicio_fila + i, 5,
                                         t_mas_treinta_menos_sesenta_dias,
                                         formato5)  # entre 30 y 60 dias
                    worksheet_data.write(inicio_fila + i, 6,
                                         t_mas_sesenta_dias_menos_un_anno,
                                         formato5)  # entre 60 dias y un año
                    worksheet_data.write(inicio_fila + i, 7, t_mas_un_anno,
                                         formato5)  # mas de un año
                    worksheet_data.write(
                        inicio_fila + i, 8,
                        t_reubicados_temporal_misma_entidad, formato5
                    )  # reubicado temporal dentro de la misma entidad
                    worksheet_data.write(
                        inicio_fila + i, 9,
                        t_reubicados_temporal_mismo_organismo, formato5
                    )  # reubicado temporal dentro del mismo organismo
                    worksheet_data.write(
                        inicio_fila + i, 10,
                        t_reubicados_temporal_otro_organismo, formato5
                    )  # reubicado temporal dentro de otro organismo
                    worksheet_data.write(
                        inicio_fila + i, 11, t_cobrando_garantia_salarial,
                        formato5)  # cobrando garantia salarial
                    worksheet_data.write(inicio_fila + i, 12,
                                         t_sin_garantia_salarial,
                                         formato5)  # sin garantia salarial
                    worksheet_data.write(inicio_fila + i, 13, t_baja,
                                         formato5)  # baja
                    worksheet_data.write(inicio_fila + i, 14,
                                         t_propuesto_disponible,
                                         formato5)  # propuesto a disponible

                    totales += t
                    totales_femeninos += t_femeninos
                    totales_jovenes += t_jovenes
                    totales_hasta_treinta_dias += t_hasta_treinta_dias
                    totales_mas_treinta_menos_sesenta_dias += t_mas_treinta_menos_sesenta_dias
                    totales_mas_sesenta_dias_menos_un_anno += t_mas_sesenta_dias_menos_un_anno
                    totales_mas_un_anno += t_mas_un_anno
                    totales_reubicados_temporal_misma_entidad += t_reubicados_temporal_misma_entidad
                    totales_reubicados_temporal_mismo_organismo += t_reubicados_temporal_mismo_organismo
                    totales_reubicados_temporal_otro_organismo += t_reubicados_temporal_otro_organismo
                    totales_cobrando_garantia_salarial += t_cobrando_garantia_salarial
                    totales_sin_garantia_salarial += t_sin_garantia_salarial
                    totales_baja += t_baja
                    totales_propuesto_disponible += t_propuesto_disponible

                    i = i + 1

                    # l_interruptos = interruptos.filter(organismo_id=osde)
                    #
                    # for interrupto in l_interruptos:
                    #     worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad
                    #     worksheet_data.write(inicio_fila + i, 1, total_interruptos_por_entidad(interrupto), formato5)  # total
                    #     worksheet_data.write(inicio_fila + i, 2, total_femeninos_interruptos_por_entidad(interrupto), formato5)  # totales femeninos
                    #     worksheet_data.write(inicio_fila + i, 3, total_jovenes_interruptos_por_entidad(interrupto), formato5)  # totales jóvenes
                    #     worksheet_data.write(inicio_fila + i, 4, interruptos_hasta_treinta_dias_por_entidad(interrupto), formato5)  # menos de 30 dias
                    #     worksheet_data.write(inicio_fila + i, 5, interruptos_mas_treinta_hasta_sesenta_por_entidad(interrupto), formato5)  # entre 30 y 60 dias
                    #     worksheet_data.write(inicio_fila + i, 6, interruptos_mas_sesenta_menos_un_anno_por_entidad(interrupto), formato5)  # entre 60 dias y un año
                    #     worksheet_data.write(inicio_fila + i, 7, interruptos_mas_un_anno_por_entidad(interrupto), formato5)  # mas de un año
                    #     worksheet_data.write(inicio_fila + i, 8, interruptos_reubicado_misma_entidad_por_entidad(interrupto), formato5)  # reubicado temporal dentro de la misma entidad
                    #     worksheet_data.write(inicio_fila + i, 9, interruptos_reubicado_mismo_organismo_por_entidad(interrupto), formato5)  # reubicado temporal dentro del mismo organismo
                    #     worksheet_data.write(inicio_fila + i, 10, interruptos_reubicado_otro_organismo_por_entidad(interrupto), formato5)  # reubicado temporal dentro de otro organismo
                    #     worksheet_data.write(inicio_fila + i, 11, interruptos_cobrando_garantia_salarial_por_entidad(interrupto), formato5)  # cobrando garantia salarial
                    #     worksheet_data.write(inicio_fila + i, 12, interruptos_sin_garantia_salarial_por_entidad(interrupto), formato5)  # sin garantia salarial
                    #     worksheet_data.write(inicio_fila + i, 13, interruptos_baja_por_entidad(interrupto), formato5)  # baja
                    #     worksheet_data.write(inicio_fila + i, 14, interruptos_propuesto_disponible_por_entidad(interrupto), formato5)  # propuesto a disponible
                    #     i = i + 1

    if not es_oace(organismo):

        org = interruptos.filter(organismo=organismo)
        dict_totales = totales_por_organismo(org)
        t = dict_totales['t']
        t_femeninos = dict_totales['t_femeninos']
        t_jovenes = dict_totales['t_jovenes']
        t_hasta_treinta_dias = dict_totales['t_hasta_treinta_dias']
        t_mas_treinta_menos_sesenta_dias = dict_totales[
            't_mas_treinta_menos_sesenta_dias']
        t_mas_sesenta_dias_menos_un_anno = dict_totales[
            't_mas_sesenta_dias_menos_un_anno']
        t_mas_un_anno = dict_totales['t_mas_un_anno']
        t_reubicados_temporal_misma_entidad = dict_totales[
            't_reubicados_temporal_misma_entidad']
        t_reubicados_temporal_mismo_organismo = dict_totales[
            't_reubicados_temporal_mismo_organismo']
        t_reubicados_temporal_otro_organismo = dict_totales[
            't_reubicados_temporal_otro_organismo']
        t_cobrando_garantia_salarial = dict_totales[
            't_cobrando_garantia_salarial']
        t_sin_garantia_salarial = dict_totales['t_sin_garantia_salarial']
        t_baja = dict_totales['t_baja']
        t_propuesto_disponible = dict_totales['t_propuesto_disponible']

        worksheet_data.write(inicio_fila + i, 0, organismo.siglas,
                             formato_organismos)  # organismo
        worksheet_data.write(inicio_fila + i, 1, t, formato5)  # total
        worksheet_data.write(inicio_fila + i, 2, t_femeninos,
                             formato5)  # totales femeninos
        worksheet_data.write(inicio_fila + i, 3, t_jovenes,
                             formato5)  # totales jóvenes
        worksheet_data.write(inicio_fila + i, 4, t_hasta_treinta_dias,
                             formato5)  # menos de 30 dias
        worksheet_data.write(inicio_fila + i, 5,
                             t_mas_treinta_menos_sesenta_dias,
                             formato5)  # entre 30 y 60 dias
        worksheet_data.write(inicio_fila + i, 6,
                             t_mas_sesenta_dias_menos_un_anno,
                             formato5)  # entre 60 dias y un año
        worksheet_data.write(inicio_fila + i, 7, t_mas_un_anno,
                             formato5)  # mas de un año
        worksheet_data.write(
            inicio_fila + i, 8, t_reubicados_temporal_misma_entidad,
            formato5)  # reubicado temporal dentro de la misma entidad
        worksheet_data.write(
            inicio_fila + i, 9, t_reubicados_temporal_mismo_organismo,
            formato5)  # reubicado temporal dentro del mismo organismo
        worksheet_data.write(
            inicio_fila + i, 10, t_reubicados_temporal_otro_organismo,
            formato5)  # reubicado temporal dentro de otro organismo
        worksheet_data.write(inicio_fila + i, 11, t_cobrando_garantia_salarial,
                             formato5)  # cobrando garantia salarial
        worksheet_data.write(inicio_fila + i, 12, t_sin_garantia_salarial,
                             formato5)  # sin garantia salarial
        worksheet_data.write(inicio_fila + i, 13, t_baja, formato5)  # baja
        worksheet_data.write(inicio_fila + i, 14, t_propuesto_disponible,
                             formato5)  # propuesto a disponible

        totales += t
        totales_femeninos += t_femeninos
        totales_jovenes += t_jovenes
        totales_hasta_treinta_dias += t_hasta_treinta_dias
        totales_mas_treinta_menos_sesenta_dias += t_mas_treinta_menos_sesenta_dias
        totales_mas_sesenta_dias_menos_un_anno += t_mas_sesenta_dias_menos_un_anno
        totales_mas_un_anno += t_mas_un_anno
        totales_reubicados_temporal_misma_entidad += t_reubicados_temporal_misma_entidad
        totales_reubicados_temporal_mismo_organismo += t_reubicados_temporal_mismo_organismo
        totales_reubicados_temporal_otro_organismo += t_reubicados_temporal_otro_organismo
        totales_cobrando_garantia_salarial += t_cobrando_garantia_salarial
        totales_sin_garantia_salarial += t_sin_garantia_salarial
        totales_baja += t_baja
        totales_propuesto_disponible += t_propuesto_disponible

        i = i + 1

        for interrupto in interruptos:
            if interrupto.organismo_id == organismo.id:
                worksheet_data.write(inicio_fila + i, 0,
                                     interrupto.entidad.e_nombre,
                                     formato5)  # entidad
                worksheet_data.write(inicio_fila + i, 1,
                                     total_interruptos_por_entidad(interrupto),
                                     formato5)  # total
                worksheet_data.write(
                    inicio_fila + i, 2,
                    total_femeninos_interruptos_por_entidad(interrupto),
                    formato5)  # totales femeninos
                worksheet_data.write(
                    inicio_fila + i, 3,
                    total_jovenes_interruptos_por_entidad(interrupto),
                    formato5)  # totales jóvenes
                worksheet_data.write(
                    inicio_fila + i, 4,
                    interruptos_hasta_treinta_dias_por_entidad(interrupto),
                    formato5)  # menos de 30 dias
                worksheet_data.write(
                    inicio_fila + i, 5,
                    interruptos_mas_treinta_hasta_sesenta_por_entidad(
                        interrupto), formato5)  # entre 30 y 60 dias
                worksheet_data.write(
                    inicio_fila + i, 6,
                    interruptos_mas_sesenta_menos_un_anno_por_entidad(
                        interrupto), formato5)  # entre 60 dias y un año
                worksheet_data.write(
                    inicio_fila + i, 7,
                    interruptos_mas_un_anno_por_entidad(interrupto),
                    formato5)  # mas de un año
                worksheet_data.write(
                    inicio_fila + i, 8,
                    interruptos_reubicado_misma_entidad_por_entidad(
                        interrupto),
                    formato5)  # reubicado temporal dentro de la misma entidad
                worksheet_data.write(
                    inicio_fila + i, 9,
                    interruptos_reubicado_mismo_organismo_por_entidad(
                        interrupto),
                    formato5)  # reubicado temporal dentro del mismo organismo
                worksheet_data.write(
                    inicio_fila + i, 10,
                    interruptos_reubicado_otro_organismo_por_entidad(
                        interrupto),
                    formato5)  # reubicado temporal dentro de otro organismo
                worksheet_data.write(
                    inicio_fila + i, 11,
                    interruptos_cobrando_garantia_salarial_por_entidad(
                        interrupto), formato5)  # cobrando garantia salarial
                worksheet_data.write(
                    inicio_fila + i, 12,
                    interruptos_sin_garantia_salarial_por_entidad(interrupto),
                    formato5)  # sin garantia salarial
                worksheet_data.write(inicio_fila + i, 13,
                                     interruptos_baja_por_entidad(interrupto),
                                     formato5)  # baja
                worksheet_data.write(
                    inicio_fila + i, 14,
                    interruptos_propuesto_disponible_por_entidad(interrupto),
                    formato5)  # propuesto a disponible
                i = i + 1

    # SUMAS
    # totales           = '=SUM(%s)' % xl_range(inicio_fila, 1, inicio_fila + i - 1, 1)
    # totales_femeninos = '=SUM(%s)' % xl_range(inicio_fila, 2, inicio_fila + i - 1, 2)
    # totales_jovenes = '=SUM(%s)' % xl_range(inicio_fila, 3, inicio_fila + i - 1, 3)
    # totales_hasta_treinta_dias = '=SUM(%s)' % xl_range(inicio_fila, 4, inicio_fila + i - 1, 4)
    # totales_mas_treinta_menos_sesenta_dias = '=SUM(%s)' % xl_range(inicio_fila, 5, inicio_fila + i - 1, 5)
    # totales_mas_sesenta_dias_menos_un_anno = '=SUM(%s)' % xl_range(inicio_fila, 6, inicio_fila + i - 1, 6)
    # totales_mas_un_anno = '=SUM(%s)' % xl_range(inicio_fila, 7, inicio_fila + i - 1, 7)
    # totales_reubicados_temporal_misma_entidad = '=SUM(%s)' % xl_range(inicio_fila, 8, inicio_fila + i - 1, 8)
    # totales_reubicados_temporal_mismo_organismo = '=SUM(%s)' % xl_range(inicio_fila, 9, inicio_fila + i - 1, 9)
    # totales_reubicados_temporal_otro_organismo = '=SUM(%s)' % xl_range(inicio_fila, 10, inicio_fila + i - 1, 10)
    # totales_cobrando_garantia_salarial = '=SUM(%s)' % xl_range(inicio_fila, 11, inicio_fila + i - 1, 11)
    # totales_sin_garantia_salarial = '=SUM(%s)' % xl_range(inicio_fila, 12, inicio_fila + i - 1, 12)
    # totales_baja = '=SUM(%s)' % xl_range(inicio_fila, 13, inicio_fila + i - 1, 13)
    # totales_propuesto_disponible = '=SUM(%s)' % xl_range(inicio_fila, 14, inicio_fila + i - 1, 14)

    # TOTALES
    worksheet_data.write(inicio_fila + i, 0, "TOTALES", formato_organismos)
    worksheet_data.write(inicio_fila + i, 1, totales, formato_organismos)
    worksheet_data.write(inicio_fila + i, 2, totales_femeninos,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 3, totales_jovenes,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 4, totales_hasta_treinta_dias,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 5,
                         totales_mas_treinta_menos_sesenta_dias,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 6,
                         totales_mas_sesenta_dias_menos_un_anno,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 7, totales_mas_un_anno,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 8,
                         totales_reubicados_temporal_misma_entidad,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 9,
                         totales_reubicados_temporal_mismo_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 10,
                         totales_reubicados_temporal_otro_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 11,
                         totales_cobrando_garantia_salarial,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 12, totales_sin_garantia_salarial,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 13, totales_baja, formato_organismos)
    worksheet_data.write(inicio_fila + i, 14, totales_propuesto_disponible,
                         formato_organismos)

    book.close()
    return response
def interruptos_por_actividades(request):
    anno_actual = datetime.today().year
    mes_actual = datetime.today().month
    categoria_usuario = request.user.perfil_usuario.categoria.nombre
    organismo = request.user.perfil_usuario.organismo
    nombre_organismo = organismo.nombre.encode('utf-8').strip()
    provincias = Provincia.objects.all()

    if request.method == 'POST':
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

        if request.POST['anno']:
            if request.POST['mes']:
                if int(request.POST['mes']) == 12:
                    anno_actual = int(request.POST['anno']) + 1
                else:
                    anno_actual = int(request.POST['anno'])

        if request.POST['mes']:
            mes = int(request.POST['mes'])

        if request.POST['provincia']:
            provincia = request.POST['provincia']
            p = Provincia.objects.get(id=provincia)
            nombre_provincia = p.nombre.encode('utf-8').strip()

            if categoria_usuario == 'interrupto':
                response[
                    'Content-Disposition'] = "attachment; filename=Interruptos_por_actividades_(%s)_(%s_%s)_(%s).xlsx" % (
                    str(nombre_organismo).replace(" ", "_"), obtener_mes(mes_actual), anno_actual, str(nombre_provincia).replace(" ", "_"))
            else:
                response['Content-Disposition'] = "attachment; filename=Interruptos_por_actividades_(%s_%s)_(%s).xlsx" % (
                    obtener_mes(mes_actual), anno_actual, str(nombre_provincia).replace(" ", "_"))
        else:
            if categoria_usuario == 'interrupto':
                response[
                    'Content-Disposition'] = "attachment; filename=Interruptos_por_actividades_(%s)_(%s_%s).xlsx" % (
                    str(nombre_organismo).replace(" ", "_"), obtener_mes(mes_actual), anno_actual)
            else:
                response['Content-Disposition'] = "attachment; filename=Interruptos_por_actividades_(%s_%s).xlsx" % (
                    obtener_mes(mes_actual), anno_actual)

        book = Workbook(response, {'in_memory': True})
        worksheet_data = book.add_worksheet("Interruptos por Provincias")

        formato = book.add_format({'bold': True,
                                   'border': 1})
        formato1 = book.add_format({'align': 'center',
                                    'valign': 'vcenter',
                                    'bold': True,
                                    'border': 1})
        formato5 = book.add_format({'border': 1,
                                    'text_wrap': True})
        formato_organismos = book.add_format({'bold': True,
                                              'border': 1})

        worksheet_data.write("A1", "OACE-OSDE / Actividades", formato1)
        worksheet_data.set_column("A:A", 24)

        actividades = ActividadInterrupto.objects.all()
        totales = 0
        lista_totales = []
        for indice, a in enumerate(actividades):
            lista_totales.insert(indice, totales)
            worksheet_data.write(0, indice + 1, a.actividad, formato)

        if categoria_usuario == 'interrupto':
            if es_oace(organismo):
                osdes = obtener_osdes_de_un_oace(organismo)
                if osdes.__len__() > 0:
                    interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                             organismo__id__in=[osde.id for osde in osdes]
                                                             )
                else:
                    interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                             organismo=organismo
                                                             )
                organismos = Organismo.objects.filter(id=organismo.id)
            else:
                interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                         organismo=organismo
                                                         )
            query = """SELECT id
                            FROM public."SGMGU_interruptos" t where
                                date_part('month',t.fecha_registro)=""" + unicode(mes_actual) + """ AND
                                date_part('year',t.fecha_registro)=""" + unicode(anno_actual) + """;"""

            resultado_query_interruptos = Interruptos.objects.raw(query)
            ids_interruptos = [interr.id for interr in resultado_query_interruptos]
            interruptos = Interruptos.objects.filter(id__in=ids_interruptos)

        elif categoria_usuario == 'administrador':
            query = """SELECT id
                    FROM public."SGMGU_interruptos" t where
                        date_part('month',t.fecha_registro)=""" + unicode(mes_actual) + """ AND
                        date_part('year',t.fecha_registro)=""" + unicode(anno_actual) + """;"""

            resultado_query_interruptos = Interruptos.objects.raw(query)
            ids_interruptos = [interr.id for interr in resultado_query_interruptos]
            interruptos = Interruptos.objects.filter(id__in=ids_interruptos)
            organismos = obtener_oaces()

        inicio_fila = 1
        i = 0

        if es_oace(organismo) or categoria_usuario == 'administrador':
            for oace in organismos:

                worksheet_data.write(inicio_fila + i, 0, oace.siglas, formato_organismos)  # organismo

                for indice, actividad in enumerate(actividades):
                    lista_totales[indice] = lista_totales[indice] + totales_interruptos_organismo_actividades(interruptos, oace, actividad)
                    worksheet_data.write(inicio_fila + i, indice + 1, totales_interruptos_organismo_actividades(interruptos, oace, actividad), formato_organismos)

                i = i + 1

                for interrupto in interruptos:
                    if interrupto.organismo_id == oace.id:

                        worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad

                        for indice, actividad in enumerate(actividades):
                            if interrupto.actividad == actividad:
                                worksheet_data.write(inicio_fila + i, indice + 1, total_interruptos(interrupto), formato5)
                            else:
                                worksheet_data.write(inicio_fila + i, indice + 1, 0, formato5)

                        i = i + 1

                osdes = obtener_osdes_de_un_oace(oace)

                if obtener_osdes_de_un_oace(oace).__len__() > 0:
                    for osde in osdes:

                        worksheet_data.write(inicio_fila + i, 0, osde.siglas, formato_organismos)  # osde

                        for indice, actividad in enumerate(actividades):
                            lista_totales[indice] = lista_totales[indice] + totales_interruptos_organismo_actividades(interruptos, osde, actividad)
                            worksheet_data.write(inicio_fila + i, indice + 1, totales_interruptos_organismo_actividades(interruptos, osde, actividad), formato_organismos)

                        i = i + 1

                        l_interruptos = interruptos.filter(organismo_id=osde)

                        for interrupto in l_interruptos:

                            worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad

                            for indice, actividad in enumerate(actividades):
                                if interrupto.actividad == actividad:
                                    worksheet_data.write(inicio_fila + i, indice + 1, total_interruptos(interrupto), formato5)
                                else:
                                    worksheet_data.write(inicio_fila + i, indice + 1, 0, formato5)

                            i = i + 1

        if not es_oace(organismo):

            worksheet_data.write(inicio_fila + i, 0, organismo.siglas, formato_organismos)  # organismo

            for indice, actividad in enumerate(actividades):
                lista_totales[indice] = lista_totales[indice] + totales_interruptos_organismo_actividades(interruptos, organismo, actividad)
                worksheet_data.write(inicio_fila + i, indice + 1, totales_interruptos_organismo_actividades(interruptos, organismo, actividad), formato_organismos)

            i = i + 1

            interruptos = interruptos.filter(organismo__nombre=organismo)

            for interrupto in interruptos:

                worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad

                for indice, a in enumerate(actividades):
                    if interrupto.actividad == a:
                        worksheet_data.write(inicio_fila + i, indice + 1, total_interruptos(interrupto), formato5)
                    else:
                        worksheet_data.write(inicio_fila + i, indice + 1, 0, formato5)

                i = i + 1

        worksheet_data.write(inicio_fila + i, 0, "TOTALES", formato_organismos)
        for indice, actividad in enumerate(actividades):
            worksheet_data.write(inicio_fila + i, indice + 1, lista_totales[indice], formato_organismos)

        book.close()
        return response
    context = {'provincias': provincias, 'titulo': 'Interruptos por actividades.'}
    return render(request, "Reportes/ReportesInterrupto/filtrar_interruptos.html", context)
Ejemplo n.º 4
0
def interruptos_situacion_duracion(request):
    anno_actual = datetime.today().year
    mes_actual = datetime.today().month
    categoria_usuario = request.user.perfil_usuario.categoria.nombre
    organismo = request.user.perfil_usuario.organismo
    nombre_organismo = organismo.nombre.encode('utf-8').strip()
    num_anno = anno_actual

    if mes_actual == 12:
        num_anno = anno_actual - 1

    response = HttpResponse(
        content_type=
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

    if categoria_usuario == 'interrupto' or categoria_usuario == 'interrupto':
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_reubicados_por_organismos_(%s)_(%s_%s).xlsx" % (
                str(nombre_organismo).replace(
                    " ", "_"), obtener_mes(mes_actual - 1), num_anno)
    else:
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_reubicados_por_organismos_(%s_%s).xlsx" % (
                obtener_mes(mes_actual - 1), num_anno)

    book = Workbook(response, {'in_memory': True})
    worksheet_data = book.add_worksheet("Interruptos por Organismos")

    formato1 = book.add_format({
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1
    })
    formato2 = book.add_format({
        'rotation': 45,
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1,
        'text_wrap': True
    })
    formato3 = book.add_format({'align': 'center', 'bold': True, 'border': 1})
    formato4 = book.add_format({
        'rotation': 90,
        'align': 'center',
        'valign': 'vcenter',
        'bold': True,
        'border': 1,
        'text_wrap': True
    })
    formato5 = book.add_format({'border': 1, 'text_wrap': True})
    formato_organismos = book.add_format({'bold': True, 'border': 1})

    worksheet_data.merge_range('A1:A3', "OACE-OSDE", formato1)
    worksheet_data.merge_range(
        "B1:N1", "Interruptos - Reubicados Temporales: %s-%s" %
        (obtener_mes(mes_actual - 1), num_anno), formato3)
    worksheet_data.merge_range("B2:B3", "Total", formato2)
    worksheet_data.merge_range("C2:E2", "Hasta 30 dias", formato1)
    worksheet_data.merge_range("F2:H2", "Mas de 30 y hasta 60 dias", formato1)
    worksheet_data.merge_range("I2:K2", "Mas de 60 dias y hasta 1", formato1)
    worksheet_data.merge_range("L2:N2", "Mas de 1", formato1)
    # Hasta 30 dias
    worksheet_data.write("C3", "En la misma entidad", formato4)
    worksheet_data.write("D3", "En otra entidad del mismo organismo", formato4)
    worksheet_data.write("E3", "En una entidad de otro organismo", formato4)
    # Mas de 30 y hasta 60 dias
    worksheet_data.write("F3", "En la misma entidad", formato4)
    worksheet_data.write("G3", "En otra entidad del mismo organismo", formato4)
    worksheet_data.write("H3", "En una entidad de otro organismo", formato4)
    # Mas de 60 dias y hasta 1 anno
    worksheet_data.write("I3", "En la misma entidad", formato4)
    worksheet_data.write("J3", "En otra entidad del mismo organismo", formato4)
    worksheet_data.write("K3", "En una entidad de otro organismo", formato4)
    # Mas de 1 anno
    worksheet_data.write("L3", "En la misma entidad", formato4)
    worksheet_data.write("M3", "En otra entidad del mismo organismo", formato4)
    worksheet_data.write("N3", "En una entidad de otro organismo", formato4)

    worksheet_data.set_column("A:A", 20.58)

    if categoria_usuario == 'interrupto':
        if es_oace(organismo):
            osdes = obtener_osdes_de_un_oace(organismo)
            if osdes.__len__() > 0:
                interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                         organismo__id__in=[osde.id for osde in osdes]
                                                         ).values("hastatreintadias_reubicadostemporal_misma_entidad", "hastatreintadias_reubicadostemporal_mismo_organismo", "hastatreintadias_reubicadostemporal_otro_organismo",
                                                              "entretreintaysesentadias_reubicadostemporal_misma_entidad", "entretreintaysesentadias_reubicadostemporal_mismo_organismo", "entretreintaysesentadias_reubicadostemporal_otro_organismo",
                                                              "masdesesentayunanno_reubicadostemporal_misma_entidad", "masdesesentayunanno_reubicadostemporal_mismo_organismo", "masdesesentayunanno_reubicadostemporal_otro_organismo",
                                                              "masdeunanno_reubicadostemporal_misma_entidad", "masdeunanno_reubicadostemporal_mismo_organismo", "masdeunanno_reubicadostemporal_otro_organismo",
                                                              "total_interruptos_entidad") | \
                              Interruptos.objects.filter(organismo=organismo).values("hastatreintadias_reubicadostemporal_misma_entidad", "hastatreintadias_reubicadostemporal_mismo_organismo", "hastatreintadias_reubicadostemporal_otro_organismo",
                                                              "entretreintaysesentadias_reubicadostemporal_misma_entidad", "entretreintaysesentadias_reubicadostemporal_mismo_organismo", "entretreintaysesentadias_reubicadostemporal_otro_organismo",
                                                              "masdesesentayunanno_reubicadostemporal_misma_entidad", "masdesesentayunanno_reubicadostemporal_mismo_organismo", "masdesesentayunanno_reubicadostemporal_otro_organismo",
                                                              "masdeunanno_reubicadostemporal_misma_entidad", "masdeunanno_reubicadostemporal_mismo_organismo", "masdeunanno_reubicadostemporal_otro_organismo",
                                                              "total_interruptos_entidad")
            else:
                interruptos = Interruptos.objects.filter(
                    fecha_registro__year=anno_actual, organismo=organismo
                ).values(
                    "hastatreintadias_reubicadostemporal_misma_entidad",
                    "hastatreintadias_reubicadostemporal_mismo_organismo",
                    "hastatreintadias_reubicadostemporal_otro_organismo",
                    "entretreintaysesentadias_reubicadostemporal_misma_entidad",
                    "entretreintaysesentadias_reubicadostemporal_mismo_organismo",
                    "entretreintaysesentadias_reubicadostemporal_otro_organismo",
                    "masdesesentayunanno_reubicadostemporal_misma_entidad",
                    "masdesesentayunanno_reubicadostemporal_mismo_organismo",
                    "masdesesentayunanno_reubicadostemporal_otro_organismo",
                    "masdeunanno_reubicadostemporal_misma_entidad",
                    "masdeunanno_reubicadostemporal_mismo_organismo",
                    "masdeunanno_reubicadostemporal_otro_organismo",
                    "total_interruptos_entidad")
            organismos = Organismo.objects.filter(id=organismo.id)
        else:
            interruptos = Interruptos.objects.filter(
                fecha_registro__year=anno_actual, organismo=organismo
            ).values(
                "hastatreintadias_reubicadostemporal_misma_entidad",
                "hastatreintadias_reubicadostemporal_mismo_organismo",
                "hastatreintadias_reubicadostemporal_otro_organismo",
                "entretreintaysesentadias_reubicadostemporal_misma_entidad",
                "entretreintaysesentadias_reubicadostemporal_mismo_organismo",
                "entretreintaysesentadias_reubicadostemporal_otro_organismo",
                "masdesesentayunanno_reubicadostemporal_misma_entidad",
                "masdesesentayunanno_reubicadostemporal_mismo_organismo",
                "masdesesentayunanno_reubicadostemporal_otro_organismo",
                "masdeunanno_reubicadostemporal_misma_entidad",
                "masdeunanno_reubicadostemporal_mismo_organismo",
                "masdeunanno_reubicadostemporal_otro_organismo",
                "total_interruptos_entidad")

        query = """SELECT id
                        FROM public."SGMGU_interruptos" t where
                            date_part('month',t.fecha_registro)=""" + unicode(
            mes_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = interruptos.filter(id__in=ids_interruptos)

    elif categoria_usuario == 'administrador':

        query = """SELECT id
                FROM public."SGMGU_interruptos" t where
                    date_part('month',t.fecha_registro)=""" + unicode(
            mes_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = Interruptos.objects.filter(
            fecha_registro__year=anno_actual, id__in=ids_interruptos).values(
                "hastatreintadias_reubicadostemporal_misma_entidad",
                "hastatreintadias_reubicadostemporal_mismo_organismo",
                "hastatreintadias_reubicadostemporal_otro_organismo",
                "entretreintaysesentadias_reubicadostemporal_misma_entidad",
                "entretreintaysesentadias_reubicadostemporal_mismo_organismo",
                "entretreintaysesentadias_reubicadostemporal_otro_organismo",
                "masdesesentayunanno_reubicadostemporal_misma_entidad",
                "masdesesentayunanno_reubicadostemporal_mismo_organismo",
                "masdesesentayunanno_reubicadostemporal_otro_organismo",
                "masdeunanno_reubicadostemporal_misma_entidad",
                "masdeunanno_reubicadostemporal_mismo_organismo",
                "masdeunanno_reubicadostemporal_otro_organismo",
                "total_interruptos_entidad", "organismo_id",
                "entidad__e_nombre")

        organismos = obtener_oaces()

    inicio_fila = 3
    i = 0

    totales = 0
    totales_hasta_treinta_dias_misma_entidad = 0
    totales_hasta_treinta_dias_mismo_organismo = 0
    totales_hasta_treinta_dias_otro_organismo = 0
    totales_mas_treinta_misma_entidad = 0
    totales_mas_treinta_mismo_organismo = 0
    totales_mas_treinta_otro_organismo = 0
    totales_mas_sesenta_misma_entidad = 0
    totales_mas_sesenta_mismo_organismo = 0
    totales_mas_sesenta_otro_organismo = 0
    totales_mas_un_anno_misma_entidad = 0
    totales_mas_un_anno_mismo_organismo = 0
    totales_mas_un_anno_otro_organismo = 0

    if es_oace(organismo) or categoria_usuario == 'administrador':

        for oace in organismos:

            INTERRUPTOS_ORGANISMOS = interruptos.filter(organismo=oace)
            dict_totales = totales_situacion_tiempo(INTERRUPTOS_ORGANISMOS)
            t_total = dict_totales['total']
            t_hasta_treinta_dias_misma_entidad = dict_totales[
                'hasta_treinta_dias_misma_entidad']
            t_hasta_treinta_dias_mismo_organismo = dict_totales[
                'hasta_treinta_dias_mismo_organismo']
            t_hasta_treinta_dias_otro_organismo = dict_totales[
                'hasta_treinta_dias_otro_organismo']
            t_mas_treinta_misma_entidad = dict_totales[
                'mas_treinta_misma_entidad']
            t_mas_treinta_mismo_organismo = dict_totales[
                'mas_treinta_mismo_organismo']
            t_mas_treinta_otro_organismo = dict_totales[
                'mas_treinta_otro_organismo']
            t_mas_sesenta_misma_entidad = dict_totales[
                'mas_sesenta_misma_entidad']
            t_mas_sesenta_mismo_organismo = dict_totales[
                'mas_sesenta_mismo_organismo']
            t_mas_sesenta_otro_organismo = dict_totales[
                'mas_sesenta_otro_organismo']
            t_mas_un_anno_misma_entidad = dict_totales[
                'mas_un_anno_misma_entidad']
            t_mas_un_anno_mismo_organismo = dict_totales[
                'mas_un_anno_mismo_organismo']
            t_mas_un_anno_otro_organismo = dict_totales[
                'mas_un_anno_otro_organismo']

            worksheet_data.write(inicio_fila + i, 0, oace.siglas,
                                 formato_organismos)  # organismo

            total = '=SUM(%s)' % xl_range(inicio_fila + i, 2, inicio_fila + i,
                                          13)
            # worksheet_data.write(INICIO, cantidad_provincias + 1, total_tpcp, formato)
            worksheet_data.write(inicio_fila + i, 1, total, formato5)  # total
            worksheet_data.write(inicio_fila + i, 2,
                                 t_hasta_treinta_dias_misma_entidad,
                                 formato5)  # hasta_treinta_dias_misma_entidad
            worksheet_data.write(
                inicio_fila + i, 3, t_hasta_treinta_dias_mismo_organismo,
                formato5)  # hasta_treinta_dias_mismo_organismo
            worksheet_data.write(inicio_fila + i, 4,
                                 t_hasta_treinta_dias_otro_organismo,
                                 formato5)  # hasta_treinta_dias_otro_organismo
            worksheet_data.write(inicio_fila + i, 5,
                                 t_mas_treinta_misma_entidad,
                                 formato5)  # mas_treinta_misma_entidad
            worksheet_data.write(inicio_fila + i, 6,
                                 t_mas_treinta_mismo_organismo,
                                 formato5)  # mas_treinta_mismo_organismo
            worksheet_data.write(inicio_fila + i, 7,
                                 t_mas_treinta_otro_organismo,
                                 formato5)  # mas_treinta_otro_organismo
            worksheet_data.write(inicio_fila + i, 8,
                                 t_mas_sesenta_misma_entidad,
                                 formato5)  # mas_sesenta_misma_entidad
            worksheet_data.write(inicio_fila + i, 9,
                                 t_mas_sesenta_mismo_organismo,
                                 formato5)  # mas_sesenta_mismo_organismo
            worksheet_data.write(inicio_fila + i, 10,
                                 t_mas_sesenta_otro_organismo,
                                 formato5)  # mas_sesenta_otro_organismo
            worksheet_data.write(inicio_fila + i, 11,
                                 t_mas_un_anno_misma_entidad,
                                 formato5)  # mas_un_anno_misma_entidad
            worksheet_data.write(inicio_fila + i, 12,
                                 t_mas_un_anno_mismo_organismo,
                                 formato5)  # mas_un_anno_mismo_organismo
            worksheet_data.write(inicio_fila + i, 13,
                                 t_mas_un_anno_otro_organismo,
                                 formato5)  # mas_un_anno_otro_organismo

            totales += t_total
            totales_hasta_treinta_dias_misma_entidad += t_hasta_treinta_dias_misma_entidad
            totales_hasta_treinta_dias_mismo_organismo += t_hasta_treinta_dias_mismo_organismo
            totales_hasta_treinta_dias_otro_organismo += t_hasta_treinta_dias_otro_organismo
            totales_mas_treinta_misma_entidad += t_mas_treinta_misma_entidad
            totales_mas_treinta_mismo_organismo += t_mas_treinta_mismo_organismo
            totales_mas_treinta_otro_organismo += t_mas_treinta_otro_organismo
            totales_mas_sesenta_misma_entidad += t_mas_sesenta_misma_entidad
            totales_mas_sesenta_mismo_organismo += t_mas_sesenta_mismo_organismo
            totales_mas_sesenta_otro_organismo += t_mas_sesenta_otro_organismo
            totales_mas_un_anno_misma_entidad += t_mas_un_anno_misma_entidad
            totales_mas_un_anno_mismo_organismo += t_mas_un_anno_mismo_organismo
            totales_mas_un_anno_otro_organismo += t_mas_un_anno_otro_organismo

            i = i + 1

            L_INTERRUPTOS = interruptos.filter(organismo=oace)
            for interrupto in L_INTERRUPTOS:
                # if interrupto['organismo_id'] == oace.id:
                worksheet_data.write(inicio_fila + i, 0,
                                     interrupto['entidad__e_nombre'],
                                     formato5)  # entidad
                total = '=SUM(%s)' % xl_range(inicio_fila + i, 2,
                                              inicio_fila + i, 13)
                worksheet_data.write(inicio_fila + i, 1, total,
                                     formato5)  # total
                worksheet_data.write(
                    inicio_fila + i, 2, interrupto[
                        'hastatreintadias_reubicadostemporal_misma_entidad'],
                    formato5)  # hasta_treinta_dias_misma_entidad
                worksheet_data.write(
                    inicio_fila + i, 3, interrupto[
                        'hastatreintadias_reubicadostemporal_mismo_organismo'],
                    formato5)  # hasta_treinta_dias_mismo_organismo
                worksheet_data.write(
                    inicio_fila + i, 4, interrupto[
                        'hastatreintadias_reubicadostemporal_otro_organismo'],
                    formato5)  # hasta_treinta_dias_otro_organismo
                worksheet_data.write(inicio_fila + i, 5, interrupto[
                    'entretreintaysesentadias_reubicadostemporal_misma_entidad'],
                                     formato5)  # mas_treinta_misma_entidad
                worksheet_data.write(inicio_fila + i, 6, interrupto[
                    'entretreintaysesentadias_reubicadostemporal_mismo_organismo'],
                                     formato5)  # mas_treinta_mismo_organismo
                worksheet_data.write(inicio_fila + i, 7, interrupto[
                    'entretreintaysesentadias_reubicadostemporal_otro_organismo'],
                                     formato5)  # mas_treinta_otro_organismo
                worksheet_data.write(inicio_fila + i, 8, interrupto[
                    'masdesesentayunanno_reubicadostemporal_misma_entidad'],
                                     formato5)  # mas_sesenta_misma_entidad
                worksheet_data.write(inicio_fila + i, 9, interrupto[
                    'masdesesentayunanno_reubicadostemporal_mismo_organismo'],
                                     formato5)  # mas_sesenta_mismo_organismo
                worksheet_data.write(inicio_fila + i, 10, interrupto[
                    'masdesesentayunanno_reubicadostemporal_otro_organismo'],
                                     formato5)  # mas_sesenta_otro_organismo
                worksheet_data.write(
                    inicio_fila + i, 11,
                    interrupto['masdeunanno_reubicadostemporal_misma_entidad'],
                    formato5)  # mas_un_anno_misma_entidad
                worksheet_data.write(inicio_fila + i, 12, interrupto[
                    'masdeunanno_reubicadostemporal_mismo_organismo'],
                                     formato5)  # mas_un_anno_mismo_organismo
                worksheet_data.write(inicio_fila + i, 13, interrupto[
                    'masdeunanno_reubicadostemporal_otro_organismo'],
                                     formato5)  # mas_un_anno_otro_organismo

                i = i + 1

            osdes = obtener_osdes_de_un_oace(oace)
            if osdes.__len__() > 0:
                for osde in osdes:

                    INTERRUPTOS_ORGANISMOS = interruptos.filter(organismo=osde)
                    dict_totales = totales_situacion_tiempo(
                        INTERRUPTOS_ORGANISMOS)
                    t_total = dict_totales['total']
                    t_hasta_treinta_dias_misma_entidad = dict_totales[
                        'hasta_treinta_dias_misma_entidad']
                    t_hasta_treinta_dias_mismo_organismo = dict_totales[
                        'hasta_treinta_dias_mismo_organismo']
                    t_hasta_treinta_dias_otro_organismo = dict_totales[
                        'hasta_treinta_dias_otro_organismo']
                    t_mas_treinta_misma_entidad = dict_totales[
                        'mas_treinta_misma_entidad']
                    t_mas_treinta_mismo_organismo = dict_totales[
                        'mas_treinta_mismo_organismo']
                    t_mas_treinta_otro_organismo = dict_totales[
                        'mas_treinta_otro_organismo']
                    t_mas_sesenta_misma_entidad = dict_totales[
                        'mas_sesenta_misma_entidad']
                    t_mas_sesenta_mismo_organismo = dict_totales[
                        'mas_sesenta_mismo_organismo']
                    t_mas_sesenta_otro_organismo = dict_totales[
                        'mas_sesenta_otro_organismo']
                    t_mas_un_anno_misma_entidad = dict_totales[
                        'mas_un_anno_misma_entidad']
                    t_mas_un_anno_mismo_organismo = dict_totales[
                        'mas_un_anno_mismo_organismo']
                    t_mas_un_anno_otro_organismo = dict_totales[
                        'mas_un_anno_otro_organismo']

                    worksheet_data.write(inicio_fila + i, 0, osde.siglas,
                                         formato_organismos)  # osde
                    total = '=SUM(%s)' % xl_range(inicio_fila + i, 2,
                                                  inicio_fila + i, 13)
                    worksheet_data.write(inicio_fila + i, 1, total,
                                         formato5)  # total
                    worksheet_data.write(
                        inicio_fila + i, 2, t_hasta_treinta_dias_misma_entidad,
                        formato5)  # hasta_treinta_dias_misma_entidad
                    worksheet_data.write(
                        inicio_fila + i, 3,
                        t_hasta_treinta_dias_mismo_organismo,
                        formato5)  # hasta_treinta_dias_mismo_organismo
                    worksheet_data.write(
                        inicio_fila + i, 4,
                        t_hasta_treinta_dias_otro_organismo,
                        formato5)  # hasta_treinta_dias_otro_organismo
                    worksheet_data.write(inicio_fila + i, 5,
                                         t_mas_treinta_misma_entidad,
                                         formato5)  # mas_treinta_misma_entidad
                    worksheet_data.write(
                        inicio_fila + i, 6, t_mas_treinta_mismo_organismo,
                        formato5)  # mas_treinta_mismo_organismo
                    worksheet_data.write(
                        inicio_fila + i, 7, t_mas_treinta_otro_organismo,
                        formato5)  # mas_treinta_otro_organismo
                    worksheet_data.write(inicio_fila + i, 8,
                                         t_mas_sesenta_misma_entidad,
                                         formato5)  # mas_sesenta_misma_entidad
                    worksheet_data.write(
                        inicio_fila + i, 9, t_mas_sesenta_mismo_organismo,
                        formato5)  # mas_sesenta_mismo_organismo
                    worksheet_data.write(
                        inicio_fila + i, 10, t_mas_sesenta_otro_organismo,
                        formato5)  # mas_sesenta_otro_organismo
                    worksheet_data.write(inicio_fila + i, 11,
                                         t_mas_un_anno_misma_entidad,
                                         formato5)  # mas_un_anno_misma_entidad
                    worksheet_data.write(
                        inicio_fila + i, 12, t_mas_un_anno_mismo_organismo,
                        formato5)  # mas_un_anno_mismo_organismo
                    worksheet_data.write(
                        inicio_fila + i, 13, t_mas_un_anno_otro_organismo,
                        formato5)  # mas_un_anno_otro_organismo

                    totales += t_total
                    totales_hasta_treinta_dias_misma_entidad += t_hasta_treinta_dias_misma_entidad
                    totales_hasta_treinta_dias_mismo_organismo += t_hasta_treinta_dias_mismo_organismo
                    totales_hasta_treinta_dias_otro_organismo += t_hasta_treinta_dias_otro_organismo
                    totales_mas_treinta_misma_entidad += t_mas_treinta_misma_entidad
                    totales_mas_treinta_mismo_organismo += t_mas_treinta_mismo_organismo
                    totales_mas_treinta_otro_organismo += t_mas_treinta_otro_organismo
                    totales_mas_sesenta_misma_entidad += t_mas_sesenta_misma_entidad
                    totales_mas_sesenta_mismo_organismo += t_mas_sesenta_mismo_organismo
                    totales_mas_sesenta_otro_organismo += t_mas_sesenta_otro_organismo
                    totales_mas_un_anno_misma_entidad += t_mas_un_anno_misma_entidad
                    totales_mas_un_anno_mismo_organismo += t_mas_un_anno_mismo_organismo
                    totales_mas_un_anno_otro_organismo += t_mas_un_anno_otro_organismo

                    i = i + 1

                    L_INTERRUPTOS = interruptos.filter(organismo_id=osde)

                    for interrupto in L_INTERRUPTOS:
                        worksheet_data.write(inicio_fila + i, 0,
                                             interrupto['entidad__e_nombre'],
                                             formato5)  # entidad
                        total = '=SUM(%s)' % xl_range(inicio_fila + i, 2,
                                                      inicio_fila + i, 13)
                        worksheet_data.write(inicio_fila + i, 1, total,
                                             formato5)  # total
                        worksheet_data.write(inicio_fila + i, 2, interrupto[
                            'hastatreintadias_reubicadostemporal_misma_entidad'],
                                             formato5
                                             )  # hasta_treinta_dias_misma_entidad
                        worksheet_data.write(inicio_fila + i, 3, interrupto[
                            'hastatreintadias_reubicadostemporal_mismo_organismo'],
                                             formato5
                                             )  # hasta_treinta_dias_mismo_organismo
                        worksheet_data.write(inicio_fila + i, 4, interrupto[
                            'hastatreintadias_reubicadostemporal_otro_organismo'],
                                             formato5
                                             )  # hasta_treinta_dias_otro_organismo
                        worksheet_data.write(inicio_fila + i, 5, interrupto[
                            'entretreintaysesentadias_reubicadostemporal_misma_entidad'],
                                             formato5
                                             )  # mas_treinta_misma_entidad
                        worksheet_data.write(inicio_fila + i, 6, interrupto[
                            'entretreintaysesentadias_reubicadostemporal_mismo_organismo'],
                                             formato5
                                             )  # mas_treinta_mismo_organismo
                        worksheet_data.write(inicio_fila + i, 7, interrupto[
                            'entretreintaysesentadias_reubicadostemporal_otro_organismo'],
                                             formato5
                                             )  # mas_treinta_otro_organismo
                        worksheet_data.write(inicio_fila + i, 8, interrupto[
                            'masdesesentayunanno_reubicadostemporal_misma_entidad'],
                                             formato5
                                             )  # mas_sesenta_misma_entidad
                        worksheet_data.write(inicio_fila + i, 9, interrupto[
                            'masdesesentayunanno_reubicadostemporal_mismo_organismo'],
                                             formato5
                                             )  # mas_sesenta_mismo_organismo
                        worksheet_data.write(inicio_fila + i, 10, interrupto[
                            'masdesesentayunanno_reubicadostemporal_otro_organismo'],
                                             formato5
                                             )  # mas_sesenta_otro_organismo
                        worksheet_data.write(inicio_fila + i, 11, interrupto[
                            'masdeunanno_reubicadostemporal_misma_entidad'],
                                             formato5
                                             )  # mas_un_anno_misma_entidad
                        worksheet_data.write(inicio_fila + i, 12, interrupto[
                            'masdeunanno_reubicadostemporal_mismo_organismo'],
                                             formato5
                                             )  # mas_un_anno_mismo_organismo
                        worksheet_data.write(inicio_fila + i, 13, interrupto[
                            'masdeunanno_reubicadostemporal_otro_organismo'],
                                             formato5
                                             )  # mas_un_anno_otro_organismo

                        i = i + 1

    # if not es_oace(organismo):
    #
    #     org = interruptos.filter(organismo=organismo)
    #     dict_totales = totales_por_organismo(org)
    #     t = dict_totales['t']
    #     t_femeninos = dict_totales['t_femeninos']
    #     t_jovenes = dict_totales['t_jovenes']
    #     t_hasta_treinta_dias = dict_totales['t_hasta_treinta_dias']
    #     t_mas_treinta_menos_sesenta_dias = dict_totales['t_mas_treinta_menos_sesenta_dias']
    #     t_mas_sesenta_dias_menos_un_anno = dict_totales['t_mas_sesenta_dias_menos_un_anno']
    #     t_mas_un_anno = dict_totales['t_mas_un_anno']
    #     t_reubicados_temporal_misma_entidad = dict_totales['t_reubicados_temporal_misma_entidad']
    #     t_reubicados_temporal_mismo_organismo = dict_totales['t_reubicados_temporal_mismo_organismo']
    #     t_reubicados_temporal_otro_organismo = dict_totales['t_reubicados_temporal_otro_organismo']
    #     t_cobrando_garantia_salarial = dict_totales['t_cobrando_garantia_salarial']
    #     t_sin_garantia_salarial = dict_totales['t_sin_garantia_salarial']
    #     t_baja = dict_totales['t_baja']
    #     t_propuesto_disponible = dict_totales['t_propuesto_disponible']
    #
    #     worksheet_data.write(inicio_fila + i, 0, organismo.siglas, formato_organismos)  # organismo
    #     worksheet_data.write(inicio_fila + i, 1, t, formato5)  # total
    #     worksheet_data.write(inicio_fila + i, 2, t_femeninos, formato5)  # totales femeninos
    #     worksheet_data.write(inicio_fila + i, 3, t_jovenes, formato5)  # totales jóvenes
    #     worksheet_data.write(inicio_fila + i, 4, t_hasta_treinta_dias, formato5)  # menos de 30 dias
    #     worksheet_data.write(inicio_fila + i, 5, t_mas_treinta_menos_sesenta_dias, formato5)  # entre 30 y 60 dias
    #     worksheet_data.write(inicio_fila + i, 6, t_mas_sesenta_dias_menos_un_anno, formato5)  # entre 60 dias y un año
    #     worksheet_data.write(inicio_fila + i, 7, t_mas_un_anno, formato5)  # mas de un año
    #     worksheet_data.write(inicio_fila + i, 8, t_reubicados_temporal_misma_entidad,
    #                          formato5)  # reubicado temporal dentro de la misma entidad
    #     worksheet_data.write(inicio_fila + i, 9, t_reubicados_temporal_mismo_organismo,
    #                          formato5)  # reubicado temporal dentro del mismo organismo
    #     worksheet_data.write(inicio_fila + i, 10, t_reubicados_temporal_otro_organismo,
    #                          formato5)  # reubicado temporal dentro de otro organismo
    #     worksheet_data.write(inicio_fila + i, 11, t_cobrando_garantia_salarial, formato5)  # cobrando garantia salarial
    #     worksheet_data.write(inicio_fila + i, 12, t_sin_garantia_salarial, formato5)  # sin garantia salarial
    #     worksheet_data.write(inicio_fila + i, 13, t_baja, formato5)  # baja
    #     worksheet_data.write(inicio_fila + i, 14, t_propuesto_disponible, formato5)  # propuesto a disponible
    #
    #     totales += t
    #     totales_hasta_treinta_dias += t_hasta_treinta_dias
    #     totales_mas_treinta_menos_sesenta_dias += t_mas_treinta_menos_sesenta_dias
    #     totales_mas_sesenta_dias_menos_un_anno += t_mas_sesenta_dias_menos_un_anno
    #     totales_mas_un_anno += t_mas_un_anno
    #     totales_reubicados_temporal_misma_entidad += t_reubicados_temporal_misma_entidad
    #     totales_reubicados_temporal_mismo_organismo += t_reubicados_temporal_mismo_organismo
    #     totales_reubicados_temporal_otro_organismo += t_reubicados_temporal_otro_organismo
    #     totales_cobrando_garantia_salarial += t_cobrando_garantia_salarial
    #     totales_sin_garantia_salarial += t_sin_garantia_salarial
    #     totales_baja += t_baja
    #     totales_propuesto_disponible += t_propuesto_disponible
    #
    #     i = i + 1
    #
    #     for interrupto in interruptos:
    #         if interrupto.organismo_id == organismo.id:
    #             worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad
    #             worksheet_data.write(inicio_fila + i, 1, total_interruptos_por_entidad(interrupto), formato5)  # total
    #             worksheet_data.write(inicio_fila + i, 2, total_femeninos_interruptos_por_entidad(interrupto),
    #                                  formato5)  # totales femeninos
    #             worksheet_data.write(inicio_fila + i, 3, total_jovenes_interruptos_por_entidad(interrupto),
    #                                  formato5)  # totales jóvenes
    #             worksheet_data.write(inicio_fila + i, 4, interruptos_hasta_treinta_dias_por_entidad(interrupto),
    #                                  formato5)  # menos de 30 dias
    #             worksheet_data.write(inicio_fila + i, 5, interruptos_mas_treinta_hasta_sesenta_por_entidad(interrupto),
    #                                  formato5)  # entre 30 y 60 dias
    #             worksheet_data.write(inicio_fila + i, 6, interruptos_mas_sesenta_menos_un_anno_por_entidad(interrupto),
    #                                  formato5)  # entre 60 dias y un año
    #             worksheet_data.write(inicio_fila + i, 7, interruptos_mas_un_anno_por_entidad(interrupto),
    #                                  formato5)  # mas de un año
    #             worksheet_data.write(inicio_fila + i, 8, interruptos_reubicado_misma_entidad_por_entidad(interrupto),
    #                                  formato5)  # reubicado temporal dentro de la misma entidad
    #             worksheet_data.write(inicio_fila + i, 9, interruptos_reubicado_mismo_organismo_por_entidad(interrupto),
    #                                  formato5)  # reubicado temporal dentro del mismo organismo
    #             worksheet_data.write(inicio_fila + i, 10, interruptos_reubicado_otro_organismo_por_entidad(interrupto),
    #                                  formato5)  # reubicado temporal dentro de otro organismo
    #             worksheet_data.write(inicio_fila + i, 11,
    #                                  interruptos_cobrando_garantia_salarial_por_entidad(interrupto),
    #                                  formato5)  # cobrando garantia salarial
    #             worksheet_data.write(inicio_fila + i, 12, interruptos_sin_garantia_salarial_por_entidad(interrupto),
    #                                  formato5)  # sin garantia salarial
    #             worksheet_data.write(inicio_fila + i, 13, interruptos_baja_por_entidad(interrupto), formato5)  # baja
    #             worksheet_data.write(inicio_fila + i, 14, interruptos_propuesto_disponible_por_entidad(interrupto),
    #                                  formato5)  # propuesto a disponible
    #             i = i + 1

    # SUMAS
    # totales           = '=SUM(%s)' % xl_range(inicio_fila, 1, inicio_fila + i - 1, 1)
    # totales_femeninos = '=SUM(%s)' % xl_range(inicio_fila, 2, inicio_fila + i - 1, 2)
    # totales_jovenes = '=SUM(%s)' % xl_range(inicio_fila, 3, inicio_fila + i - 1, 3)
    # totales_hasta_treinta_dias = '=SUM(%s)' % xl_range(inicio_fila, 4, inicio_fila + i - 1, 4)
    # totales_mas_treinta_menos_sesenta_dias = '=SUM(%s)' % xl_range(inicio_fila, 5, inicio_fila + i - 1, 5)
    # totales_mas_sesenta_dias_menos_un_anno = '=SUM(%s)' % xl_range(inicio_fila, 6, inicio_fila + i - 1, 6)
    # totales_mas_un_anno = '=SUM(%s)' % xl_range(inicio_fila, 7, inicio_fila + i - 1, 7)
    # totales_reubicados_temporal_misma_entidad = '=SUM(%s)' % xl_range(inicio_fila, 8, inicio_fila + i - 1, 8)
    # totales_reubicados_temporal_mismo_organismo = '=SUM(%s)' % xl_range(inicio_fila, 9, inicio_fila + i - 1, 9)
    # totales_reubicados_temporal_otro_organismo = '=SUM(%s)' % xl_range(inicio_fila, 10, inicio_fila + i - 1, 10)
    # totales_cobrando_garantia_salarial = '=SUM(%s)' % xl_range(inicio_fila, 11, inicio_fila + i - 1, 11)
    # totales_sin_garantia_salarial = '=SUM(%s)' % xl_range(inicio_fila, 12, inicio_fila + i - 1, 12)
    # totales_baja = '=SUM(%s)' % xl_range(inicio_fila, 13, inicio_fila + i - 1, 13)
    # totales_propuesto_disponible = '=SUM(%s)' % xl_range(inicio_fila, 14, inicio_fila + i - 1, 14)

    # TOTALES
    worksheet_data.write(inicio_fila + i, 0, "TOTALES", formato_organismos)
    worksheet_data.write(inicio_fila + i, 1, totales, formato_organismos)
    worksheet_data.write(inicio_fila + i, 2,
                         totales_hasta_treinta_dias_misma_entidad,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 3,
                         totales_hasta_treinta_dias_mismo_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 4,
                         totales_hasta_treinta_dias_otro_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 5, totales_mas_treinta_misma_entidad,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 6,
                         totales_mas_treinta_mismo_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 7,
                         totales_mas_treinta_otro_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 8, totales_mas_sesenta_misma_entidad,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 9,
                         totales_mas_sesenta_mismo_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 10,
                         totales_mas_sesenta_otro_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 11,
                         totales_mas_un_anno_misma_entidad, formato_organismos)
    worksheet_data.write(inicio_fila + i, 12,
                         totales_mas_un_anno_mismo_organismo,
                         formato_organismos)
    worksheet_data.write(inicio_fila + i, 13,
                         totales_mas_un_anno_otro_organismo,
                         formato_organismos)

    book.close()
    return response
def interruptos_por_provincias_sin_entidades(request):
    anno_actual = datetime.today().year
    mes_actual = datetime.today().month
    categoria_usuario = request.user.perfil_usuario.categoria.nombre
    organismo = request.user.perfil_usuario.organismo
    nombre_organismo = organismo.nombre.encode('utf-8').strip()
    num_anno = anno_actual

    if mes_actual == 12:
        num_anno = anno_actual - 1

    response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    if categoria_usuario == 'interrupto' or categoria_usuario == 'interrupto':
        response[
            'Content-Disposition'] = "attachment; filename=Interruptos_por_organismos_(%s)_(%s_%s).xlsx" % (
            str(nombre_organismo).replace(" ", "_"), obtener_mes(mes_actual - 1), num_anno)
    else:
        response['Content-Disposition'] = "attachment; filename=Interruptos_por_provincias_(%s_%s).xlsx" % (
            obtener_mes(mes_actual - 1), num_anno)

    book = Workbook(response, {'in_memory': True})
    worksheet_data = book.add_worksheet("Interruptos por Provincias")

    formato1 = book.add_format({'align': 'center',
                                'valign': 'vcenter',
                                'bold': True,
                                'border': 1})
    formato5 = book.add_format({'border': 1,
                                'text_wrap': True})
    formato_organismos = book.add_format({'bold': True,
                                          'border': 1})

    worksheet_data.write("A1", "OACE-OSDE / Provincias", formato1)

    totales_provincias = dict()
    provincias = Provincia.objects.all()

    for indice, p in enumerate(provincias):
        worksheet_data.write(0, indice + 1, p.siglas, formato1)
        totales_provincias[p] = 0

    worksheet_data.set_column("A:A", 24)

    if categoria_usuario == 'interrupto':
        if es_oace(organismo):
            osdes = obtener_osdes_de_un_oace(organismo)
            if osdes.__len__() > 0:
                interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                         organismo__id__in=[osde.id for osde in osdes]
                                                         )
            else:
                interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                         organismo=organismo
                                                         )
            organismos = Organismo.objects.filter(id=organismo.id)
        else:
            interruptos = Interruptos.objects.filter(fecha_registro__year=anno_actual,
                                                     organismo=organismo
                                                     )
        query = """SELECT id
                        FROM public."SGMGU_interruptos" t where
                            date_part('month',t.fecha_registro)=""" + unicode(mes_actual) + """ AND
                            date_part('year',t.fecha_registro)=""" + unicode(anno_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = Interruptos.objects.filter(id__in=ids_interruptos)

    elif categoria_usuario == 'administrador':
        query = """SELECT id
                FROM public."SGMGU_interruptos" t where
                    date_part('month',t.fecha_registro)=""" + unicode(mes_actual) + """ AND
                    date_part('year',t.fecha_registro)=""" + unicode(anno_actual) + """;"""

        resultado_query_interruptos = Interruptos.objects.raw(query)
        ids_interruptos = [interr.id for interr in resultado_query_interruptos]
        interruptos = Interruptos.objects.filter(id__in=ids_interruptos)
        organismos = obtener_oaces()

    inicio_fila = 1
    i = 0

    if es_oace(organismo) or categoria_usuario == 'administrador':
        for oace in organismos:

            worksheet_data.write(inicio_fila + i, 0, oace.siglas, formato_organismos)  # organismo

            for indice, p in enumerate(provincias):
                t = totales_interruptos_organismo_provincia(interruptos, oace, p)
                worksheet_data.write(inicio_fila + i, indice + 1, t, formato5)
                totales_provincias[p] = totales_provincias[p] + t

            i = i + 1

            # for interrupto in interruptos:
            #     if interrupto.organismo_id == oace.id:
            #
            #         worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad
            #
            #         for indice, p in enumerate(provincias):
            #             if interrupto.municipio.provincia == p:
            #                 worksheet_data.write(inicio_fila + i, indice + 1, total_interruptos(interrupto), formato5)
            #             else:
            #                 worksheet_data.write(inicio_fila + i, indice + 1, 0, formato5)
            #
            #         i = i + 1

            osdes = obtener_osdes_de_un_oace(oace)

            if obtener_osdes_de_un_oace(oace).__len__() > 0:
                for osde in osdes:

                    worksheet_data.write(inicio_fila + i, 0, osde.siglas, formato_organismos)  # osde

                    for indice, p in enumerate(provincias):
                        t = totales_interruptos_organismo_provincia(interruptos, osde, p)
                        worksheet_data.write(inicio_fila + i, indice + 1, t, formato5)
                        totales_provincias[p] = totales_provincias[p] + t

                    i = i + 1

                    # l_interruptos = interruptos.filter(organismo_id=osde)
                    #
                    # for interrupto in l_interruptos:
                    #
                    #     worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad
                    #
                    #     for indice, p in enumerate(provincias):
                    #         if interrupto.municipio.provincia == p:
                    #             worksheet_data.write(inicio_fila + i, indice + 1, total_interruptos(interrupto), formato5)
                    #         else:
                    #             worksheet_data.write(inicio_fila + i, indice + 1, 0, formato5)
                    #
                    #     i = i + 1

    if not es_oace(organismo):

        worksheet_data.write(inicio_fila + i, 0, organismo.siglas, formato_organismos)  # organismo

        for indice, p in enumerate(provincias):
            t = totales_interruptos_organismo_provincia(interruptos, organismo, p)
            worksheet_data.write(inicio_fila + i, indice + 1, t, formato5)
            totales_provincias[p] = totales_provincias[p] + t

        i = i + 1

        # interruptos = interruptos.filter(organismo__nombre=organismo)
        #
        # for interrupto in interruptos:
        #
        #     worksheet_data.write(inicio_fila + i, 0, interrupto.entidad.e_nombre, formato5)  # entidad
        #
        #     for indice, p in enumerate(provincias):
        #         if interrupto.municipio.provincia == p:
        #             worksheet_data.write(inicio_fila + i, indice + 1, total_interruptos(interrupto), formato5)
        #         else:
        #             worksheet_data.write(inicio_fila + i, indice + 1, 0, formato5)
        #
        #     i = i + 1

    worksheet_data.write(inicio_fila + i, 0, "TOTALES", formato_organismos)

    for indice, x in enumerate(totales_provincias.values()):
        worksheet_data.write(inicio_fila + i, indice + 1, x, formato_organismos)

    book.close()
    return response
Ejemplo n.º 6
0
def total_personas_no_ubicadas_provincias(request):
    start_time = time.time()
    anno_actual = datetime.today().year
    mes_actual = datetime.today().month

    response = HttpResponse(
        content_type=
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    response[
        'Content-Disposition'] = "attachment; filename=Total_de_personas_no_ubicadas_por_provincias._(%s_%s).xlsx" % (
            obtener_mes(mes_actual - 1), anno_actual)
    book = Workbook(response, {'in_memory': True})
    worksheet_data = book.add_worksheet("Reporte 1")
    formato = book.add_format({'bold': True, 'border': 1})
    formato2 = book.add_format({'border': 1})

    worksheet_data.write("A1", "Provincias", formato)
    worksheet_data.write("B1", "Controlados", formato)
    worksheet_data.write("C1", "Mujeres controladas", formato)
    worksheet_data.write("D1", "Jovenes controlados", formato)
    worksheet_data.write("E1", "No ubicados", formato)
    worksheet_data.write("F1", "Mujeres no ubicadas", formato)
    worksheet_data.write("G1", "Jovenes no ubicados", formato)

    fuentes_procedencia = FuenteProcedencia.objects.filter(
        activo=True).order_by('id')
    cantidad_fuentes = fuentes_procedencia.count()
    indice = 7

    total_arriba = indice + cantidad_fuentes
    worksheet_data.write(0, total_arriba, "Total", formato)

    for fuente in fuentes_procedencia:
        worksheet_data.write(0, indice, fuente.nombre, formato)
        indice = indice + 1

    worksheet_data.set_column("A:A", 17)
    worksheet_data.set_column("B:B", 11)
    worksheet_data.set_column("C:C", 10)
    worksheet_data.set_column("D:D", 10)
    worksheet_data.set_column("E:E", 10)
    worksheet_data.set_column("F:F", 10)
    worksheet_data.set_column("G:G", 10)

    provincias = Provincia.objects.all()
    arr_provincias = []
    for p in provincias:
        arr_provincias.append(p.nombre)

    worksheet_data.write_column(1, 0, arr_provincias, formato2)

    cantidad_provincias = arr_provincias.__len__()
    indice_total = cantidad_provincias + 1

    worksheet_data.write(indice_total, 0, "Total", formato)

    licenciados_sma = LicenciadosSMA.objects.filter(activo=True)

    egresados_ep = EgresadosEstablecimientosPenitenciarios.objects.filter(
        fuente_procedencia_id=2, activo=True)

    sancionados = EgresadosEstablecimientosPenitenciarios.objects.filter(
        fuente_procedencia_id=3, activo=True)

    desvinculados = Desvinculado.objects.filter(activo=True)

    tecnicos_medio = TMedioOCalificadoEOficio.objects.filter(
        fuente_procedencia_id=6, activo=True)

    obreros_calificados = TMedioOCalificadoEOficio.objects.filter(
        fuente_procedencia_id=7, activo=True)

    escuelas_oficio = TMedioOCalificadoEOficio.objects.filter(
        fuente_procedencia_id=8, activo=True)

    egresados_escuelas_especiales = EgresadosEscuelasEspeciales.objects.filter(
        activo=True)

    egresados_escuelas_conducta = EgresadosEscuelasConducta.objects.filter(
        activo=True)

    egresados_efi = EgresadosEFI.objects.filter(activo=True)

    menores_incapacitados = Menores.objects.filter(fuente_procedencia_id=12,
                                                   activo=True)

    menores_desvinculados = Menores.objects.filter(fuente_procedencia_id=13,
                                                   activo=True)

    menores_dictamen = Menores.objects.filter(fuente_procedencia_id=14,
                                              activo=True)

    discapacitados = Discapacitados.objects.filter(activo=True)

    mujeres_riesgo_pnr = PersonasRiesgo.objects.filter(
        fuente_procedencia_id=17, activo=True)

    hombres_riesgo_pnr = PersonasRiesgo.objects.filter(
        fuente_procedencia_id=18, activo=True)

    proxenetas = PersonasRiesgo.objects.filter(fuente_procedencia_id=19,
                                               activo=True)

    total_controlados_provincia = []
    total_mujeres_controladas_provincia = []
    total_jovenes_controlados_provincia = []
    total_ubicados_provincia = []
    total_mujeres_ubicadas_provincia = []
    total_jovenes_ubicados_provincia = []
    total_egresados_ep_provincias = []
    total_sancionados_provincias = []
    total_desvinculados_provincias = []
    total_tecnicos_medio_provincias = []
    total_obreros_calificados_provincias = []
    total_escuela_oficio_provincias = []
    total_egresados_esc_especiales_provincias = []
    total_egresados_esc_conducta_provincias = []
    total_egresados_efi_provincias = []
    total_menores_incapacitados_provincias = []
    total_menores_desvinculados_provincias = []
    total_menores_dictamen_provincias = []
    total_discapacitados_provincias = []
    total_mueres_riesgo_pnr_provincias = []
    total_hombres_riesgo_pnr_provincias = []
    total_proxenetas_riesgo_pnr_provincias = []

    cero = []

    for provincia in provincias:

        cero.append(0)

        # CONTROLADOS
        licenciados_sma_controlados = licenciados_sma.filter(
            municipio_residencia__provincia=provincia).count()
        egresados_ep_controlados = egresados_ep.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        sancionados_controlados = sancionados.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        desvinculados_controlados = desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        tecnicos_medio_controlados = tecnicos_medio.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        obreros_calificados_controlados = obreros_calificados.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        escuelas_oficio_controlados = escuelas_oficio.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        egresados_escuelas_especiales_controlados = egresados_escuelas_especiales.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        egresados_escuelas_conducta_controlados = egresados_escuelas_conducta.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        egresados_efi_controlados = egresados_efi.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        menores_incapacitados_controlados = menores_incapacitados.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        menores_desvinculados_controlados = menores_desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        menores_dictamen_controlados = menores_dictamen.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        discapacitados_controlados = discapacitados.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        mujeres_riesgo_pnr_controlados = mujeres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        hombres_riesgo_pnr_controlados = hombres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia).count()
        proxenetas_controlados = proxenetas.filter(
            municipio_solicita_empleo__provincia=provincia).count()

        total = (licenciados_sma_controlados + egresados_ep_controlados +
                 sancionados_controlados + desvinculados_controlados +
                 tecnicos_medio_controlados + obreros_calificados_controlados +
                 escuelas_oficio_controlados +
                 egresados_escuelas_especiales_controlados +
                 egresados_escuelas_conducta_controlados +
                 egresados_efi_controlados +
                 menores_incapacitados_controlados +
                 menores_desvinculados_controlados +
                 menores_dictamen_controlados + discapacitados_controlados +
                 mujeres_riesgo_pnr_controlados +
                 hombres_riesgo_pnr_controlados + proxenetas_controlados)
        total_controlados_provincia.append(total)

        # MUJERES CONTROLADAS
        licenciados_sma_controlados = licenciados_sma.filter(
            municipio_residencia__provincia=provincia, sexo='F').count()
        egresados_ep_controlados = egresados_ep.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        sancionados_controlados = sancionados.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        desvinculados_controlados = desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        tecnicos_medio_controlados = tecnicos_medio.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        obreros_calificados_controlados = obreros_calificados.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        escuelas_oficio_controlados = escuelas_oficio.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        egresados_escuelas_especiales_controlados = egresados_escuelas_especiales.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        egresados_escuelas_conducta_controlados = egresados_escuelas_conducta.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        egresados_efi_controlados = egresados_efi.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        menores_incapacitados_controlados = menores_incapacitados.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        menores_desvinculados_controlados = menores_desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        menores_dictamen_controlados = menores_dictamen.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        discapacitados_controlados = discapacitados.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        mujeres_riesgo_pnr_controlados = mujeres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        hombres_riesgo_pnr_controlados = hombres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()
        proxenetas_controlados = proxenetas.filter(
            municipio_solicita_empleo__provincia=provincia, sexo='F').count()

        total = (licenciados_sma_controlados + egresados_ep_controlados +
                 sancionados_controlados + desvinculados_controlados +
                 tecnicos_medio_controlados + obreros_calificados_controlados +
                 escuelas_oficio_controlados +
                 egresados_escuelas_especiales_controlados +
                 egresados_escuelas_conducta_controlados +
                 egresados_efi_controlados +
                 menores_incapacitados_controlados +
                 menores_desvinculados_controlados +
                 menores_dictamen_controlados + discapacitados_controlados +
                 mujeres_riesgo_pnr_controlados +
                 hombres_riesgo_pnr_controlados + proxenetas_controlados)
        total_mujeres_controladas_provincia.append(total)

        # JOVENES CONTROLADOS
        licenciados_sma_controlados = licenciados_sma.filter(
            municipio_residencia__provincia=provincia, edad__lte=35).count()
        egresados_ep_controlados = egresados_ep.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        sancionados_controlados = sancionados.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        desvinculados_controlados = desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        tecnicos_medio_controlados = tecnicos_medio.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        obreros_calificados_controlados = obreros_calificados.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        escuelas_oficio_controlados = escuelas_oficio.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        egresados_escuelas_especiales_controlados = egresados_escuelas_especiales.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        egresados_escuelas_conducta_controlados = egresados_escuelas_conducta.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        egresados_efi_controlados = egresados_efi.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        menores_incapacitados_controlados = menores_incapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        menores_desvinculados_controlados = menores_desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        menores_dictamen_controlados = menores_dictamen.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        discapacitados_controlados = discapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        mujeres_riesgo_pnr_controlados = mujeres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        hombres_riesgo_pnr_controlados = hombres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()
        proxenetas_controlados = proxenetas.filter(
            municipio_solicita_empleo__provincia=provincia,
            edad__lte=35).count()

        total = (licenciados_sma_controlados + egresados_ep_controlados +
                 sancionados_controlados + desvinculados_controlados +
                 tecnicos_medio_controlados + obreros_calificados_controlados +
                 escuelas_oficio_controlados +
                 egresados_escuelas_especiales_controlados +
                 egresados_escuelas_conducta_controlados +
                 egresados_efi_controlados +
                 menores_incapacitados_controlados +
                 menores_desvinculados_controlados +
                 menores_dictamen_controlados + discapacitados_controlados +
                 mujeres_riesgo_pnr_controlados +
                 hombres_riesgo_pnr_controlados + proxenetas_controlados)
        total_jovenes_controlados_provincia.append(total)

        # NO UBICADOS
        egresados_ep_controlados = egresados_ep.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        sancionados_controlados = sancionados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        desvinculados_controlados = desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        tecnicos_medio_controlados = tecnicos_medio.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        obreros_calificados_controlados = obreros_calificados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        escuelas_oficio_controlados = escuelas_oficio.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        egresados_escuelas_especiales_controlados = egresados_escuelas_especiales.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        egresados_escuelas_conducta_controlados = egresados_escuelas_conducta.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        egresados_efi_controlados = egresados_efi.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        menores_incapacitados_controlados = menores_incapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        menores_desvinculados_controlados = menores_desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        menores_dictamen_controlados = menores_dictamen.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        discapacitados_controlados = discapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        mujeres_riesgo_pnr_controlados = mujeres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        hombres_riesgo_pnr_controlados = hombres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()
        proxenetas_controlados = proxenetas.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False).count()

        total = (
            egresados_ep_controlados + sancionados_controlados +
            desvinculados_controlados + tecnicos_medio_controlados +
            obreros_calificados_controlados + escuelas_oficio_controlados +
            egresados_escuelas_especiales_controlados +
            egresados_escuelas_conducta_controlados +
            egresados_efi_controlados + menores_incapacitados_controlados +
            menores_desvinculados_controlados + menores_dictamen_controlados +
            discapacitados_controlados + mujeres_riesgo_pnr_controlados +
            hombres_riesgo_pnr_controlados + proxenetas_controlados)
        total_ubicados_provincia.append(total)

        # MUJERES NO UBICADAS
        egresados_ep_controlados = egresados_ep.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        sancionados_controlados = sancionados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        desvinculados_controlados = desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        tecnicos_medio_controlados = tecnicos_medio.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        obreros_calificados_controlados = obreros_calificados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        escuelas_oficio_controlados = escuelas_oficio.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        egresados_escuelas_especiales_controlados = egresados_escuelas_especiales.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        egresados_escuelas_conducta_controlados = egresados_escuelas_conducta.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        egresados_efi_controlados = egresados_efi.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        menores_incapacitados_controlados = menores_incapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        menores_desvinculados_controlados = menores_desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        menores_dictamen_controlados = menores_dictamen.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        discapacitados_controlados = discapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        mujeres_riesgo_pnr_controlados = mujeres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        hombres_riesgo_pnr_controlados = hombres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()
        proxenetas_controlados = proxenetas.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            sexo='F').count()

        total = (
            egresados_ep_controlados + sancionados_controlados +
            desvinculados_controlados + tecnicos_medio_controlados +
            obreros_calificados_controlados + escuelas_oficio_controlados +
            egresados_escuelas_especiales_controlados +
            egresados_escuelas_conducta_controlados +
            egresados_efi_controlados + menores_incapacitados_controlados +
            menores_desvinculados_controlados + menores_dictamen_controlados +
            discapacitados_controlados + mujeres_riesgo_pnr_controlados +
            hombres_riesgo_pnr_controlados + proxenetas_controlados)
        total_mujeres_ubicadas_provincia.append(total)

        # JOVENES NO UBICADOS
        egresados_ep_controlados = egresados_ep.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        sancionados_controlados = sancionados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        desvinculados_controlados = desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        tecnicos_medio_controlados = tecnicos_medio.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        obreros_calificados_controlados = obreros_calificados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        escuelas_oficio_controlados = escuelas_oficio.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        egresados_escuelas_especiales_controlados = egresados_escuelas_especiales.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        egresados_escuelas_conducta_controlados = egresados_escuelas_conducta.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        egresados_efi_controlados = egresados_efi.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        menores_incapacitados_controlados = menores_incapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        menores_desvinculados_controlados = menores_desvinculados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        menores_dictamen_controlados = menores_dictamen.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        discapacitados_controlados = discapacitados.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        mujeres_riesgo_pnr_controlados = mujeres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        hombres_riesgo_pnr_controlados = hombres_riesgo_pnr.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()
        proxenetas_controlados = proxenetas.filter(
            municipio_solicita_empleo__provincia=provincia,
            ubicado=False,
            edad__lte=35).count()

        total = (
            egresados_ep_controlados + sancionados_controlados +
            desvinculados_controlados + tecnicos_medio_controlados +
            obreros_calificados_controlados + escuelas_oficio_controlados +
            egresados_escuelas_especiales_controlados +
            egresados_escuelas_conducta_controlados +
            egresados_efi_controlados + menores_incapacitados_controlados +
            menores_desvinculados_controlados + menores_dictamen_controlados +
            discapacitados_controlados + mujeres_riesgo_pnr_controlados +
            hombres_riesgo_pnr_controlados + proxenetas_controlados)
        total_jovenes_ubicados_provincia.append(total)

        # NO UBICADOS: Egresados de establecimientos penitenciarios
        total_egresados_ep_provincias.append(
            egresados_ep.filter(municipio_solicita_empleo__provincia=provincia,
                                ubicado=False).count())

        # NO UBICADOS: SANCIONADOS
        total_sancionados_provincias.append(
            sancionados.filter(municipio_solicita_empleo__provincia=provincia,
                               ubicado=False).count())

        # NO UBICADOS: DESVINCULADOS
        total_desvinculados_provincias.append(
            desvinculados.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Tecnicos medios
        total_tecnicos_medio_provincias.append(
            tecnicos_medio.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Egresados obreros calificados
        total_obreros_calificados_provincias.append(
            obreros_calificados.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Egresados escuelas de oficio
        total_escuela_oficio_provincias.append(
            escuelas_oficio.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Egresados de escuelas especiales
        total_egresados_esc_especiales_provincias.append(
            egresados_escuelas_especiales.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Egresados de escuelas de conducta
        total_egresados_esc_conducta_provincias.append(
            egresados_escuelas_conducta.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Egresados de la EFI
        total_egresados_efi_provincias.append(
            egresados_efi.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Menores incapacitados para el estudio por dictamen médico
        total_menores_incapacitados_provincias.append(
            menores_incapacitados.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Menores desvinculados del SNE por bajo rendimiento
        total_menores_desvinculados_provincias.append(
            menores_desvinculados.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Menores con dictamen del CDO-MININT
        total_menores_dictamen_provincias.append(
            menores_dictamen.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # NO UBICADOS: Personas con discapacidad
        total_discapacitados_provincias.append(
            discapacitados.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # UBICADOS: Mujeres de riesgo controladas por al PNR
        total_mueres_riesgo_pnr_provincias.append(
            mujeres_riesgo_pnr.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # UBICADOS: Hombres de riesgo controlados por al PNR
        total_hombres_riesgo_pnr_provincias.append(
            hombres_riesgo_pnr.filter(
                municipio_solicita_empleo__provincia=provincia,
                ubicado=False).count())

        # UBICADOS: Proxenetas de riesgo controlados por la PNR
        total_proxenetas_riesgo_pnr_provincias.append(
            proxenetas.filter(municipio_solicita_empleo__provincia=provincia,
                              ubicado=False).count())

    worksheet_data.write_column(1, 1, total_controlados_provincia, formato2)
    worksheet_data.write_column(1, 2, total_mujeres_controladas_provincia,
                                formato2)
    worksheet_data.write_column(1, 3, total_jovenes_controlados_provincia,
                                formato2)
    worksheet_data.write_column(1, 4, total_ubicados_provincia, formato2)
    worksheet_data.write_column(1, 5, total_mujeres_ubicadas_provincia,
                                formato2)
    worksheet_data.write_column(1, 6, total_jovenes_ubicados_provincia,
                                formato2)
    worksheet_data.write_column(1, 7, cero,
                                formato2)  # NO UBICADOS: LICENCIADOS DEL SMA
    worksheet_data.write_column(1, 8, total_egresados_ep_provincias, formato2)
    worksheet_data.write_column(1, 9, total_sancionados_provincias, formato2)
    worksheet_data.write_column(1, 10, total_desvinculados_provincias,
                                formato2)
    worksheet_data.write_column(1, 11, cero,
                                formato2)  # UBICADOS: Egresados Universitarios
    worksheet_data.write_column(1, 12, total_tecnicos_medio_provincias,
                                formato2)
    worksheet_data.write_column(1, 13, total_obreros_calificados_provincias,
                                formato2)
    worksheet_data.write_column(1, 14, total_escuela_oficio_provincias,
                                formato2)
    worksheet_data.write_column(1, 15,
                                total_egresados_esc_especiales_provincias,
                                formato2)
    worksheet_data.write_column(1, 16, total_egresados_esc_conducta_provincias,
                                formato2)
    worksheet_data.write_column(1, 17, total_egresados_efi_provincias,
                                formato2)
    worksheet_data.write_column(1, 18, total_menores_incapacitados_provincias,
                                formato2)
    worksheet_data.write_column(1, 19, total_menores_desvinculados_provincias,
                                formato2)
    worksheet_data.write_column(1, 20, total_menores_dictamen_provincias,
                                formato2)
    worksheet_data.write_column(1, 21, total_discapacitados_provincias,
                                formato2)
    worksheet_data.write_column(1, 22, total_mueres_riesgo_pnr_provincias,
                                formato2)
    worksheet_data.write_column(1, 23, total_hombres_riesgo_pnr_provincias,
                                formato2)
    worksheet_data.write_column(1, 24, total_proxenetas_riesgo_pnr_provincias,
                                formato2)

    # ------------ SUMAS ABAJO-------------------

    sumas = []
    for a in range(1, 25):
        total = '=SUM(%s)' % xl_range(1, a, cantidad_provincias, a)
        sumas.append(total)

    indice_sumas = 1
    for suma in sumas:
        worksheet_data.write(17, indice_sumas, suma, formato2)
        indice_sumas = indice_sumas + 1

    # ------------ SUMAS ARRIBA-------------------
    sumas2 = []
    inicio = 7
    cant = cantidad_provincias + 1
    posicion1 = cantidad_fuentes + inicio - 1
    for i in range(1, cant):
        total2 = '=SUM(%s)' % xl_range(i, inicio, i, posicion1)
        sumas2.append(total2)

    indice_sumas = 1
    posicion2 = inicio + cantidad_fuentes
    for suma in sumas2:
        worksheet_data.write(indice_sumas, posicion2, suma, formato2)
        indice_sumas = indice_sumas + 1

    book.close()
    elapsed_time = time.time() - start_time
    print("Tiempo transcurrido: %.10f segundos." % elapsed_time)
    # print("Tiempo transcurrido: % segundos." % elapsed_time)
    return response