This question has been flagged
2 Replies
4575 Views

Hi,

I'm trying to see if Odoo can be a solution for my business. The business of my company is to be a broker : to be simple, my clients buy products to supplier, and i take a commission for services rendered in the sale.

For example the client C want to buy one quantity of the product P, the price is 100 euros,  my commission is 8 %, so my invoice to he client C is 8% of 100 euros, so 8 euros. The price 100 euro of the product must be mentionned in the invoice, and of course to total invoiced to the customer, 8 euros.

In odoo if i make an order from the client for the product, i will have an invoice of 100. I would like the calculation of the pricee modified so it is price of product x commission.

So I would like to modify the way the price is calculated in a quotation and order. It seems that i need to create a module which modify the calculation by inheriting the method which do that. My questions are :

1. Should i create a module which will just modify one method ?

2. How can i find the method who do this calulation ? Having the method will help me, but knowing how to find it will help me also for the whole dev i have to do on odoo

Regards

Matz

Avatar
Discard
Best Answer

Hi Matz,

In order to achieve this, please follow to following steps:

  1. Create product P as service item.

  2. Enter its Sale Price in product form as 100 euros.

  3. Create a new pricelist to define commission on every product.

  4. In the pricelist->Pricelist Items, choose 'Apply on' as product and select the product P. 

  5. In Compute Price, select 'Percentage (Discount)' and define discount as 92 i.e. 100-'your commission'.

  6. Save the pricelist.

  7. Link the customer(s) with this pricelist.

  8. Now to go Technical->Database Structure->Models and search for sale.order.line.

  9. Create a new field 'x_product_price',name it Product Price and enter 'product_id.lst_price' in the 'Related field' field.

  10. Now add this custom field in your sale order form.

  11. Accordingly you can add the field in your Sale Order/Quotation report as well.

Hope it will help you to achieve your goal without writing any python code.

Regards,

Waqas

Avatar
Discard
Author Best Answer

Hi Waqas,


It is working really well. I thank you very much, it is a very good way to do what i want without any python line code ! 

One question : i need the product price to be on the invoice too. I modified the model of account.invoice.line and added also x_product_price,  related field product_id.lst_price like on sale.order.line. I also modified the views account.invoice.line.tree and account.invoice.line.form  like for the order. But on the invoice, i don't have the price of the product shown. Where am i wrong ?


My account.invoice.line.form is like this with the new field :


<?xml version="1.0"?>
<form string="Invoice Line">
                    <group>
                        <group>
                            <field name="product_id" context="parent and {'partner_id': parent.partner_id}"/>
                            <field name="x_product_price"/>
                            <label for="quantity"/>
                            <div>
                                <field name="quantity" class="oe_inline"/>
                                <field name="uom_id" class="oe_inline" groups="product.group_uom"/>
                            </div>
                            <field name="price_unit"/>
                            <field name="discount" groups="base.group_no_one"/>
                            <field name="currency_id" invisible="1"/>
                        </group>
                        <group>
                            <field domain="[('company_id', '=', parent.company_id)]" name="account_id" groups="account.group_account_user"/>
                            <field name="invoice_line_tax_ids" context="{'type':parent.get('type')}" domain="[('type_tax_use','!=','none'),('company_id', '=', parent.company_id)]" widget="many2many_tags" options="{'no_create': True}"/>
                            <field domain="[('company_id', '=', parent.company_id)]" name="account_analytic_id" groups="analytic.group_analytic_accounting"/>
                            <field name="company_id" groups="base.group_multi_company" readonly="1"/>
                        </group>
                    </group>
                    <label for="name"/>
                    <field name="name"/>
                </form>
            

Matz

Avatar
Discard