示例#1
0
 /**
  * Validate customer address
  *
  * @param Mage_Sales_Model_Quote_Address $address
  * @return bool
  */
 public function validateAddress(Mage_Sales_Model_Quote_Address $address)
 {
     $errors = array();
     $helper = Mage::helper('customer');
     $address->implodeStreetAddress();
     if (!Zend_Validate::is($address->getFirstname(), 'NotEmpty')) {
         $errors[] = $helper->__('Please enter the first name.');
     }
     /*
             if (!Zend_Validate::is($address->getLastname(), 'NotEmpty')) {
                 $errors[] = $helper->__('Please enter the last name.');
             }
     */
     if (!Zend_Validate::is($address->getStreet(1), 'NotEmpty')) {
         $errors[] = $helper->__('Please enter the street.');
     }
     if (!Zend_Validate::is($address->getCity(), 'NotEmpty')) {
         $errors[] = $helper->__('Please enter the city.');
     }
     if (!Zend_Validate::is($address->getTelephone(), 'NotEmpty')) {
         $errors[] = $helper->__('Please enter the telephone number.');
     }
     /*
             $_havingOptionalZip = Mage::helper('directory')->getCountriesWithOptionalZip();
             if (!in_array($address->getCountryId(), $_havingOptionalZip) && !Zend_Validate::is($address->getPostcode(), 'NotEmpty')) {
                 $errors[] = $helper->__('Please enter the zip/postal code.');
             }
     */
     if (!Zend_Validate::is($address->getCountryId(), 'NotEmpty')) {
         $errors[] = $helper->__('Please enter the country.');
     }
     if ($address->getCountryModel()->getRegionCollection()->getSize() && !Zend_Validate::is($address->getRegionId(), 'NotEmpty')) {
         $errors[] = $helper->__('Please enter the state/province.');
     }
     if (empty($errors) || $address->getShouldIgnoreValidation()) {
         return true;
     }
     return $errors;
 }
 /**
  * Inject general item data into the order item payload.
  *
  * @return self
  */
 protected function _injectItemData()
 {
     $this->_orderItem->setLineNumber($this->_item->getId())->setItemId($this->_item->getSku())->setQuantity((int) $this->_item->getQty())->setDescription($this->_item->getName())->setHtsCode($this->_taxHelper->getProductHtsCodeByCountry($this->_itemProduct, $this->_address->getCountryId()))->setManufacturingCountryCode($this->_itemProduct->getCountryOfManufacture());
     return $this;
 }
 /**
  * Add an address to a payload
  *
  * @param  Mage_Sales_Model_Address_Abstract
  * @param  IShippingAddress
  * @return self
  */
 protected function addShippingAddress(Mage_Sales_Model_Quote_Address $shippingAddress, IShippingAddress $payload)
 {
     $payload->setShipToLines(implode('\\n', $shippingAddress->getStreet()));
     $payload->setShipToCity($shippingAddress->getCity());
     $payload->setShipToMainDivision($shippingAddress->getRegionCode());
     $payload->setShipToCountryCode($shippingAddress->getCountryId());
     $payload->setShipToPostalCode($shippingAddress->getPostcode());
     return $this;
 }
示例#4
0
 /**
  * Update the resource model
  *
  * @param Mage_Sales_Model_Quote_Address $resource
  * @param array                          $data
  *
  * @return Mage_Sales_Model_Quote_Address
  */
 public function updateResource(Mage_Sales_Model_Quote_Address $resource, array $data)
 {
     // Store current state
     $actionType = $this->getActionType();
     $operation = $this->getOperation();
     // Change state
     $this->setActionType(self::ACTION_TYPE_ENTITY);
     $this->setOperation(self::OPERATION_UPDATE);
     // Get a filter instance
     $filter = $this->getFilter();
     // Filter raw incoming data
     $data = $filter->in($data);
     // Check if the update is setting a customer address ID to use
     if (array_key_exists('customer_address_id', $data) && $data['customer_address_id']) {
         /** @var Mage_Customer_Model_Address $customerAddress */
         $customerAddress = Mage::getModel('customer/address')->load($data['customer_address_id']);
         if ($customerAddress->getId()) {
             if ($customerAddress->getCustomerId() != $resource->getQuote()->getCustomerId()) {
                 $this->_critical(Mage::helper('checkout')->__('Customer Address is not valid.'), Mage_Api2_Model_Server::HTTP_BAD_REQUEST);
             }
             $resource->importCustomerAddress($customerAddress);
             $resource->setSaveInAddressBook(0);
         }
     } else {
         // Fix region/country data
         $data = $this->getHelper()->fixAddressData($data, $resource->getCountryId(), $resource->getRegionId());
         // Get allowed attributes
         $allowedAttributes = $filter->getAllowedAttributes(Mage_Api2_Model_Resource::OPERATION_ATTRIBUTE_WRITE);
         // Update model
         $this->saveResourceAttributes($resource, array_merge($allowedAttributes, ['region_id']), $data);
     }
     // Update the shipping address if it is meant to match the billing address
     if ($resource->getQuote()->getShippingAddress()->getSameAsBilling()) {
         $shippingAddress = $resource->getQuote()->getShippingAddress();
         $shippingAddress->importCustomerAddress($resource->exportCustomerAddress());
         $shippingAddress->setSameAsBilling(1);
     }
     // Validate address
     $addressErrors = $this->getHelper()->validateQuoteAddress($resource);
     if (!empty($addressErrors)) {
         $resource->setData('validation_errors', $addressErrors);
     }
     // Fire event - after
     $data = new Varien_Object($data);
     Mage::dispatchEvent('aoe_cartapi_billingaddress_update_after', ['data' => $data, 'filter' => $filter, 'resource' => $resource]);
     // Restore old state
     $this->setActionType($actionType);
     $this->setOperation($operation);
     // Return updated resource
     return $resource;
 }
 public static function canApply(Mage_Sales_Model_Quote_Address $address)
 {
     $helper = Mage::helper('dccharge');
     //		$deliveryType = Mage::getStoreConfig('dc_charge_extension/dccharge/delivery-type');
     $countryFrom = Mage::getStoreConfig('shipping/origin/country_id') ? Mage::getStoreConfig('shipping/origin/country_id') : Mage::getStoreConfig('general/country/default');
     if ($countryFrom && $address->getCountryId() != $countryFrom && $helper->canUseForCountry($address->getCountryId()) && $address->getShippingMethod() && $helper->canUseForShippingMethod($address->getShippingMethod())) {
         return true;
     }
     return false;
 }
示例#6
0
 public function validate(Mage_Sales_Model_Quote_Address $address, $force = false)
 {
     // Address validation is currently only valid for US and CA addresses
     if ($address->getCountryId() !== 'US' && $address->getCountryId() !== 'CA') {
         return;
     }
     /** @var Aoe_AvaTax_Helper_Data $helper */
     $helper = Mage::helper('Aoe_AvaTax/Data');
     // If the module is not active for this address, exit early
     if (!$helper->isAddressValidationActive($address->getQuote()->getStoreId())) {
         return;
     }
     // If we are not forcing validation, then check if the address already has errors so we can exit early
     if (!(bool) $force) {
         /**
          * Get the current errors for the address
          *
          * Since this is protected the listener has to cheat to get access.
          *
          * @see Mage_Customer_Model_Address_Abstract::_getErrors
          */
         $method = new ReflectionMethod($address, '_getErrors');
         $method->setAccessible(true);
         /** @var string[] $errors */
         $errors = $method->invoke($address);
         // If the address validation already has errors, then skip the AvaTax validation
         if (count($errors)) {
             return;
         }
     }
     $store = $address->getQuote()->getStore();
     $result = $helper->getApi($store)->callValidateQuoteAddress($address);
     if ($result['ResultCode'] === 'Success') {
         $validAddress = reset($result['ValidAddresses']);
         if (is_array($validAddress) && $validAddress['Country'] !== $address->getCountryId()) {
             // If the validation resulted in a country change then treat that as a failure
             $address->addError($helper->__('Could not validate address.'));
             return;
         }
         if ($helper->isAddressNormalizationActive($store) && is_array($validAddress)) {
             // Define which fields are track regarding normalization notifications
             $trackedFields = array('street', 'city', 'region_id', 'postcode', 'country_id');
             // Generate the pre-normalization values
             $startData = array();
             foreach ($trackedFields as $field) {
                 $startData[$field] = $address->getData($field);
             }
             // Find the region model by country and region code
             /** @var Mage_Directory_Model_Region $regionModel */
             $regionModel = Mage::getModel('directory/region')->loadByCode($validAddress['Region'], $validAddress['Country']);
             // Update the address with the received values - These may be identical
             $address->setStreetFull(array($validAddress['Line1'], $validAddress['Line2'], $validAddress['Line3']));
             $address->setCity($validAddress['City']);
             $address->setRegionId($regionModel->getId());
             $address->setPostcode($validAddress['PostalCode']);
             $address->setCountryId($validAddress['Country']);
             // Check if any of the tracked fields were changed
             $normalized = false;
             foreach ($trackedFields as $field) {
                 if ($startData[$field] !== $address->getData($field)) {
                     $normalized = true;
                     break;
                 }
             }
             // Store the was_normalized flag on the address
             if ($normalized) {
                 // We only set the flag if it is true to prevent loss of a previous setting of the value
                 // This happens if validate is called 2+ times on an address
                 $address->setData('was_normalized', true);
             }
         }
     } else {
         // Define which errored fields we are allowing the customer to see
         $trackedErrors = array('Line1', 'Line2', 'Line3', 'City', 'Region', 'PostalCode', 'Country');
         // Loop the messages looking for error to show the customer, adding those to the address object
         $foundTrackedError = false;
         foreach ($result['Messages'] as $message) {
             if (strpos($message['RefersTo'], 'Address.') === 0 && in_array(substr($message['RefersTo'], 8), $trackedErrors)) {
                 $address->addError($message['Summary']);
                 $foundTrackedError = true;
             }
         }
         // If we didn't find an errors that could be reported directly to the customer, then add a generic message.
         if (!$foundTrackedError) {
             $address->addError($helper->__('Could not validate address.'));
         }
     }
 }
示例#7
0
 /**
  * Get region filter
  *
  * @param Mage_Sales_Model_Quote_Address $address
  * @param int                            $storeId
  *
  * @return string|bool
  */
 protected function _getFilterRegion($address, $storeId)
 {
     $filter = false;
     $regionFilters = explode(',', $this->_getConfigData()->getRegionFilterList($storeId));
     $entityId = $address->getRegionId() ?: $address->getCountryId();
     if (!in_array($entityId, $regionFilters)) {
         $filter = 'region';
     }
     return $filter;
 }
示例#8
0
 /**
  * Convert quote address to order address
  *
  * @param   Mage_Sales_Model_Quote_Address $address
  * @return  Mage_Sales_Model_Order_Address
  */
 public function addressToOrderAddress(Mage_Sales_Model_Quote_Address $address)
 {
     $orderAddress = Mage::getModel('sales/order_address')->setStoreId($address->getStoreId())->setAddressType($address->getAddressType())->setCustomerId($address->getCustomerId())->setCustomerAddressId($address->getCustomerAddressId())->setFirstname($address->getFirstname())->setLastname($address->getLastname())->setCompany($address->getCompany())->setStreet($address->getStreet(-1))->setCity($address->getCity())->setRegion($address->getRegion())->setRegionId($address->getRegionId())->setPostcode($address->getPostcode())->setCountryId($address->getCountryId())->setTelephone($address->getTelephone())->setFax($address->getFax());
     return $orderAddress;
 }
示例#9
0
 /**
  * returns country
  * 
  * @param Mage_Sales_Model_Quote_Address $address
  * @return string
  */
 protected function _getCountry($address)
 {
     return $address->getCountryId();
 }
示例#10
0
 /**
  * Deprecated but used by firecheckout to validate the taxvat field
  *
  * @deprecated Need to rename to _processValidateTaxvat
  * @param Mage_Sales_Model_Quote_Address $address
  * @return true|array
  */
 protected function _processValidateCustomer(Mage_Sales_Model_Quote_Address $address)
 {
     // set customer tax/vat number for further usage
     // $taxvat = $address->getTaxvat();
     $taxvat = $this->getQuote()->getCustomerTaxvat();
     if (strlen($taxvat) && Mage::getStoreConfig('firecheckout/taxvat/validate')) {
         $taxvatValidator = Mage::getModel('firecheckout/taxvat_validator');
         if (!$taxvatValidator->isValid($taxvat, $address->getCountryId())) {
             return array('error' => -1, 'message' => $taxvatValidator->getMessage());
         }
     }
     // set customer tax/vat number for further usage
     if ($address->getTaxnumber()) {
         $this->getQuote()->setCustomerTaxnumber($address->getTaxnumber());
     }
     return true;
 }