Exemple #1
0
 /**
  * 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;
 }
Exemple #2
0
 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());
 }
Exemple #3
0
 /**
  * @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);
 }
Exemple #4
0
 /**
  * @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'))));
 }