|
import json |
|
import xmlrpc.client |
|
from transformers import pipeline |
|
|
|
|
|
ODOO_URL = "https://your-odoo-instance.com" |
|
ODOO_DB = "your-database" |
|
ODOO_USERNAME = "your-username" |
|
ODOO_PASSWORD = "your-password" |
|
ACCOUNT_ID = 41 |
|
|
|
|
|
print("Loading Hugging Face model...") |
|
model = pipeline("text2text-generation", model="google/flan-t5-base") |
|
|
|
|
|
user_prompt = input("Enter your accounting prompt:\n> ") |
|
|
|
|
|
formatted_prompt = ( |
|
f"Extract as JSON with fields transaction_type, vendor_name, amount, date, description from: {user_prompt}" |
|
) |
|
|
|
result = model(formatted_prompt, max_length=256)[0]['generated_text'] |
|
print("\nRaw Model Output:\n", result) |
|
|
|
|
|
try: |
|
output_data = json.loads(result) |
|
except json.JSONDecodeError: |
|
print("\nERROR: Failed to parse output as JSON. Please adjust model or prompt.") |
|
exit(1) |
|
|
|
|
|
print("\nParsed Data:\n", output_data) |
|
|
|
vendor_name = output_data['vendor_name'] |
|
amount = float(output_data['amount']) |
|
invoice_date = output_data['date'] |
|
description = output_data['description'] |
|
|
|
|
|
print("\nConnecting to Odoo...") |
|
common = xmlrpc.client.ServerProxy(f"{ODOO_URL}/xmlrpc/2/common") |
|
uid = common.authenticate(ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD, {}) |
|
models = xmlrpc.client.ServerProxy(f"{ODOO_URL}/xmlrpc/2/object") |
|
|
|
|
|
partner_id = models.execute_kw(ODOO_DB, uid, ODOO_PASSWORD, 'res.partner', 'search', [[['name', '=', vendor_name]]]) |
|
if not partner_id: |
|
partner_id = models.execute_kw(ODOO_DB, uid, ODOO_PASSWORD, 'res.partner', 'create', [{ |
|
'name': vendor_name, |
|
'supplier_rank': 1 |
|
}]) |
|
print(f"Vendor '{vendor_name}' created with ID {partner_id}") |
|
else: |
|
partner_id = partner_id[0] |
|
print(f"Vendor '{vendor_name}' found with ID {partner_id}") |
|
|
|
|
|
invoice_id = models.execute_kw(ODOO_DB, uid, ODOO_PASSWORD, 'account.move', 'create', [{ |
|
'move_type': 'in_invoice', |
|
'partner_id': partner_id, |
|
'invoice_date': invoice_date, |
|
'invoice_line_ids': [(0, 0, { |
|
'name': description, |
|
'quantity': 1, |
|
'price_unit': amount, |
|
'account_id': ACCOUNT_ID, |
|
})], |
|
}]) |
|
|
|
print(f"\nVendor Bill Created Successfully in Odoo! Invoice ID: {invoice_id}") |