From 3c07a3fecdee25c0d9db53c5293334f6ce5e1c67 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Thu, 18 Nov 2021 17:41:24 +0100 Subject: [PATCH] [IMP] sale: Apply misc styling improvements + remove dead context keys --- addons/sale/models/account_move.py | 4 ++-- addons/sale/models/product_template.py | 2 +- addons/sale/models/sale_order.py | 19 +++++++++---------- addons/sale/models/sale_order_line.py | 12 ++---------- addons/sale/tests/__init__.py | 14 +++++++------- addons/sale/tests/test_sale_order.py | 4 ++-- addons/sale_coupon/models/sale_order.py | 1 - .../sale_coupon/tests/test_program_numbers.py | 2 +- addons/sale_management/models/sale_order.py | 4 ++-- .../sale_product_matrix/models/sale_order.py | 5 +---- .../models/sale_order.py | 4 ++-- .../models/sale_order_template.py | 2 +- .../tests/test_project_billing.py | 2 +- addons/website_sale/controllers/main.py | 2 +- addons/website_sale/models/website.py | 8 +++++--- 15 files changed, 37 insertions(+), 48 deletions(-) diff --git a/addons/sale/models/account_move.py b/addons/sale/models/account_move.py index 54ca3113233..ba9fb504bdc 100644 --- a/addons/sale/models/account_move.py +++ b/addons/sale/models/account_move.py @@ -34,9 +34,9 @@ class AccountMove(models.Model): """ Trigger the change of fiscal position when the shipping address is modified. """ - delivery_partner_id = self.env['res.partner'].browse(self._get_invoice_delivery_partner_id()) + delivery_partner = self.env['res.partner'].browse(self._get_invoice_delivery_partner_id()) fiscal_position = self.env['account.fiscal.position'].with_company(self.company_id)._get_fiscal_position( - self.partner_id, delivery=delivery_partner_id) + self.partner_id, delivery=delivery_partner) if fiscal_position: self.fiscal_position_id = fiscal_position diff --git a/addons/sale/models/product_template.py b/addons/sale/models/product_template.py index 8e1fb3d68b9..24035f903c3 100644 --- a/addons/sale/models/product_template.py +++ b/addons/sale/models/product_template.py @@ -53,7 +53,7 @@ class ProductTemplate(models.Model): @api.depends('sale_ok') def _compute_expense_policy(self): - self.filtered(lambda t: not t.sale_ok).update({'expense_policy': 'no'}) + self.filtered(lambda t: not t.sale_ok).expense_policy = 'no' @api.depends('product_variant_ids.sales_count') def _compute_sales_count(self): diff --git a/addons/sale/models/sale_order.py b/addons/sale/models/sale_order.py index 519deddb0fb..5d03d692da7 100644 --- a/addons/sale/models/sale_order.py +++ b/addons/sale/models/sale_order.py @@ -175,25 +175,24 @@ class SaleOrder(models.Model): required=True, change_default=True, index=True, tracking=1, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",) partner_invoice_id = fields.Many2one( - 'res.partner', string='Invoice Address', - readonly=False, required=True, pre_compute=True, + 'res.partner', string='Invoice Address', required=True, + compute='_compute_partner_invoice_id', store=True, readonly=False, pre_compute=True, states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}, - compute='_compute_partner_invoice_id', store=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",) partner_shipping_id = fields.Many2one( - 'res.partner', string='Delivery Address', readonly=False, required=True, + 'res.partner', string='Delivery Address', required=True, + compute='_compute_partner_shipping_id', store=True, readonly=False, pre_compute=True, states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}, - compute='_compute_partner_shipping_id', store=True, pre_compute=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",) pricelist_id = fields.Many2one( - 'product.pricelist', string='Pricelist', check_company=True, # Unrequired company - required=False, readonly=False, store=True, - compute='_compute_pricelist_id', pre_compute=True, + 'product.pricelist', string='Pricelist', required=False, check_company=True, # Unrequired company + compute='_compute_pricelist_id', store=True, pre_compute=True, readonly=False, states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]}, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", tracking=1, help="If you change the pricelist, only newly added lines will be affected.") - currency_id = fields.Many2one(related='pricelist_id.currency_id', depends=["pricelist_id"], store=True, ondelete="restrict") + currency_id = fields.Many2one( + related='pricelist_id.currency_id', depends=["pricelist_id"], store=True, pre_compute=True, ondelete="restrict") analytic_account_id = fields.Many2one( 'account.analytic.account', 'Analytic Account', readonly=True, copy=False, check_company=True, # Unrequired company @@ -536,7 +535,7 @@ class SaleOrder(models.Model): vals['name'] = self.env['ir.sequence'].next_by_code( 'sale.order', sequence_date=seq_date) or _('New') - return super(SaleOrder, self).create(vals_list) + return super().create(vals_list) def _compute_field_value(self, field): if field.name == 'invoice_status' and not self.env.context.get('mail_activity_automation_skip'): diff --git a/addons/sale/models/sale_order_line.py b/addons/sale/models/sale_order_line.py index 2a4dd458911..a81b6f8ec01 100644 --- a/addons/sale/models/sale_order_line.py +++ b/addons/sale/models/sale_order_line.py @@ -418,7 +418,7 @@ class SaleOrderLine(models.Model): # remove packaging if not match the product if line.product_packaging_id.product_id != line.product_id: line.product_packaging_id = False - # suggest biggest suitable packaging + # Find biggest suitable packaging if line.product_id and line.product_uom_qty and line.product_uom: line.product_packaging_id = line.product_id.packaging_ids.filtered( 'sales')._find_suitable_product_packaging(line.product_uom_qty, line.product_uom) @@ -629,13 +629,7 @@ class SaleOrderLine(models.Model): for line in self: if not line.product_id: continue - product = line.product_id.with_context( - lang=get_lang(line.env, line.order_id.partner_id.lang).code, - partner=line.order_id.partner_id, - quantity=line.product_uom_qty, - date=line.order_id.date_order, - pricelist=line.order_id.pricelist_id.id, - uom=line.product_uom.id) + product = line.product_id.with_context(lang=line.order_partner_id.lang) line.name = line.get_sale_order_line_multiline_description_sale(product) @api.depends('product_id') @@ -684,7 +678,6 @@ class SaleOrderLine(models.Model): continue if line.order_id.pricelist_id and line.order_partner_id: product = line.product_id.with_context( - lang=line.order_id.partner_id.lang, partner=line.order_partner_id, quantity=line.product_uom_qty, date=line.order_id.date_order, @@ -796,7 +789,6 @@ class SaleOrderLine(models.Model): line.discount = 0.0 product = line.product_id.with_context( - lang=line.order_id.partner_id.lang, partner=line.order_partner_id, quantity=line.product_uom_qty, date=line.order_id.date_order, diff --git a/addons/sale/tests/__init__.py b/addons/sale/tests/__init__.py index 1a5f79fbc8c..f86f2e9323f 100644 --- a/addons/sale/tests/__init__.py +++ b/addons/sale/tests/__init__.py @@ -1,16 +1,16 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import test_sale_product_attribute_value_config -from . import test_sale_to_invoice -from . import test_sale_order -from . import test_sale_pricelist +from . import test_access_rights +from . import test_accrued_sale_orders from . import test_onchange from . import test_payment_flow from . import test_reinvoice -from . import test_access_rights +from . import test_sale_flow +from . import test_sale_order +from . import test_sale_pricelist +from . import test_sale_product_attribute_value_config from . import test_sale_refund from . import test_sale_signature -from . import test_sale_flow -from . import test_accrued_sale_orders from . import test_sale_tax_totals +from . import test_sale_to_invoice diff --git a/addons/sale/tests/test_sale_order.py b/addons/sale/tests/test_sale_order.py index 9a00446db56..01bac878df6 100644 --- a/addons/sale/tests/test_sale_order.py +++ b/addons/sale/tests/test_sale_order.py @@ -122,7 +122,7 @@ class TestSaleOrder(TestSaleCommon): order = self.env['sale.order'].create({ 'partner_id': self.partner_a.id, }) - order_lines = self.env['sale.order.line'].create([ + self.env['sale.order.line'].create([ { 'display_type': 'line_section', 'name': 'Dummy section', @@ -800,7 +800,7 @@ class TestSaleOrder(TestSaleCommon): product = product_tmpl.product_variant_id fpos = self.env['account.fiscal.position'].create(dict(name="fiscal position", sequence=1)) - fp_tax_id = self.env['account.fiscal.position.tax'].create({ + self.env['account.fiscal.position.tax'].create({ 'position_id': fpos.id, 'tax_src_id': tax_include.id, 'tax_dest_id': tax_exclude.id, diff --git a/addons/sale_coupon/models/sale_order.py b/addons/sale_coupon/models/sale_order.py index 7b234ca1de6..c2f54dcbd6c 100644 --- a/addons/sale_coupon/models/sale_order.py +++ b/addons/sale_coupon/models/sale_order.py @@ -501,7 +501,6 @@ class SaleOrderLine(models.Model): related_program_lines |= line.order_id.order_line.filtered(lambda l: l.product_id.id == related_program.discount_line_product_id.id) - line return super(SaleOrderLine, self | related_program_lines).unlink() - @api.depends('product_id') def _compute_tax_id(self): reward_lines = self.filtered('is_reward_line') super(SaleOrderLine, self - reward_lines)._compute_tax_id() diff --git a/addons/sale_coupon/tests/test_program_numbers.py b/addons/sale_coupon/tests/test_program_numbers.py index b5659b497dc..5323a03a58b 100644 --- a/addons/sale_coupon/tests/test_program_numbers.py +++ b/addons/sale_coupon/tests/test_program_numbers.py @@ -6,7 +6,7 @@ from odoo.exceptions import UserError from odoo.tests import tagged -@tagged('post_install', '-at_install', 'program_numbers') +@tagged('post_install', '-at_install') class TestSaleCouponProgramNumbers(TestSaleCouponCommon): def setUp(self): diff --git a/addons/sale_management/models/sale_order.py b/addons/sale_management/models/sale_order.py index 070079e6477..db5f5f0cfe0 100644 --- a/addons/sale_management/models/sale_order.py +++ b/addons/sale_management/models/sale_order.py @@ -52,8 +52,8 @@ class SaleOrder(models.Model): @api.depends('partner_id', 'sale_order_template_id') def _compute_note(self): - super(SaleOrder, self)._compute_note() - for order in self: + super()._compute_note() + for order in self.filtered('sale_order_template_id'): template = order.sale_order_template_id.with_context(lang=order.partner_id.lang) order.note = template.note if not is_html_empty(template.note) else order.note diff --git a/addons/sale_product_matrix/models/sale_order.py b/addons/sale_product_matrix/models/sale_order.py index 7f6ab29955f..a01c40fda2d 100644 --- a/addons/sale_product_matrix/models/sale_order.py +++ b/addons/sale_product_matrix/models/sale_order.py @@ -45,7 +45,6 @@ class SaleOrder(models.Model): if self.grid and self.grid_update: grid = json.loads(self.grid) product_template = self.env['product.template'].browse(grid['product_template_id']) - product_ids = set() dirty_cells = grid['changes'] Attrib = self.env['product.template.attribute.value'] default_so_line_vals = {} @@ -69,8 +68,6 @@ class SaleOrder(models.Model): if not diff: continue - product_ids.add(product.id) - # TODO keep qty check? cannot be 0 because we only get cell changes ... if order_lines: if qty == 0: @@ -115,7 +112,7 @@ class SaleOrder(models.Model): product_uom_qty=qty, product_no_variant_attribute_value_ids=no_variant_attribute_values.ids) )) - if product_ids and new_lines: + if new_lines: # Add new SO lines self.update(dict(order_line=new_lines)) diff --git a/addons/sale_quotation_builder/models/sale_order.py b/addons/sale_quotation_builder/models/sale_order.py index fb81d21650c..09686774f8f 100644 --- a/addons/sale_quotation_builder/models/sale_order.py +++ b/addons/sale_quotation_builder/models/sale_order.py @@ -46,11 +46,11 @@ class SaleOrderLine(models.Model): @api.model_create_multi def create(self, vals_list): vals_list = [self._inject_quotation_description(vals) for vals in vals_list] - return super(SaleOrderLine, self).create(vals_list) + return super().create(vals_list) def write(self, values): values = self._inject_quotation_description(values) - return super(SaleOrderLine, self).write(values) + return super().write(values) def _inject_quotation_description(self, values): values = dict(values or {}) diff --git a/addons/sale_quotation_builder/models/sale_order_template.py b/addons/sale_quotation_builder/models/sale_order_template.py index 5c4b8d86111..b55008926bc 100644 --- a/addons/sale_quotation_builder/models/sale_order_template.py +++ b/addons/sale_quotation_builder/models/sale_order_template.py @@ -34,7 +34,7 @@ class SaleOrderTemplateLine(models.Model): @api.model_create_multi def create(self, vals_list): vals_list = [self._inject_quotation_description(vals) for vals in vals_list] - return super(SaleOrderTemplateLine, self).create(vals_list) + return super().create(vals_list) def write(self, values): values = self._inject_quotation_description(values) diff --git a/addons/sale_timesheet/tests/test_project_billing.py b/addons/sale_timesheet/tests/test_project_billing.py index c306fc865df..2022ca80355 100644 --- a/addons/sale_timesheet/tests/test_project_billing.py +++ b/addons/sale_timesheet/tests/test_project_billing.py @@ -5,7 +5,7 @@ from odoo.fields import Command from odoo.tests import tagged from odoo.tests.common import Form -@tagged('post_install', '-at_install', 'project_billing') +@tagged('post_install', '-at_install') class TestProjectBilling(TestCommonSaleTimesheet): """ This test suite provide checks for miscellaneous small things. """ diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index eecfcccd1c4..cb75ad3e720 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -834,7 +834,7 @@ class WebsiteSale(http.Controller): else: partner_id = self._checkout_form_save(mode, post, kw) if mode[1] == 'billing': - order.with_context(not_self_saleperson=True).partner_id = partner_id + order.partner_id = partner_id # This is the *only* thing that the front end user will see/edit anyway when choosing billing address order.partner_invoice_id = partner_id if not kw.get('use_same'): diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index 7a587aaad2f..88e67e3e70b 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -328,9 +328,11 @@ class Website(models.Model): fiscal_position = sale_order.fiscal_position_id.id # change the partner, and trigger the onchange - sale_order.with_context(not_self_saleperson=True).write({'partner_id': partner.id}) - sale_order.write({'partner_invoice_id': partner.id}) - sale_order['payment_term_id'] = self.sale_get_payment_term(partner) + sale_order.write({ + 'partner_id': partner.id, + 'partner_invoice_id': partner.id, + 'payment_term_id': self.sale_get_payment_term(partner), + }) # check the pricelist : update it if the pricelist is not the 'forced' one values = {}