In this commit - 1) Added new field propagate_carrier_id in stock.rule and propgate carrier in PICK PACK and SHIP if it is ticked. 2) Allow to print Label at any stage of PICK PACK and SHIP after validation of picking from chatter. Task-2363484 closes odoo/odoo#62851 Related: odoo/enterprise#15148 Signed-off-by: William Henrotin <Whenrow@users.noreply.github.com>
59 lines
2.7 KiB
Python
59 lines
2.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
|
|
class StockMove(models.Model):
|
|
_inherit = 'stock.move'
|
|
|
|
weight = fields.Float(compute='_cal_move_weight', digits='Stock Weight', store=True, compute_sudo=True)
|
|
|
|
@api.depends('product_id', 'product_uom_qty', 'product_uom')
|
|
def _cal_move_weight(self):
|
|
moves_with_weight = self.filtered(lambda moves: moves.product_id.weight > 0.00)
|
|
for move in moves_with_weight:
|
|
move.weight = (move.product_qty * move.product_id.weight)
|
|
(self - moves_with_weight).weight = 0
|
|
|
|
def _get_new_picking_values(self):
|
|
vals = super(StockMove, self)._get_new_picking_values()
|
|
carrier_id = self.group_id.sale_id.carrier_id.id
|
|
vals['carrier_id'] = self.rule_id.propagate_carrier and carrier_id
|
|
return vals
|
|
|
|
def _key_assign_picking(self):
|
|
keys = super(StockMove, self)._key_assign_picking()
|
|
return keys + (self.sale_line_id.order_id.carrier_id,)
|
|
|
|
class StockMoveLine(models.Model):
|
|
_inherit = 'stock.move.line'
|
|
|
|
sale_price = fields.Float(compute='_compute_sale_price')
|
|
|
|
@api.depends('qty_done', 'product_uom_id', 'product_id', 'move_id.sale_line_id', 'move_id.sale_line_id.price_reduce_taxinc', 'move_id.sale_line_id.product_uom')
|
|
def _compute_sale_price(self):
|
|
for move_line in self:
|
|
if move_line.move_id.sale_line_id:
|
|
unit_price = move_line.move_id.sale_line_id.price_reduce_taxinc
|
|
qty = move_line.product_uom_id._compute_quantity(move_line.qty_done, move_line.move_id.sale_line_id.product_uom)
|
|
else:
|
|
unit_price = move_line.product_id.list_price
|
|
qty = move_line.product_uom_id._compute_quantity(move_line.qty_done, move_line.product_id.uom_id)
|
|
move_line.sale_price = unit_price * qty
|
|
|
|
def _get_aggregated_product_quantities(self, **kwargs):
|
|
"""Returns dictionary of products and corresponding values of interest + hs_code
|
|
|
|
Unfortunately because we are working with aggregated data, we have to loop through the
|
|
aggregation to add more values to each datum. This extension adds on the hs_code value.
|
|
|
|
returns: dictionary {same_key_as_super: {same_values_as_super, hs_code}, ...}
|
|
"""
|
|
aggregated_move_lines = super()._get_aggregated_product_quantities(**kwargs)
|
|
for aggregated_move_line in aggregated_move_lines:
|
|
hs_code = aggregated_move_lines[aggregated_move_line]['product'].product_tmpl_id.hs_code
|
|
aggregated_move_lines[aggregated_move_line]['hs_code'] = hs_code
|
|
return aggregated_move_lines
|