invoice / app.py
atifsial123's picture
Update app.py
5ee9992 verified
raw
history blame
4.39 kB
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)