Call hooks on split.
[order_line_extra.git] / haxe / ItemScheduler.hx
index d01c9602be47f960acb9378d5bd4330bcad1bae5..274f562b256a1999e3a04296c2a6d3686f73473c 100644 (file)
@@ -1,4 +1,5 @@
 import php.Lib;
+using DateTools;
 
 typedef Detail = {
        id : String,
@@ -89,7 +90,7 @@ class ItemScheduler {
                this.stock_id = stock_id;
                this.startLocation = startLocation;
                this.parameters = parameters;
-               qoh =  untyped __call__('get_qoh_on_date', this.stock_id, 'DEF');
+               qoh =  untyped __call__('get_qoh_on_date', this.stock_id, startLocation);
        }
 
        function tableHeader() {
@@ -102,7 +103,13 @@ class ItemScheduler {
                // Sort location by date
                var locations = this.locations();
                locations.sort(function(a, b) {
-                               return cast(a.delivery.getTime() - b.delivery.getTime(), Int );
+                       var as = a.delivery.getTime();
+                       var bs = b.delivery.getTime();
+                       if(as < bs) 
+                               return -1;
+                       else if(as > bs)
+                               return 1;
+                       else return 0;
                                });
 
                // Get the start location, it should be the first one
@@ -118,10 +125,10 @@ class ItemScheduler {
                for(order in orders()) {
                        var quantity : Int = Std.parseInt(order.quantity);
 
-                       while(0 > left && locationIter.hasNext()) {
+                       while(0 >= left && locationIter.hasNext()) {
                                location = locationIter.next();
-                               var quantityForLocation : Int = location.quantityOnHand(stock_id, null);
-                               if(quantityForLocation == null || quantityForLocation == 0) continue;
+                               var quantityForLocation : Int = location.quantityOnHand(stock_id, null) + location.quantityOnOrder(stock_id);
+                               if(quantityForLocation == null || quantityForLocation == 0 || location.delivery == null) continue;
                                left += quantityForLocation;
                                formatLocation(location, "Delivery", left);
                        }
@@ -131,7 +138,7 @@ class ItemScheduler {
 
                }
                // display the left locations
-                       while(0 > left && locationIter.hasNext()) {
+                       while(0 >= left && locationIter.hasNext()) {
                                location = locationIter.next();
                                var quantityForLocation : Int = location.quantityOnHand(stock_id, null);
                                if(quantityForLocation == null || quantityForLocation == 0) continue;
@@ -213,7 +220,7 @@ class ItemScheduler {
                        ,left-location.quantityOnHand(stock_id, null)
                        ,left
                        ,location.code
-                       ,location.delivery
+                       ,location.delivery.getTime() == 0 ? '' : location.delivery.format("%F")
                        ,""
                        ,""
                        ];
@@ -232,7 +239,7 @@ return cast(locations(), Array<Dynamic>);
 
 private function loadOrders() {
        var tb : String =  untyped __php__('TB_PREF');
-       var sql : String = "SELECT *  , d.priority AS pp
+       var sql : String = "SELECT *  , d.quantity as qty,   d.priority AS pp
                FROM "+tb+"denorm_order_details_queue  d
                JOIN "+tb+"sales_order_details od ON (od.id = d.id)
                JOIN "+tb+"sales_orders so ON (so.order_no = d.order_id)
@@ -252,6 +259,7 @@ function orders():Array<Order>  {
                var a:Dynamic = php.Lib.objectOfAssociativeArray(row);
                var order:Order = a;
                order.priority = Date.fromString(a.pp);
+               order.quantity = a.qty;
                orderList.push(order);
        };
 
@@ -277,6 +285,9 @@ function locations() {
                if(location.code == startLocation) {
                        location.delivery =  Date.fromTime(0);
                }
+               else if(location.delivery == null) {
+               continue;
+               }
                _locs.push(location);
        }
 
@@ -286,6 +297,17 @@ function locations() {
 
 
        function purcharseOrders()  {
+               var TB = FA.tb();
+               var sql = 'SELECT SUM(quantity_ordered - quantity_received) as quantity
+                       into_stock_location AS location
+                       FROM '+TB+'purch_order_details
+                       NATURAL JOIN '+TB+'purch_orders
+                       WHERE item_code = "'+this.stock_id+'"
+                       AND quantity_ordered > quantity_received
+                       GROUP by item_code,delivery_date, into_stock_location
+                       ORDER by delivery_date' ;
+
+               return  FA.query(sql);
        }
 
        public function needsUpdate():Bool {