Example #1
0
 /**
  * @covers Model_Purchase_Item::group_by_brand_purchase
  */
 public function test_group_by_brand_purchase()
 {
     $items = array(Jam::build('purchase_item', array('id' => 10, 'brand_purchase_id' => 1)), Jam::build('purchase_item', array('id' => 20, 'brand_purchase_id' => 1)), Jam::build('purchase_item', array('id' => 30, 'brand_purchase_id' => 12)), array('id' => 40, 'brand_purchase_id' => 13), array('id' => 50, 'brand_purchase_id' => 13), 1, array('id' => 2));
     $groups = Model_Purchase_Item::group_by_brand_purchase($items);
     $this->assertEquals(array('1', '12', '13'), array_keys($groups));
     $this->assertEquals(array(10, 20, 1, 2), $this->ids($groups['1']));
     $this->assertEquals(array(30), $this->ids($groups['12']));
     $this->assertEquals(array(40, 50), $this->ids($groups['13']));
 }
Example #2
0
 /**
  * Replace the purchase items from a given type, removing old items
  *
  * @param  array $items array of new items
  * @param  array $types filters
  * @return Model_Purchase $this
  */
 public function replace_items($items, $types = NULL)
 {
     $grouped = Model_Purchase_Item::group_by_brand_purchase($items);
     $current = $this->brand_purchases->as_array('id');
     $replaced = array_intersect_key($grouped, $current);
     $removed = array_diff_key($current, $grouped);
     foreach ($replaced as $index => $items) {
         $current[$index]->replace_items($items, $types);
     }
     $this->brand_purchases->remove(array_values($removed));
     return $this;
 }