$quantity = $row['quantity'];
$quantity_sent = $row['qty_sent'];
- if($quantity >= $quantity_sent) return $splits;
- if(($quantity-$quantity_sent) % $this->max_quantity < $this->max_quantity) return;
+ /* Check if the item has been fully dispatched.
+ * If so, there is no need to do anything.
+ */
+ if($quantity_sent >= $quantity) return $splits;
// determine the number of split needed. This will give us the lenght of a split.
- $nsplit = ceiling($initial_quantity/$this->max_quantity);
- if($nsplit == 1) return $splits;
+ $nsplit = ceil($quantity/$this->max_quantity);
$period = $this->days/$nsplit;
- array_push($splits, $split = new Split($start_date, $period));
- $split->quantity_dispatched = $quantity_dispatched;
+ array_push($splits, $split = new Split($this->start_date, $period));
+ $split->quantity_dispatched = $quantity_sent;
$split_quantity = min($quantity, $this->max_quantity);
while($split_quantity > 0) {
$split->quantity += $split_quantity;
// Check if the split has been entirely dispatch or not.
- if($split->$quantity_dispatched > $split->quantity) {
+ if($split->quantity_dispatched > $split->quantity) {
//extend the split
$split->extend($period);
}
$split_quantity = min($quantity, $this->max_quantity);
}
+ // We need to remove the last split if it's empty
+ if($split->quantity == 0) array_pop($splits);
return $splits;
}
* @depends testConstruct
*/
public function testSplit($splitter) {
- $this->assertSplit($splitter, 5, 0, array());
- $this->assertSplit($splitter, 15, 11, array());
- $this->assertSplit($splitter, 30, 24, array());
- $this->assertSplit($splitter, 10, 0
- ,array("6 0 2013/05/01 2013/05/16"
- ,"4 0 2013/05/16 2013/05/31"));
- $this->assertSplit($splitter, 18, 10
- ,array(" 12 10 2013/05/01 2013/05/21"
- ,"6 0 2013/05/21 2013/05/31"));
+ $this->assertSplit($splitter, 15, 15, array());
+ $this->assertSplit($splitter, 5, 0, array("5 0 2013/05/01 2013/05/31"));
+ $this->assertSplit($splitter, 15, 11, array("12 11 2013/05/01 2013/05/21",
+ "3 0 2013/05/21 2013/05/31"));
+ $this->assertSplit($splitter, 31, 0, array("6 0 2013/05/01 2013/05/06",
+ "6 0 2013/05/06 2013/05/11",
+ "6 0 2013/05/11 2013/05/16",
+ "6 0 2013/05/16 2013/05/21",
+ "6 0 2013/05/21 2013/05/26",
+ "1 0 2013/05/26 2013/05/31",));
+ $this->assertSplit($splitter, 30, 24, array("24 24 2013/05/01 2013/05/25",
+ "6 0 2013/05/25 2013/05/31"));
+ $this->assertSplit($splitter, 10, 0 ,array("6 0 2013/05/01 2013/05/16"
+ ,"4 0 2013/05/16 2013/05/31"));
+ $this->assertSplit($splitter, 18, 10 ,array("12 10 2013/05/01 2013/05/21"
+ ,"6 0 2013/05/21 2013/05/31"));
}
public function assertSplit(Splitter $splitter, $quantity, $quantity_dispatched, array $expected_splits) {
$splits = $splitter->split(array('quantity' => $quantity, 'qty_sent' => $quantity_dispatched));
+ //print_r($splits);
if(empty($expected_splits)) return $this->assertEmpty($splits);
- foreach(array_combine($expected_splits, $splits) as $ex => $split) {
- $this->assertEquals(explode(" ", $ex), array($split->quantity
- ,$split->quantity_dispatched
- ,$split->start_date
- ,$split->end_date));
-
- }
+ $this->assertEquals(array_map(function($ex) {
+ return explode(" ", $ex);
+ }, $expected_splits)
+ , array_map(function ($split) {
+ return array($split->quantity, $split->quantity_dispatched, $split->start_date, $split->end_date);
+ }, $splits));
}
}
?>