コード例 #1
0
ファイル: Zones.php プロジェクト: kirkbauer2/kirkxc
 /**
  * Add elements into the specified zone
  *
  * @param \XLite\Model\Zone $zone Zone object
  * @param array             $data Array of elements: array(<elementType> => array(value1, value2, value3...))
  *
  * @return \XLite\Model\Zone
  */
 public function addElements($zone, $data)
 {
     foreach ($data as $elementType => $elements) {
         if (is_array($elements) && !empty($elements)) {
             foreach ($elements as $elementValue) {
                 $newElement = new \XLite\Model\ZoneElement();
                 $newElement->setElementValue($elementValue);
                 $newElement->setElementType($elementType);
                 $newElement->setZone($zone);
                 $zone->addZoneElements($newElement);
             }
         }
     }
     return $zone;
 }
コード例 #2
0
ファイル: Order.php プロジェクト: kingsj/core
 public function testCalculation()
 {
     $tax = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\VAT\\Model\\Tax')->getTax();
     foreach ($tax->getRates() as $rate) {
         $rate->setTax(null);
         \XLite\Core\Database::getEM()->remove($rate);
     }
     $tax->getRates()->clear();
     $tax = \XLite\Core\Database::getRepo('XLite\\Module\\CDev\\SalesTax\\Model\\Tax')->getTax();
     foreach ($tax->getRates() as $rate) {
         \XLite\Core\Database::getEM()->remove($rate);
     }
     $tax->getRates()->clear();
     $rate = new \XLite\Module\CDev\SalesTax\Model\Tax\Rate();
     $rate->setValue(10);
     $rate->setPosition(1);
     \XLite\Core\Database::getEM()->persist($rate);
     $tax->addRates($rate);
     $rate->setTax($tax);
     \XLite\Core\Database::getEM()->flush();
     $order = $this->getTestOrder();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.1);
     $this->assertEquals($etalon, $cost, 'check tax cost 10%');
     // 10%
     $rate = new \XLite\Module\CDev\SalesTax\Model\Tax\Rate();
     $rate->setValue(20);
     $rate->setPosition(2);
     \XLite\Core\Database::getEM()->persist($rate);
     $tax->addRates($rate);
     $rate->setTax($tax);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.1);
     $this->assertEquals($etalon, $cost, 'check tax cost 10% #2');
     // 20%
     $rate->setPosition(0);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.2);
     $this->assertEquals($etalon, $cost, 'check tax cost 20%');
     // Limit by membership (order)
     $memberships = \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->findAll();
     $membership = array_shift($memberships);
     $membership2 = array_shift($memberships);
     $order->getProfile()->setMembership($membership);
     $rate->setMembership($membership);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.2);
     $this->assertEquals($etalon, $cost, 'check tax cost 20% (membership)');
     // Limit by membership (order and rate)
     $rate->setMembership($membership2);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.1);
     $this->assertEquals($etalon, $cost, 'check tax cost 10% (membership)');
     // Limit by product class (rate)
     $rate->setMembership(null);
     foreach (\XLite\Core\Database::getRepo('XLite\\Model\\ProductClass')->findAll() as $pc) {
         \XLite\Core\Database::getEM()->remove($pc);
     }
     $pc = new \XLite\Model\ProductClass();
     $pc->setName('Test PC');
     \XLite\Core\Database::getEM()->persist($pc);
     $rate->setProductClass($pc);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.1);
     $this->assertEquals($etalon, $cost, 'check tax cost 10% (pc)');
     // Limit by product class (item and rate)
     $order->getItems()->get(0)->getProduct()->addClasses($pc);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.2);
     $this->assertEquals($etalon, $cost, 'check tax cost 20% (pc)');
     // Limit by product class (only item)
     $rate->setProductClass(null);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.2);
     $this->assertEquals($etalon, $cost, 'check tax cost 20% (pc)');
     // Remove test product class
     $order->getItems()->get(0)->getProduct()->getClasses()->removeElement($pc);
     \XLite\Core\Database::getEM()->remove($pc);
     \XLite\Core\Database::getEM()->flush();
     // Zone (order)
     foreach (\XLite\Core\Database::getRepo('XLite\\Model\\Zone')->findAll() as $z) {
         \XLite\Core\Database::getEM()->remove($z);
     }
     $z = new \XLite\Model\Zone();
     $z->setZoneName('Test zone');
     $e = new \XLite\Model\ZoneElement();
     $e->setElementValue('AF');
     $e->setElementType('C');
     $z->addZoneElements($e);
     \XLite\Core\Database::getEM()->persist($z);
     $rate->setZone($z);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.1);
     $this->assertEquals($etalon, $cost, 'check tax cost 10% (zone)');
     // Zone (order and rate)
     $country = \XLite\Core\Database::getRepo('XLite\\Model\\Country')->findOneBy(array('code' => 'AF'));
     $order->getProfile()->getBillingAddress()->setCountry($country);
     \XLite\Core\Database::getEM()->flush();
     $order->calculate();
     $cost = $order->getCurrency()->formatValue($order->getSurchargeSumByType('tax'));
     $etalon = $order->getCurrency()->formatValue($order->getSubtotal() * 0.2);
     $this->assertEquals($etalon, $cost, 'check tax cost 20% (zone)');
 }
コード例 #3
0
ファイル: Zone.php プロジェクト: kingsj/core
 /**
  * testGetZoneAddresses
  *
  * @return void
  * @access public
  * @see    ____func_see____
  * @since  1.0.0
  */
 public function testGetZoneAddresses()
 {
     $zone = \XLite\Core\Database::getRepo('XLite\\Model\\Zone')->findOneBy(array('zone_name' => 'New York area'));
     $this->assertNotNull($zone, 'check zone');
     $zoneElement = new \XLite\Model\ZoneElement();
     $zoneElement->setElementValue('addr');
     $zoneElement->setElementType('A');
     $zoneElement->setZone($zone);
     $zone->addZoneElements($zoneElement);
     $addresses = $zone->getZoneAddresses();
     $this->assertTrue(in_array('addr', $addresses), 'addr is not found in zone definition');
 }