In customer invoice in the account module there is a one2many field,
invoice_line = fields.One2many('account.invoice.line', 'invoice_id', string='Invoice Lines')
For your question i can only give you a general answer. I hope, you can start with it.
In a odoo model (
osv.osv, ...) you can use
self.pool.get("model name") to get the object pool for any model. With this pool you can use the method
read() to read the data.
A Odoo model is stored mostly in one table on the database.
Firstly you need to understand the relationship of the objects in Odoo. In your case it's so:
account.invoice --(invoice_line_ids:one2many)--> account.invoice.line --(product:many2one)-> product
listof IDs of the destination objects.
intvalue of ID of the destination object.
Here is an example to get product ids from the lines of a invoice:
# call object pool for account.invoice invoice_pool = self.pool.get("account.invoice") # here you need the invoice_id to get the data. # you can get it by parsing the parameter context found_invoices = invoice_pool.read(cr, uid, [invoice_id,], ["invoice_line_ids"], context) # It returns a list, but i gave only one invoice_id. # the list has maximun one element. we need the frist element found_invoice = found_invoices if found_invoices else None invoice_line_ids = found_invoice["invoice_line_ids"] # the same with "account.invoice.line" invoice_line_pool = self.pool.get("account.invoice.line") invoice_lines = invoice_line_pool.read(cr, uid, invoice_line_ids, ["product_id"], context) # Here you have the product ids # I don't need to get the first element, because it returns a int product_ids = [line["product_id"] for line in invoice_lines]
context are parameters, which you get from a request. You can get it by overwriting the method
Important: you need the
invoice_id to start. You can get this value by parsing the variable
You can use
logging to show the content of
context in log file:
import logging _logger = logging.getLogger(__name__) _logger.info("context type: " + type(context)) _logger.info("context content: " + str(context))
P/S: You will need to customize my code to fit with yours, because i don't know many about your idea. I'm working with Odoo 9. But it's mostly the same core with Odoo 8