Spaces:
Sleeping
Sleeping
from transformers import pipeline | |
from fpdf import FPDF | |
import gradio as gr | |
import pandas as pd | |
from datetime import datetime | |
import tempfile | |
# Load text generation model | |
generator = pipeline("text-generation", model="gpt-2") | |
# Initialize an empty DataFrame to store all records of invoices | |
ledger = pd.DataFrame(columns=["Head", "Company Name", "SP/Station", "Invoice No", "Date", "Amount"]) | |
# Function to add a new invoice | |
def add_invoice(head, company_name, sp_station, invoice_no, date, amount): | |
global ledger | |
new_row = { | |
"Head": head, | |
"Company Name": company_name, | |
"SP/Station": sp_station, | |
"Invoice No": invoice_no, | |
"Date": date, | |
"Amount": float(amount) | |
} | |
ledger = pd.concat([ledger, pd.DataFrame([new_row])], ignore_index=True) | |
filtered_ledger = ledger[ledger["Head"] == head] | |
total_amount = filtered_ledger["Amount"].sum() | |
return filtered_ledger, f"Total for {head}: {total_amount:.2f}" | |
# Function to search and display all records by head | |
def search_by_head(head): | |
filtered_ledger = ledger[ledger["Head"] == head] | |
total_amount = filtered_ledger["Amount"].sum() | |
return filtered_ledger, f"Total for {head}: {total_amount:.2f}" | |
# Function to generate a PDF report | |
def generate_ledger_pdf(head): | |
global ledger | |
# Generate some content for the PDF using the Hugging Face model | |
generated_text = generator(f"Generate a report summary for {head}.", max_length=50)[0]['generated_text'] | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file: | |
pdf_file_path = tmp_file.name | |
pdf = FPDF() | |
pdf.add_page() | |
# Title and generated content | |
pdf.set_font("Arial", 'B', 16) | |
pdf.cell(0, 10, f"Ledger Report for {head}", ln=True, align="C") | |
pdf.set_font("Arial", 'I', 12) | |
pdf.cell(0, 10, f"Generated Content: {generated_text}", ln=True, align="C") | |
pdf.ln(10) | |
# Table headers | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(50, 10, "Company Name", border=1, align="C") | |
pdf.cell(40, 10, "SP/Station", border=1, align="C") | |
pdf.cell(30, 10, "Invoice No", border=1, align="C") | |
pdf.cell(30, 10, "Date", border=1, align="C") | |
pdf.cell(40, 10, "Amount", border=1, ln=True, align="C") | |
filtered_ledger = ledger[ledger["Head"] == head] | |
if not filtered_ledger.empty: | |
pdf.set_font("Arial", size=12) | |
for _, row in filtered_ledger.iterrows(): | |
pdf.cell(50, 10, str(row['Company Name']), border=1, align="C") | |
pdf.cell(40, 10, str(row['SP/Station']), border=1, align="C") | |
pdf.cell(30, 10, str(row['Invoice No']), border=1, align="C") | |
pdf.cell(30, 10, str(row['Date']), border=1, align="C") | |
pdf.cell(40, 10, f"{row['Amount']:.2f}", border=1, ln=True, align="C") | |
# Total amount for the head | |
total_amount = filtered_ledger["Amount"].sum() | |
pdf.ln(10) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(150, 10, "Total Amount", border=1, align="R") | |
pdf.cell(40, 10, f"{total_amount:.2f}", border=1, ln=True, align="C") | |
pdf.output(pdf_file_path) | |
return pdf_file_path | |
# Gradio interface | |
with gr.Blocks() as app: | |
with gr.Row(): | |
head = gr.Textbox(label="Head") | |
company_name = gr.Textbox(label="Company Name") | |
sp_station = gr.Textbox(label="SP/Station") | |
invoice_no = gr.Textbox(label="Invoice No") | |
date = gr.Textbox(label="Date") | |
amount = gr.Number(label="Amount") | |
add_button = gr.Button("Add Invoice") | |
with gr.Row(): | |
search_head = gr.Textbox(label="Search by Head") | |
search_button = gr.Button("Search Ledger") | |
ledger_records = gr.DataFrame(label="Ledger Records") | |
total_display = gr.Textbox(label="Total Amount", interactive=False) | |
with gr.Row(): | |
generate_pdf_button = gr.Button("Generate PDF") | |
pdf_output = gr.File(label="Download PDF") | |
add_button.click(add_invoice, [head, company_name, sp_station, invoice_no, date, amount], [ledger_records, total_display]) | |
search_button.click(search_by_head, [search_head], [ledger_records, total_display]) | |
generate_pdf_button.click(generate_ledger_pdf, [search_head], [pdf_output]) | |
app.launch(share=True) | |