/** * Sort and get all the realtive prices of Model_Shipping_Item object (using relative_price method) * @param array $items * @return array Jam_Price objects */ public static function relative_prices(array $items) { Array_Util::validate_instance_of($items, 'Model_Shipping_Item'); $items = Model_Shipping_Item::sort_by_price($items); $prices = array_map(function ($item, $index) { return $index == 0 ? $item->total_price() : $item->total_additional_item_price(); }, $items, array_keys($items)); return $prices; }
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_relative_prices * @covers Model_Shipping_Item::relative_prices */ public function test_relative_prices($params, $expected) { $items = $this->getMockModelArray('shipping_item', $params); $prices = Model_Shipping_Item::relative_prices($items); $this->assertEquals($expected, $prices); }
/** * @codeCoverageIgnore */ public static function initialize(Jam_Meta $meta) { parent::initialize($meta); $meta->table('shipping_items')->associations(array('shipping_external_data' => Jam::association('belongsto', array('inverse_of' => 'shipping_items')))); }