Exemplo n.º 1
0
    def __init__(self, sku, on_hand_buffer=None):
        self.sku = sku

        # Minimum on hand quantity before we need to physically verify stock levels, off by default
        self.on_hand_buffer = on_hand_buffer if on_hand_buffer else 0

        self.tracker = TrackingStateMachine()
        self.tracker.add_state(OnHandState("OnHand"))
        self.tracker.add_state(CommittedState("Committed"))
        self.tracker.add_state(BackorderState("Backorder"))
        self.tracker.add_state(FulfilledState("Fulfilled"))
        self.tracker.add_state(PurchaseOrderState("PurchaseOrder"))
        self.tracker.add_state(LostAndFoundState("Lost"))
        self.tracker.add_state(LostAndFoundState("Found"))

        self.tracker.add_transition("commit", "OnHand", "Committed")
        self.tracker.add_transition("allocate", "OnHand", "Backorder")

        self.tracker.add_transition("fulfill_backorder", "Backorder",
                                    "Committed")
        self.tracker.add_transition("cancel_backorder", "Backorder", "OnHand")

        self.tracker.add_action("verify", "Committed")
        self.tracker.add_transition("verify_out_of_stock", "Committed",
                                    "Backorder")
        self.tracker.add_transition("backorder_commitment", "Committed",
                                    "Backorder")
        self.tracker.add_transition("revert", "Committed", "OnHand")
        self.tracker.add_transition("fulfill", "Committed", "Fulfilled")

        self.tracker.add_transition("delivery", "PurchaseOrder", "OnHand")
        self.tracker.add_action("cancel_purchase_order", "PurchaseOrder")

        self.tracker.add_transition("lost", "OnHand", "Lost")
        self.tracker.add_transition("found", "Found", "OnHand")

        # Some shortcut attributes
        self.on_hand = self.tracker.state("OnHand")
        self.committed = self.tracker.state("Committed")
        self.verification = self.tracker.state("Verify")
        self.backorders = self.tracker.state("Backorder")
        self.fulfilled = self.tracker.state("Fulfilled")
        self.purchase_orders = self.tracker.state("PurchaseOrder")
        self.lost = self.tracker.state("Lost")
        self.found = self.tracker.state("Found")