diff --git a/product/ERP5/DeliverySolver/FIFO.py b/product/ERP5/DeliverySolver/FIFO.py index d18f961a78e0527a38ec21b70c6a932261986c00..562027958a521f9f2bfe2108d07568eeb31d3338 100644 --- a/product/ERP5/DeliverySolver/FIFO.py +++ b/product/ERP5/DeliverySolver/FIFO.py @@ -27,6 +27,8 @@ # ############################################################################## +import zope.interface +from Products.ERP5Type import interfaces from DeliverySolver import DeliverySolver class FIFO(DeliverySolver): @@ -34,7 +36,26 @@ class FIFO(DeliverySolver): The FIFO solver reduces deliveted quantity by reducing the quantity of simulation movements from the last order. """ - def solve(self, simulation_movement_list, new_quantity): + # Declarative interfaces + zope.interface.implements(interfaces.IDeliverySolver) + + # IDeliverySolver Implementation + def __init__(self, simulation_movement_list): + """ + Move this to mixin + """ + self.simulation_movement_list = simulation_movement_list + + def getTotalQuantity(): + """ + Move this to mixin + """ + total_quantity = 0 + for movement in self.simulation_movement_list: + total_quantity += movement.getQuantity() + return total_quantity + + def setTotalQuantity(self, new_quantity): """ """ result = [] @@ -42,11 +63,8 @@ class FIFO(DeliverySolver): return cmp(a.getExplainationValue().getStartDate() b.getExplainationValue().getStartDate()) simulation_movement_list.sort(sortByOrderStartDate) simulation_movement_list.reverse() - total_quantity = 0 - for movement in simulation_movement_list: - total_quantity += movement.getQuantity() - remaining_quantity = total_quantity - new_quantity - for movement in simulation_movement_list: + remaining_quantity = self.getTotalQuantity() - new_quantity + for movement in self.simulation_movement_list: if remaining_quantity: if movement.getQuantity() < remaining_quantity: result.append((movement, movement.getQuantity()))