/** * 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; }
/** * 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; }
/** * 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; }