Skip to content

Commit

Permalink
[IMP] sale_commission_pricelist: black, isort, prettier
Browse files Browse the repository at this point in the history
  • Loading branch information
feketemihai committed Jul 24, 2020
1 parent 73475c0 commit 2ec56c5
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 172 deletions.
1 change: 0 additions & 1 deletion sale_commission_pricelist/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@

from . import models
23 changes: 9 additions & 14 deletions sale_commission_pricelist/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,13 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
'name': 'Sales commissions by pricelist',
'version': '12.0.1.0.0',
'author': 'Tecnativa, '
'Odoo Community Association (OCA)',
'category': 'Sales Management',
'website': 'https://github.com/OCA/commission',
'license': 'AGPL-3',
'depends': [
'sale_commission',
],
'data': [
'views/product_pricelist_view.xml',
],
'installable': True,
"name": "Sales commissions by pricelist",
"version": "13.0.1.0.0",
"author": "Tecnativa, " "Odoo Community Association (OCA)",
"category": "Sales Management",
"website": "https://github.com/OCA/commission",
"license": "AGPL-3",
"depends": ["sale_commission"],
"data": ["views/product_pricelist_view.xml"],
"installable": True,
}
1 change: 0 additions & 1 deletion sale_commission_pricelist/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@

from . import product_pricelist
from . import sale_order
6 changes: 2 additions & 4 deletions sale_commission_pricelist/models/product_pricelist.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@


class ProductPricelistItem(models.Model):
_inherit = 'product.pricelist.item'
_inherit = "product.pricelist.item"

commission_id = fields.Many2one(
comodel_name='sale.commission',
string='Commission',
ondelete='restrict',
comodel_name="sale.commission", string="Commission", ondelete="restrict"
)
17 changes: 8 additions & 9 deletions sale_commission_pricelist/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,33 @@


class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
_inherit = "sale.order.line"

def _get_commission_from_pricelist(self):
self.ensure_one()
if not self.product_id or not self.order_id.pricelist_id:
return False # pragma: no cover
return False # pragma: no cover
rule_id = self.order_id.pricelist_id.get_product_price_rule(
product=self.product_id,
quantity=self.product_uom_qty or 1.0,
partner=self.order_id.partner_id,
date=self.order_id.date_order,
uom_id=self.product_uom.id)[1]
rule = self.env['product.pricelist.item'].browse(rule_id)
uom_id=self.product_uom.id,
)[1]
rule = self.env["product.pricelist.item"].browse(rule_id)
return rule.commission_id

@api.onchange('product_id', 'product_uom_qty')
@api.onchange("product_id", "product_uom_qty")
def _onchange_product_id_sale_commission_pricelist(self):
commission = self._get_commission_from_pricelist()
if commission:
self.agents.update({
'commission': commission.id,
})
self.agents.update({"commission": commission.id})

def _prepare_agents_vals(self):
self.ensure_one()
res = super(SaleOrderLine, self)._prepare_agents_vals()
commission = self._get_commission_from_pricelist()
if commission:
for vals in res:
vals[2]['commission'] = commission.id
vals[2]["commission"] = commission.id
return res
1 change: 0 additions & 1 deletion sale_commission_pricelist/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@

from . import test_sale_commission_pricelist
204 changes: 102 additions & 102 deletions sale_commission_pricelist/tests/test_sale_commission_pricelist.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,119 +5,119 @@


class TestSaleCommissionPricelist(SavepointCase):

@classmethod
def setUpClass(cls):
super(TestSaleCommissionPricelist, cls).setUpClass()
cls.product = cls.env['product.product'].create({
'name': 'Test Product 1',
'list_price': 100,
})
cls.product2 = cls.env['product.product'].create({
'name': 'Test Product 2',
'list_price': 200,
})
SaleCommission = cls.env['sale.commission']
cls.commission_agent = SaleCommission.create({
'name': '0.5% commission',
'fix_qty': 0.5,
})
cls.commission_1 = SaleCommission.create({
'name': '1% commission',
'fix_qty': 1.0,
})
cls.commission_2 = SaleCommission.create({
'name': '2% commission',
'fix_qty': 2.0,
})
cls.pricelist = cls.env['product.pricelist'].create({
'name': 'Test commission pricelist',
'item_ids': [
(0, 0, {
'name': '10% discount and commission on Test product 2',
'applied_on': '1_product',
'product_id': cls.product2.id,
'compute_price': 'formula',
'base': 'list_price',
'price_discount': 20,
'commission_id': cls.commission_2.id,
}),
(0, 0, {
'name': '20% Discount and commission',
'compute_price': 'percentage',
'base': 'list_price',
'percent_price': 10,
'applied_on': '3_global',
'commission_id': cls.commission_1.id,
}),
]
})
Partner = cls.env['res.partner']
cls.agent = Partner.create({
'name': 'Test Agent',
'agent': True,
'commission': cls.commission_agent.id,
})
cls.partner = Partner.create({
'name': 'Partner test',
'customer': True,
'supplier': False,
'agents': [(6, 0, cls.agent.ids)],
})
SaleOrder = cls.env['sale.order']
cls.sale_order = SaleOrder.create({
'partner_id': cls.partner.id,
'pricelist_id': cls.pricelist.id,
})
SOLine = cls.env['sale.order.line']
cls.so_line1 = SOLine.with_context(partner_id=cls.partner.id).create({
'order_id': cls.sale_order.id,
'product_id': cls.product.id,
})
for onchange_method in cls.so_line1._onchange_methods['product_id']:
cls.product = cls.env["product.product"].create(
{"name": "Test Product 1", "list_price": 100}
)
cls.product2 = cls.env["product.product"].create(
{"name": "Test Product 2", "list_price": 200}
)
SaleCommission = cls.env["sale.commission"]
cls.commission_agent = SaleCommission.create(
{"name": "0.5% commission", "fix_qty": 0.5}
)
cls.commission_1 = SaleCommission.create(
{"name": "1% commission", "fix_qty": 1.0}
)
cls.commission_2 = SaleCommission.create(
{"name": "2% commission", "fix_qty": 2.0}
)
cls.pricelist = cls.env["product.pricelist"].create(
{
"name": "Test commission pricelist",
"item_ids": [
(
0,
0,
{
"name": "10% discount and commission on Test product 2",
"applied_on": "1_product",
"product_id": cls.product2.id,
"compute_price": "formula",
"base": "list_price",
"price_discount": 20,
"commission_id": cls.commission_2.id,
},
),
(
0,
0,
{
"name": "20% Discount and commission",
"compute_price": "percentage",
"base": "list_price",
"percent_price": 10,
"applied_on": "3_global",
"commission_id": cls.commission_1.id,
},
),
],
}
)
Partner = cls.env["res.partner"]
cls.agent = Partner.create(
{"name": "Test Agent", "agent": True, "commission": cls.commission_agent.id}
)
cls.partner = Partner.create(
{
"name": "Partner test",
"customer": True,
"supplier": False,
"agents": [(6, 0, cls.agent.ids)],
}
)
SaleOrder = cls.env["sale.order"]
cls.sale_order = SaleOrder.create(
{"partner_id": cls.partner.id, "pricelist_id": cls.pricelist.id}
)
SOLine = cls.env["sale.order.line"]
cls.so_line1 = SOLine.with_context(partner_id=cls.partner.id).create(
{"order_id": cls.sale_order.id, "product_id": cls.product.id}
)
for onchange_method in cls.so_line1._onchange_methods["product_id"]:
onchange_method(cls.so_line1)
cls.so_line2 = SOLine.with_context(partner_id=cls.partner.id).create({
'order_id': cls.sale_order.id,
'product_id': cls.product2.id,
})
for onchange_method in cls.so_line2._onchange_methods['product_id']:
cls.so_line2 = SOLine.with_context(partner_id=cls.partner.id).create(
{"order_id": cls.sale_order.id, "product_id": cls.product2.id}
)
for onchange_method in cls.so_line2._onchange_methods["product_id"]:
onchange_method(cls.so_line2)

def test_sale_commission_pricelist(self):
self.assertEqual(
self.so_line1.agents[:1].commission, self.commission_1)
self.assertEqual(
self.so_line2.agents[:1].commission, self.commission_2)
self.assertEqual(self.so_line1.agents[:1].commission, self.commission_1)
self.assertEqual(self.so_line2.agents[:1].commission, self.commission_2)

def test_prepare_agents_vals(self):
commission_3 = self.env['sale.commission'].create({
'name': '3% commission',
'fix_qty': 3.0,
})
pricelist_3 = self.env['product.pricelist'].create({
'name': 'Test commission pricelist 3',
'item_ids': [
(0, 0, {
'name': '30% discount and commission on Test product 2',
'applied_on': '1_product',
'product_id': self.product2.id,
'compute_price': 'formula',
'base': 'list_price',
'price_discount': 30,
'commission_id': commission_3.id,
}),
]
})
commission_3 = self.env["sale.commission"].create(
{"name": "3% commission", "fix_qty": 3.0}
)
pricelist_3 = self.env["product.pricelist"].create(
{
"name": "Test commission pricelist 3",
"item_ids": [
(
0,
0,
{
"name": "30% discount and commission on Test product 2",
"applied_on": "1_product",
"product_id": self.product2.id,
"compute_price": "formula",
"base": "list_price",
"price_discount": 30,
"commission_id": commission_3.id,
},
),
],
}
)
# Nothing changes
self.sale_order.pricelist_id = pricelist_3
self.assertEqual(
self.so_line1.agents[:1].commission, self.commission_1)
self.assertEqual(
self.so_line2.agents[:1].commission, self.commission_2)
self.assertEqual(self.so_line1.agents[:1].commission, self.commission_1)
self.assertEqual(self.so_line2.agents[:1].commission, self.commission_2)
# After click on 'Recompute lines agents' button
# self.so_line1 and self.so_line1 change
self.sale_order.recompute_lines_agents()
self.assertEqual(
self.so_line1.agents[:1].commission, self.commission_agent)
self.assertEqual(
self.so_line2.agents[:1].commission, commission_3)
self.assertEqual(self.so_line1.agents[:1].commission, self.commission_agent)
self.assertEqual(self.so_line2.agents[:1].commission, commission_3)
75 changes: 35 additions & 40 deletions sale_commission_pricelist/views/product_pricelist_view.xml
Original file line number Diff line number Diff line change
@@ -1,46 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Carlos Dauden - Tecnativa <[email protected]>
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>

<record id="product_pricelist_item_tree_view" model="ir.ui.view">
<field name="model">product.pricelist.item</field>
<field name="inherit_id" ref="product.product_pricelist_item_tree_view"/>
<field name="arch" type="xml">
<field name="min_quantity" position="after">
<field name="commission_id"/>
<record id="product_pricelist_item_tree_view" model="ir.ui.view">
<field name="model">product.pricelist.item</field>
<field name="inherit_id" ref="product.product_pricelist_item_tree_view" />
<field name="arch" type="xml">
<field name="min_quantity" position="after">
<field name="commission_id" />
</field>
</field>
</field>
</record>

<record id="product_pricelist_item_form_view" model="ir.ui.view">
<field name="model">product.pricelist.item</field>
<field name="inherit_id" ref="product.product_pricelist_item_form_view"/>
<field name="arch" type="xml">
<field name="min_quantity" position="after">
<field name="commission_id"/>
</record>
<record id="product_pricelist_item_form_view" model="ir.ui.view">
<field name="model">product.pricelist.item</field>
<field name="inherit_id" ref="product.product_pricelist_item_form_view" />
<field name="arch" type="xml">
<field name="min_quantity" position="after">
<field name="commission_id" />
</field>
</field>
</field>
</record>

<record id="product_pricelist_view" model="ir.ui.view">
<field name="model">product.pricelist</field>
<field name="inherit_id" ref="product.product_pricelist_view"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='price']" position="after">
<field name="commission_id"/>
</xpath>
</field>
</record>

<record id="product_normal_form_view" model="ir.ui.view">
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='price']" position="after">
<field name="commission_id"/>
</xpath>
</field>
</record>

</record>
<record id="product_pricelist_view" model="ir.ui.view">
<field name="model">product.pricelist</field>
<field name="inherit_id" ref="product.product_pricelist_view" />
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='price']" position="after">
<field name="commission_id" />
</xpath>
</field>
</record>
<record id="product_normal_form_view" model="ir.ui.view">
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='price']" position="after">
<field name="commission_id" />
</xpath>
</field>
</record>
</odoo>
Loading

0 comments on commit 2ec56c5

Please sign in to comment.