/** * Validates that the state that the customer enters either * in the shipping form or billing form respects the format * for the countries we want to validate it upon. * * @param CModel $model * @param string $attribute * @return void */ public function validateAttribute($model, $attribute) { switch ($attribute) { case 'shippingState': $objCountry = Country::Load($model->shippingCountry); break; case 'billingState': $objCountry = Country::Load($model->billingCountry); break; default: // Cannot validate any other attributes. return; } if ($objCountry === null) { // Country isn't valid, can't validate the state! return; } $countriesToValidateState = array(self::USA, self::CANADA, self::AUSTRALIA); if (in_array($objCountry->id, $countriesToValidateState) === false) { // Do not attempt to validate the state. return; } if (empty($model->{$attribute}) === true) { $this->addError($model, $attribute, Yii::t('yii', '{attributeName} cannot be blank.', array('{attributeName}' => $model->getattributeLabel($attribute)))); } else { $objState = State::Load($model->{$attribute}); if ($objState === null) { $this->addError($model, $attribute, Yii::t('yii', '{attributeName} is invalid.', array('{attributeName}' => $model->getattributeLabel($attribute)))); } } }
public function setBillingState($intState) { $objBillingState = State::Load($intState); if ($objBillingState !== null) { $this->billingStateCode = $objBillingState->code; $this->billingCountry = $objBillingState->country_id; } }
/** * Set the cart tax code based on an address. * The country_id parameter is required, state_id and postal are optional. */ public function actionSetTaxByAddress() { $intCountryId = Yii::app()->getRequest()->getParam('country_id'); $intStateId = Yii::app()->getRequest()->getParam('state_id', ''); $strPostal = Yii::app()->getRequest()->getParam('postal', ''); $objCountry = Country::Load($intCountryId); if ($objCountry === null) { throw new CHttpException(400, Yii::t('application errors', 'Invalid country_id.')); } $strStateCode = null; if ($intStateId !== '') { $objState = State::Load($intStateId); if ($objState === null) { throw new CHttpException(400, Yii::t('application errors', 'Invalid state_id.')); } // Validate the state/country combination. $arrShippingStates = Country::getCountryShippingStates($intCountryId); if (array_key_exists($intStateId, $arrShippingStates) === false) { throw new CHttpException(400, Yii::t('application errors', 'The state_id is not valid for the country_id.')); } $strStateCode = $objState->code; } Yii::app()->shoppingcart->setTaxCodeByAddress($objCountry->code, $strStateCode, $strPostal); $arrReturn['cartitems'] = $this->renderPartial('/cart/_cartitems', null, true); if (Yii::app()->session->get('ship.prices.cache', null) !== null) { $arrReturn['action'] = 'triggerCalc'; } return $this->renderJSON($arrReturn); }