def corresponsales():

    corresponsales = obtener_datos(
        """SELECT
			DISTINCT clave_corresponsal,
			razon_social
		FROM
			BUO_Masnomina.contratos_hist
		ORDER BY
			razon_social""", False, ())

    return json.dumps(corresponsales)
Ejemplo n.º 2
0
def consulta_divisiones():
    data = {}
    sql = " select division, nombre from BUO_Masnomina.masnomina_divisiones order by nombre "
    print sql
    query_parameters = ()
    rows = obtener_datos(sql, v_legacy_sql, query_parameters)
    print rows
    lista_divisiones = []
    if rows != None:
        for row in rows:
            division = {}
            division['id_div'] = row[0]
            division['nombre'] = row[1]
            lista_divisiones.append(division)
    data = lista_divisiones
    return data
def general():
    tipo = request.args.get('tipo')
    corresponsal = request.args.get('corresponsal')
    mes = request.args.get('mes')

    #se realiza la consulta
    mes_numero = int(mes[4] + mes[5])
    anio = int(mes[0] + mes[1] + mes[2] + mes[3])

    lista_retorno = {}
    temp = []

    query = " SELECT estatus_contable, SUM(CASE "
    query += "WHEN fecha_cierre = '" + generar_fecha_corte(
        mes_numero, anio) + "' THEN saldo_contable "
    query += "ELSE NULL END) AS mes, SUM(CASE "
    query += "WHEN fecha_cierre = '" + generar_fecha_corte(
        mes_numero - 1, anio) + "' THEN saldo_contable "
    query += "ELSE NULL END) AS mes_a,	SUM(CASE "
    query += "WHEN fecha_cierre = '" + generar_fecha_corte(
        mes_numero, anio - 1) + "' THEN saldo_contable "
    query += "ELSE NULL END) AS mes_aa FROM BUO_Masnomina.contratos_hist WHERE 1=1 "
    if (int(corresponsal) != 0):
        query += "AND clave_corresponsal = " + corresponsal
    query += " GROUP BY estatus_contable ORDER BY estatus_contable DESC "

    print query

    temp = obtener_datos(query, False, ())

    lista_cartera = [['VIGENTE', temp[0][1], temp[0][2], temp[0][3]],
                     ['VENCIDA', temp[1][1], temp[1][2], temp[1][2]],
                     ['CASTIGO CONTABLE', temp[3][1], temp[3][2], temp[3][3]],
                     ['CASTIGO FISCAL', temp[2][1], temp[2][2], temp[2][3]]]

    #START CARTERA
    lista_resultado_cartera = []
    lista_resultado_cartera_pct = []
    lista_resultado_cartera_vigente = []
    lista_resultado_cartera_icv = []

    #Obtenemos totales
    mes1 = 'ABR17'
    mes2 = 'MAR18'
    mes3 = 'ABR18'

    totales_cartera = ['TOTAL', 0, 0, 0]

    lista_resultado_cartera.append(['NOMBRE', mes1, mes2, mes3])

    for i, row in enumerate(lista_cartera, 1):
        registro = []

        registro.append(row[0])
        registro.append('{:0,.0f}'.format(row[1]))
        registro.append('{:0,.0f}'.format(row[2]))
        registro.append('{:0,.0f}'.format(row[3]))

        totales_cartera[1] += row[1]
        totales_cartera[2] += row[2]
        totales_cartera[3] += row[3]
        lista_resultado_cartera.append(registro)

    lista_resultado_cartera_pct.append(
        ['Nombre', 'ABR17', 'MAR18', 'ABR18', 'semaforo'])

    for i, row in enumerate(lista_cartera, 1):
        temp = []
        temp.append(row[0])
        temp.append('{:0,.2f}%'.format(100 *
                                       ((row[1] * 1.00) / totales_cartera[1])))
        temp.append('{:0,.2f}%'.format(100 *
                                       ((row[2] * 1.00) / totales_cartera[2])))
        temp.append('{:0,.2f}%'.format(100 *
                                       ((row[3] * 1.00) / totales_cartera[3])))
        if i == 1:
            if row[3] / totales_cartera[3] > row[2] / totales_cartera[2]:
                temp.append('verde')
            else:
                temp.append('rojo')
        else:
            if row[3] / totales_cartera[3] < row[2] / totales_cartera[2]:
                temp.append('verde')
            else:
                temp.append('rojo')
        lista_resultado_cartera_pct.append(temp)

    lista_resultado_cartera_vigente.append(lista_cartera[0][1] +
                                           lista_cartera[1][1])
    lista_resultado_cartera_vigente.append(lista_cartera[0][2] +
                                           lista_cartera[1][2])
    lista_resultado_cartera_vigente.append(lista_cartera[0][3] +
                                           lista_cartera[1][3])

    lista_resultado_cartera_icv.append(['NOMBRE', mes1, mes2, mes3])

    aux_icv = []
    aux_icv.append('ICV')
    aux_icv.append('{:0,.2f}%'.format(
        100 *
        (lista_cartera[1][1] * 1.00 / lista_resultado_cartera_vigente[0])))
    aux_icv.append('{:0,.2f}%'.format(
        100 *
        (lista_cartera[1][2] * 1.00 / lista_resultado_cartera_vigente[1])))
    aux_icv.append('{:0,.2f}%'.format(
        100 *
        (lista_cartera[1][3] * 1.00 / lista_resultado_cartera_vigente[2])))
    lista_resultado_cartera_icv.append(aux_icv)

    aux_icv = []
    aux_icv.append('ICV Operativo')
    aux_icv.append('{:0,.2f}%'.format(
        100 *
        ((lista_cartera[1][1] + lista_cartera[2][1] + lista_cartera[3][1]) *
         1.00 / totales_cartera[1])))
    aux_icv.append('{:0,.2f}%'.format(
        100 *
        ((lista_cartera[1][2] + lista_cartera[2][2] + lista_cartera[3][2]) *
         1.00 / totales_cartera[2])))
    aux_icv.append('{:0,.2f}%'.format(
        100 *
        ((lista_cartera[1][3] + lista_cartera[2][3] + lista_cartera[3][3]) *
         1.00 / totales_cartera[3])))
    lista_resultado_cartera_icv.append(aux_icv)

    aux_pcts = {}
    aux_pcts['ACA'] = '{:0,.2f}%'.format(
        100 * ((lista_resultado_cartera_vigente[2] * 1.00 /
                lista_resultado_cartera_vigente[0]) - 1))
    aux_pcts['MA'] = '{:0,.2f}%'.format(
        100 * ((lista_resultado_cartera_vigente[2] * 1.00 /
                lista_resultado_cartera_vigente[1]) - 1))

    totales_cartera[1] = '{:0,.0f}'.format(totales_cartera[1])
    totales_cartera[2] = '{:0,.0f}'.format(totales_cartera[2])
    totales_cartera[3] = '{:0,.0f}'.format(totales_cartera[3])
    lista_resultado_cartera.append(totales_cartera)

    lista_resultado_cartera_vigente[0] = '{:0,.0f}'.format(
        lista_resultado_cartera_vigente[0])
    lista_resultado_cartera_vigente[1] = '{:0,.0f}'.format(
        lista_resultado_cartera_vigente[1])
    lista_resultado_cartera_vigente[2] = '{:0,.0f}'.format(
        lista_resultado_cartera_vigente[2])

    lista_retorno['cartera_datos'] = lista_resultado_cartera
    lista_retorno['cartera_datos_pct'] = lista_resultado_cartera_pct
    lista_retorno['cartera_datos_vigente'] = lista_resultado_cartera_vigente
    lista_retorno['icv'] = lista_resultado_cartera_icv
    lista_retorno['pct_vs'] = aux_pcts
    #END CARTERA

    #START CARTERA POR BUCKETS
    lista_resultado_cartera = []
    lista_resultado_cartera_pct = []

    query = '''SELECT
		bucket,
		SUM(CASE
			WHEN fecha_cierre = '2018-04-30' THEN saldo_contable
			ELSE NULL END) AS mes,
		SUM(CASE
			WHEN fecha_cierre = '2018-03-31' THEN saldo_contable
			ELSE NULL END) AS mes_a,
		SUM(CASE
			WHEN fecha_cierre = '2017-04-30' THEN saldo_contable
			ELSE NULL END) AS mes_aa
	FROM
		BUO_Masnomina.contratos_hist
	WHERE
		1 = 1
		AND clave_corresponsal = 322
	GROUP BY
		bucket
	ORDER BY
		bucket'''

    temp = obtener_datos(query, False, ())

    print(temp)

    lista_cartera = [['0', temp[0][1], temp[0][2], temp[0][3]],
                     ['1-29', temp[1][1], temp[1][2], temp[1][3]],
                     ['30-59', temp[5][1], temp[5][2], temp[5][3]],
                     ['60-89', temp[7][1], temp[7][2], temp[7][3]],
                     ['90-119', temp[8][1], temp[8][2], temp[8][3]],
                     ['120-149', temp[2][1], temp[2][2], temp[2][3]],
                     ['150-179', temp[3][1], temp[3][2], temp[3][3]],
                     ['180-364', temp[4][1], temp[4][2], temp[4][3]],
                     ['365 o +', temp[6][1], temp[6][2], temp[6][3]]]

    #Obtenemos totales
    totales_cartera = ['TOTAL', 0, 0, 0]
    totales_cartera[1] = 0
    totales_cartera[2] = 0
    totales_cartera[3] = 0

    lista_resultado_cartera.append([mes1, mes2, mes3])
    for i, row in enumerate(lista_cartera, 1):
        registro = []
        registro.append(row[0])
        registro.append('{:0,.0f}'.format(row[1]))
        registro.append('{:0,.0f}'.format(row[2]))
        registro.append('{:0,.0f}'.format(row[3]))

        totales_cartera[1] += row[1]
        totales_cartera[2] += row[2]
        totales_cartera[3] += row[3]
        lista_resultado_cartera.append(registro)

    lista_resultado_cartera_pct.append([mes1, mes2, mes3, 'SEMAFORO'])

    for i, row in enumerate(lista_cartera, 1):
        registro = []

        registro.append(row[0])
        registro.append('{:0,.2f}%'.format(
            100 * ((row[1] * 1.00) / totales_cartera[1])))
        registro.append('{:0,.2f}%'.format(
            100 * ((row[2] * 1.00) / totales_cartera[2])))
        registro.append('{:0,.2f}%'.format(
            100 * ((row[3] * 1.00) / totales_cartera[3])))

        if i == 1:
            if row[3] / totales_cartera[3] > row[2] / totales_cartera[2]:
                registro.append('verde')
            else:
                registro.append('rojo')
        else:
            if row[3] / totales_cartera[3] < row[2] / totales_cartera[2]:
                registro.append('verde')
            else:
                registro.append('rojo')
        lista_resultado_cartera_pct.append(registro)

    totales_cartera[1] = '{:0,.0f}'.format(totales_cartera[1])
    totales_cartera[2] = '{:0,.0f}'.format(totales_cartera[2])
    totales_cartera[3] = '{:0,.0f}'.format(totales_cartera[3])
    lista_resultado_cartera.append(totales_cartera)

    lista_retorno['cartera_datos_bucket'] = lista_resultado_cartera
    lista_retorno['cartera_datos_pct_bucket'] = lista_resultado_cartera_pct
    #END CARTERA POR BUCKETS

    #START CARTERA OPERATIVA
    lista_resultado_cartera = []
    lista_resultado_cartera_totales = {}

    lista_cartera = [['100%', 601192, 2916, 7573, 4748],
                     ['90-99%', 19751, 153, 613, 115],
                     ['60-89%', 21494, 1834, 2148, 1524],
                     ['30-59%', 6004, 1705, 2165, 2271],
                     ['1-29%', 1819, 1237, 1984, 4767],
                     ['POR INSTALAR', 44079, 70, 66, 65],
                     ['BAJAS en recuperacion', 5283, 3525, 8540, 56462],
                     ['BAJAS', 1321, 881, 2135, 14115],
                     ['CERO', 13886, 3418, 7054, 15266],
                     ['DEFUNCIONES', 982, 583, 567, 1239],
                     ['FRAUDES', 0, 120, 32, 710]]

    #Obtenemos totales
    totales_cartera = {}
    totales_cartera['nombre'] = 'TOTAL'
    totales_cartera['VIGENTE'] = 0
    totales_cartera['VENCIDA'] = 0
    totales_cartera['CASTIGO_CONTABLE'] = 0
    totales_cartera['CASTIGO_FISCAL'] = 0
    totales_cartera['TOTAL'] = 0

    lista_retorno['vsVigente'] = '{:0,.2f}'.format(93.72) + '%'

    for i, row in enumerate(lista_cartera, 1):
        registro = {}
        registro['nombre'] = row[0]
        registro['VIGENTE'] = '{:0,.0f}'.format(row[1])
        registro['VENCIDA'] = '{:0,.0f}'.format(row[2])
        registro['CASTIGO_CONTABLE'] = '{:0,.0f}'.format(row[3])
        registro['CASTIGO_FISCAL'] = '{:0,.0f}'.format(row[4])
        registro['TOTAL'] = '{:0,.0f}'.format(row[1] + row[2] + row[3] +
                                              row[4])

        totales_cartera['VIGENTE'] += row[1]
        totales_cartera['VENCIDA'] += row[2]
        totales_cartera['CASTIGO_CONTABLE'] += row[3]
        totales_cartera['CASTIGO_FISCAL'] += row[4]
        totales_cartera['TOTAL'] += (row[1] + row[2] + row[3] + row[4])

        lista_resultado_cartera.append(registro)

    lista_resultado_cartera_totales['pcts'] = float(
        lista_resultado_cartera[0]['TOTAL'].replace(',', '')
    ) + float(lista_resultado_cartera[1]['TOTAL'].replace(',', '')) + float(
        lista_resultado_cartera[2]['TOTAL'].replace(',', '')) + float(
            lista_resultado_cartera[3]['TOTAL'].replace(',', '')) + float(
                lista_resultado_cartera[4]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['instalar'] = float(
        lista_resultado_cartera[5]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['cero'] = float(
        lista_resultado_cartera[6]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['bajas'] = float(
        lista_resultado_cartera[7]['TOTAL'].replace(',', '')) + float(
            lista_resultado_cartera[8]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['fraudes_defunciones'] = float(
        lista_resultado_cartera[9]['TOTAL'].replace(',', '')) + float(
            lista_resultado_cartera[10]['TOTAL'].replace(',', ''))

    lista_resultado_cartera_totales['pcts_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['pcts'] / totales_cartera['TOTAL']) *
        100)
    lista_resultado_cartera_totales['instalar_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['instalar'] /
         totales_cartera['TOTAL']) * 100)
    lista_resultado_cartera_totales['cero_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['cero'] / totales_cartera['TOTAL']) *
        100)
    lista_resultado_cartera_totales['bajas_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['bajas'] / totales_cartera['TOTAL']) *
        100)
    lista_resultado_cartera_totales[
        'fraudes_defunciones_pct'] = '{:0,.2f}%'.format(
            (lista_resultado_cartera_totales['fraudes_defunciones'] /
             totales_cartera['TOTAL']) * 100)

    lista_resultado_cartera_totales['pcts'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['pcts'])
    lista_resultado_cartera_totales['instalar'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['instalar'])
    lista_resultado_cartera_totales['cero'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['cero'])
    lista_resultado_cartera_totales['bajas'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['bajas'])
    lista_resultado_cartera_totales['fraudes_defunciones'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['fraudes_defunciones'])

    totales_cartera['VIGENTE'] = '{:0,.0f}'.format(totales_cartera['VIGENTE'])
    totales_cartera['VENCIDA'] = '{:0,.0f}'.format(totales_cartera['VENCIDA'])
    totales_cartera['CASTIGO_CONTABLE'] = '{:0,.0f}'.format(
        totales_cartera['CASTIGO_CONTABLE'])
    totales_cartera['CASTIGO_FISCAL'] = '{:0,.0f}'.format(
        totales_cartera['CASTIGO_FISCAL'])
    totales_cartera['TOTAL'] = '{:0,.0f}'.format(totales_cartera['TOTAL'])
    lista_resultado_cartera.append(totales_cartera)

    lista_retorno['cartera_datos_operativa'] = lista_resultado_cartera
    lista_retorno[
        'cartera_datos_operativa_totales'] = lista_resultado_cartera_totales
    #END CARTERA OPERATIVA

    #START CARTERA OPERATIVA  X COBRAR
    lista_resultado_cartera = []
    lista_resultado_cartera_totales = {}

    #Obtenemos totales
    totales_cartera = {}
    totales_cartera['nombre'] = 'TOTAL'
    totales_cartera['VIGENTE'] = 0
    totales_cartera['VENCIDA'] = 0
    totales_cartera['CASTIGO_CONTABLE'] = 0
    totales_cartera['CASTIGO_FISCAL'] = 0
    totales_cartera['TOTAL'] = 0

    for i, row in enumerate(lista_cartera, 1):
        registro = {}
        registro['nombre'] = row[0]
        registro['VIGENTE'] = '{:0,.0f}'.format(row[1] * 1.4)
        registro['VENCIDA'] = '{:0,.0f}'.format(row[2] * 1.4)
        registro['CASTIGO_CONTABLE'] = '{:0,.0f}'.format(row[3] * 1.4)
        registro['CASTIGO_FISCAL'] = '{:0,.0f}'.format(row[4] * 1.4)
        registro['TOTAL'] = '{:0,.0f}'.format(
            (row[1] + row[2] + row[3] + row[4]) * 1.4)

        totales_cartera['VIGENTE'] += row[1] * 1.4
        totales_cartera['VENCIDA'] += row[2] * 1.4
        totales_cartera['CASTIGO_CONTABLE'] += row[3] * 1.4
        totales_cartera['CASTIGO_FISCAL'] += row[4] * 1.4
        totales_cartera['TOTAL'] += ((row[1] + row[2] + row[3] + row[4]) * 1.4)

        lista_resultado_cartera.append(registro)

    lista_resultado_cartera_totales['pcts'] = float(
        lista_resultado_cartera[0]['TOTAL'].replace(',', '')
    ) + float(lista_resultado_cartera[1]['TOTAL'].replace(',', '')) + float(
        lista_resultado_cartera[2]['TOTAL'].replace(',', '')) + float(
            lista_resultado_cartera[3]['TOTAL'].replace(',', '')) + float(
                lista_resultado_cartera[4]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['instalar'] = float(
        lista_resultado_cartera[5]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['cero'] = float(
        lista_resultado_cartera[6]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['bajas'] = float(
        lista_resultado_cartera[7]['TOTAL'].replace(',', '')) + float(
            lista_resultado_cartera[8]['TOTAL'].replace(',', ''))
    lista_resultado_cartera_totales['fraudes_defunciones'] = float(
        lista_resultado_cartera[9]['TOTAL'].replace(',', '')) + float(
            lista_resultado_cartera[10]['TOTAL'].replace(',', ''))

    lista_resultado_cartera_totales['pcts_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['pcts'] / totales_cartera['TOTAL']) *
        100)
    lista_resultado_cartera_totales['instalar_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['instalar'] /
         totales_cartera['TOTAL']) * 100)
    lista_resultado_cartera_totales['cero_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['cero'] / totales_cartera['TOTAL']) *
        100)
    lista_resultado_cartera_totales['bajas_pct'] = '{:0,.2f}%'.format(
        (lista_resultado_cartera_totales['bajas'] / totales_cartera['TOTAL']) *
        100)
    lista_resultado_cartera_totales[
        'fraudes_defunciones_pct'] = '{:0,.2f}%'.format(
            (lista_resultado_cartera_totales['fraudes_defunciones'] /
             totales_cartera['TOTAL']) * 100)

    lista_resultado_cartera_totales['pcts'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['pcts'])
    lista_resultado_cartera_totales['instalar'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['instalar'])
    lista_resultado_cartera_totales['cero'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['cero'])
    lista_resultado_cartera_totales['bajas'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['bajas'])
    lista_resultado_cartera_totales['fraudes_defunciones'] = '{:0,.0f}'.format(
        lista_resultado_cartera_totales['fraudes_defunciones'])

    totales_cartera['VIGENTE'] = '{:0,.0f}'.format(totales_cartera['VIGENTE'])
    totales_cartera['VENCIDA'] = '{:0,.0f}'.format(totales_cartera['VENCIDA'])
    totales_cartera['CASTIGO_CONTABLE'] = '{:0,.0f}'.format(
        totales_cartera['CASTIGO_CONTABLE'])
    totales_cartera['CASTIGO_FISCAL'] = '{:0,.0f}'.format(
        totales_cartera['CASTIGO_FISCAL'])
    totales_cartera['TOTAL'] = '{:0,.0f}'.format(totales_cartera['TOTAL'])
    lista_resultado_cartera.append(totales_cartera)

    lista_retorno['cartera_datos_operativa_cobrar'] = lista_resultado_cartera
    lista_retorno[
        'cartera_datos_operativa_totales_cobrar'] = lista_resultado_cartera_totales
    #END CARTERA OPERATIVA X COBRAR

    #START CARTERA NEVER PAID
    lista_resultado_cartera = []

    lista_cartera = [['0', 44632449, 48882050, 45728698],
                     ['1-29', 3720389, 342088, 590839],
                     ['30-59', 208177, 2301836, 226049],
                     ['60-89', 4423923, 817035, 1041132],
                     ['90-119', 1198200, 382012, 582725],
                     ['120-149', 219703, 865198, 346408],
                     ['150-179', 782058, 1034091, 716312],
                     ['180-364', 4148246, 4091867, 4912132],
                     ['365 o +', 9586286, 12349604, 11730876]]

    #Obtenemos totales
    totales_cartera = ['TOTAL', 0, 0, 0]
    totales_cartera[1] = 0
    totales_cartera[2] = 0
    totales_cartera[3] = 0

    lista_resultado_cartera.append(['NOMBRE', mes1, mes2, mes3])
    for i, row in enumerate(lista_cartera, 1):
        registro = []
        registro.append(row[0])
        registro.append('{:0,.0f}'.format(row[1]))
        registro.append('{:0,.0f}'.format(row[2]))
        registro.append('{:0,.0f}'.format(row[3]))

        if not i == 1:
            totales_cartera[1] += row[1]
            totales_cartera[2] += row[2]
            totales_cartera[3] += row[3]
        lista_resultado_cartera.append(registro)

    totales_cartera[1] = '{:0,.0f}'.format(totales_cartera[1])
    totales_cartera[2] = '{:0,.0f}'.format(totales_cartera[2])
    totales_cartera[3] = '{:0,.0f}'.format(totales_cartera[3])
    lista_resultado_cartera.append(totales_cartera)

    lista_retorno['cartera_datos_never_paid'] = lista_resultado_cartera
    #END CARTERA NEVER PAID

    #START CARTERA NEVER PAID CREDITOS
    lista_resultado_cartera = []

    lista_cartera = [['0', 1497, 1456, 1553], ['1-29', 61, 15, 29],
                     ['30-59', 14, 60, 10], ['60-89', 176, 45, 42],
                     ['90-119', 48, 22, 33], ['120-149', 9, 46, 20],
                     ['150-179', 32, 45, 44], ['180-364', 129, 198, 236],
                     ['365 o +', 437, 551, 543]]

    #Obtenemos totales
    totales_cartera = []
    totales_cartera.append('TOTAL')
    totales_cartera.append(0)
    totales_cartera.append(0)
    totales_cartera.append(0)

    lista_resultado_cartera.append(['NOMBRE', mes1, mes2, mes3])

    for i, row in enumerate(lista_cartera, 1):
        registro = []

        registro.append(row[0])
        registro.append('{:0,.0f}'.format(row[1]))
        registro.append('{:0,.0f}'.format(row[2]))
        registro.append('{:0,.0f}'.format(row[3]))

        if not i == 1:
            totales_cartera[1] += row[1]
            totales_cartera[2] += row[2]
            totales_cartera[3] += row[3]
        lista_resultado_cartera.append(registro)

    totales_cartera[1] = '{:0,.0f}'.format(totales_cartera[1])
    totales_cartera[2] = '{:0,.0f}'.format(totales_cartera[2])
    totales_cartera[3] = '{:0,.0f}'.format(totales_cartera[3])
    lista_resultado_cartera.append(totales_cartera)

    lista_retorno[
        'cartera_datos_never_paid_creditos'] = lista_resultado_cartera

    lista_cartera = [['', 'ABR17', 'MAR18', 'ABR18'],
                     ['EPRC Inicial', '16,370', '11,606', '12,775'],
                     ['EPRC Final', '19,957', '12,775', '11,705'],
                     ['Castigos', '3,624', '4,359', '4,328'],
                     [
                         'EPRC (Resultados)',
                         '7,212',
                         '5,528',
                         '3,257',
                     ]]

    lista_retorno['estimacion_preventiva'] = lista_cartera
    #END CARTERA NEVER PAID CREDITOS

    return json.dumps(lista_retorno)
def consulta_convenio_colocacion():
    division = request.args.get('division')
    mes = request.args.get('mes')
    producto = request.args.get('producto')

    mes_numero = int(mes[4] + mes[5])
    anio = int(mes[0] + mes[1] + mes[2] + mes[3])

    # SE GENERA EL QUERY
    # SE GENERA EL QUERY
    # SE GENERA EL QUERY
    query_convenio = """select
    case
        when universo_2.clave_corresponsal is null then aa.clave_corresponsal
        else universo_2.clave_corresponsal
    end as clave_corresponsal,
    case
        when universo_2.razon_social is null then aa.razon_social
        else universo_2.razon_social
    end as razon_social,
    ifnull(universo_2.monto_dispuesto,0) as monto_dispuesto,
    ifnull(universo_2.monto_dispuesto_ma,0) as monto_dispuesto_ma,
    ifnull(universo_2.monto_dispuesto_acu,0) as monto_dispuesto_acu,
    ifnull(aa.monto_dispuesto_acu_aa,0) as monto_dispuesto_acu_aa
    from (
    select
        case
            when universo_1.clave_corresponsal is null then mes_acumulado.clave_corresponsal
            else universo_1.clave_corresponsal
        end as clave_corresponsal,
        case
            when universo_1.razon_social is null then  mes_acumulado.razon_social
            else universo_1.razon_social
        end as razon_social,
        ifnull(universo_1.monto_dispuesto,0) as monto_dispuesto,
        ifnull(universo_1.monto_dispuesto_ma,0)  as monto_dispuesto_ma,
        ifnull(mes_acumulado.monto_dispuesto_acu,0) as monto_dispuesto_acu
    from (
            select case
                    when mes_actual.clave_corresponsal is null then mes_anterior.clave_corresponsal
                    else mes_actual.clave_corresponsal
                end as clave_corresponsal,
                case
                    when mes_actual.razon_social is null then mes_anterior.razon_social
                    else  mes_actual.razon_social
                end as razon_social,
                ifnull(mes_actual.monto_dispuesto,0) as monto_dispuesto,
                ifnull(mes_anterior.monto_dispuesto,0) as monto_dispuesto_ma
            from (
            select clave_corresponsal, razon_social, sum(monto_dispuesto) as monto_dispuesto
            from BUO_Masnomina.contratos_hist """
    if (mes_numero == 12):
        query_convenio += "where fecha_disposicion >= '" + \
            str(anio) + "-" + formatear_no_mes(mes_numero) + \
            "-01' and fecha_disposicion < '" + str(anio + 1) + "-01-01' "
    else:
        query_convenio += "where fecha_disposicion >= '" + str(
            anio) + "-" + formatear_no_mes(
                mes_numero) + "-01' and fecha_disposicion < '" + str(
                    anio) + "-" + formatear_no_mes(mes_numero + 1) + "-01' "
    query_convenio += "and mes = " + mes + " "
    if (int(division)):
        query_convenio += "and division = " + division + " "
    if (producto == "0"):
        query_convenio += "/*and producto = '" + producto + "'*/ "
    query_convenio += """ group by clave_corresponsal, razon_social
        ) mes_actual
        full join (
          select clave_corresponsal, razon_social, sum(monto_dispuesto) as monto_dispuesto
          from BUO_Masnomina.contratos_hist """
    if (mes_numero == 12):
        query_convenio += "where fecha_disposicion >= '" + \
            str(anio - 1) + "-" + formatear_no_mes(mes_numero) + \
            "-01' and fecha_disposicion < '" + str(anio) + "-01-01' "
    else:
        query_convenio += "where fecha_disposicion >= '" + str(
            anio - 1) + "-" + formatear_no_mes(
                mes_numero) + "-01' and fecha_disposicion < '" + str(
                    anio - 1) + "-" + formatear_no_mes(mes_numero +
                                                       1) + "-01' "
    query_convenio += "and mes = " + \
        str(anio - 1) + formatear_no_mes(mes_numero) + " "
    if (int(division)):
        query_convenio += "and division = " + division + " "
    if (producto == "0"):
        query_convenio += "/*and producto = '" + producto + "'*/ "
    query_convenio += """ group by clave_corresponsal, razon_social
            ) mes_anterior on mes_anterior.clave_corresponsal = mes_actual.clave_corresponsal
    ) universo_1
    full join (
            select contratos.clave_corresponsal, contratos.razon_social, sum(contratos.monto_dispuesto) as monto_dispuesto_acu
            from (
            select distinct clave_corresponsal, razon_social, contrato, monto_dispuesto
            from BUO_Masnomina.contratos_hist """
    if (mes_numero == 12):
        query_convenio += "where fecha_disposicion >= '" + \
            str(anio) + "-01-01' and fecha_disposicion < '" + \
            str(anio) + "-01-01' "
    else:
        query_convenio += "where fecha_disposicion >= '" + \
            str(anio) + "-01-01' and fecha_disposicion < '" + \
            str(anio + 1) + "-" + formatear_no_mes(mes_numero + 1) + "-01' "
    query_convenio += "and mes >= " + \
        str(anio) + "01 and mes <= " + mes + " "
    if (int(division)):
        query_convenio += "and division = " + division + " "
    if (producto == "0"):
        query_convenio += "/*and producto = '" + producto + "'*/ "
    query_convenio += """ ) contratos
            group by contratos.clave_corresponsal, contratos.razon_social
    ) mes_acumulado on mes_acumulado.clave_corresponsal = universo_1.clave_corresponsal
    ) universo_2
    full join (
        select contratos.clave_corresponsal, contratos.razon_social, sum(contratos.monto_dispuesto) as monto_dispuesto_acu_aa
        from (
            select distinct clave_corresponsal, razon_social, contrato, monto_dispuesto
            from BUO_Masnomina.contratos_hist """
    if (mes_numero == 12):
        query_convenio += "where fecha_disposicion >= '" + \
            str(anio - 1) + "-01-01' and fecha_disposicion < '" + \
            str(anio) + "-01-01' "
    else:
        query_convenio += "where fecha_disposicion >= '" + \
            str(anio - 1) + "-01-01' and fecha_disposicion < '" + \
            str(anio - 1) + "-" + formatear_no_mes(mes_numero + 1) + "-01' "
    query_convenio += "and mes >= " + \
        str(anio - 1) + "01 and mes <= " + str(anio - 1) + \
        formatear_no_mes(mes_numero) + " "
    if (int(division)):
        query_convenio += "and division = " + division + " "
    if (producto == "0"):
        query_convenio += "/*and producto = '" + producto + "'*/ "
    query_convenio += """ ) contratos
        group by contratos.clave_corresponsal, contratos.razon_social
    ) aa on aa.clave_corresponsal = universo_2.clave_corresponsal
    order by 3 desc """

    # se realiza la consulta

    lista_datos = []

    lista_datos = obtener_datos(query_convenio, False, ())

    if (not len(lista_datos)):
        return json.dumps({})

    tempTotal = {}
    tempTotal['nombre'] = 'TOTAL'
    tempTotal['total_mes'] = 0
    tempTotal['total_mes_aa'] = 0
    tempTotal['total_acu'] = 0
    tempTotal['total_acu_aa'] = 0
    tempTotal['total_mes_aa_pct'] = '100%'
    tempTotal['total_mes_pct'] = '100'

    for row in lista_datos:
        tempTotal['total_mes'] += row[2]
        tempTotal['total_mes_aa'] += row[3]
        tempTotal['total_acu'] += row[4]
        tempTotal['total_acu_aa'] += row[5]

    if (not tempTotal['total_mes'] or not tempTotal['total_mes_aa']
            or not tempTotal['total_acu'] or not tempTotal['total_acu_aa']):
        return json.dumps({})

    if (tempTotal['total_acu_aa'] != 0):
        tempTotal['total_acu_comp_pct'] = '{:0,.1f}'.format(
            ((tempTotal['total_acu'] - tempTotal['total_acu_aa']) /
             tempTotal['total_acu_aa']) * 100.00)
    else:
        tempTotal['total_acu_comp_pct'] = '∞'

    if (tempTotal['total_acu_comp_pct'] == '-100.0'):
        tempTotal['total_acu_comp_pct'] = '-∞'

    if (tempTotal['total_acu_comp_pct'][0] == '-'):
        tempTotal['color_acu'] = 'rojo'
    else:
        tempTotal['color_acu'] = ''

    lista_resultado = []

    for row in lista_datos:
        temp = {}
        temp['nombre'] = row[1]
        temp['total_mes'] = '{:0,.2f}'.format(row[2])
        temp['total_mes_aa'] = '{:0,.2f}'.format(row[3])
        temp['total_acu'] = '{:0,.2f}'.format(row[4])
        temp['total_acu_aa'] = '{:0,.2f}'.format(row[5])

        temp['total_mes_pct'] = '{:0,.1f}'.format(
            (row[2] / tempTotal['total_mes']) * 100)
        temp['total_mes_aa_pct'] = '{:0,.1f}'.format(
            (row[3] / tempTotal['total_mes_aa']) * 100)

        if (row[5] != 0):
            temp['total_acu_comp_pct'] = '{:0,.1f}'.format(
                ((row[4] - row[5]) / row[5]) * 100.00)
        else:
            temp['total_acu_comp_pct'] = '∞'

        if (temp['total_acu_comp_pct'] == '-100.0'):
            temp['total_acu_comp_pct'] = '-∞'

        if (temp['total_acu_comp_pct'][0] == '-'):
            temp['color_acu'] = 'rojo'
        else:
            temp['color_acu'] = ''

        lista_resultado.append(temp)

    tempTotal['total_mes'] = '{:0,.2f}'.format(tempTotal['total_mes'])
    tempTotal['total_mes_aa'] = '{:0,.2f}'.format(tempTotal['total_mes_aa'])
    tempTotal['total_acu'] = '{:0,.2f}'.format(tempTotal['total_acu'])
    tempTotal['total_acu_aa'] = '{:0,.2f}'.format(tempTotal['total_acu_aa'])

    lista_resultado.append(tempTotal)

    return json.dumps(lista_resultado)
def costos_colocacion():
    division = request.args.get('division')
    mes = request.args.get('mes')
    producto = request.args.get('producto')

    # SE SEPARA LA FECHA EN SUS RESPECTIVAS PARTES
    mes_numero = int(mes[4] + mes[5])
    anio = int(mes[0] + mes[1] + mes[2] + mes[3])

    # SE GENERA EL PRIMER QUERYYY

    ##PRIMERO QUE NADA SE SACA EL TOTAL ACUmULADO

    query01 = """select  ifnull(SUM(monto_dispuesto), 0) AS colocacion
    from BUO_Masnomina.contratos_hist   
    where 1 = 1 """
    query01 += "and fecha_disposicion >= '" + \
        str(anio) + "-" + formatear_no_mes(mes_numero) + "-01' "
    if (mes_numero == 12):
        query01 += "and fecha_disposicion < '" + str(anio + 1) + "-01-01' "
    else:
        query01 += "and fecha_disposicion < '" + \
            str(anio) + "-" + formatear_no_mes(mes_numero+1) + "-01' "
    query01 += "and mes = " + mes + " "
    if (int(division)):
        query01 += "and division = " + division + " "

    print('---------------------------')
    print(query01)
    print('---------------------------')

    totalColocacion = obtener_datos(query01, False, ())[0][0]

    if (not totalColocacion):
        return json.dumps({})

    query01 = "select   " + str(totalColocacion) + ", "
    query01 += """sum(col.comisiones), sum(col.sueldo_fijo), sum(col.carga_social_aguinaldo), sum(col.viaticos), sum(col.gasolina), sum(col.costos_autos), sum(col.rentas),
    (sum(col.comisiones) + sum(col.sueldo_fijo) + sum(col.carga_social_aguinaldo) + sum(col.viaticos) + sum(col.gasolina) + sum(col.costos_autos) + sum(col.rentas)) as total
    from BUO_Masnomina.costo_colocacion_hist col
    where 1 = 1 """
    query01 += "and col.mes = " + mes + " "
    if (int(division)):
        query01 += " and col.division = " + division

    # SE ESCRIBE EL SEGUndO QUERY

    ## SE SACA EL ACUMULADO

    query02 = """select sum(contratos.monto_dispuesto) as colocacion
    from (
        select distinct contrato, monto_dispuesto
        from BUO_Masnomina.contratos_hist """
    if (mes_numero == 12):
        query02 += "where fecha_disposicion >= '" + \
            str(anio) + "-01-01' and fecha_disposicion < '" + \
            str(anio + 1) + "-01-01' "
    else:
        query02 += "where fecha_disposicion >= '" + \
            str(anio) + "-01-01' and fecha_disposicion < '" + str(anio) + \
            "-" + formatear_no_mes(mes_numero + 1) + "-01' "
    query02 += "and mes >= " + str(anio) + "01 and mes <= " + mes + "  "
    if (int(division)):
        query02 += "and division = " + division + " "
    query02 += " ) contratos"

    totalAcumulado = obtener_datos(query02, False, ())[0][0]

    query02 = "select  " + str(totalAcumulado) + ", "
    query02 += """sum(col.comisiones), sum(col.sueldo_fijo), sum(col.carga_social_aguinaldo), sum(col.viaticos), sum(col.gasolina), sum(col.costos_autos), sum(col.rentas),
    (sum(col.comisiones) + sum(col.sueldo_fijo) + sum(col.carga_social_aguinaldo) + sum(col.viaticos) + sum(col.gasolina) + sum(col.costos_autos) + sum(col.rentas)) as total
    from BUO_Masnomina.costo_colocacion_hist col
    where 1 = 1 """
    query02 += "and col.mes >= " + str(anio) + "01 and col.mes <= " + mes + " "
    if (int(division)):
        query02 += "and col.division = " + division + " "

    lista_mes = obtener_datos(query01, False, ())

    lista_acumulado = obtener_datos(query02, False, ())

    if (lista_mes[0][1] != None or lista_acumulado[0][1] != None):
        lista_mes = [['Colocación', '$ {:0,.2f}'.format(lista_mes[0][0]), '%'],
                     [
                         'Comisiones', '$ {:0,.2f}'.format(lista_mes[0][1]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][1] * 100) / lista_mes[0][0])
                     ],
                     [
                         'Sueldos fijo', '$ {:0,.2f}'.format(lista_mes[0][2]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][2] * 100) / lista_mes[0][0])
                     ],
                     [
                         'Carga social + aguinaldo',
                         '$ {:0,.2f}'.format(lista_mes[0][3]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][3] * 100) / lista_mes[0][0])
                     ],
                     [
                         'Viáticos', '$ {:0,.2f}'.format(lista_mes[0][4]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][4] * 100) / lista_mes[0][0])
                     ],
                     [
                         'Gasolina', '$ {:0,.2f}'.format(lista_mes[0][5]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][5] * 100) / lista_mes[0][0])
                     ],
                     [
                         'Costo autos', '$ {:0,.2f}'.format(lista_mes[0][6]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][6] * 100) / lista_mes[0][0])
                     ],
                     [
                         'Rentas', '$ {:0,.2f}'.format(lista_mes[0][7]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][7] * 100) / lista_mes[0][0])
                     ],
                     [
                         'TOTAL', '$ {:0,.2f}'.format(lista_mes[0][8]),
                         '{:0,.2f}%'.format(
                             (lista_mes[0][8] * 100) / lista_mes[0][0])
                     ]]

        lista_acumulado = [
            ['Colocación', '$ {:0,.2f}'.format(lista_acumulado[0][0]), '%'],
            [
                'Comisiones', '$ {:0,.2f}'.format(lista_acumulado[0][1]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][1] * 100) / lista_acumulado[0][0])
            ],
            [
                'Sueldos fijo', '$ {:0,.2f}'.format(lista_acumulado[0][2]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][2] * 100) / lista_acumulado[0][0])
            ],
            [
                'Carga social + aguinaldo',
                '$ {:0,.2f}'.format(lista_acumulado[0][3]), '{:0,.2f}%'.format(
                    (lista_acumulado[0][3] * 100) / lista_acumulado[0][0])
            ],
            [
                'Viáticos', '$ {:0,.2f}'.format(lista_acumulado[0][4]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][4] * 100) / lista_acumulado[0][0])
            ],
            [
                'Gasolina', '$ {:0,.2f}'.format(lista_acumulado[0][5]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][5] * 100) / lista_acumulado[0][0])
            ],
            [
                'Costo autos', '$ {:0,.2f}'.format(lista_acumulado[0][6]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][6] * 100) / lista_acumulado[0][0])
            ],
            [
                'Rentas', '$ {:0,.2f}'.format(lista_acumulado[0][7]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][7] * 100) / lista_acumulado[0][0])
            ],
            [
                'TOTAL', '$ {:0,.2f}'.format(lista_acumulado[0][8]),
                '{:0,.2f}%'.format(
                    (lista_acumulado[0][8] * 100) / lista_acumulado[0][0])
            ]
        ]

        lista_meses = [
            'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep',
            'Oct', 'Nov', 'Dic'
        ]

        lista_costo = []

        temp01 = []
        temp02 = []

        for i in range(mes_numero):
            i += 1
            # SE GeNErA EL QUERY
            query03 = """select  sum(monto_dispuesto) as colocacion
            from BUO_Masnomina.contratos_hist 
            where 1 = 1 """
            if (i == 12):
                query03 += "and fecha_disposicion >= '" + \
                    str(anio) + "-12-01' and fecha_disposicion < '" + \
                    str(anio + 1) + "-01-01' "
            else:
                query03 += "and fecha_disposicion >= '" + str(
                    anio) + "-" + formatear_no_mes(
                        i) + "-01' and fecha_disposicion < '" + str(
                            anio) + "-" + formatear_no_mes(i + 1) + "-01' "
            query03 += "and mes = " + str(anio) + formatear_no_mes(i) + " "
            if (int(division)):
                query03 += "and division = " + division + " "
            query04 = """select
            sum(col.comisiones) + sum(col.sueldo_fijo) + sum(col.carga_social_aguinaldo) + sum(col.viaticos) + sum(col.gasolina) + sum(col.costos_autos) + sum(col.rentas)      
            from BUO_Masnomina.costo_colocacion_hist col
            where 1 = 1 """
            query04 += "and mes = " + str(anio) + formatear_no_mes(i) + " "
            if (int(division)):
                query04 += "and division = " + division + " "

            temp01.append(obtener_datos(query03, False, ()))
            print(query03)
            temp02.append(obtener_datos(query04, False, ()))

        for i in range(len(temp01)):
            lista_costo.append([
                lista_meses[i] + ' ' + mes[0] + mes[1] + mes[2] + mes[3],
                '{:0,.2f}'.format((temp02[i][0][0] * 100) / temp01[i][0][0])
            ])

        if (lista_costo):
            for i in range(12 - mes_numero):
                lista_costo.append([
                    lista_meses[i + mes_numero] + ' ' + mes[0] + mes[1] +
                    mes[2] + mes[3], [0.0]
                ])

        lista_resultado = {}

        if (lista_acumulado[0][0] != None):
            lista_resultado['nombre_mes'] = lista_meses[mes_numero - 1] + \
                ' ' + mes[0] + mes[1] + mes[2] + mes[3]
            lista_resultado['resultado_mes'] = lista_mes
            lista_resultado['resultado_acumulado'] = lista_acumulado
            lista_resultado['resultado_costo'] = lista_costo

        return json.dumps(lista_resultado)
    else:
        return json.dumps({})
def f_consulta_divisiones():

    return json.dumps(
        obtener_datos("""select * from BUO_Masnomina.masnomina_divisiones""",
                      False, ()))
def consulta_estado_colocacion():
    division = request.args.get('division')
    mes = request.args.get('mes')

    mes_numero = int(mes[4] + mes[5])
    anio = int(mes[0] + mes[1] + mes[2] + mes[3])

    lista_estados_todos = []
    lista_estados_asesores = []
    lista_estados_supervisores = []
    lista_meses = []

    lista_retorno = {}
    nombres_meses = [
        'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct',
        'Nov', 'Dic'
    ]

    query_supervisor = """select p.mes, s.estado, count(*)
    from BUO_Masnomina.masnomina_plantilla p
    left join BUO_Masnomina.masnomina_sucursales s on s.sucursal = p.sucursal
    where 1 = 1 
    and s.estado is not null and 
    p.puesto = 'SUPERVISOR COMERCIAL MAS NOMINA' """
    query_supervisor += "and p.mes >= " + str(anio - 1) + formatear_no_mes(
        mes_numero) + " and p.mes <= " + str(anio) + formatear_no_mes(
            mes_numero) + " "
    if (int(division)):
        query_supervisor += "and s.division = " + division + " "
    query_supervisor += "group by p.mes, s.estado order by p.mes, s.estado"

    query_asesor = """select p.mes, s.estado, count(*)
    from BUO_Masnomina.masnomina_plantilla p
    left join BUO_Masnomina.masnomina_sucursales s on s.sucursal = p.sucursal
    where 1 = 1 and  
    p.puesto = 'ASESOR MAS NOMINA' 
    and s.estado is not null """
    query_asesor += "and p.mes >= " + str(anio - 1) + formatear_no_mes(
        mes_numero) + " and p.mes <= " + str(anio) + formatear_no_mes(
            mes_numero) + " "
    if (int(division)):
        query_asesor += "and s.division = " + division + " "
    query_asesor += "group by p.mes, s.estado order by p.mes, s.estado"

    lista_estados_asesores.append(obtener_datos(query_asesor, False, ()))
    lista_estados_supervisores.append(
        obtener_datos(query_supervisor, False, ()))
    print(lista_estados_asesores)
    print(lista_estados_supervisores)

    if (len(lista_estados_asesores[0]) == 0
            or len(lista_estados_supervisores[0]) == 0):
        return json.dumps({})

    for i in range(13):
        no_mes = mes_numero - i
        sobreflujo = False

        if (no_mes < 1):
            sobreflujo = True

        # SE GENERAN LOS MESES
        if (sobreflujo):
            lista_meses.append(nombres_meses[no_mes + 11] + ' ' +
                               str(anio - 1))
        else:
            lista_meses.append(nombres_meses[no_mes - 1] + ' ' + str(anio))

        # SE HACE EL QUERY DE ESTADO
        query_estado = """select s.estado, sum(c.monto_dispuesto) as monto
        from BUO_Masnomina.contratos_hist c
        left join BUO_Masnomina.masnomina_sucursales s on s.sucursal = c.sucursal
        where 1 = 1 
        and s.estado is not null """
        if (sobreflujo):
            if (no_mes == 0):
                query_estado += "and c.fecha_disposicion >= '" + \
                    str(anio - 1)+"-12-01' and c.fecha_disposicion < '" + \
                    str(anio)+"-01-01' "
            else:
                query_estado += "and c.fecha_disposicion >= '" + str(
                    anio - 1) + "-" + formatear_no_mes(
                        12 +
                        no_mes) + "-01' and c.fecha_disposicion < '" + str(
                            anio -
                            1) + "-" + formatear_no_mes(13 + no_mes) + "-01' "
            query_estado += "and c.mes = " + str(anio - 1) + formatear_no_mes(
                12 + no_mes) + " "
        else:
            if (no_mes == 12):
                query_estado += "and c.fecha_disposicion >= '" + str(
                    anio) + "-12-01' and c.fecha_disposicion < '" + str(
                        anio + 1) + "-01-01' "
            else:
                query_estado += "and c.fecha_disposicion >= '" + str(
                    anio) + "-" + formatear_no_mes(
                        no_mes) + "-01' and c.fecha_disposicion < '" + str(
                            anio) + "-" + formatear_no_mes(no_mes +
                                                           1) + "-01' "
            query_estado += "and c.mes = " + str(anio) + formatear_no_mes(
                no_mes) + " "
        if (int(division)):
            query_estado += "and c.division = " + division + " "
        query_estado += "group by s.estado order by 1"
        lista_estados_todos.append(obtener_datos(query_estado, False, ()))
        print(query_estado)

    lista_estados_supervisores = arreglar_tablas(
        arreglar_tablas_empleados(lista_estados_supervisores, mes_numero,
                                  anio), mes_numero)
    lista_estados_asesores = arreglar_tablas(
        arreglar_tablas_empleados(lista_estados_asesores, mes_numero, anio),
        mes_numero)
    lista_estados_todos = arreglar_tablas(lista_estados_todos, mes_numero)
    lista_promedio_asesores = formatear_dinero(
        calcular_promedios(lista_estados_todos, lista_estados_asesores))
    lista_promedio_supervisores = formatear_dinero(
        calcular_promedios(lista_estados_todos, lista_estados_supervisores))

    lista_retorno['estados'] = formatear_dinero(lista_estados_todos)
    lista_retorno['lista_supervisores'] = lista_estados_supervisores
    lista_retorno['lista_asesores'] = lista_estados_asesores
    lista_retorno['lista_asesores_promedio'] = lista_promedio_asesores
    lista_retorno['lista_supervisores_promedio'] = lista_promedio_supervisores
    lista_retorno['meses'] = lista_meses

    return json.dumps(lista_retorno)
def consulta_convenio_cartera():
    division = request.args.get('division')
    mes = request.args.get('mes')
    producto = request.args.get('producto')

    mes_numero = int(mes[4] + mes[5])
    anio = int(mes[0] + mes[1] + mes[2] + mes[3])
    lista_meses = [
        'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct',
        'Nov', 'Dic'
    ]

    # se realiza la consulta
    lista_resultado = {}

    lista_mes = [
        lista_meses[mes_numero - 1] + ' ' + str(anio - 1),
        lista_meses[mes_numero - 2] + ' ' + str(anio),
        lista_meses[mes_numero - 1] + ' ' + str(anio)
    ]
    # [mes actual, mes anterior, mes año anterior]

    query_convenio_cartera = """select
        case
            when universo_1.clave_corresponsal is null then mact_aa.clave_corresponsal
            else universo_1.clave_corresponsal
        end as clave_corresponsal,
        case
            when universo_1.razon_social is null then mact_aa.razon_social
            else universo_1.razon_social
        end as razon_social,
        ifnull(universo_1.saldo_contable_mact,0) as saldo_contable_mact,
        ifnull(universo_1.saldo_contable_mant,0) as saldo_contable_mant,
        ifnull(mact_aa.saldo_contable_mact_aa,0) as saldo_contable_mact_aa
    from (
        select
        case
            when mact.clave_corresponsal is null then mant.clave_corresponsal
            else mact.clave_corresponsal
        end as clave_corresponsal,
        case
            when mact.razon_social is null then  mant.razon_social
            else mact.razon_social
        end as razon_social,
        ifnull(mact.saldo_contable_mact,0) as saldo_contable_mact,
        ifnull(mant.saldo_contable_mant,0) as saldo_contable_mant
        from (
            select
            clave_corresponsal, razon_social, sum(saldo_contable) as saldo_contable_mact
            from BUO_Masnomina.contratos_hist
            where 1 = 1 """
    query_convenio_cartera += "and mes = " + mes + " "
    if (int(division)):
        query_convenio_cartera += "and division = " + division + " "
    query_convenio_cartera += "and estatus_contable in ('VIG','VEN') "
    if (producto == "0"):
        query_convenio_cartera += "/*and producto = '" + producto + "'*/ "
    query_convenio_cartera += """group by clave_corresponsal, razon_social
        ) mact
    full join
      (
        select clave_corresponsal, razon_social, sum(saldo_contable) as saldo_contable_mant
        from BUO_Masnomina.contratos_hist
        where 1 = 1 """
    if (mes_numero == 1):
        query_convenio_cartera += "and mes = " + str(anio - 1) + "12 "
    else:
        query_convenio_cartera += "and mes = " + \
            str(anio) + formatear_no_mes(mes_numero - 1) + " "
    if (int(division)):
        query_convenio_cartera += "and division = " + division + " "
    query_convenio_cartera += "and estatus_contable in ('VIG','VEN') "
    if (producto == "0"):
        query_convenio_cartera += "/*and producto = '" + producto + "'*/ "
    query_convenio_cartera += """group by clave_corresponsal, razon_social
            ) mant on mant.clave_corresponsal = mact.clave_corresponsal
    ) universo_1
    full join (
        select clave_corresponsal, razon_social, sum(saldo_contable) as saldo_contable_mact_aa
        from BUO_Masnomina.contratos_hist
        where 1 = 1 """
    query_convenio_cartera += "and mes = " + \
        str(anio-1) + formatear_no_mes(mes_numero) + " "
    if (int(division)):
        query_convenio_cartera += "and division = " + division + " "
    query_convenio_cartera += "and estatus_contable in ('VIG','VEN') "
    if (producto == "0"):
        query_convenio_cartera += "/*and producto = '" + producto + "'*/ "
    query_convenio_cartera += """group by clave_corresponsal, razon_social
    ) mact_aa on mact_aa.clave_corresponsal = universo_1.clave_corresponsal
    order by 3 desc"""

    lista_datos = obtener_datos(query_convenio_cartera, False, ())

    if (not len(lista_datos)):
        return json.dumps({})

    lista_resultado['cartera'] = []
    lista_resultado['meses'] = lista_mes

    # Obtenemos totales
    total_mes = 0
    total_ma = 0
    total_maa = 0
    # de esto podriamos hacer una consulta a DB con un SUM para quitarle carga al back
    # ya que si es mucha informacion la que se va a sacar entonces esta iteracion lo hara
    # más lento
    for row in lista_datos:
        total_mes += row[2]
        total_ma += row[3]
        total_maa += row[4]

    for row in lista_datos:

        registro = {}
        registro['nombre'] = row[1]

        registro['total_mes'] = '{:0,.0f}'.format(row[2])
        registro['total_ma'] = '{:0,.0f}'.format(row[3])
        registro['total_maa'] = '{:0,.0f}'.format(row[4])

        registro['total_mes_vs_ma'] = '{:0,.0f}'.format(row[2] - row[3])
        registro['total_mes_vs_maa'] = '{:0,.0f}'.format(row[2] - row[4])

        if row[3] == 0:
            registro['total_mes_vs_ma_pct'] = '0.00%'
        else:
            pct_m_ma = 0
            pct_m_ma = (row[2] * 1.00) / (row[3] * 1.00) - 1
            pct_m_ma = pct_m_ma * 100.00
            registro['total_mes_vs_ma_pct'] = '{:0,.2f}%'.format(pct_m_ma)

            if pct_m_ma < 0:
                registro['colorMA'] = "rojo"
            else:
                registro['colorMA'] = "blanco"
        if row[4] == 0:
            registro['total_mes_vs_maa_pct'] = '0.00%'
        else:
            pct_m_maa = 0
            if row[2] == 0:
                pct_m_maa = 0
            else:
                pct_m_maa = (row[4] * 1.00) / (row[2] * 1.00) - 1
            pct_m_maa = pct_m_maa * 100.00
            registro['total_mes_vs_maa_pct'] = '{:0,.2f}%'.format(pct_m_maa)

            if pct_m_maa < 0:
                registro['colorMAA'] = "rojo"
            else:
                registro['colorMAA'] = "blanco"

        lista_resultado['cartera'].append(registro)

    registro_totales = {}
    registro_totales['nombre'] = 'TOTAL'

    registro_totales['total_mes'] = '{:0,.0f}'.format(total_mes)
    registro_totales['total_ma'] = '{:0,.0f}'.format(total_ma)
    registro_totales['total_maa'] = '{:0,.0f}'.format(total_maa)

    registro_totales['total_mes_vs_ma'] = '{:0,.0f}'.format(total_mes -
                                                            total_ma)
    registro_totales['total_mes_vs_maa'] = '{:0,.0f}'.format(total_maa -
                                                             total_mes)

    if total_ma == 0:
        registro_totales['total_mes_vs_ma_pct'] = '0.00%'
    else:
        registro_totales['total_mes_vs_ma_pct'] = '{:0,.2f}%'.format(
            ((total_mes * 1.00) / (total_ma * 1.00) - 1) * 100)
        polaridad = ((total_mes * 1.00) / (total_ma * 1.00) - 1) * 100
        if polaridad < 0:
            registro_totales['colorMA'] = "rojo"
        else:
            registro_totales['colorMA'] = "blanco"
    if total_maa == 0:
        registro_totales['total_mes_vs_maa_pct'] = '0.00%'
    else:
        polaridad = ((total_maa * 1.00) / (total_mes * 1.00) - 1) * 100
        registro_totales['total_mes_vs_maa_pct'] = '{:0,.2f}%'.format(
            ((total_maa * 1.00) / (total_mes * 1.00) - 1) * 100)
        if polaridad < 0:
            registro_totales['colorMAA'] = "rojo"
        else:
            registro_totales['colorMAA'] = "blanco"

    lista_resultado['cartera'].append(registro_totales)

    return json.dumps(lista_resultado)