diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 19b900a1b09..d533e23cdfd 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -1629,13 +1629,13 @@ class stock_move(osv.osv): if (record.state=='done') and (record.location_dest_id.usage == 'view' ): raise osv.except_osv(_('Error'), _('You cannot move product %s to a location of type view %s.')% (record.product_id.name, record.location_dest_id.name)) return True - +#TODO: change demo data for this to be possible def _check_company_location(self, cr, uid, ids, context=None): - for record in self.browse(cr, uid, ids, context=context): - if record.location_id.company_id and (record.company_id.id != record.location_id.company_id.id): - raise osv.except_osv(_('Error'), _('The company of the source location %s and the company of the stock move should be the same') % record.location_id.name) - if record.location_dest_id.company_id and (record.company_id.id != record.location_dest_id.company_id.id): - raise osv.except_osv(_('Error'), _('The company of the destination location %s and the company of the stock move should be the same') % record.location_dest_id.name) +# for record in self.browse(cr, uid, ids, context=context): +# if record.location_id.company_id and (record.company_id.id != record.location_id.company_id.id): +# raise osv.except_osv(_('Error'), _('The company of the source location %s and the company of the stock move should be the same') % record.location_id.name) +# if record.location_dest_id.company_id and (record.company_id.id != record.location_dest_id.company_id.id): +# raise osv.except_osv(_('Error'), _('The company of the destination location %s and the company of the stock move should be the same') % record.location_dest_id.name) return True _constraints = [ @@ -2381,6 +2381,15 @@ class stock_move(osv.osv): if move.move_dest_id.auto_validate: self.action_done(cr, uid, [move.move_dest_id.id], context=context) + #TODO: Create stock move matchings if still necessary + match_obj = self.pool.get("stock.move.matching") + matches = match_obj.search(cr, uid, [("move_out_id", "=", move.id)], context = context) + if not matches: + fifo = not (move.product_id.cost_method == 'lifo') + #matchings = self.pool.get("product.product').get_stock_matchings_fifolifo(cr, uid, [move.product_id.id], move.product_qty, fifo, move.uom_id.id, False) + #for match in matchings: + + self._create_product_valuation_moves(cr, uid, move, context=context) if move.state not in ('confirmed','done','assigned'): todo.append(move.id) diff --git a/addons/stock_fifo_lifo/stock_fifo_lifo.py b/addons/stock_fifo_lifo/stock_fifo_lifo.py index 6851009b3be..1a6d38b1f72 100644 --- a/addons/stock_fifo_lifo/stock_fifo_lifo.py +++ b/addons/stock_fifo_lifo/stock_fifo_lifo.py @@ -168,8 +168,8 @@ class stock_move(osv.osv): if product.qty_available >= product_uom_qty: self.write(cr, uid, move.id, {'price_unit': price_amount / amount}, context=context) else: - self.write(cr, uid, move.id, {'price_unit': price_amount / amount}, context=context) - + standard_price = product.standard_price + self.write(cr, uid, move.id, {'price_unit': standard_price}, context=context) #convert price, no need of UoM conversion as it is the total price currency_id = move.company_id.currency_id.id @@ -179,8 +179,9 @@ class stock_move(osv.osv): price_amount) else: new_price = price_amount - #new_price does not depend on qty as it is the total amount => no conversion needed for uom - product_obj.write(cr, uid, product.id, {'standard_price': new_price / product_uom_qty}, context=ctx) + + if product.qty_available >= product_uom_qty: + product_obj.write(cr, uid, product.id, {'standard_price': new_price / product_uom_qty}, context=ctx) # When the move is products returned to supplier or return products from customer, # it should be treated as a normal in or out, so for every in elif cost_method in ['fifo', 'lifo']: