/** * Load rates from known delivery zone * * @param DeliveryZone $deliveryZone * @param bool $loadReferencedRecords * * @return ARSet */ public static function getRecordSetByDeliveryZone(DeliveryZone $deliveryZone = null, $loadReferencedRecords = array('Tax')) { $filter = new ARSelectFilter(); if (!$deliveryZone || $deliveryZone->isDefault()) { $filter->setCondition(new IsNullCond(new ARFieldHandle(__CLASS__, "deliveryZoneID"))); } else { $filter->setCondition(new EqualsCond(new ARFieldHandle(__CLASS__, "deliveryZoneID"), $deliveryZone->getID())); } return self::getRecordSet($filter, $loadReferencedRecords); }
public function testTaxClasses() { // default tax level TaxRate::getNewInstance($this->deliveryZone, $this->tax, 20)->save(); // diferent tax rate for books $books = TaxClass::getNewInstance('Books'); $books->save(); $booksRate = TaxRate::getNewInstance($this->deliveryZone, $this->tax, 10); $booksRate->taxClass->set($books); $booksRate->save(); // price = 100 $cd = $this->product; $book = Product::getNewInstance(Category::getRootNode()); $book->setPrice('USD', 50); $book->isEnabled->set(true); $book->taxClass->set($books); $book->save(); // shipping tax class $shpClass = TaxClass::getNewInstance('Shipping'); $shpClass->save(); $shippingTaxRate = TaxRate::getNewInstance($this->deliveryZone, $this->tax, 17); $shippingTaxRate->taxClass->set($shpClass); $shippingTaxRate->save(); $this->getApplication()->getConfig()->setRuntime('DELIVERY_TAX_CLASS', $shpClass->getID()); $order = CustomerOrder::getNewInstance($this->user); $order->addProduct($cd, 1, true); $order->addProduct($book, 1, true); $order->currency->set($this->currency); $order->shippingAddress->set($this->address); $order->save(); $this->assertEqual($order->getDeliveryZone()->getID(), $this->deliveryZone->getID()); //$order->finalize(); $this->assertEqual($order->getTotal(true), 120 + 55); $this->assertEqual($order->getTaxAmount(), 25); $service = ShippingService::getNewInstance($this->deliveryZone, 'def', ShippingService::SUBTOTAL_BASED); $service->save(); $shippingRate = ShippingRate::getNewInstance($service, 0, 10000000); $shippingRate->flatCharge->set(100); $shippingRate->save(); $shipment = $order->getShipments()->get(0); $rates = $order->getDeliveryZone()->getShippingRates($shipment); $shipment->setAvailableRates($rates); $shipment->setRateId($rates->get(0)->getServiceID()); $shipment->save(); $this->assertEqual($order->getTaxAmount(), 42); $this->assertEqual($order->getTotal(true), 120 + 55 + 117); }
private function getFieldName(DeliveryZone $zone = null, TaxClass $class = null) { $classID = $class ? $class->getID() : '-1'; $zoneID = $zone ? $zone->getID() : '-1'; if ($classID == 0) { $classID = -1; } if ($zoneID == 0) { $zoneID = -1; } return 'taxRate_' . $zoneID . '_' . $classID; }
/** * @param DeliveryZone $zone * * @return ARSet */ public static function getRecordSetByZone(DeliveryZone $zone, $loadReferencedRecords = false) { $filter = new ARSelectFilter(); $filter->setCondition(new EqualsCond(new ARFieldHandle(__CLASS__, 'deliveryZoneID'), $zone->getID())); return self::getRecordSet(__CLASS__, $filter, $loadReferencedRecords); }
public static function removeByZone(DeliveryZone $zone) { $filter = new ARDeleteFilter(); $filter->setCondition(new EqualsCond(new ARFieldHandle(__CLASS__, 'deliveryZoneID'), $zone->getID())); return ActiveRecord::deleteRecordSet(__CLASS__, $filter); }