예제 #1
0
파일: TaxRate.php 프로젝트: saiber/www
 /**
  * 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);
 }
예제 #2
0
 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);
 }
예제 #3
0
 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;
 }
예제 #4
0
 /**
  * @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);
 }
예제 #5
0
 public static function removeByZone(DeliveryZone $zone)
 {
     $filter = new ARDeleteFilter();
     $filter->setCondition(new EqualsCond(new ARFieldHandle(__CLASS__, 'deliveryZoneID'), $zone->getID()));
     return ActiveRecord::deleteRecordSet(__CLASS__, $filter);
 }