+using DateTools;
+
+typedef Detail = {
+ id : String,
+ quantity : Int,
+ position : Int,
+}
+
+typedef Order = {
+ id:String
+ ,quantity:String
+ ,priority:Date
+ ,delivery_date:String
+
+}
+
+enum ScheduleMode {
+ Update;
+ Cancel;
+ Move;
+}
+
+class ScheduleParameters {
+ var row_id : String;
+ var rowDetails: Hash<Detail>;
+ public var mode:ScheduleMode;
+
+ function new(rawData : Dynamic) {
+ var data = php.Lib.hashOfAssociativeArray(rawData);
+ row_id = data.get('row_id');
+ var raw_order : Dynamic = data.get('row_order');
+ mode = ScheduleMode.Move;
+
+ var row_ids = php.Lib.toHaxeArray(raw_order);
+ if (row_ids!= null) {
+ rowDetails = new Hash<Detail>();
+ var position = 1;
+ for(id in row_ids) {
+ var d : Dynamic = data.get(id);
+
+ var quantity : Int = null;
+ if(d != null) {
+ var o = php.Lib.objectOfAssociativeArray(d);
+ quantity = Std.parseInt(o.quantity);
+ }
+
+
+ rowDetails.set(id, {
+ id: id
+ ,quantity: quantity
+ ,position: position
+ });
+ position+=1;
+ }
+ }
+ }
+
+ public function setMode(action:String) {
+ mode = switch(action) {
+ case "update" :
+ ScheduleMode.Update;
+ case "cancel" :
+ ScheduleMode.Cancel;
+ default:
+ ScheduleMode.Move;
+ };
+ }
+
+ public function position(id: String) : Null<Int> {
+ if(rowDetails == null) return null;
+ return rowDetails.get(id).position;
+
+ }
+
+ public function priority(order : {id: String, priority: Date}) : Int {
+ var orderId = ItemScheduler.orderId(order);
+ var orderPosition = position(orderId);
+ return orderPosition != null ? orderPosition : cast(order.priority.getTime(), Int);
+ }
+}
+