Related fields are by default readonly and they should be when it is possible. A editable related field will write on the related model and will cause extra unwanted write of data. These unwanted write can cause performance issues in some case (see odoo/odoo#63865). Then remove the `readonly=False` of some related fields (where it is useless): - In 'mrp.workorder' (mrp): `working_state` and `production_date` should be readonly. - In 'purchase.order' (purchase): `product_id` should be readonly. - In 'purchase.order.line' (purchase): `state` should be readonly. - In 'product.supplierinfo' (purchase_requisition): `purchase_requisition_id` should be readonly. - In 'purchase.requisition' (purchase_requisition): `product_id` should be readonly. - In 'product.template' (stock): `route_from_categ_ids` should be readonly. - In 'stock.move.line' (stock): `is_initial_demand_editable` should be readonly. - In 'stock.move' (stock): `product_tmpl_id` should be readonly. - In 'stock.production.lot' (stock): `product_uom_id` should be readonly. - In 'stock.quant' (stock): `product_tmpl_id` should be readonly. - In 'stock.rule' (stock): `route_sequence` should be readonly. - In 'stock.change.product.qty' (stock): `product_variant_count` should be readonly. - In 'stock.return.picking.line' (stock): `uom_id` should be readonly and also because it is forced by `_prepare_stock_return_picking_line_vals_from_move`, it should be related to the product uom not the one on the move. task-2424248
35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
# -*- encoding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import fields, models
|
|
|
|
|
|
class SupplierInfo(models.Model):
|
|
_inherit = 'product.supplierinfo'
|
|
|
|
purchase_requisition_id = fields.Many2one('purchase.requisition', related='purchase_requisition_line_id.requisition_id', string='Agreement')
|
|
purchase_requisition_line_id = fields.Many2one('purchase.requisition.line')
|
|
|
|
|
|
class ProductProduct(models.Model):
|
|
_inherit = 'product.product'
|
|
|
|
def _prepare_sellers(self, params=False):
|
|
sellers = super(ProductProduct, self)._prepare_sellers(params=params)
|
|
if params and params.get('order_id'):
|
|
return sellers.filtered(lambda s: not s.purchase_requisition_id or s.purchase_requisition_id == params['order_id'].requisition_id)
|
|
else:
|
|
return sellers
|
|
|
|
|
|
class ProductTemplate(models.Model):
|
|
_inherit = 'product.template'
|
|
|
|
purchase_requisition = fields.Selection(
|
|
[('rfq', 'Create a draft purchase order'),
|
|
('tenders', 'Propose a call for tenders')],
|
|
string='Procurement', default='rfq',
|
|
help="Create a draft purchase order: Based on your product configuration, the system will create a draft "
|
|
"purchase order.Propose a call for tender : If the 'purchase_requisition' module is installed and this option "
|
|
"is selected, the system will create a draft call for tender.")
|