# -*- coding: utf-8 -*- ############################################################################## # # Stock Usability module for Odoo # Copyright (C) 2014-2016 Akretion (http://www.akretion.com) # @author Alexis de Lattre # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## from openerp import models, fields, api import openerp.addons.decimal_precision as dp import logging logger = logging.getLogger(__name__) class StockInventory(models.Model): _inherit = 'stock.inventory' _order = 'id desc' class StockPicking(models.Model): _inherit = 'stock.picking' _order = 'id desc' # In the stock module: _order = "priority desc, date asc, id desc" # The problem is date asc class StockLocation(models.Model): _inherit = 'stock.location' name = fields.Char(translate=False) # with the 'quant_ids' field below, you can for example search empty stock # locations with self.env['stock.location'].search([ # ('child_ids', '=', False), ('quant_ids', '=', False), # ('usage', '=', 'internal')]) quant_ids = fields.One2many( 'stock.quant', 'location_id', string="Related Quants") class StockPickingType(models.Model): _inherit = 'stock.picking.type' name = fields.Char(translate=False) class StockLocationRoute(models.Model): _inherit = 'stock.location.route' name = fields.Char(translate=False) class StockWarehouseOrderpoint(models.Model): _inherit = 'stock.warehouse.orderpoint' _sql_constraints = [( 'company_wh_location_product_unique', 'unique(company_id, warehouse_id, location_id, product_id)', 'An orderpoint already exists for the same company, same warehouse, ' 'same stock location and same product.' )] class StockMove(models.Model): _inherit = 'stock.move' product_supplier_code = fields.Char( string='Supplier Code', compute='_compute_supplier_code', store=True, readonly=True, help="Supplier product code if Partner is the supplier") # It seems that it is not necessary any more to # have the digits= on these 2 fields to fix the bug # https://github.com/odoo/odoo/pull/10038 # reserved_availability = fields.Float( # digits=dp.get_precision('Product Unit of Measure')) # availability = fields.Float( # digits=dp.get_precision('Product Unit of Measure')) @api.multi @api.depends('product_id', 'picking_id.partner_id') def _compute_supplier_code(self): for rec in self: supplier_code = False if rec.picking_id.partner_id and rec.product_id: for supplier_info in rec.product_id.seller_ids: if supplier_info.name == rec.picking_id.partner_id: supplier_code = supplier_info.product_code rec.product_supplier_code = supplier_code def name_get(self, cr, uid, ids, context=None): '''name_get of stock_move is important for the reservation of the quants: so want to add the name of the customer and the expected date in it''' res = [] for line in self.browse(cr, uid, ids, context=context): name = line.location_id.name + ' > ' + line.location_dest_id.name if line.product_id.code: name = line.product_id.code + ': ' + name if line.picking_id.origin: name = line.picking_id.origin + ' ' + name if line.partner_id: name = line.partner_id.name + ' ' + name if line.date_expected: date_expec_dt = fields.Datetime.from_string(line.date_expected) name = name + ' ' + fields.Date.to_string(date_expec_dt) res.append((line.id, name)) return res class StockQuant(models.Model): _inherit = 'stock.quant' uom_id = fields.Many2one( 'product.uom', related='product_id.uom_id', readonly=True) class StockIncoterms(models.Model): _inherit = 'stock.incoterms' @api.multi def name_get(self): res = [] for inco in self: res.append((inco.id, u'[%s] %s' % (inco.code, inco.name))) return res