# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models class StockSettings(models.TransientModel): _name = 'stock.config.settings' _inherit = 'res.config.settings' @api.model def default_get(self, fields): res = super(StockSettings, self).default_get(fields) if 'warehouse_and_location_usage_level' in fields or not fields: res['warehouse_and_location_usage_level'] = int(res.get('group_stock_multi_locations', False)) + int(res.get('group_stock_multi_warehouses', False)) return res group_product_variant = fields.Selection([ (0, "No variants on products"), (1, 'Products can have several attributes, defining variants (Example: size, color,...)') ], "Product Variants", implied_group='product.group_product_variant', help='Work with product variant allows you to define some variant of the same products, an ease the product management in the ecommerce for example') company_id = fields.Many2one( 'res.company', 'Company', default=lambda self: self.env.user.company_id, required=True) module_procurement_jit = fields.Selection([ (1, 'Reserve products immediately after the sale order confirmation'), (0, 'Reserve products manually or based on automatic scheduler') ], "Procurements", help="""Allows you to automatically reserve the available products when confirming a sale order. This installs the module procurement_jit.""") module_product_expiry = fields.Selection([ (0, 'Do not use Expiration Date on serial numbers'), (1, 'Define Expiration Date on serial numbers') ], "Expiration Dates", help="""Track different dates on products and serial numbers. The following dates can be tracked: - end of life - best before date - removal date - alert date. This installs the module product_expiry.""") group_uom = fields.Selection([ (0, 'Products have only one unit of measure (easier)'), (1, 'Some products may be sold/purchased in different units of measure (advanced)') ], "Units of Measure", implied_group='product.group_uom', help="""Allows you to select and maintain different units of measure for products.""") group_stock_packaging = fields.Selection([ (0, 'Do not manage packaging'), (1, 'Manage available packaging options per products') ], "Packaging Methods", implied_group='product.group_stock_packaging', help="""Allows you to create and manage your packaging dimensions and types you want to be maintained in your system.""") group_stock_production_lot = fields.Selection([ (0, 'Do not track individual product items'), (1, 'Track lots or serial numbers') ], "Lots and Serial Numbers", implied_group='stock.group_production_lot', help="""This allows you to assign a lot (or serial number) to the pickings and moves. This can make it possible to know which production lot was sent to a certain client, ...""") group_stock_tracking_lot = fields.Selection([ (0, 'Do not manage packaging'), (1, 'Record packages used on packing: pallets, boxes, ...') ], "Packages", implied_group='stock.group_tracking_lot', help="""This allows to manipulate packages. You can put something in, take something from a package, but also move entire packages and put them even in another package. """) group_stock_tracking_owner = fields.Selection([ (0, 'All products in your warehouse belong to your company'), (1, 'Manage consignee stocks (advanced)') ], "Product Owners", implied_group='stock.group_tracking_owner', help="""This way you can receive products attributed to a certain owner. """) group_stock_adv_location = fields.Selection([ (0, 'No automatic routing of products'), (1, 'Advanced routing of products using rules') ], "Routes", implied_group='stock.group_adv_location', help="""This option supplements the warehouse application by effectively implementing Push and Pull inventory flows through Routes.""") group_warning_stock = fields.Selection([ (0, 'All the partners can be used in pickings'), (1, 'An informative or blocking warning can be set on a partner') ], "Warning", implied_group='stock.group_warning_stock') decimal_precision = fields.Integer('Decimal precision on weight', help="As an example, a decimal precision of 2 will allow weights like: 9.99 kg, whereas a decimal precision of 4 will allow weights like: 0.0231 kg.") propagation_minimum_delta = fields.Integer("Minimum days to trigger a propagation of date change in pushed/pull flows.", related='company_id.propagation_minimum_delta') module_stock_dropshipping = fields.Selection([ (0, 'Suppliers always deliver to your warehouse(s)'), (1, "Allow suppliers to deliver directly to your customers") ], "Dropshipping", help='\nCreates the dropship route and add more complex tests\n' '-This installs the module stock_dropshipping.') module_stock_picking_wave = fields.Selection([ (0, 'Manage pickings one at a time'), (1, 'Manage picking in batch per worker') ], "Picking Waves", help='Install the picking wave module which will help you grouping your pickings and processing them in batch') module_stock_calendar = fields.Selection([ (0, 'Set lead times in calendar days (easy)'), (1, "Adapt lead times using the suppliers' open days calendars (advanced)") ], "Minimum Stock Rules", help='This allows you to handle minimum stock rules differently by the possibility to take into account the purchase and delivery calendars \n-This installs the module stock_calendar.') module_stock_barcode = fields.Boolean("Barcode scanner support") module_delivery_dhl = fields.Boolean("DHL integration") module_delivery_fedex = fields.Boolean("Fedex integration") module_delivery_temando = fields.Boolean("Temando integration") module_delivery_ups = fields.Boolean("UPS integration") module_delivery_usps = fields.Boolean("USPS integration") # Warehouse and location usage_level warehouse_and_location_usage_level = fields.Selection([ (0, 'Manage only 1 Warehouse with only 1 stock location'), (1, 'Manage only 1 Warehouse, composed by several stock locations'), (2, 'Manage several Warehouses, each one composed by several stock locations') ], "Warehouses and Locations usage level") group_stock_multi_locations = fields.Boolean('Manage several stock locations', implied_group='stock.group_stock_multi_locations') group_stock_multi_warehouses = fields.Boolean('Manage several warehouses', implied_group='stock.group_stock_multi_warehouses') module_quality = fields.Boolean(string="Quality", help="This module allows you to generate quality alerts and quality check") @api.onchange('warehouse_and_location_usage_level') def onchange_warehouse_and_location_usage_level(self): self.group_stock_multi_locations = self.warehouse_and_location_usage_level > 0 self.group_stock_multi_warehouses = self.warehouse_and_location_usage_level > 1 @api.onchange('group_stock_adv_location') def onchange_adv_location(self): if self.group_stock_adv_location and self.warehouse_and_location_usage_level == 0: self.warehouse_and_location_usage_level = 1 @api.multi def set_group_stock_multi_locations(self): """ If we are not in multiple locations, we can deactivate the internal picking types of the warehouses, so they won't appear in the dashboard. Otherwise, activate them. """ for config in self: if config.group_stock_multi_locations: active = True domain = [] else: active = False domain = [('reception_steps', '=', 'one_step'), ('delivery_steps', '=', 'ship_only')] warehouses = self.env['stock.warehouse'].search(domain) warehouses.mapped('int_type_id').write({'active': active}) return True @api.model def get_default_decimal_precision(self, fields): # don't forward-port in v11.0, the API of config wizards changed. digits = self.env.ref('product.decimal_stock_weight').digits return {'decimal_precision': digits} @api.multi def set_decimal_precision(self): # don't forward-port in v11.0, the API of config wizards changed. for record in self: self.env.ref('product.decimal_stock_weight').write({'digits': record.decimal_precision})