IAMTFRMZA commited on
Commit
19384fe
ยท
verified ยท
1 Parent(s): dfbe477

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -0
app.py CHANGED
@@ -157,6 +157,57 @@ with gr.Blocks() as app:
157
  date_picker.change(fn=get_reps, inputs=date_picker, outputs=rep_picker)
158
  btn.click(fn=show_map, inputs=[date_picker, rep_picker], outputs=[table, map_plot])
159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  def do_login(user, pw):
161
  if VALID_USERS.get(user) == pw:
162
  return gr.update(visible=False), gr.update(visible=True), ""
 
157
  date_picker.change(fn=get_reps, inputs=date_picker, outputs=rep_picker)
158
  btn.click(fn=show_map, inputs=[date_picker, rep_picker], outputs=[table, map_plot])
159
 
160
+ with gr.Tab("๐Ÿ“„ Reports"):
161
+ with gr.Row():
162
+ report_type = gr.Radio(choices=["Daily", "Weekly", "Monthly"], label="Report Type", value="Daily")
163
+ report_date = gr.Date(label="Select Date")
164
+ download_btn = gr.Button("๐Ÿ“ฅ Download CSV")
165
+
166
+ report_table = gr.Dataframe(label="๐Ÿ“‹ Report Summary")
167
+ report_info = gr.Markdown()
168
+ download_file = gr.File(label="๐Ÿ“ Download Link")
169
+
170
+ def generate_report(report_type, report_date):
171
+ df = refresh_data()
172
+ date_obj = pd.to_datetime(report_date)
173
+
174
+ if report_type == "Daily":
175
+ mask = df['Date'] == str(date_obj.date())
176
+ elif report_type == "Weekly":
177
+ start = date_obj - pd.Timedelta(days=date_obj.weekday())
178
+ end = start + pd.Timedelta(days=6)
179
+ mask = (pd.to_datetime(df['Date']) >= start.date()) & (pd.to_datetime(df['Date']) <= end.date())
180
+ elif report_type == "Monthly":
181
+ mask = pd.to_datetime(df['Date']).dt.to_period("M") == date_obj.to_period("M")
182
+
183
+ filtered = df[mask]
184
+
185
+ if filtered.empty:
186
+ return pd.DataFrame(), "โš ๏ธ No data found for that range.", None
187
+
188
+ summary = filtered[[
189
+ 'Date', 'Rep Name', 'Dealership', 'Time',
190
+ 'Interaction Type', 'Product', 'Time Diff (min)'
191
+ ]].sort_values(by=["Rep Name", "Date"])
192
+
193
+ insights = f"""
194
+ ### ๐Ÿ“Š Insights:
195
+ - **Total Visits:** {len(filtered)}
196
+ - **Unique Reps:** {filtered['Rep Name'].nunique()}
197
+ - **Most Active Rep:** {filtered['Rep Name'].value_counts().idxmax()}
198
+ - **Most Visited Dealership:** {filtered['Dealership'].value_counts().idxmax()}
199
+ - **Avg Time Between Visits:** {round(filtered['Time Diff (min)'].mean(), 2)} min
200
+ """
201
+
202
+ filename = f"Bid4Cars_Report_{report_type}_{report_date}.csv".replace(" ", "_")
203
+ summary.to_csv(filename, index=False)
204
+
205
+ return summary, insights, filename
206
+
207
+ report_date.change(fn=generate_report, inputs=[report_type, report_date], outputs=[report_table, report_info, download_file])
208
+ report_type.change(fn=generate_report, inputs=[report_type, report_date], outputs=[report_table, report_info, download_file])
209
+ download_btn.click(fn=generate_report, inputs=[report_type, report_date], outputs=[report_table, report_info, download_file])
210
+
211
  def do_login(user, pw):
212
  if VALID_USERS.get(user) == pw:
213
  return gr.update(visible=False), gr.update(visible=True), ""