Formatting table
[order_line_extra.git] / haxe / ItemScheduler.hx
index ea59cd19bb8d46e50d00748f1174360c5c92eb6a..0446983596a2f12764dfdbf93fc2745addcc8557 100644 (file)
@@ -54,34 +54,85 @@ class ItemScheduler {
        }
 
        function tableHeader() {
-               return ["Order", "Customer", "Quantity", "Left", "On Hand", "Loc", "Required Date"];
+               return ["Order", "Customer", "Quantity", "Before", "After", "Loc", "Required Date"];
        }
 
+/*
        function generateTablex(): Void {
                for(location in locations()) {
-                       formatLocation(location);
+                       formatLocation(location, null);
                }
                for(order in this.orders()) {
                        this.formatRow(order);
                }
        }
+*/
 
        function generateTable(): Void {
-                       var schedules  = [];
                        var startDate = Date.fromTime(0);
                        for(order in orders()) {
                                        var obj = php.Lib.objectOfAssociativeArray(order);
-                                       schedules.push({date: Date.fromString(obj.delivery_date), order:order, location:null});
+
                        }       
-                       for(location in locations()) {
-                               schedules.push({date:  if(location.code == startLocation) startDate else location.delivery, order:null, location:location});
+
+                       // Sort location by datae
+                       var locations = this.locations();
+                       locations.sort(function(a, b) {
+                               return cast(a.delivery.getTime() - b.delivery.getTime(), Int );
+                               });
+
+               // Get the start location, it should be the first one
+               var locationIter = locations.iterator();
+               var location  = locationIter.next();
+               var qoh : Int = location.quantityOnHand(stock_id, null);
+               var left = qoh;
+               formatLocation(location, "Initial", left);
+
+               // We display the order ordered by priority 
+               // But insert the location when needed (meaning
+               // when we run out of item available
+               for(orderRow in orders()) {
+                       var order = php.Lib.objectOfAssociativeArray(orderRow);
+                       var quantity : Int = Std.parseInt(order.quantity);
+
+                       while(quantity > left && locationIter.hasNext()) {
+                               location = locationIter.next();
+                               var quantityForLocation : Int = location.quantityOnHand(stock_id, null);
+                               if(quantityForLocation == null || quantityForLocation == 0) continue;
+                               left += quantityForLocation;
+                               formatLocation(location, "Delivery", left);
                        }
+                       left -= quantity;
+
+                       formatOrder(order, left);
                        
-                       schedules.sort(function(a,b ) { return cast(a.date.getTime() - b.date.getTime(), Int) ; });
-                       for(schedule in schedules) {
-                               if(schedule.order != null) formatRow(schedule.order);
-                               if(schedule.location != null) formatLocation(schedule.location);
-                       }
+               }
+                       
+       }
+
+       function printRow(tds : Array<Dynamic>, attributes : Array<String>) {
+               php.Lib.print('<tr "'+attributes.join(' ')+'">');
+               for(td in tds) {
+                       php.Lib.print('<td>');
+                       php.Lib.print(td);
+                       php.Lib.print('</td>');
+               }
+               php.Lib.print('</tr>');
+       }
+
+       function formatOrder(order : Dynamic, left : Int) {
+                       var attributes = [];
+                       var cells : Array <Dynamic> = [
+                               order.order_id
+                               ,order.deliver_to
+                               ,order.quantity
+                               ,left
+                               ,left+order.quantity
+                               ,order.from_stk_code
+                               ,order.delivery_date
+                       ];
+                       printRow(cells, attributes);
+
        }
 
        function formatRow(row) {
@@ -113,11 +164,14 @@ class ItemScheduler {
                
        }
 
-       function formatLocation(location : Location) {
+       function formatLocation(location : Location, type: String,  left : Int) {
                var cells = [
-                       location.code
+                       type
                        ,location.name
                        ,location.quantityOnHand(stock_id, null)
+                       ,left-location.quantityOnHand(stock_id, null)
+                       ,left
+                       ,location.code
                        ,location.delivery
                ];
                var status = 'header';
@@ -156,7 +210,11 @@ class ItemScheduler {
                                                        FROM '+TB+'locations';
                var _locs = [];
                for(row in FA.query(sql)) {
-                       _locs.push(new Location(row));
+                       var location = new Location(row);
+                       if(location.code == startLocation) {
+                        location.delivery =  Date.fromTime(0);
+                       }
+                       _locs.push(location);
                }
 
                return _locs;