From d1928fe54055bdb4310558504aa5413eb680d513 Mon Sep 17 00:00:00 2001 From: Maxime Bourget Date: Fri, 14 Jun 2013 20:08:29 +0100 Subject: [PATCH] ... --- haxe/FA.hx | 4 ++ haxe/ItemScheduler.hx | 28 +++++++++---- hincludes/lib/FA.class.php | 3 ++ hincludes/lib/ItemScheduler.class.php | 48 ++++++++++++++-------- hincludes/lib/ScheduleParameters.class.php | 2 +- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/haxe/FA.hx b/haxe/FA.hx index 54718b3..a1425f5 100644 --- a/haxe/FA.hx +++ b/haxe/FA.hx @@ -20,4 +20,8 @@ class FA { static public function pick_query():String { return untyped __call__('pick_query'); } + + static public function error(message:String) { + return untyped __call__('display_error', message); + } } diff --git a/haxe/ItemScheduler.hx b/haxe/ItemScheduler.hx index 7ca549d..bfa1744 100644 --- a/haxe/ItemScheduler.hx +++ b/haxe/ItemScheduler.hx @@ -74,7 +74,7 @@ class ScheduleParameters { } - public function to_pick(order: {id:String}) : Null { + public function toPick(order: {id:String}) : Null { var orderId = ItemScheduler.orderId(order); if(rowDetails == null) return null; return rowDetails.get(orderId).to_pick; @@ -130,13 +130,11 @@ class ItemScheduler { var orders = this.orders(); var total_picked = 0; for(order in orders) { - var picked : Int = Std.parseInt(order.to_pick); - var user_picked : Int = 0; - if(parameters != null) user_picked = parameters.to_pick(order); - total_picked += user_picked == null ? picked : user_picked; + total_picked += toPick(order); } left -= total_picked; + if(left<0) FA.error('There is more items to pick than in stock'); formatLocation(location, "Initial", left); // We display the order ordered by priority @@ -145,6 +143,9 @@ class ItemScheduler { for(order in orders) { var quantity : Int = Std.parseInt(order.quantity); + // We don't need to remove the quantity which is picked + // as we have already counted it in the initial location calculation. + quantity -= toPick(order); while(0 >= left && locationIter.hasNext()) { location = locationIter.next(); @@ -190,7 +191,8 @@ class ItemScheduler { var row_id = orderId(order); var attributes = ['id = "'+row_id+'"']; var classes = []; - var before : Int = left + order.quantity; + var to_pick = toPick(order); + var before : Int = left + order.quantity- to_pick; /* We have basically 3 different cases; * - the order can be fullfilled * - the order can be partially @@ -212,7 +214,10 @@ class ItemScheduler { */ var required_by : Date = FA.sql2date(order.required_date); if(required_by == null) required_by = FA.sql2date(order.expiry_date); - if(required_by != null && required_by.getTime() < date.getTime()) { + if(to_pick > 0) { + classes.push('picked'); + } + else if(required_by != null && required_by.getTime() < date.getTime()) { classes.push('late'); } else { @@ -254,7 +259,7 @@ class ItemScheduler { var maxQuantity = order.quantity; var quantity = order.to_pick; var available = order.quantity > left ? left : order.quantity; - var user_pick = parameters == null ? quantity : parameters.to_pick(order); + var user_pick = parameters == null ? quantity : parameters.toPick(order); if (user_pick == null) user_pick = 0; if(maxQuantity > 12) { return ''; @@ -417,6 +422,13 @@ public function action() { } } +public function toPick(order) { + var picked : Int = Std.parseInt(order.to_pick); + var user_picked : Int = null; + if(parameters != null) user_picked = parameters.toPick(order); + return user_picked == null ? picked : user_picked ; +} + } diff --git a/hincludes/lib/FA.class.php b/hincludes/lib/FA.class.php index 535f250..3eb220d 100644 --- a/hincludes/lib/FA.class.php +++ b/hincludes/lib/FA.class.php @@ -19,5 +19,8 @@ class FA { static function pick_query() { return pick_query(); } + static function error($message) { + return display_error($message); + } function __toString() { return 'FA'; } } diff --git a/hincludes/lib/ItemScheduler.class.php b/hincludes/lib/ItemScheduler.class.php index e56104c..d74be7b 100644 --- a/hincludes/lib/ItemScheduler.class.php +++ b/hincludes/lib/ItemScheduler.class.php @@ -8,6 +8,14 @@ class ItemScheduler { $this->parameters = $parameters; $this->qoh = get_qoh_on_date($this->stock_id, $startLocation); }} + public function toPick($order) { + $picked = Std::parseInt($order->to_pick); + $user_picked = null; + if($this->parameters !== null) { + $user_picked = $this->parameters->toPick($order); + } + return (($user_picked === null) ? $picked : $user_picked); + } public function action() { if($this->parameters !== null && $this->parameters->mode == ScheduleMode::$Update) { $this->update(); @@ -103,7 +111,7 @@ class ItemScheduler { $maxQuantity = $order->quantity; $quantity = $order->to_pick; $available = ItemScheduler_3($this, $left, $maxQuantity, $order, $quantity, $row_id); - $user_pick = (($this->parameters === null) ? $quantity : $this->parameters->to_pick($order)); + $user_pick = (($this->parameters === null) ? $quantity : $this->parameters->toPick($order)); if($user_pick === null) { $user_pick = 0; } @@ -139,7 +147,8 @@ class ItemScheduler { $row_id = ItemScheduler::orderId($order); $attributes = new _hx_array(array("id = \"" . $row_id . "\"")); $classes = new _hx_array(array()); - $before = $left + $order->quantity; + $to_pick = $this->toPick($order); + $before = $left + $order->quantity - $to_pick; if($before < 0) { $classes->push("soldout"); } else { @@ -153,17 +162,21 @@ class ItemScheduler { if($required_by === null) { $required_by = FA::sql2date($order->expiry_date); } - if($required_by !== null && $required_by->getTime() < $date->getTime()) { - $classes->push("late"); + if($to_pick > 0) { + $classes->push("picked"); } else { - $hold_until = FA::sql2date($order->hold_until_date); - if($hold_until === null) { - $hold_until = FA::sql2date($order->delivery_date); - } - if($hold_until->getTime() - FA::preHoldOffset() > $date->getTime()) { - $classes->push("early"); + if($required_by !== null && $required_by->getTime() < $date->getTime()) { + $classes->push("late"); } else { - $classes->push("on_time"); + $hold_until = FA::sql2date($order->hold_until_date); + if($hold_until === null) { + $hold_until = FA::sql2date($order->delivery_date); + } + if($hold_until->getTime() - FA::preHoldOffset() > $date->getTime()) { + $classes->push("early"); + } else { + $classes->push("on_time"); + } } } $expiry_date = FA::sql2date($order->expiry_date); @@ -208,16 +221,14 @@ class ItemScheduler { while($_g < $orders->length) { $order = $orders[$_g]; ++$_g; - $picked = Std::parseInt($order->to_pick); - $user_picked = 0; - if($this->parameters !== null) { - $user_picked = $this->parameters->to_pick($order); - } - $total_picked += (($user_picked === null) ? $picked : $user_picked); - unset($user_picked,$picked,$order); + $total_picked += $this->toPick($order); + unset($order); } } $left -= $total_picked; + if($left < 0) { + FA::error("There is more items to pick than in stock"); + } $this->formatLocation($location, "Initial", $left); { $_g = 0; @@ -225,6 +236,7 @@ class ItemScheduler { $order = $orders[$_g]; ++$_g; $quantity = Std::parseInt($order->quantity); + $quantity -= $this->toPick($order); while(0 >= $left && $locationIter->hasNext()) { $location = $locationIter->next(); $quantityForLocation = $location->quantityOnHand($this->stock_id, null) + $location->quantityOnOrder($this->stock_id); diff --git a/hincludes/lib/ScheduleParameters.class.php b/hincludes/lib/ScheduleParameters.class.php index 29f8f7f..b3f8435 100644 --- a/hincludes/lib/ScheduleParameters.class.php +++ b/hincludes/lib/ScheduleParameters.class.php @@ -35,7 +35,7 @@ class ScheduleParameters { $orderPosition = $this->position($orderId); return (($orderPosition !== null) ? $orderPosition : $order->priority->getTime()); } - public function to_pick($order) { + public function toPick($order) { $orderId = ItemScheduler::orderId($order); if($this->rowDetails === null) { return null; -- 2.30.2