I added a custom field to sale order and i want to send this value from sale order to invoice view. I tried adding it through sale_line_invoice wizard and in _prepare_invoice method in sale.order. Also i added that field to account.invoice and its view. I then restarted my server, cleared cache and updated my module. But when i create any order and click on Create final invoice i get this error: Unknown Error can't adapt type 'browse_record'.
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Accounting
- Inventory
- PoS
- Project management
- MRP
This question has been flagged
the _prepare_invoice
method of sale.order is what you need.
the comment says:
Prepare the dict of values to create the new invoice for a sales order.
so you need to override this method in a custom module of yours, in order to extend the invoice_vals
dictionary, with something like:
class my_sale_order(osv.Model):
_inherit = "sale.order"
def _prepare_invoice(self, cr, uid, order, lines, context=None):
## your code
my_sale_order()
hey m not having any custom module but i just added a single custom field to sale order earlier and now i want to use that field in invoice too with the values.
then i guess you edited the openerp source code. it's always preferable to create a custom module and inherit the code, otherwise you're going to lose your changes with the next openerp update
i know but i succesfully did everything but now my field shows this value which is obviously some error browse_record(res.reference, 1)
you're referring to an object instead of an attribute. probably your_value.name will fix this
thanks a lot it works now with the attribute.
For creating "account.invoice" from "sale.order" there is four selection option
delivered
all
percentage
fixed
I tried a function "def action_invoice_create(self, grouped=False, final=False): " using super in inherited sale.order. It works fine for sending a field value from sale.order to account.invoice, when the selection field is "delivered" or "all".
Instead of "def action_invoice_create(self, grouped=False, final=False): " I tried with "def _prepare_invoice(self, cr, uid, order, lines, context=None):" also. But same happened it's not working for "percentage" and "fixed" selections.
So I used another function "def _create_invoice(self, order, so_line, amount):" using super in inherited wizard/sale_make_invoice_advance.py
It propagated the field value from sale.order to account.invoice successfully. I have tested it in debug also.
Does it right way to achieve? or any other way?
Note: I worked on ODOO9
Hello Evon,
You are doing a great, but you did a mistake on write a value on dict of _prepare_invoice_line. You have directly write a object instead of the field value. You have to use the field on vals by using the '.'. For example I have added a two field on sale order line as well as invoice line. 1.lot_id (many2one) 2.package_name (char).
So you have to pass this value on vals like this on _prepare_invoice_line method where the dict is generated as a vals for create the invoice line.
Suppose line_obj_browse is my browse object then
vals = { 'lot_id' : line_obj_browse.lot_id.id, 'package_name': line_obj_browse.package_name, }
I did it the same way
Can you please eplain me how you would extend the method "_prepare_inoive" with only one custom-field "example-field" ?
How should I modify the original method in my custom module?
Thanks René