Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- la vista queda asi
- @api_view(['GET'])
- def PresupuestoAnalisisView(request, entidad:int,periodo:int, hasta:str):
- if request.method == "GET":
- start = timer()
- hasta = datetime.strptime(hasta, "%Y-%m-%d")
- ep = validar_ep(entidad, periodo)
- if ep==0:
- return Response("Datos incorrectos", status=400)
- ipat, epat, ipro, eprp = analisis(ep,hasta)
- respuesta = {
- "ipat":ipat.to_dict(orient='records'),
- "epat":epat.to_dict(orient='records'),
- "ipro":ipro.to_dict(orient='records'),
- "epro":eprp.to_dict(orient='records')}
- end = timer()
- print(end - start)
- return Response(respuesta)
- def analisis(entiper:int, hasta):
- #TODO validar ep & fechas
- ingresos_patrimoniales = get_grupo(entiper,hasta,1)
- egrssos_patrimoniales = get_grupo(entiper,hasta,1)
- ingresos_propios = get_grupo(entiper,hasta,3)
- egresos_propios = get_grupo(entiper,hasta,4)
- return ingresos_patrimoniales, egrssos_patrimoniales, ingresos_propios, egresos_propios
- def get_grupo(entper,hasta, tipo):
- def sumar_condicional(row, campo):
- codigo = row['codigo']
- suma = df.loc[df['codigo'].str.startswith(codigo), campo].sum()
- return suma
- df = pd.DataFrame(get_qs_grupo(entper,hasta,tipo))
- campos = ["ingreso", "egreso", "debitos", "creditos", 'realizado']
- df[campos] = df[campos].apply(pd.to_numeric)
- df['ingreso'] = df.apply(lambda row: sumar_condicional(row, 'ingreso'), axis=1)
- df['egreso'] = df.apply(lambda row: sumar_condicional(row, 'egreso'), axis=1)
- df['realizado'] = df.apply(lambda row: sumar_condicional(row, 'realizado'), axis=1)
- df = df.drop(df[(df['ingreso'] == 0) & (df['egreso'] == 0) & (df['realizado'] == 0)].index)
- df['presupuestado'] = df['egreso']-df['ingreso']
- df['creditos'] = df.apply(lambda row: sumar_condicional(row, 'creditos'), axis=1)
- df['debitos'] = df.apply(lambda row: sumar_condicional(row, 'debitos'), axis=1)
- df['diferencia'] = abs(df['presupuestado']) - abs(df['creditos'])
- df['porcentaje'] = df.apply(lambda x: x['creditos'] *100 / x['presupuestado'] if x['presupuestado'] !=0 else 0 , axis=1)
- if tipo==1:
- pass
- if tipo==2:
- pass
- if tipo==3:
- #Toma cuentas de ganancias, que tengan presupuesto o realizado (una de las dos, o las dos)
- #El presupuestado va a salir de egresos – ingresos, y debería ser siempre un valor negativo (coincidiendo con el realizado negativo)
- df['presupuestado'] = df['egreso']-df['ingreso']
- df['sgn_reslizado'] = df.apply(lambda x: True if x['realizado']<=0 else False , axis=1)
- df['sgn_presupuestado'] = df.apply(lambda x: True if x['presupuestado']<=0 else False , axis=1)
- df['marca_1'] = df.apply(lambda x: True if x['realizado']<x['presupuestado'] else False , axis=1)
- df['marca_2'] = df.apply(lambda x: True if np.signbit(x['realizado'])!=np.signbit(x['presupuestado']) else False , axis=1)
- df['marca_3'] = df.apply(lambda x: True if abs(x['presupuestado'])>0 else False , axis=1)
- elif tipo==4:
- df['presupuestado'] = df['egreso']-df['ingreso']
- df['sgn_reslizado'] = df.apply(lambda x: True if x['realizado']>=0 else False , axis=1)
- df['sgn_presupuestado'] = df.apply(lambda x: True if x['presupuestado']>=0 else False , axis=1)
- df['marca_1'] = df.apply(lambda x: True if x['realizado']>x['presupuestado'] else False , axis=1)
- df['marca_2'] = df.apply(lambda x: True if np.signbit(x['realizado'])!=np.signbit(x['presupuestado']) else False , axis=1)
- df['marca_3'] = df.apply(lambda x: True if abs(x['presupuestado'])<0 else False , axis=1)
- df = df.fillna(0.0000)
- df = df.round(decimals=2)
- return df
Advertisement
Add Comment
Please, Sign In to add comment