File size: 2,405 Bytes
aa6544c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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}")