public function __construct(\Order $order, $context = array()) { $this->order = $order; // get qualifying discounts for this order $this->discounts = \Discount::get_matching($this->order, $context); $this->modifier = $this->order->getModifier("OrderDiscountModifier", true); }
function testItemLevelPercentAndAmountDiscounts() { OrderDiscount::create(array("Title" => "10% off", "Type" => "Percent", "Percent" => 0.1))->write(); OrderDiscount::create(array("Title" => "\$5 off", "Type" => "Amount", "Amount" => 5))->write(); //check that discount matches order $matching = Discount::get_matching($this->cart); $this->assertDOSEquals(array(array("Title" => "10% off"), array("Title" => "\$5 off")), $matching); $calculator = new Calculator($this->emptycart); $this->assertEquals(0, $calculator->calculate(), "nothing in cart"); //check that best discount was chosen $calculator = new Calculator($this->cart); $this->assertEquals(5, $calculator->calculate(), "\$5 off \$8 is best discount"); $calculator = new Calculator($this->othercart); $this->assertEquals(20, $calculator->calculate(), "10% off \$400 is best discount"); //total discount calculation //20 * socks($8) = 160 ...$5 off each = 100 //10 * tshirt($25) = 250 ..$5 off each = 50 //2 * mp3player($200) = 400 ..10% off each = 40 //total discount: 190 $calculator = new Calculator($this->megacart); $this->assertEquals(190, $calculator->calculate(), "complex savings example"); $this->assertDOSEquals(array(array("Title" => "10% off"), array("Title" => "\$5 off")), $this->megacart->Discounts()); }