Ejemplo n.º 1
0
 public function testCheckAddress()
 {
     // Prepare address and save it in database
     $origAddress = new \XLite\Model\Address();
     $origAddress->map($this->addressFields);
     $origAddress->setState(\XLite\Core\Database::getRepo('XLite\\Model\\State')->findOneByCountryAndCode('US', 'NY'));
     $origAddress->setCountry(\XLite\Core\Database::getRepo('XLite\\Model\\Country')->find('US'));
     $origAddress->setProfile(\XLite\Core\Database::getRepo('XLite\\Model\\Profile')->find(1));
     $address = $origAddress->cloneEntity();
     $origAddress->create();
     // Test: new address should not be created as it is identical
     $this->assertFalse($address->create(), "Check that address is not created (all fields are identical)");
     foreach (\XLite\Model\Address::getAddressFields() as $field) {
         $address = $origAddress->cloneEntity();
         if ('state_id' == $field) {
             $address->setState(\XLite\Core\Database::getRepo('XLite\\Model\\State')->findOneByCountryAndCode('US', 'CA'));
         } elseif ('country_code' == $field) {
             $address->setCountry(\XLite\Core\Database::getRepo('XLite\\Model\\Country')->find('GB'));
         } elseif ('custom_state' != $field) {
             $address->map($this->addressFields);
             $methodName = 'set' . \XLite\Core\Converter::getInstance()->convertToCamelCase($field);
             $this->assertTrue(method_exists($address, $methodName), "Check if method exists ({$methodName})");
             $modifiedField = $this->addressFields[$field] . '2';
             $address->{$methodName}($modifiedField);
         }
         // Test: new address must be created as one of fields is modified
         $this->assertTrue($address->create(), "Check if address is created ({$field})");
     }
 }
Ejemplo n.º 2
0
 /**
  * Update profile billing address
  *
  * @return void
  */
 protected function updateBillingAddress()
 {
     $noAddress = false;
     $data = empty($this->requestData['billingAddress']) ? null : $this->requestData['billingAddress'];
     $profile = $this->getCartProfile();
     if (isset($this->requestData['same_address'])) {
         \XLite\Core\Session::getInstance()->same_address = (bool) $this->requestData['same_address'];
     }
     if ($this->requestData['same_address']) {
         // Shipping and billing are same addresses
         $address = $profile->getBillingAddress();
         if ($address) {
             // Unselect old billing address
             $address->setIsBilling(false);
         }
         $address = $profile->getShippingAddress();
         if ($address) {
             // Link shipping and billing address
             $address->setIsBilling(true);
         }
     } elseif (isset($this->requestData['same_address']) && !$this->requestData['same_address']) {
         // Unlink shipping and billing addresses
         $address = $profile->getShippingAddress();
         if ($address && $address->getIsBilling()) {
             $address->setIsBilling(false);
         }
     }
     if (is_array($data) && !$this->requestData['same_address']) {
         // Save separate billing address
         $address = $profile->getBillingAddress();
         if ($address) {
             \XLite\Core\Database::getEM()->refresh($address);
         }
         $andAsShipping = false;
         $current = new \XLite\Model\Address();
         $current->map($this->prepareAddressData($data, 'billing'));
         $equal = null;
         foreach ($profile->getAddresses() as $addressEqual) {
             if ($addressEqual->isEqualAddress($current) && (!$address || $address->getAddressId() != $addressEqual->getAddressId())) {
                 $equal = $addressEqual;
                 break;
             }
         }
         if ($equal) {
             if ($address && $address->getIsWork()) {
                 $profile->getAddresses()->removeElement($address);
                 \XLite\Core\Database::getEM()->remove($address);
             }
             if ($address) {
                 $andAsShipping = $address->getIsShipping();
                 $address->setIsBilling(false);
                 if ($andAsShipping) {
                     $address->setIsShipping(false);
                 }
             }
             $address = $equal;
             $address->setIsBilling(true);
             if ($andAsShipping) {
                 $address->setIsShipping($andAsShipping);
             }
         }
         if (!$address || !$address->getIsWork() && !$address->isEqualAddress($current)) {
             if ($address) {
                 $andAsShipping = $address->getIsShipping();
                 $address->setIsBilling(false);
                 $address->setIsShipping(false);
             }
             $address = new \XLite\Model\Address();
             $address->setProfile($profile);
             $address->setIsBilling(true);
             $address->setIsShipping($andAsShipping);
             $address->setIsWork(true);
             if (!(bool) \XLite\Core\Request::getInstance()->only_calculate) {
                 $profile->addAddresses($address);
                 \XLite\Core\Database::getEM()->persist($address);
                 $noAddress = true;
             }
         }
         $address->map($this->prepareAddressData($data, 'billing'));
         \XLite\Core\Session::getInstance()->same_address = $this->getCart()->getProfile()->isEqualAddress();
     }
     if ($noAddress) {
         \XLite\Core\Event::createBillingAddress(array('id' => $address->getAddressId()));
     }
 }
Ejemplo n.º 3
0
 /**
  * Update address
  *
  * @return void
  */
 protected function updateAddress($data)
 {
     if (!is_array($data)) {
         return;
     }
     $profile = $this->getCartProfile();
     $address = $profile->getShippingAddress();
     if ($address) {
         \XLite\Core\Database::getEM()->refresh($address);
     }
     $noAddress = !isset($address);
     $andAsBilling = true;
     $current = new \XLite\Model\Address();
     $current->map($this->prepareAddressData($data));
     if ($noAddress || !$address->getIsWork() && !$address->isEqualAddress($current)) {
         $address = new \XLite\Model\Address();
         $address->setProfile($profile);
         $address->setIsShipping(true);
         $address->setIsBilling($andAsBilling);
         $address->setIsWork(true);
         if ($noAddress || !(bool) \XLite\Core\Request::getInstance()->only_calculate) {
             $profile->addAddresses($address);
             \XLite\Core\Database::getEM()->persist($address);
         }
     }
     $address->map($this->prepareAddressData($data));
     if ($noAddress && !$profile->getBillingAddress() && (is_null(\XLite\Core\Session::getInstance()->same_address) || \XLite\Core\Session::getInstance()->same_address)) {
         // Same address as default behavior
         $address->setIsBilling(true);
     }
     \XLite\Core\Session::getInstance()->same_address = $this->getCart()->getProfile()->isEqualAddress();
 }
Ejemplo n.º 4
0
 /**
  * getTestProfile
  *
  * @param int $selectedProfileId
  * @param int $selectedAddressesId
  *
  * @return \XLite\Model\Profile
  * @access protected
  * @see    ____func_see____
  * @since  1.0.0
  */
 protected function getTestProfile($selectedProfileId = 0, $selectedAddressesId = 0)
 {
     $profile = new \XLite\Model\Profile();
     $profile->map($this->testProfileData[$selectedProfileId]);
     if (1 == $selectedProfileId) {
         $m = \XLite\Core\Database::getRepo('XLite\\Model\\Membership')->find(1);
         $profile->setMembership($m);
         $profile->setPendingMembership($m);
     }
     foreach ($this->testAddresses[$selectedAddressesId] as $data) {
         $address = new \XLite\Model\Address();
         $address->map($data);
         $address->setProfile($profile);
         $profile->addAddresses($address);
     }
     $result = $profile->create();
     $this->assertNotNull($profile, sprintf('Profile creation failed (%d, %d)', $selectedProfileId, $selectedAddressesId));
     return $profile;
 }