public function testProducts() { $discount = OrderDiscount::create(array("Title" => "20% off each products", "Percent" => 0.2, "ProductTypes" => "Product")); $discount->write(); $this->assertTrue($discount->validateOrder($this->cart)); $this->assertFalse($discount->validateOrder($this->giftcart)); }
public function applyToOrder(CustomerOrder $order) { $amount = $order->getCurrency()->convertAmount(CustomerOrder::getApplication()->getDefaultCurrency(), $this->getDiscountAmount($order->totalAmount->get())); $orderDiscount = OrderDiscount::getNewInstance($order); $orderDiscount->amount->set($amount); $orderDiscount->description->set($this->parentCondition->getParam('name_lang')); $order->registerOrderDiscount($orderDiscount); }
public function testMembership() { $discount = OrderDiscount::create(array("Title" => "Membership Coupon", "Type" => "Amount", "Amount" => 1.33)); $discount->write(); $member = $this->objFromFixture("Member", "joebloggs"); $discount->Members()->add($member); $this->assertFalse($discount->validateOrder($this->cart), "Invalid, because no member"); $context = array("Member" => $this->objFromFixture("Member", "bobjones")); $this->assertFalse($discount->validateOrder($this->cart, $context), "Invalid because wrong member present"); $context = array("Member" => $member); $this->assertTrue($discount->validateOrder($this->cart, $context), "Valid because correct member present" . $discount->getMessage()); }
public static function getDisOrdertype($id) { $OrganID = Yii::app()->user->getOrganID(); $model = OrderDiscount::model()->find("OrganID={$OrganID} and ID={$id}")->attributes; if ($model['OrderType'] == 1) { return '商城订单'; } else { if ($model['OrderType'] == 2) { return '询价单订单'; } else { $model['OrderType'] == 3; return '报价单订单'; } } }
public function testCategoryDiscount() { $discount = OrderDiscount::create(array("Title" => "5% off clothing", "Type" => "Percent", "Percent" => 0.05)); $discount->write(); $discount->Categories()->add($this->objFromFixture("ProductCategory", "clothing")); $this->assertTrue($discount->validateOrder($this->cart), "Order contains a t-shirt. " . $discount->getMessage()); $calculator = new Calculator($this->cart); $this->assertEquals($calculator->calculate(), 0.4, "5% discount for socks in cart"); $this->assertFalse($discount->validateOrder($this->othercart), "Order does not contain clothing"); $calculator = new Calculator($this->othercart); $this->assertEquals($calculator->calculate(), 0, "No discount, because no product in category"); $discount->Categories()->removeAll(); $discount->Categories()->add($this->objFromFixture("ProductCategory", "kites")); $this->assertTrue($discount->validateOrder($this->kitecart), "Order contains a kite. " . $discount->getMessage()); $calculator = new Calculator($this->kitecart); $this->assertEquals($calculator->calculate(), 1.75, "5% discount for kite in cart"); }
function testProductDiscount() { $discount = OrderDiscount::create(array("Title" => "20% off each selected products", "Percent" => 0.2, "Active" => 1, "ExactProducts" => 1)); $discount->write(); //selected products $discount->Products()->add($this->socks); $discount->Products()->add($this->tshirt); //should work for megacart //20 * socks($8) = 160 ...20% off each = 32 //10 * tshirt($25) = 250 ..20% off each = 50 //2 * mp3player($200) = 400 ..nothing off = 0 //total discount: 82 $calculator = new Calculator($this->megacart); $this->assertEquals(82, $calculator->calculate(), "20% off selected products"); //no discount for cart $calculator = new Calculator($this->cart); $this->assertEquals(0, $calculator->calculate(), "20% off selected products"); //no discount for modifiedcart $calculator = new Calculator($this->modifiedcart); $this->assertEquals(0, $calculator->calculate(), "20% off selected products"); //partial match $discount->ExactProducts = 0; $discount->write(); //total discount: 82 $calculator = new Calculator($this->megacart); $this->assertEquals(82, $calculator->calculate(), "20% off selected products"); //discount for cart: 32 (just socks) $calculator = new Calculator($this->cart); $this->assertEquals(1.6, $calculator->calculate(), "20% off selected products"); //no discount for modified cart $calculator = new Calculator($this->modifiedcart); $this->assertEquals(0, $calculator->calculate(), "20% off selected products"); //get individual item discounts $discount = $this->objFromFixture("Product_OrderItem", "megacart_socks")->Discounts()->first(); $this->assertEquals(32, $discount->DiscountAmount); $this->markTestIncomplete("Test variations also"); }
public function registerOrderDiscount(OrderDiscount $discount) { $this->orderDiscounts[$discount->getID()] = $discount; }
public function testFixedDiscountWithTaxesAndDeliveryZone() { $this->createOrderWithZone(); $this->order->addProduct($this->products[0]); $this->order->save(); $shipment = $this->order->getShipments()->get(0); $rates = $this->order->getDeliveryZone()->getShippingRates($shipment); $shipment->setAvailableRates($rates); $shipment->setRateId($rates->get(0)->getServiceID()); $shipment->save(); $initTotal = $this->order->getTotal(true); $initTax = $this->order->getTaxAmount(); $discount = OrderDiscount::getNewInstance($this->order); $discount->amount->set(10); $discount->save(); $this->assertEquals((int) $this->order->getTotal(true), (int) ($initTotal - 10)); $tax = $this->order->getTaxAmount(); $expectedTax = 110 / 6 + 20; $this->assertEquals(round($expectedTax, 2), round($tax, 2)); }
public static function getDisOrdertype($id) { $model = OrderDiscount::model()->find("ID={$id}")->attributes; if ($model['OrderType'] == 1) { return '商城订单'; } else { if ($model['OrderType'] == 2) { return '询价单订单'; } } }
public function testShippingAndCartLevels() { if (!class_exists('ShippingFrameworkModifier')) { return; } $order = $this->othercart; //$200 $shipping = new ShippingFrameworkModifier(array('Amount' => 30, 'OrderID' => $order->ID)); $shipping->write(); $order->Modifiers()->add($shipping); //order total is $230 $discount = OrderDiscount::create(array("Title" => "\$10 off entire order", "Type" => "Amount", "Amount" => 10, "ForShipping" => 1, "ForItems" => 0, "ForCart" => 1)); $discount->write(); $calculator = new Calculator($order); $this->assertTrue($discount->validateOrder($order), "Discount is valid"); $this->assertEquals(10, $calculator->calculate(), "\$10 is maximum discount"); }
public function testAmount() { OrderDiscount::create(array("Title" => "\$5 off", "Type" => "Amount", "Amount" => 5))->write(); $this->assertDOSEquals(array(array("Title" => "\$5 off")), OrderDiscount::get_matching($this->cart)); }