X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=haxe%2FItemScheduler.hx;h=0446983596a2f12764dfdbf93fc2745addcc8557;hb=d4657264166ab67353e9d787d5f8449aa7b997c5;hp=3f6cdc74cb5812b2c4b3e5d956f8fce220b7a948;hpb=a4cfbf7d5564d40db6f9145e225f453a83fe766a;p=order_line_extra.git diff --git a/haxe/ItemScheduler.hx b/haxe/ItemScheduler.hx index 3f6cdc7..0446983 100644 --- a/haxe/ItemScheduler.hx +++ b/haxe/ItemScheduler.hx @@ -45,24 +45,95 @@ class FA { } class ItemScheduler { var stock_id:String; + var startLocation:String; var qoh: Int; - function new(stock_id: String) { + function new(stock_id: String, startLocation) { this.stock_id = stock_id; + this.startLocation = startLocation; qoh = untyped __call__('get_qoh_on_date', this.stock_id, 'DEF'); } function tableHeader() { - return ["Order", "Customer", "Quantity", "Left", "On Hand", "Loc", "Required Date"]; + return ["Order", "Customer", "Quantity", "Before", "After", "Loc", "Required Date"]; } - function generateTable(): Void { +/* + function generateTablex(): Void { for(location in locations()) { - formatLocation(location); + formatLocation(location, null); } for(order in this.orders()) { this.formatRow(order); } } +*/ + + function generateTable(): Void { + var startDate = Date.fromTime(0); + for(order in orders()) { + var obj = php.Lib.objectOfAssociativeArray(order); + + } + + // 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); + + } + + } + + function printRow(tds : Array, attributes : Array) { + php.Lib.print(''); + for(td in tds) { + php.Lib.print(''); + php.Lib.print(td); + php.Lib.print(''); + } + php.Lib.print(''); + } + + function formatOrder(order : Dynamic, left : Int) { + var attributes = []; + var cells : Array = [ + 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) { var array = php.Lib.hashOfAssociativeArray(row); @@ -70,7 +141,6 @@ class ItemScheduler { var quantity_available = qoh - quantity_before; var quantity: Int = array.get('quantity'); - var status : String = if(quantity_available < quantity) 'overduebg'; var cells : Array = [ @@ -94,11 +164,15 @@ 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'; php.Lib.print(''); @@ -110,12 +184,14 @@ class ItemScheduler { php.Lib.print(''); } +/* function schedules() { //return orders()+locations(); //return orders(); return cast(locations(), Array); } +*/ function orders() { var tb : String = untyped __php__('TB_PREF'); @@ -134,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;