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)