Odoo Help


10 Answers

Davide Corio

--Davide Corio--
Davide Corio
| 5 4 9
Bricherasio, Italy
--Davide Corio--

Odoo Evangelist and Consultant

Davide Corio
6/7/13, 4:20 AM

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
6/7/13, 4:23 AM

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.

Davide Corio, Davide Corio
6/7/13, 4:25 AM

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

6/7/13, 4:27 AM

i know but i succesfully did everything but now my field shows this value which is obviously some error browse_record(res.reference, 1)

Davide Corio, Davide Corio
6/7/13, 4:28 AM

you're referring to an object instead of an attribute. probably your_value.name will fix this

6/7/13, 4:45 AM

thanks a lot it works now with the attribute.

Tintu Mon
3/25/16, 9:41 AM

 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

Amit Parik (amp)
6/7/13, 4:32 AM

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, }

1 Comment
6/7/13, 8:44 AM

I did it the same way

6/22/13, 6:41 PM

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é

Ask a Question
Keep Informed
0 follower(s)
About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now