/** * Return items, grouped by brand_purchase_id * @param array $items array of Purchase_Items * @return array */ public static function group_by_brand_purchase(array $items) { $items = Jam_Array_Model::factory()->model('purchase_item')->load_fields($items)->set($items); return Array_Util::group_by($items, function ($item) { return $item->brand_purchase_id; }); }
public function model_call_group_shipping_methods(Model_Brand_Purchase $brand_purchase, Jam_Event_Data $data) { $items = $brand_purchase->items(array('can_ship' => TRUE)); $groups = Array_Util::group_by($items, function ($item) use($brand_purchase) { $item->methods_for_location = $item->get_insist('reference')->shipping()->methods_for($brand_purchase->shipping_country()); return join(',', array_keys($item->methods_for_location)); }); $data->return = array_map(function ($group) use($brand_purchase) { $methods = $group[0]->methods_for_location; return new Group_Shipping_Methods($brand_purchase->shipping, $methods, $group); }, $groups); }
public function total_price() { $total = $this->total_purchase_price(); $items = $this->available_items(); $items = Model_Shipping_Item::filter_discounted_items($items, $total); $groups = Array_Util::group_by($items, function ($item) { return $item->group_key(); }); $group_prices = array_map(function ($grouped_items) use($total) { $prices = Model_Shipping_Item::relative_prices($grouped_items); return Jam_Price::sum($prices, $total->currency(), $total->monetary(), $total->display_currency()); }, $groups); return Jam_Price::sum($group_prices, $total->currency(), $total->monetary(), $total->display_currency()); }
/** * @dataProvider data_group_by * @covers Array_Util::group_by */ public function test_group_by($array, $callback, $preserve_keys, $result) { $this->assertEquals($result, Array_Util::group_by($array, $callback, $preserve_keys)); }