Add offsets.
authorMaxime Bourget <bmx007@gmail.com>
Sat, 8 Jun 2013 16:55:27 +0000 (17:55 +0100)
committerMaxime Bourget <bmx007@gmail.com>
Sat, 8 Jun 2013 16:55:37 +0000 (17:55 +0100)
includes/splitter.inc
order_lines_view.php
tests/testSplitter.php

index 1350f9f297f92966e1014e3c53abe06c7edb37a4..06803ed74b305458c775be3911c02e2866634442 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,6 +136,19 @@ 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;
 
index 926a8a9f8859238674bc7372689aa8f3a7d54e2f..065b364486ddc1a88e0a87eebf384218e8d28417 100644 (file)
@@ -112,8 +112,10 @@ display_db_pager($table);
 
 function display_split_area() {
 start_table(TABLESTYLE_NOBORDER);
+qty_cells('Before', 'start_offset', -5);
 date_cells('Start', 'start_date');
 date_cells('End', 'end_date');
+qty_cells('After', 'end_offset', 2);
 qty_cells('Max', 'max_quantity', 6);
 submit_cells('Split', 'Split');
 end_table();
index 2f5479e43660065961db304aacb823acae09d57f..45cc5b79f731d4987b8779ae4377f2571d812d8b 100644 (file)
@@ -11,6 +11,8 @@ class splitterTest extends PHPUnit_Framework_TestCase {
                $splitter = new Splitter(array('detail' => $details
                        ,'start_date'=> $start_date
                        ,'end_date' => $end_date
+                       ,'start_offset' => 0
+                       ,'end_offset' => 0
                        ,'max_quantity' => $max_quantity));
                $this->assertEquals($start_date, $splitter->start_date);
                $this->assertEquals($end_date, $splitter->end_date);
@@ -54,5 +56,27 @@ class splitterTest extends PHPUnit_Framework_TestCase {
                                        return array($split->quantity, $split->quantity_dispatched, $split->start_date, $split->end_date);
                                }, $splits));
        }
+
+       /**
+ * @depends testConstruct
+ */
+       public function testAlter($splitter) {
+                       $this->assertAlter($splitter, '2013/05/01', 0, '2013/05/01');
+                       $this->assertAlter($splitter, '2013/05/01', null, null);
+       }
+
+       public function assertAlter($splitter, $date, $offset, $expected_date) {
+                       $split = new Split('2013/01/01');
+                               $split->start_date = $date;
+                               $splitter->start_offset = $offset;
+                               $split->end_date = $date;
+                               $splitter->end_offset = $offset;
+
+                       $splitter->alterSplit($split);
+
+                       $this->assertEquals($split->start_date, $expected_date);
+                       $this->assertEquals($split->end_date, $expected_date);
+       }
+
 }
 ?>