...
authorMaxime Bourget <bmx007@gmail.com>
Fri, 14 Jun 2013 19:08:29 +0000 (20:08 +0100)
committerMaxime Bourget <bmx007@gmail.com>
Fri, 14 Jun 2013 19:08:29 +0000 (20:08 +0100)
haxe/FA.hx
haxe/ItemScheduler.hx
hincludes/lib/FA.class.php
hincludes/lib/ItemScheduler.class.php
hincludes/lib/ScheduleParameters.class.php

index 54718b38a4cb74ec473f08e28de788be6af58292..a1425f5841489fe19a1e71baf6b77e46227689ed 100644 (file)
@@ -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);
+       }
 }
index 7ca549d9c7df787ea8b4f24c7acd5a0006c3761f..bfa1744533a89751cf39e6a71bed5a10a9a69963 100644 (file)
@@ -74,7 +74,7 @@ class ScheduleParameters {
 
        }
 
-       public function to_pick(order: {id:String}) : Null<Int> {
+       public function toPick(order: {id:String}) : Null<Int> {
                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 '<input type="text" name="'+row_id+'[to_pick]" value="'+user_pick+'">';
@@ -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 ;
+}
+
 
 }
 
index 535f2509470001b39b8f628ebea071a19caafd6e..3eb220d955ff232c3fb1f14a10a2ff40af6e9097 100644 (file)
@@ -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'; }
 }
index e56104ce5111f028937f79f31b6b23eefdc20724..d74be7bb7a233f9f96ca7a56ab426b63e85b8f84 100644 (file)
@@ -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);
index 29f8f7f9cc8b08b2e9fdec6b9faefe12c4d60092..b3f84354a06cc92f303f1a4b1180a2aaca5d4991 100644 (file)
@@ -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;