Use hold_until_date in item_scheduler.
[order_line_extra.git] / includes / splitter.inc
index 1350f9f297f92966e1014e3c53abe06c7edb37a4..e2138e8c492160d544dd1a0e2bfb464b0d3bd8fe 100644 (file)
@@ -45,6 +45,8 @@ class Splitter {
        public $detail_ids = array() ;
        public $start_date;
        public $end_date;
+       public $start_offset;
+       public $end_offset;
        protected $days;
        public $max_quantity;
 
@@ -55,6 +57,8 @@ class Splitter {
                }
                $this->start_date = $data['start_date'];
                $this->end_date = $data['end_date'];
+               $this->start_offset = $data['start_offset'];
+               $this->end_offset = $data['end_offset'];
                $this->days = date_diff2($this->end_date, $this->start_date, 'd');
 
                $this->max_quantity = $data['max_quantity'];
@@ -74,6 +78,7 @@ class Splitter {
 display_warning("processing $detail_id");
                                $detail = $this->loadDetail($detail_id);
                                $splits = $this->split($detail);
+                               foreach($splits as $split) $this->alterSplit($split);
                                $ok &= $this->saveSplits($detail, $splits);
                }
 
@@ -131,11 +136,25 @@ display_warning("processing $detail_id");
                return $splits;
        }
 
+       function alterSplit($split) {
+               foreach(explode(' ', 'start end') as $att) {
+                       $date = "${att}_date";
+                       $offset = "${att}_offset";
+                       if($this->$offset === null || $this->$offset === "") {
+                               $split->$date = null;
+                       }
+                       else {
+                               $split->$date = add_days($split->$date, $this->$offset);
+                       }
+               }
+       }
+
        public function saveSplits($detail, $splits) {
                if(empty($splits)) return true;
 
                $detail_id = $detail['id'];
                $priority = $detail['priority'];
+               $priority_offset = 1;
                $order_no = $detail['order_no'];
                $trans_type = $detail['trans_type'];
 
@@ -146,8 +165,7 @@ display_warning("processing $detail_id");
                $set = new SqlSet();
                $set->addDate($first->start_date, 'hold_until_date')
                                ->addDate($first->end_date, 'expiry_date')
-                               ->add($first->quantity, 'quantity', false)
-                               ->add($priority, 'priority');
+                               ->add($first->quantity, 'quantity', false);
        display_warning($set->toString());
                db_query("UPDATE ".TB_PREF."sales_order_details
                                                        SET {$set->toString()}
@@ -156,7 +174,6 @@ display_warning("processing $detail_id");
                // Compute common field for each split
                $common_set  = new SqlSet();
                $common_set->add($order_no, 'order_no', false)
-                               ->add($priority, 'priority')
                                ->add($trans_type, 'trans_type')
                                ->add($detail['required_date'], 'required_date')
                                ->add($detail['comment'], 'comment')
@@ -172,8 +189,10 @@ display_warning("processing $detail_id");
                                ->add($split->quantity, 'quantity', false);
        display_warning($set->toString());
                db_query("INSERT INTO ".TB_PREF."sales_order_details
-                                                       SET {$set->toString()}"
+                                                       SET {$set->toString()}
+                                                       , priority = '$priority' + INTERVAL ${priority_offset} second"
                                                 ,"Problem spliting order details $detail_id");
+                               $priority_offset++;
                }
 
                return true;