Spaces:
Sleeping
Sleeping
import re | |
import os | |
import gspread | |
import gradio as gr | |
import datetime | |
import pandas as pd | |
import matplotlib | |
matplotlib.use('Agg') | |
import matplotlib.pyplot as plt | |
from LLM_openai import client, expense_classifier | |
from utils import create_plot, create_barplot | |
from dataframe_processing import dataframe_process | |
from vision_api_call import process_image | |
#connect to the service account | |
gc = gspread.service_account(filename="credentials.json") | |
#connect to your sheet (between "" = the name of your G Sheet, keep it short) | |
spreadsheet = gc.open("Snackers_spreadsheet").sheet1 | |
def update_spend_from_image(img): | |
##This processes the image | |
extracted_dictionay_from_image=process_image(img) | |
total_from_receipt=extracted_dictionay_from_image['total'] | |
concept_from_receipt=extracted_dictionay_from_image['purchase_summary'] | |
shop_type=extracted_dictionay_from_image['store_type'] | |
shop_name=extracted_dictionay_from_image['store'] | |
receipt_items=str(extracted_dictionay_from_image['items']) | |
concept_and_shop=concept_from_receipt+" from "+shop_type+f" ({shop_name})" | |
##The function update_spend in the line below only takes a string and float | |
category, day_month, todays_amount, current_week_amount , fig, fig2, fig3=update_spend(shop_name, total_from_receipt, concept_and_shop,receipt_items) | |
return category, day_month, todays_amount, current_week_amount , fig, fig2, fig3 | |
def update_spend(concept,ingreso_flag , amount, description ,items_from_receipt=None): | |
category=expense_classifier(concept) | |
today = datetime.date.today() | |
if ingreso_flag: | |
ingreso_o_egreso='ingreso' | |
else: | |
ingreso_o_egreso='egreso' | |
# Append a new row | |
spreadsheet.append_row([str(today), concept,ingreso_o_egreso,float(amount), description,category, items_from_receipt ]) | |
day_month, todays_amount, current_week_amount , fig, fig2, fig3=dataframe_process(spreadsheet) | |
return category, day_month, todays_amount, current_week_amount , fig, fig2, fig3 | |
def show_plots(): | |
category='N/A' | |
today = 'N/A' | |
# Append a new row | |
# spreadsheet.append_row([str(today), concept,float(amount),category, items_from_receipt ]) | |
day_month, todays_amount, current_week_amount , fig, fig2, fig3=dataframe_process(spreadsheet) | |
return category, day_month, todays_amount, current_week_amount , fig, fig2, fig3 | |
with gr.Blocks() as demo: | |
gr.Markdown("Tracker de gastos") | |
with gr.Tab("Entrada manual"): | |
with gr.Row(): | |
concept = gr.Textbox(label="Cliente o Proveedor") | |
with gr.Row(): | |
ingreso_flag= gr.Checkbox(label="Ingreso", info="Es un ingreso? Marca la caja") | |
with gr.Row(): | |
amount= gr.Textbox(label="Monto") | |
with gr.Row(): | |
description= gr.Textbox(label="descripcion") | |
btn_manual = gr.Button("Ingresar gasto") | |
with gr.Tab("Cargar recibo"): | |
with gr.Row(): | |
input_image = gr.Image( type="pil") | |
btn_image = gr.Button("Ingresar gasto") | |
with gr.Row(): | |
btn_show = gr.Button("Mostrar graficos") | |
with gr.Row(): | |
expense_class= gr.Textbox(label='Clase de gasto') | |
ui_date=gr.Textbox(label='Fecha') | |
expenses_today= gr.Textbox(label='Gastos de hoy') | |
expenses_this_week= gr.Textbox(label='Gastos esta semana') | |
with gr.Row(): | |
daily_plot=gr.Plot(label=None) | |
week_plot=gr.Plot() | |
category_plot=gr.Plot() | |
btn_manual.click(fn=update_spend, inputs=[concept, ingreso_flag,amount, description ], outputs=[expense_class,ui_date, expenses_today,expenses_this_week, | |
daily_plot,week_plot,category_plot]) | |
btn_image.click(fn=update_spend_from_image, inputs=[input_image], outputs=[expense_class,ui_date, expenses_today,expenses_this_week, | |
daily_plot,week_plot,category_plot]) | |
btn_show.click(fn=show_plots, inputs=[], outputs=[expense_class,ui_date, expenses_today,expenses_this_week, | |
daily_plot,week_plot,category_plot]) | |
demo.launch() |