fjbardelli

Lento

Sep 19th, 2023
1,180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.82 KB | None | 0 0
  1. la vista queda asi
  2. @api_view(['GET'])
  3. def PresupuestoAnalisisView(request, entidad:int,periodo:int, hasta:str):
  4.  
  5.     if request.method == "GET":
  6.         start = timer()
  7.         hasta = datetime.strptime(hasta, "%Y-%m-%d")
  8.         ep = validar_ep(entidad, periodo)
  9.         if ep==0:
  10.             return Response("Datos incorrectos", status=400)
  11.  
  12.         ipat, epat, ipro, eprp = analisis(ep,hasta)
  13.         respuesta = {
  14.             "ipat":ipat.to_dict(orient='records'),
  15.             "epat":epat.to_dict(orient='records'),
  16.             "ipro":ipro.to_dict(orient='records'),
  17.             "epro":eprp.to_dict(orient='records')}
  18.         end = timer()        
  19.         print(end - start)
  20.         return Response(respuesta)
  21.  
  22. def analisis(entiper:int, hasta):
  23.     #TODO validar ep & fechas
  24.     ingresos_patrimoniales = get_grupo(entiper,hasta,1)
  25.     egrssos_patrimoniales = get_grupo(entiper,hasta,1)
  26.     ingresos_propios = get_grupo(entiper,hasta,3)
  27.     egresos_propios = get_grupo(entiper,hasta,4)
  28.     return ingresos_patrimoniales, egrssos_patrimoniales, ingresos_propios, egresos_propios
  29.  
  30. def get_grupo(entper,hasta, tipo):
  31.     def sumar_condicional(row, campo):
  32.         codigo = row['codigo']
  33.         suma = df.loc[df['codigo'].str.startswith(codigo), campo].sum()
  34.         return suma
  35.    
  36.     df = pd.DataFrame(get_qs_grupo(entper,hasta,tipo))
  37.     campos = ["ingreso", "egreso", "debitos", "creditos", 'realizado']
  38.     df[campos] = df[campos].apply(pd.to_numeric)
  39.  
  40.     df['ingreso'] = df.apply(lambda row: sumar_condicional(row, 'ingreso'), axis=1)
  41.     df['egreso'] = df.apply(lambda row: sumar_condicional(row, 'egreso'), axis=1)
  42.     df['realizado'] = df.apply(lambda row: sumar_condicional(row, 'realizado'), axis=1)
  43.     df = df.drop(df[(df['ingreso'] == 0) & (df['egreso'] == 0) & (df['realizado'] == 0)].index)
  44.     df['presupuestado'] = df['egreso']-df['ingreso']
  45.     df['creditos'] = df.apply(lambda row: sumar_condicional(row, 'creditos'), axis=1)
  46.     df['debitos'] = df.apply(lambda row: sumar_condicional(row, 'debitos'), axis=1)
  47.  
  48.     df['diferencia'] = abs(df['presupuestado']) - abs(df['creditos'])
  49.     df['porcentaje'] = df.apply(lambda x:  x['creditos'] *100 / x['presupuestado']  if x['presupuestado'] !=0 else 0 , axis=1)
  50. if tipo==1:
  51.         pass
  52.     if tipo==2:
  53.         pass
  54.     if tipo==3:
  55.         #Toma cuentas de ganancias, que tengan presupuesto o realizado (una de las dos, o las dos)
  56.         #El presupuestado va a salir de egresos – ingresos, y debería ser siempre un valor negativo (coincidiendo con el realizado negativo)
  57.         df['presupuestado'] = df['egreso']-df['ingreso']
  58.         df['sgn_reslizado'] = df.apply(lambda x:  True  if x['realizado']<=0 else False , axis=1)
  59.         df['sgn_presupuestado'] = df.apply(lambda x:  True  if x['presupuestado']<=0 else False , axis=1)
  60.         df['marca_1'] = df.apply(lambda x:  True  if x['realizado']<x['presupuestado'] else False , axis=1)
  61.         df['marca_2'] = df.apply(lambda x:  True  if np.signbit(x['realizado'])!=np.signbit(x['presupuestado']) else False , axis=1)
  62.         df['marca_3'] = df.apply(lambda x:  True  if abs(x['presupuestado'])>0 else False , axis=1)
  63.     elif tipo==4:
  64.         df['presupuestado'] = df['egreso']-df['ingreso']
  65.         df['sgn_reslizado'] = df.apply(lambda x:  True  if x['realizado']>=0 else False , axis=1)
  66.         df['sgn_presupuestado'] = df.apply(lambda x:  True  if x['presupuestado']>=0 else False , axis=1)
  67.         df['marca_1'] = df.apply(lambda x:  True  if x['realizado']>x['presupuestado'] else False , axis=1)
  68.         df['marca_2'] = df.apply(lambda x:  True  if np.signbit(x['realizado'])!=np.signbit(x['presupuestado']) else False , axis=1)
  69.         df['marca_3'] = df.apply(lambda x:  True  if abs(x['presupuestado'])<0 else False , axis=1)
  70.  
  71.     df = df.fillna(0.0000)
  72.     df = df.round(decimals=2)
  73.     return df
Advertisement
Add Comment
Please, Sign In to add comment