public function run() { $unit = 1; $country = $this->CheckoutForm->shippingCountryCode; $state = $this->CheckoutForm->shippingStateCode; $zipcode = $this->CheckoutForm->shippingPostal; // We can't do a lookup if the country is blank if (empty($country)) { Yii::log('DESTINATION TABLE: insufficient details for destination shipping. Shipping Country is blank.', 'info', 'application.' . __CLASS__ . '.' . __FUNCTION__); return false; } Yii::log("DESTINATION TABLE: searching for {$country}/{$state}/{$zipcode}", 'info', 'application.' . __CLASS__ . "." . __FUNCTION__); if (!isset($this->config['per'])) { Yii::log("DESTINATION TABLE: could not get destination shipping unit.", 'error', 'application.' . __CLASS__ . "." . __FUNCTION__); return false; } // Get the best matching destination $model = Destination::LoadMatching($country, $state, $zipcode); if ($model === null) { Yii::log("DESTINATION TABLE: No matching entry found for {$country} {$state} {$zipcode} .", 'error', 'application.' . __CLASS__ . "." . __FUNCTION__); return false; } if ($this->config['per'] == 'item') { $unit = $this->objCart->TotalItemCount; } elseif ($this->config['per'] == 'weight') { $unit = $this->objCart->Weight; } elseif ($this->config['per'] == 'volume') { $unit = $this->objCart->Length * $this->objCart->Width * $this->objCart->Height; } if ($unit >= $model->ship_free) { $unit -= $model->ship_free; } if ($unit < 0) { $unit = 0; } // If the Base Charge is unset or lesser than 0, don't apply this module if ($model->base_charge == '' || $model->base_charge == null) { $label = Country::CodeById($model->country) . "/" . State::CodeById($model->state); Yii::log("DESTINATION TABLE: Base charge not set for entry '" . $label . "'", 'error', 'application.' . __CLASS__ . "." . __FUNCTION__); return false; } $desc = isset($this->config['offerservices']) ? $this->config['offerservices'] : Yii::t('global', 'Standard 3-5 Business Days'); $ret[$desc] = $model->base_charge + $unit * $model->ship_rate; return $this->convertRetToDisplay($ret); }
/** * Based on passed address information, calculates the total shipping cost * * @param $fields * @param $cart * @param string $country * @param string $zipcode * @param string $state * @param string $city * @param string $address2 * @param string $address1 * @param string $company * @param string $lname * @param string $fname * @return array|bool */ public function total($fields, $cart, $country = '', $zipcode = '', $state = '', $city = '', $address2 = '', $address1 = '', $company = '', $lname = '', $fname = '') { $config = $this->getConfigValues(get_class($this)); $weight = $cart->Weight; if (_xls_get_conf('WEIGHT_UNIT', 'lb') != 'lb') { $weight = $weight * 2.2; } // one KG is 2.2 pounds $length = $cart->Length; $width = $cart->Width; $height = $cart->Height; if (_xls_get_conf('DIMENSION_UNIT', 'in') != 'in') { $length = round($length / 2.54); $width = round($width / 2.54); $height = round($height / 2.54); } if ($length < 1 && $length > 0) { $length = 1; } if ($width < 1 && $width > 0) { $width = 1; } if ($height < 1 && $height > 0) { $height = 1; } if (empty($config['securitycode']) || empty($config['accnumber']) || empty($config['meternumber'])) { return FALSE; } $ret = array(); $newline = "<br />"; //The WSDL is not included with the sample code. //Please include and reference in $path_to_wsdl variable. $path_to_wsdl = dirname(__FILE__) . "/RateService_v7.wsdl"; ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient($path_to_wsdl, array('trace' => 1)); $request['WebAuthenticationDetail'] = array('UserCredential' => array('Key' => $config['authkey'], 'Password' => $config['securitycode'])); $request['ClientDetail'] = array('AccountNumber' => $config['accnumber'], 'MeterNumber' => $config['meternumber']); $request['TransactionDetail'] = array('CustomerTransactionId' => ' *** Rate Request v7 using PHP ***'); $request['Version'] = array('ServiceId' => 'crs', 'Major' => '7', 'Intermediate' => '0', 'Minor' => '0'); $request['ReturnTransitAndCommit'] = true; $request['RequestedShipment']['DropoffType'] = 'REGULAR_PICKUP'; // valid values REGULAR_PICKUP, REQUEST_COURIER, ... $request['RequestedShipment']['ShipTimestamp'] = date('c'); //Uncomment these additional options below if they are needed for your shipments //$request['RequestedShipment']['SpecialServicesRequested'] = array( 'SpecialServiceTypes' => array('SIGNATURE_OPTION'), 'SignatureOptionDetail' => array('OptionType' => 'ADULT')); //$request['RequestedShipment']['SignatureOptionDetail']['OptionType'] = 'ADULT'; //$request['RequestedShipment']['ServiceType'] = 'PRIORITY_OVERNIGHT'; // valid values STANDARD_OVERNIGHT, PRIORITY_OVERNIGHT, FEDEX_GROUND, ... $config['origincountry'] = Country::CodeById($config['origincountry']); $config['originstate'] = State::CodeById($config['originstate']); if ($config['origincountry'] != "CA" && $config['origincountry'] != "US") { //Only required for these countries $config['originstate'] = ""; } $request['RequestedShipment']['PackagingType'] = $config['packaging']; $request['RequestedShipment']['Shipper'] = array('Address' => array('StreetLines' => array($config['originadde']), 'City' => $config['origincity'], 'StateOrProvinceCode' => $config['originstate'], 'PostalCode' => $config['originpostcode'], 'CountryCode' => $config['origincountry'])); if ($country != "CA" && $country != "US") { //Only required for these countries $state = ""; } $request['RequestedShipment']['Recipient'] = array('Address' => array('StreetLines' => array($address1, $address2), 'City' => $city, 'StateOrProvinceCode' => $state, 'PostalCode' => $zipcode, 'CountryCode' => $country, 'Residential' => $this->CheckoutForm->shippingResidential == 1 ? 1 : 0)); $request['RequestedShipment']['ShippingChargesPayment'] = array('PaymentType' => 'SENDER', 'Payor' => array('AccountNumber' => $config['accnumber'], 'CountryCode' => $config['origincountry'])); $request['RequestedShipment']['RateRequestTypes'] = 'ACCOUNT'; $request['RequestedShipment']['RateRequestTypes'] = 'LIST'; if ($config['origincountry'] != $country && $config['customs'] == "CLEARANCEFEE") { $request['RequestedShipment']['InternationalDetail'] = array('CustomsValue' => array('Amount' => $cart->subtotal, 'Currency' => _xls_get_conf('CURRENCY_DEFAULT', 'USD'))); } $request['RequestedShipment']['PackageCount'] = '1'; $request['RateRequest']['CurrencyType'] = _xls_get_conf('CURRENCY_DEFAULT', 'USD'); $request['RequestedShipment']['PackageDetail'] = 'INDIVIDUAL_PACKAGES'; if ($length + $width + $height == 0) { $request['RequestedShipment']['RequestedPackageLineItems'] = array('0' => array('SequenceNumber' => '1', 'InsuredValue' => array('Amount' => $cart->subtotal, 'Currency' => _xls_get_conf('CURRENCY_DEFAULT', 'USD')), 'ItemDescription' => 'Ordered items', 'Weight' => array('Value' => $weight, 'Units' => 'LB'), 'CustomerReferences' => array('CustomerReferenceType' => 'CUSTOMER_REFERENCE', 'Value' => _xls_get_conf('STORE_NAME', 'Web Order')))); } else { $request['RequestedShipment']['RequestedPackageLineItems'] = array('0' => array('SequenceNumber' => '1', 'InsuredValue' => array('Amount' => $cart->subtotal, 'Currency' => _xls_get_conf('CURRENCY_DEFAULT', 'USD')), 'ItemDescription' => 'Ordered items', 'Weight' => array('Value' => $weight, 'Units' => 'LB'), 'Dimensions' => array('Length' => $length, 'Width' => $width, 'Height' => $height, 'Units' => 'IN'), 'CustomerReferences' => array('CustomerReferenceType' => 'CUSTOMER_REFERENCE', 'Value' => _xls_get_conf('STORE_NAME', 'Web Order')))); } try { $response = $client->getRates($request); Yii::log(get_class($this) . " sending " . print_r($request, true), $this->logLevel, 'application.' . __CLASS__ . "." . __FUNCTION__); Yii::log(get_class($this) . " receiving " . print_r($response, true), $this->logLevel, 'application.' . __CLASS__ . "." . __FUNCTION__); if ($response->HighestSeverity != 'FAILURE' && $response->HighestSeverity != 'ERROR') { if (isset($response->RateReplyDetails)) { if (is_array($response->RateReplyDetails) === false) { $response->RateReplyDetails = array($response->RateReplyDetails); } foreach ($response->RateReplyDetails as $rateReply) { if (isset($rateReply->RatedShipmentDetails)) { foreach ($rateReply->RatedShipmentDetails as $choice) { if ($choice->ShipmentRateDetail->RateType == $config['ratetype']) { $ret[$rateReply->ServiceType] = $choice->ShipmentRateDetail->TotalNetCharge->Amount; } elseif ($rateReply->ServiceType == "FEDEX_GROUND" || $rateReply->ServiceType == "GROUND_HOME_DELIVERY") { $ret[$rateReply->ServiceType] = $rateReply->RatedShipmentDetails[1]->ShipmentRateDetail->TotalNetCharge->Amount; } } } } } } } catch (SoapFault $exception) { _xls_log("FedEx Soap Fault : " . $exception . " "); $response = $exception; } if (count($ret) <= 0) { _xls_log("FedEx could not get rate for {$country}, {$state}, {$zipcode} . "); _xls_log("FedEx request: " . print_r($request, true)); _xls_log("FedEx Response: " . print_r($response, true)); return false; } asort($ret); Yii::log(get_class($this) . " received shipping array " . print_r($ret, true), $this->logLevel, 'application.' . __CLASS__ . "." . __FUNCTION__); return $this->convertRetToDisplay($ret); }
public function __get($strName) { switch ($strName) { case 'state': return State::CodeById($this->state_id); case 'country': return Country::CodeById($this->country_id); case 'mainname': case 'full_name': return $this->first_name . " " . $this->last_name; case 'block': return $this->address1 . chr(13) . $this->address2 . chr(13) . $this->city . chr(13) . $this->state . chr(13) . " " . $this->postal . chr(13) . $this->country; case 'shipblock': return $this->first_name . " " . $this->last_name . (!empty($this->company) ? chr(13) . $this->company : "") . $this->company . chr(13) . $this->address1 . chr(13) . $this->address2 . chr(13) . $this->city . chr(13) . $this->state . chr(13) . " " . $this->postal . chr(13) . $this->country; default: return parent::__get($strName); } }
/** * For a product, returns tax rate for all defined destinations * Useful for RSS exports * @return TaxGrid[] */ public function GetTaxRateGrid() { $arrGrid = array(); $intTaxStatus = $this->tax_status_id; $objStatus = TaxStatus::LoadByLS($intTaxStatus); $objDestinations = Destination::model()->findAll(); foreach ($objDestinations as $objDestination) { //Because of differences in how Google defines zip code ranges, we can't convert our ranges //to theirs. At this time we won't be able to support zip code ranges if (!is_null($objDestination->country) && $objDestination->Zipcode1 == '') { $objTaxCode = TaxCode::LoadByLS($objDestination->taxcode); //print_r($objTaxCode); $fltRate = 0.0; for ($x = 1; $x <= 5; $x++) { $statusstring = "tax" . $x . "_status"; $codestring = "tax" . $x . "_rate"; if ($objStatus->{$statusstring} == 0) { $fltRate += $objTaxCode->{$codestring}; } } //Our four elements $strCountry = Country::CodeById($objDestination->country); if (!is_null($objDestination->state)) { $strState = State::CodeById($objDestination->state); } else { $strState = ''; } //$fltRate -- built above $strTaxShip = Yii::app()->params['SHIPPING_TAXABLE'] == '1' ? "y" : "n"; $arrGrid[] = array($strCountry, $strState, $fltRate, $strTaxShip); } } return $arrGrid; }
public function __get($strName) { switch ($strName) { case 'state': if ($this->state_id) { return State::CodeById($this->state_id); } else { return null; } case 'country': if ($this->country_id) { return Country::CodeById($this->country_id); } else { return null; } case 'country_name': if ($this->country_id) { return Country::CountryById($this->country_id); } else { return null; } case 'mainname': case 'fullname': return $this->first_name . " " . $this->last_name; case 'block': return $this->address1 . chr(13) . $this->address2 . chr(13) . $this->city . chr(13) . $this->state . chr(13) . $this->postal . chr(13) . $this->country; case 'htmlblock': return $this->address1 . '<br>' . (!empty($this->address2) ? $this->address2 . "<br>" : "") . $this->city . ' ' . $this->state . " " . $this->postal . '<br>' . $this->country_name; case 'shipblock': return $this->first_name . " " . $this->last_name . chr(13) . $this->address1 . chr(13) . (!empty($this->company) ? $this->company . " " . $this->address2 : $this->address2) . chr(13) . $this->city . chr(13) . $this->state . " " . $this->postal . chr(13) . $this->country; case 'formattedblock': if ($this->customer_id == Yii::app()->user->id) { return $this->first_name . " " . $this->last_name . '<br>' . $this->address1 . '<br>' . (!empty($this->company) ? $this->company . "<br>" : "") . (!empty($this->address2) ? $this->address2 . "<br>" : "") . $this->city . ' ' . $this->state . " " . $this->postal . '<br>' . (_xls_country() != $this->country ? $this->country : ""); } else { return Yii::t('global', 'Directly to gift recipient') . '<br>' . $this->first_name . " " . $this->last_name; } case 'formattedblockcountry': return $this->first_name . " " . $this->last_name . '<br>' . $this->address1 . '<br>' . (!empty($this->company) ? $this->company . "<br>" : "") . (!empty($this->address2) ? $this->address2 . "<br>" : "") . $this->city . ' ' . $this->state . " " . $this->postal . '<br>' . (_xls_country() != $this->country ? $this->country_name : ""); default: return parent::__get($strName); } }
public function IUPStotal() { if (empty($this->config['originpostcode']) || empty($this->config['origincountry']) || empty($this->config['username']) || empty($this->config['accesskey'])) { return false; } $this->s_zip = $this->config['originpostcode']; $this->s_state = $this->config['originstate']; $this->s_country = Country::CodeById($this->config['origincountry']); $this->userid = $this->config['username']; $this->passwd = $this->config['password']; $this->accesskey = $this->config['accesskey']; $this->customerclassification = $this->config['customerclassification']; $this->pickuptype = $this->config['ratecode']; $this->currency = $this->objCart->currency; $this->residential = $this->CheckoutForm->shippingResidential == 1 ? 1 : 0; $weight = $this->objCart->Weight; $this->weight_type = strtoupper(_xls_get_conf('WEIGHT_UNIT', 'lb')); $this->weight_type .= "S"; // Add KGS or LBS $length = $this->objCart->Length; $width = $this->objCart->Width; $height = $this->objCart->Height; $this->measurement_type = strtoupper(_xls_get_conf('DIMENSION_UNIT', 'in')); $found = 0; $ret = $this->rate(); if ($ret === false) { return false; } asort($ret, SORT_NUMERIC); if (count($ret) == 0) { Yii::log('Could not get shipping information for ' . $this->CheckoutForm->shippingStateCode . " " . $this->CheckoutForm->shippingPostal . " " . $this->CheckoutForm->shippingCountryCode, 'error', 'application.' . __CLASS__ . "." . __FUNCTION__); return false; } return $this->convertRetToDisplay($ret); }
protected function beforeValidate() { $this->country_code = Country::CodeById($this->country_id); return parent::beforeValidate(); }
public function __get($strName) { switch ($strName) { case 'Zipcode1': return preg_replace('/[^A-Z0-9]/', '', strtoupper($this->zipcode1)); case 'Zipcode2': return preg_replace('/[^A-Z0-9]/', '', strtoupper($this->zipcode2)); case 'countryname': return Country::CodeById($this->country); default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } }
function _xls_html_storeaddress() { $str = ''; $str .= Yii::app()->params['STORE_ADDRESS1'] . '<br>'; $str .= Yii::app()->params['STORE_ADDRESS2'] ? Yii::app()->params['STORE_ADDRESS2'] . '<br>' : ''; $str .= Yii::app()->params['STORE_CITY'] ? Yii::app()->params['STORE_CITY'] . ', ' : ''; $str .= Yii::app()->params['STORE_STATE'] ? State::CodeById(Yii::app()->params['STORE_STATE']) . '<br>' : ''; $intIdCountry = Yii::app()->params['STORE_COUNTRY']; if (is_null($intIdCountry) === false) { if (Country::CodeById($intIdCountry) !== _xls_country()) { $str .= Yii::app()->params['STORE_COUNTRY'] ? Country::CountryById(Yii::app()->params['STORE_COUNTRY']) . '<br>' : ''; } } $str .= Yii::app()->params['STORE_ZIP'] ? Yii::app()->params['STORE_ZIP'] : ''; return $str; }