38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
from decimal import Decimal
|
|
|
|
from trytond.pool import Pool, PoolMeta
|
|
|
|
|
|
class ShipmentCostMixinWeight:
|
|
__slots__ = ()
|
|
|
|
def _get_allocation_shipment_cost_factors_by_weight(self):
|
|
pool = Pool()
|
|
Move = pool.get('stock.move')
|
|
if getattr(Move, 'internal_weight', None):
|
|
sum_weight = Decimal(0)
|
|
weights = {}
|
|
for move in self.shipment_cost_moves:
|
|
weight = Decimal(str(move.internal_weight or 0))
|
|
weights[move.id] = weight
|
|
sum_weight += weight
|
|
|
|
if sum_weight:
|
|
factors = {}
|
|
for move in self.shipment_cost_moves:
|
|
factors[move.id] = weights[move.id] / sum_weight
|
|
return factors
|
|
return self._get_allocation_shipment_cost_factors_by_cost()
|
|
|
|
|
|
class ShipmentOut(ShipmentCostMixinWeight, metaclass=PoolMeta):
|
|
__name__ = 'stock.shipment.out'
|
|
|
|
|
|
class ShipmentOutReturn(
|
|
ShipmentCostMixinWeight, metaclass=PoolMeta):
|
|
__name__ = 'stock.shipment.out.return'
|