LevinAleksey commited on
Commit
6317790
·
verified ·
1 Parent(s): bab29d6

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +35 -11
main.py CHANGED
@@ -738,24 +738,48 @@ def get_expenses_breakdown():
738
  return clean_dataframe(df).to_dict(orient="records")[0]
739
 
740
  @app.get("/finance/trend")
741
- def get_finance_trend(days: int = 30):
742
  """Финансовый тренд по дням"""
 
743
  query = text("""
744
  SELECT
745
- DATE(rd.sale_dt) as date,
746
- COUNT(*) FILTER (WHERE rd.doc_type_name = 'Продажа') as sales,
747
- SUM(rd.retail_price_withdisc_rub) FILTER (WHERE rd.doc_type_name = 'Продажа') as gmv,
748
- SUM(rd.supplier_reward) as profit,
749
- SUM(rd.delivery_rub) as delivery,
750
- SUM(rd.storage_fee) as storage,
751
- SUM(rd.commission_percent * rd.retail_price_withdisc_rub / 100) FILTER (WHERE rd.doc_type_name = 'Продажа') as commission
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
752
  FROM wb_report_details rd
753
- WHERE rd.sale_dt > NOW() - INTERVAL :days || ' days'
754
  GROUP BY DATE(rd.sale_dt)
755
  ORDER BY date ASC
756
  """)
757
- df = pd.read_sql(query, engine, params={"days": days})
758
- df['date'] = df['date'].astype(str)
 
 
 
 
 
 
759
  return clean_dataframe(df).to_dict(orient="records")
760
 
761
  @app.get("/finance/category-report")
 
738
  return clean_dataframe(df).to_dict(orient="records")[0]
739
 
740
  @app.get("/finance/trend")
741
+ def get_finance_trend(days: int = Query(30, ge=1, le=365)):
742
  """Финансовый тренд по дням"""
743
+
744
  query = text("""
745
  SELECT
746
+ DATE(rd.sale_dt) AS date,
747
+ COUNT(*) FILTER (
748
+ WHERE rd.doc_type_name = 'Продажа'
749
+ ) AS sales,
750
+
751
+ COALESCE(
752
+ SUM(rd.retail_price_withdisc_rub) FILTER (
753
+ WHERE rd.doc_type_name = 'Продажа'
754
+ ),
755
+ 0
756
+ ) AS gmv,
757
+
758
+ COALESCE(SUM(rd.supplier_reward), 0) AS profit,
759
+ COALESCE(SUM(rd.delivery_rub), 0) AS delivery,
760
+ COALESCE(SUM(rd.storage_fee), 0) AS storage,
761
+
762
+ COALESCE(
763
+ SUM(
764
+ rd.commission_percent * rd.retail_price_withdisc_rub / 100
765
+ ) FILTER (
766
+ WHERE rd.doc_type_name = 'Продажа'
767
+ ),
768
+ 0
769
+ ) AS commission
770
  FROM wb_report_details rd
771
+ WHERE rd.sale_dt > NOW() - (:days * INTERVAL '1 day')
772
  GROUP BY DATE(rd.sale_dt)
773
  ORDER BY date ASC
774
  """)
775
+
776
+ df = pd.read_sql_query(query, engine, params={"days": days})
777
+
778
+ if df.empty:
779
+ return []
780
+
781
+ df["date"] = pd.to_datetime(df["date"]).dt.strftime("%Y-%m-%d")
782
+
783
  return clean_dataframe(df).to_dict(orient="records")
784
 
785
  @app.get("/finance/category-report")