flectra/addons/stock/models/res_config_settings.py
2018-04-12 18:28:20 +05:30

87 lines
5.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
from flectra import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
module_procurement_jit = fields.Selection([
(1, 'Immediately after sales order confirmation'),
(0, 'Manually or based on automatic scheduler')
], "Reservation",
help="Reserving products manually in delivery orders or by running the scheduler is advised to better manage priorities in case of long customer lead times or/and frequent stock-outs.")
module_product_expiry = fields.Boolean("Expiration Dates",
help="Track following dates on lots & serial numbers: best before, removal, end of life, alert. \n Such dates are set automatically at lot/serial number creation based on values set on the product (in days).")
group_stock_production_lot = fields.Boolean("Lots & Serial Numbers",
implied_group='stock.group_production_lot')
group_stock_tracking_lot = fields.Boolean("Delivery Packages",
implied_group='stock.group_tracking_lot')
group_stock_tracking_owner = fields.Boolean("Consignment",
implied_group='stock.group_tracking_owner')
group_stock_adv_location = fields.Boolean("Multi-Step Routes",
implied_group='stock.group_adv_location',
help="Add and customize route operations to process product moves in your warehouse(s): e.g. unload > quality control > stock for incoming products, pick > pack > ship for outgoing products. \n You can also set putaway strategies on warehouse locations in order to send incoming products into specific child locations straight away (e.g. specific bins, racks).")
group_warning_stock = fields.Boolean("Warnings", implied_group='stock.group_warning_stock')
propagation_minimum_delta = fields.Integer(related='company_id.propagation_minimum_delta', string="No Rescheduling Propagation")
use_propagation_minimum_delta = fields.Boolean(
string="No Rescheduling Propagation",
oldname='default_new_propagation_minimum_delta',
help="Rescheduling applies to any chain of operations (e.g. Make To Order, Pick Pack Ship). In the case of MTO sales, a vendor delay (updated incoming date) impacts the expected delivery date to the customer. \n This option allows to not propagate the rescheduling if the change is not critical.")
module_stock_picking_batch = fields.Boolean("Batch Pickings", oldname="module_stock_picking_wave")
group_stock_multi_locations = fields.Boolean('Storage Locations', implied_group='stock.group_stock_multi_locations',
help="Store products in specific locations of your warehouse (e.g. bins, racks) and to track inventory accordingly.")
group_stock_multi_warehouses = fields.Boolean('Multi-Warehouses', implied_group='stock.group_stock_multi_warehouses')
@api.onchange('use_propagation_minimum_delta')
def _onchange_use_propagation_minimum_delta(self):
if not self.use_propagation_minimum_delta:
self.propagation_minimum_delta = 1
@api.onchange('group_stock_multi_locations')
def _onchange_group_stock_multi_locations(self):
if not self.group_stock_multi_locations:
self.group_stock_multi_warehouses = False
self.group_stock_adv_location = False
@api.onchange('group_stock_multi_warehouses')
def _onchange_group_stock_multi_warehouses(self):
if self.group_stock_multi_warehouses:
self.group_stock_multi_locations = True
@api.onchange('group_stock_adv_location')
def onchange_adv_location(self):
if self.group_stock_adv_location and not self.group_stock_multi_locations:
self.group_stock_multi_locations = True
@api.model
def get_values(self):
res = super(ResConfigSettings, self).get_values()
res.update(
use_propagation_minimum_delta=self.env['ir.config_parameter'].sudo().get_param('stock.use_propagation_minimum_delta')
)
return res
@api.multi
def set_values(self):
super(ResConfigSettings, self).set_values()
if not self.user_has_groups('stock.group_stock_manager'):
return
self.env['ir.config_parameter'].sudo().set_param('stock.use_propagation_minimum_delta', self.use_propagation_minimum_delta)
""" If we are not in multiple locations, we can deactivate the internal
operation types of the warehouses, so they won't appear in the dashboard.
Otherwise, activate them.
"""
warehouse_obj = self.env['stock.warehouse']
if self.group_stock_multi_locations:
# override active_test that is false in set_values
warehouses = warehouse_obj.with_context(active_test=True).search([])
active = True
else:
warehouses = warehouse_obj.search([
('reception_steps', '=', 'one_step'),
('delivery_steps', '=', 'ship_only')])
active = False
warehouses.mapped('int_type_id').write({'active': active})