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)
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)