Skip to content
Snippets Groups Projects
Commit ef99ea2d authored by Gert Pellin's avatar Gert Pellin Committed by Pierre Masereel
Browse files

[IMP] product, sale, sale_management: move discount group on product


The group 'group_discount_per_so_line' is used on reports in
point_of_sale but is created in 'sale' module and point_of_sale doesn't
depends on sale. So we've move this group on product to be able to
properly use it in point_of_sale.

TASK-ID: 2008468

closes odoo/odoo#35041

Signed-off-by: default avatarpimodoo <pimodoo@users.noreply.github.com>
parent eba2d26e
No related branches found
No related tags found
No related merge requests found
Showing
with 45 additions and 74 deletions
......@@ -7,6 +7,7 @@ from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
group_discount_per_so_line = fields.Boolean("Discounts", implied_group='product.group_discount_per_so_line')
group_uom = fields.Boolean("Units of Measure", implied_group='uom.group_uom')
group_product_variant = fields.Boolean("Variants", implied_group='product.group_product_variant')
module_sale_product_configurator = fields.Boolean("Product Configurator")
......@@ -42,3 +43,9 @@ class ResConfigSettings(models.TransientModel):
If the user enables the product configurator -> enable the product variants as well"""
if self.module_sale_product_configurator and not self.group_product_variant:
self.group_product_variant = True
def set_values(self):
super(ResConfigSettings, self).set_values()
if not self.group_discount_per_so_line:
pl = self.env['product.pricelist'].search([('discount_policy', '=', 'without_discount')])
pl.write({'discount_policy': 'with_discount'})
......@@ -27,6 +27,11 @@
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record id="group_discount_per_so_line" model="res.groups">
<field name="name">Discount on lines</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
</data>
<data noupdate="1">
......
......@@ -102,6 +102,7 @@
<tree string="Products Price List">
<field name="sequence" widget="handle" />
<field name="name"/>
<field name="discount_policy" groups="product.group_discount_per_so_line"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
......@@ -122,6 +123,7 @@
</div>
<strong><i class="fa fa-money" role="img" aria-label="Currency" title="Currency"></i> <field name="currency_id"/></strong>
</div>
<field name="discount_policy" groups="product.group_discount_per_so_line"/>
</div>
</t>
</templates>
......@@ -140,6 +142,7 @@
<h1><field name="name" placeholder="e.g. USD Retailers"/></h1>
</div>
<group>
<field name="discount_policy" groups="product.group_discount_per_so_line" widget="radio"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="active" invisible="1"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
......
......@@ -7,7 +7,6 @@ from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
group_discount_per_so_line = fields.Boolean("Discounts", implied_group='sale.group_discount_per_so_line')
module_sale_margin = fields.Boolean("Margins")
quotation_validity_days = fields.Integer(related='company_id.quotation_validity_days', string="Default Quotation Validity (Days)", readonly=False)
use_quotation_validity_days = fields.Boolean("Default Quotation Validity", config_parameter='sale.use_quotation_validity_days')
......@@ -80,9 +79,6 @@ class ResConfigSettings(models.TransientModel):
super(ResConfigSettings, self).set_values()
if self.default_invoice_policy != 'order':
self.env['ir.config_parameter'].set_param('sale.automatic_invoice', False)
if not self.group_discount_per_so_line:
pl = self.env['product.pricelist'].search([('discount_policy', '=', 'without_discount')])
pl.write({'discount_policy': 'with_discount'})
@api.onchange('multi_sales_price', 'multi_sales_price_method')
def _onchange_sale_price(self):
......
......@@ -1517,7 +1517,7 @@ class SaleOrderLine(models.Model):
if not (self.product_id and self.product_uom and
self.order_id.partner_id and self.order_id.pricelist_id and
self.order_id.pricelist_id.discount_policy == 'without_discount' and
self.env.user.has_group('sale.group_discount_per_so_line')):
self.env.user.has_group('product.group_discount_per_so_line')):
return
self.discount = 0.0
......
......@@ -69,7 +69,7 @@
<th class="text-left">Description</th>
<th class="text-right">Quantity</th>
<th class="text-right">Unit Price</th>
<th t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line">
<th t-if="display_discount" class="text-right" groups="product.group_discount_per_so_line">
<span>Disc.%</span>
</th>
<th class="text-right">Taxes</th>
......@@ -98,7 +98,7 @@
<td class="text-right">
<span t-field="line.price_unit"/>
</td>
<td t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line">
<td t-if="display_discount" class="text-right" groups="product.group_discount_per_so_line">
<span t-field="line.discount"/>
</td>
<td class="text-right">
......
......@@ -6,11 +6,6 @@
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record id="group_discount_per_so_line" model="res.groups">
<field name="name">Discount on lines</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record id="group_warning_sale" model="res.groups">
<field name="name">A warning can be set on a product or a customer (Sale)</field>
<field name="category_id" ref="base.module_category_hidden"/>
......
......@@ -119,7 +119,7 @@ class TestOnchangeProductId(TransactionCase):
computer_case.list_price = 100
partner = self.res_partner_model.create(dict(name="George"))
categ_unit_id = self.ref('uom.product_uom_categ_unit')
goup_discount_id = self.ref('sale.group_discount_per_so_line')
goup_discount_id = self.ref('product.group_discount_per_so_line')
self.env.user.write({'groups_id': [(4, goup_discount_id, 0)]})
new_uom = self.env['uom.uom'].create({
'name': '10 units',
......@@ -170,7 +170,7 @@ class TestOnchangeProductId(TransactionCase):
computer_case = self.env.ref('product.product_product_16')
computer_case.list_price = 100
partner = self.res_partner_model.create(dict(name="George"))
goup_discount_id = self.ref('sale.group_discount_per_so_line')
goup_discount_id = self.ref('product.group_discount_per_so_line')
self.env.user.write({'groups_id': [(4, goup_discount_id, 0)]})
first_pricelist = self.env['product.pricelist'].create({
......
......@@ -150,7 +150,7 @@ class TestSaleOrder(TestCommonSaleNoChart):
def test_sale_with_pricelist_discount_excluded(self):
""" Test SO with the pricelist 'discount displayed' and check discount and unit price appeared on its lines """
# Add group 'Discount on Lines' to the user
self.env.user.write({'groups_id': [(4, self.env.ref('sale.group_discount_per_so_line').id)]})
self.env.user.write({'groups_id': [(4, self.env.ref('product.group_discount_per_so_line').id)]})
# Set product category on consumable products (for the pricelist item applying on this category)
self.product_order.write({'categ_id': self.product_category_1.id})
......
......@@ -79,17 +79,17 @@
</div>
<h2>Pricing</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box" title="Apply manual discounts on sales order lines or display discounts computed from pricelists (option to activate in the pricelist configuration).">
<div class="o_setting_left_pane">
<field name="group_discount_per_so_line"/>
</div>
<div class="o_setting_right_pane">
<label for="group_discount_per_so_line"/>
<div class="text-muted">
Grant discounts on sales order lines
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" title="Apply manual discounts on sales order lines or display discounts computed from pricelists (option to activate in the pricelist configuration).">
<div class="o_setting_left_pane">
<field name="group_discount_per_so_line"/>
</div>
<div class="o_setting_right_pane">
<label for="group_discount_per_so_line"/>
<div class="text-muted">
Grant discounts on sales order lines
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" title="Boost your sales with two kinds of discount programs: promotions and coupon codes. Specific conditions can be set (products, customers, minimum purchase amount, period). Rewards can be discounts (% or amount) or free products.">
<div class="o_setting_left_pane">
<field name="module_sale_coupon" widget="upgrade_boolean"/>
......
......@@ -370,8 +370,8 @@
<field name="price_unit"/>
<field name="tax_id" widget="many2many_tags" options="{'no_create': True}" context="{'search_view_ref': 'account.account_tax_view_search'}" domain="[('type_tax_use','=','sale'),('company_id','=',parent.company_id)]"
attrs="{'readonly': [('qty_invoiced', '&gt;', 0)]}"/>
<label for="discount" groups="sale.group_discount_per_so_line"/>
<div name="discount" groups="sale.group_discount_per_so_line">
<label for="discount" groups="product.group_discount_per_so_line"/>
<div name="discount" groups="product.group_discount_per_so_line">
<field name="discount" class="oe_inline"/> %%
</div>
<!--
......@@ -518,7 +518,7 @@
attrs="{'readonly': [('qty_invoiced', '&gt;', 0)]}"
optional="show"
/>
<field name="discount" string="Disc.%" groups="sale.group_discount_per_so_line" optional="show"/>
<field name="discount" string="Disc.%" groups="product.group_discount_per_so_line" optional="show"/>
<field name="price_subtotal" widget="monetary" groups="account.group_show_line_subtotals_tax_excluded"/>
<field name="price_total" widget="monetary" groups="account.group_show_line_subtotals_tax_included"/>
<field name="state" invisible="1"/>
......@@ -974,7 +974,7 @@
</group>
<group>
<field name="price_unit" readonly="1"/>
<field name="discount" groups="sale.group_discount_per_so_line" readonly="1"/>
<field name="discount" groups="product.group_discount_per_so_line" readonly="1"/>
<field name="price_subtotal" widget="monetary"/>
<field name="tax_id" widget="many2many_tags" readonly="1"/>
<field name="price_tax" widget="monetary"/>
......@@ -1119,7 +1119,7 @@
attrs="{'invisible': [('type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund'))]}"/>
</xpath>
<xpath expr="//field[@name='invoice_line_ids']//field[@name='discount']" position="attributes">
<attribute name="groups">sale.group_discount_per_so_line</attribute>
<attribute name="groups">product.group_discount_per_so_line</attribute>
</xpath>
<xpath expr="//group[@name='sale_info_group']" position="inside">
<field name="team_id"/>
......@@ -1138,41 +1138,6 @@
</field>
</record>
<record id="product_pricelist_view_tree" model="ir.ui.view">
<field name="name">product.pricelist.tree.inherit.product</field>
<field name="model">product.pricelist</field>
<field name="inherit_id" ref="product.product_pricelist_view_tree"/>
<field name="arch" type="xml">
<field name="currency_id" position="before">
<field name="discount_policy" groups="sale.group_discount_per_so_line"/>
</field>
</field>
</record>
<record id="product_pricelist_view_form" model="ir.ui.view">
<field name="name">product.pricelist.form.inherit.product</field>
<field name="model">product.pricelist</field>
<field name="inherit_id" ref="product.product_pricelist_view"/>
<field name="arch" type="xml">
<field name="currency_id" position="before">
<field name="discount_policy" groups="sale.group_discount_per_so_line" widget="radio"/>
</field>
</field>
</record>
<record model="ir.ui.view" id="product_pricelist_view_kanban">
<field name="name">product.pricelist.kanban.inherit.product</field>
<field name="model">product.pricelist</field>
<field name="inherit_id" ref="product.product_pricelist_view_kanban"/>
<field name="arch" type="xml">
<data>
<xpath expr='//div[contains(@id, "product_pricelist")]' position="after">
<field name="discount_policy"/>
</xpath>
</data>
</field>
</record>
<!-- search by Salesteams -->
<record id="action_orders_salesteams" model="ir.actions.act_window">
<field name="name">Sales Orders</field>
......
......@@ -11,7 +11,7 @@
<thead>
<tr>
<th class="text-left">Description</th>
<th t-if="has_option_discount" groups="sale.group_discount_per_so_line" class="text-left">Disc.%</th>
<th t-if="has_option_discount" groups="product.group_discount_per_so_line" class="text-left">Disc.%</th>
<th class="text-right">Unit Price</th>
</tr>
</thead>
......@@ -20,7 +20,7 @@
<td>
<span t-field="option.name"/>
</td>
<td t-if="has_option_discount" groups="sale.group_discount_per_so_line">
<td t-if="has_option_discount" groups="product.group_discount_per_so_line">
<strong t-if="option.discount != 0.0" class="text-info">
<t t-esc="((option.discount % 1) and '%s' or '%d') % option.discount"/>%
</strong>
......
......@@ -56,8 +56,8 @@
<field name="product_uom_qty" class="oe_inline"/>
</div>
<field name="price_unit"/>
<label for="discount" groups="sale.group_discount_per_so_line"/>
<div groups="sale.group_discount_per_so_line">
<label for="discount" groups="product.group_discount_per_so_line"/>
<div groups="product.group_discount_per_so_line">
<field name="discount" class="oe_inline"/> %%
</div>
</group>
......@@ -92,7 +92,7 @@
groups="uom.group_uom"
attrs="{'required': [('display_type', '=', False)]}"
/>
<field name="discount" groups="sale.group_discount_per_so_line"/>
<field name="discount" groups="product.group_discount_per_so_line"/>
<field name="price_unit"/>
</tree>
</field>
......@@ -106,7 +106,7 @@
<field name="product_uom_category_id" invisible="1"/>
<field name="uom_id" groups="uom.group_uom"/>
<field name="price_unit"/>
<field name="discount" groups="sale.group_discount_per_so_line"/>
<field name="discount" groups="product.group_discount_per_so_line"/>
</tree>
</field>
</page>
......
......@@ -17,7 +17,7 @@
<field name="product_uom_category_id" invisible="1"/>
<field name="uom_id" groups="uom.group_uom"/>
<field name="price_unit"/>
<field name="discount" groups="sale.group_discount_per_so_line"/>
<field name="discount" groups="product.group_discount_per_so_line"/>
<field name="is_present" />
</group>
</form>
......@@ -74,7 +74,7 @@
<field name="uom_id" string="UoM" groups="uom.group_uom" optional="show"/>
<field name="product_uom_category_id" invisible="1"/>
<field name="price_unit"/>
<field name="discount" string="Disc.%" groups="sale.group_discount_per_so_line" optional="show"/>
<field name="discount" string="Disc.%" groups="product.group_discount_per_so_line" optional="show"/>
<field name="is_present" invisible="1" />
<button name="button_add_to_order" class="oe_link" icon="fa-shopping-cart" title="Add to order lines" type="object" attrs="{'invisible': [('is_present', '=', True)]}"/>
</tree>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment