import json import xmlrpc.client from transformers import pipeline # --- CONFIGURATION --- ODOO_URL = "https://your-odoo-instance.com" ODOO_DB = "your-database" ODOO_USERNAME = "your-username" ODOO_PASSWORD = "your-password" ACCOUNT_ID = 41 # Replace with correct expense account ID # --- 1. LOAD NLP MODEL --- print("Loading Hugging Face model...") model = pipeline("text2text-generation", model="google/flan-t5-base") # --- 2. GET USER PROMPT --- user_prompt = input("Enter your accounting prompt:\n> ") # --- 3. NLP PROCESSING --- 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) # --- 4. PARSE JSON --- try: output_data = json.loads(result) except json.JSONDecodeError: print("\nERROR: Failed to parse output as JSON. Please adjust model or prompt.") exit(1) # Debug print 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'] # --- 5. CONNECT TO ODOO --- 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") # --- 6. FIND OR CREATE VENDOR --- 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}") # --- 7. CREATE VENDOR BILL --- 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}")