/** * 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; }
/** * 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; }
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.')); } } }
/** * 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; }
/** * 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; }
/** * returns country * * @param Mage_Sales_Model_Quote_Address $address * @return string */ protected function _getCountry($address) { return $address->getCountryId(); }
/** * 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; }