|
|
- <?php
- /**
- * This file is a part of Quasi CMS
- *@package Quasi
- */
-
- if(!defined('QUASICMS') ) die('No Quasi.');
-
- if (!defined("SHIPPINGREQUESTBASE.CLASS.PHP")){
- define("SHIPPINGREQUESTBASE.CLASS.PHP",1);
-
- /**
- * Class ShippingRequestType - enumerator class for types of shipping requests
- *@package Quasi
- * @subpackage Classes
- */
- class ShippingRequestType
- {
- ///@var const - a request for a rate
- const Rate = 1;
- ///@var const - a request for a rate availability
- const Availability = 2;
- ///@var const - a request for a printable label image
- const Label = 3;
- ///@var const - a request for the status of the account
- const AccountStatus = 4;
- ///@var const - a request to make a credit payment
- const CreditAccount = 5;
-
- public static function ToString($intFlag)
- {
- switch($intFlag)
- {
- case ShippingRequestType::Label:
- return 'LabelRequest';
- case ShippingRequestType::Availability:
- return 'AvailabilityRequest';
- case ShippingRequestType::Rate:
- return 'RateRequest';
- case ShippingRequestType::AccountStatus:
- return 'AccountStatusRequest';
- case ShippingRequestType::CreditAccount:
- return 'CreditAccountRequest';
- default:
- return 'None';
- }
- }
- }
-
- /**
- * Class ExtraDocumentImage - convenience class for extra customs image documents
- *@package Quasi
- * @subpackage Classes
- */
- class ExtraDocumentImage
- {
- public $Copies;
- public $Image;
- public $Type;
- public function __construct($mixImage, $strType, $intCopies=1)
- {
- $this->Image = $mixImage;
- $this->Type = $strType;
- $this->Copies = $intCopies;
- }
- }
-
- /**
- * Class ShippingRequest - base class for performing shipping requests via Shipping API web services
- *
- * This class provides an interface to shipping requests. Abstract methods MUST be implemented by
- * subclasses, others may be overridden as needed. Subclasses are instantiated by a call to
- * ShippingMethod::GetRequest($strRequestType). The primary function of this base class is to associate
- * the request with the ShippingMethod
- *
- * This class also connects to the specified server via the methods provided by extending WebServiceRequest.
- *
- *@author Erik Winn <erikwinnmail@yahoo.com>
- *
- * $Id: ShippingRequest.class.php 502 2009-02-10 22:09:53Z erikwinn $
- *@version 0.1
- *
- *@copyright (C) 2008 by Erik Winn
- *@license GPL v.2
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
-
- *
- *@package Quasi
- * @subpackage Classes
- */
-
- abstract class ShippingRequest extends WebServiceRequest
- {
- /**
- *@var ShippingMethod method that created this calculator
- */
- protected $objShippingMethod;
- /**
- *@var ShippingRequestType - the type of request to create
- */
- protected $intShippingRequestType;
- /**
- * An array of CustomsInformation objects containing data for customs
- * declarations
- *@var array aryCustomsInformation
- */
- protected $aryCustomsInformation = null;
- /**
- * An array of extra document images for customs declarations
- *@var array aryExtraDocumentImages
- */
- protected $aryExtraDocumentImages;
- /**
- *@var resource objShippingLabelImage - the shipping label image as GD image resource
- */
- protected $objShippingLabelImage;
- /**
- *@var array aryCustomsFormImages - image(s) for printing out customs forms ..
- */
- protected $aryCustomsFormImages;
-
- /**
- *@var boolean blnIsAvailable - flag indicating if the method is avaiable for the address in Order ..
- */
- protected $blnIsAvailable;
-
- /**
- * ShippingRequest Constructor
- *
- * This sets some defaults for the shipping requests.
- *
- *NOTE: It is assumed that the shipping origin is the same as the store address.
- *@todo Support remote shipping options ..
- *
- * @param ShippingMethod objShippingMethod - the method to be used for the request
- */
- public function __construct(ShippingMethod $objShippingMethod)
- {
- $this->objShippingMethod =& $objShippingMethod;
- $this->blnTestMode = $objShippingMethod->TestMode;
- }
- /**
- * Connects to web service and submits the request. Note that
- * this function merely constructs a request URL from internal variables
- * that are set in createRequest, it may therefor contain a GET query
- * string or a POST depending on the subclass requirements.
- * Note: If the request transaction succeeds we also call handleResponse here.
- *@return boolean true on success
- */
- protected function submitRequest()
- {
- if(! parent::submitRequest())
- return false;
- if(! $this->handleResponse())
- return false;
- return true;
- }
- /**
- * This function attempts to create a request string for the method of the given ShippingRequestType.
- * The WebRequestType (POST, GET, etc ..) may also be optionally set here.
- *
- * @param ShippingRequestType intShippingRequestType - the type of shipping request object to create
- * @param WebRequestType intWebRequestType - the type of web request to submit
- */
- protected function createRequest($intShippingRequestType, $intWebRequestType = WebRequestType::POST)
- {
- $this->intShippingRequestType = $intShippingRequestType;
- parent::createRequest($intWebRequestType);
-
- /* switch($intShippingRequestType)
- {
- case ShippingRequestType::Label:
- return $this->createLabelRequest();
- break;
- case ShippingRequestType::Availability:
- return $this->createAvailabilityRequest();
- break;
- case ShippingRequestType::Rate:
- return $this->createRateRequest();
- break;
- case ShippingRequestType::AccountStatus:
- return $this->createAccountStatusRequest();
- break;
- case ShippingRequestType::CreditAccount:
- return $this->createCreditAccountRequest();
- break;
- default:
- throw new QCallerException('Shipping request type unsupported: ' . $intRequestType );
- }*/
- }
- /**
- * This function attempts to create a POST request string for the method of a given ShippingRequestType.
- */
- protected function createPOSTRequest()
- {
- switch($this->intShippingRequestType)
- {
- case ShippingRequestType::Label:
- return $this->createLabelRequest();
- break;
- case ShippingRequestType::Availability:
- return $this->createAvailabilityRequest();
- break;
- case ShippingRequestType::Rate:
- return $this->createRateRequest();
- break;
- case ShippingRequestType::AccountStatus:
- return $this->createAccountStatusRequest();
- break;
- case ShippingRequestType::CreditAccount:
- return $this->createCreditAccountRequest();
- break;
- default:
- throw new QCallerException('Shipping request type unsupported: ' . $this->intRequestType );
- }
- }
- /**
- * This function attempts to create a GET request string for the method of a given ShippingRequestType.
- */
- protected function createGETRequest()
- {
- switch($this->intShippingRequestType)
- {
- case ShippingRequestType::Label:
- return $this->createLabelRequest();
- break;
- case ShippingRequestType::Availability:
- return $this->createAvailabilityRequest();
- break;
- case ShippingRequestType::Rate:
- return $this->createRateRequest();
- break;
- case ShippingRequestType::AccountStatus:
- return $this->createAccountStatusRequest();
- break;
- case ShippingRequestType::CreditAccount:
- return $this->createCreditAccountRequest();
- break;
- default:
- throw new QCallerException('Shipping request type unsupported: ' . $this->intRequestType );
- }
- }
-
- /**
- * This function handles the response string for the method of a given ShippingRequestType.
- */
- protected function handleResponse()
- {
- switch($this->intShippingRequestType)
- {
- case ShippingRequestType::Label:
- return $this->handleLabelResponse();
- break;
- case ShippingRequestType::Availability:
- return $this->handleAvailabilityResponse();
- break;
- case ShippingRequestType::Rate:
- return $this->handleRateResponse();
- break;
- case ShippingRequestType::AccountStatus:
- return $this->handleAccountStatusResponse();
- break;
- case ShippingRequestType::CreditAccount:
- return $this->handleCreditAccountResponse();
- break;
- default:
- throw new QCallerException('Shipping request type unsupported: ' . $this->intRequestType );
- }
- }
- protected function initCustomsInformationArray()
- {
- $this->aryCustomsInformation = array();
- $aryOrderItems = OrderItem::LoadArrayByOrderId($this->objShippingMethod->Order->Id);
- foreach($aryOrderItems as $objOrderItem)
- {
- $objCustomsInfo = new CustomsInformation();
- $objCustomsInfo->Quantity = $objOrderItem->Quantity;
- $objCustomsInfo->Description = $objOrderItem->Product->Name;
- $objCustomsInfo->Weight = $objOrderItem->Product->Weight * $objOrderItem->Quantity;
- $objCustomsInfo->Value = $objOrderItem->Product->RetailPrice * $objOrderItem->Quantity;
- $this->aryCustomsInformation[] = $objCustomsInfo;
- }
- }
- /**
- * Returns a rate for this method to the order address
- *@return float containing the rate for the order address
- */
- abstract public function GetRate();
- /**
- * Returns a shipping label image suitable for printing
- *@return string containing the image code
- */
- abstract public function GetLabel();
- /**
- * Returns an account status report
- *@return string containing the status report
- */
- abstract public function GetAccountStatus();
- /**
- * Returns whether this method is available for the order address
- *@return boolean true if method is available
- */
- abstract public function GetAvailability();
- /**
- * Submits an account credit payment
- */
- // abstract public function CreditAccount();
-
- //Request string creators
- /**
- * Creates a rate request
- */
- abstract protected function createRateRequest();
- /**
- * Creates a label image request
- */
- abstract protected function createLabelRequest();
- /**
- * Creates an account status request
- */
- abstract protected function createAccountStatusRequest();
- /**
- * Creates a request submitting an account credit payment
- */
- abstract protected function createCreditAccountRequest();
- /**
- * Creates a method available request
- */
- abstract protected function createAvailabilityRequest();
-
- //Response handlers
- /**
- * Creates a rate request
- */
- abstract protected function handleRateResponse();
- /**
- * Creates a label image request
- */
- abstract protected function handleLabelResponse();
- /**
- * Creates an account status request
- */
- abstract protected function handleAccountStatusResponse();
- /**
- * Creates a request submitting an account credit payment
- */
- abstract protected function handleCreditAccountResponse();
- /**
- * Creates a method available request
- */
- abstract protected function handleAvailabilityResponse();
-
- ///Gettors
- public function __get($strName)
- {
- switch ($strName)
- {
- case 'ShippingLabelImage':
- return $this->objShippingLabelImage;
- case 'ExtraDocumentImages':
- return (array) $this->aryExtraDocumentImages;
- case 'CustomsFormImages':
- return (array) $this->aryCustomsFormImages;
- case 'IsAvailable':
- return $this->blnIsAvailable;
- case 'Order':
- return $this->objShippingMethod->Order ;
- case 'Carrier':
- return $this->objShippingMethod->Carrier ;
- case 'ServiceType':
- return $this->objShippingMethod->ServiceType ;
- case 'Rate':
- return $this->objShippingMethod->Rate ;
- case 'TotalValue':
- return $this->objShippingMethod->Order->ProductTotalCharged;
- case 'Pounds':
- return $this->objShippingMethod->Pounds ;
- case 'Ounces':
- return $this->objShippingMethod->Ounces ;
- case 'Container':
- return $this->objShippingMethod->Container ;
- case 'IsMachinable':
- return $this->objShippingMethod->IsMachinable ;
- case 'OriginZip':
- return $this->objShippingMethod->OriginZip ;
- case 'DestinationZip':
- return $this->objShippingMethod->DestinationZip ;
- case 'DestinationCountryId':
- return $this->objShippingMethod->DestinationCountryId ;
- case 'OriginCountryId':
- return $this->objShippingMethod->OriginCountryId ;
- case 'OriginStateId':
- case 'OriginZoneId':
- return $this->objShippingMethod->OriginZoneId ;
- case 'DestinationStateId':
- case 'DestinationZoneId':
- return $this->objShippingMethod->DestinationZoneId ;
- ///string representation of country and state names ..
- case 'DestinationCountry':
- return $this->objShippingMethod->DestinationCountry ;
- case 'OriginCountry':
- return $this->objShippingMethod->OriginCountry ;
- case 'OriginState':
- case 'OriginZone':
- return $this->objShippingMethod->OriginZone ;
- case 'DestinationState':
- case 'DestinationZone':
- return $this->objShippingMethod->DestinationZone ;
- ///string representation of country and state ISO 2 letter codes ..
- case 'DestinationCountryCode':
- return $this->objShippingMethod->DestinationCountryCode ;
- case 'OriginCountryCode':
- return $this->objShippingMethod->OriginCountryCode ;
- case 'OriginStateCode':
- case 'OriginZoneCode':
- return $this->objShippingMethod->OriginZoneCode ;
- case 'DestinationStateCode':
- case 'DestinationZoneCode':
- return $this->objShippingMethod->DestinationZoneCode ;
- default:
- try {
- return parent::__get($strName);
- } catch (QCallerException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- }
- }
-
- ///Settors
- public function __set($strName, $mixValue)
- {
- switch ($strName)
- {
- case 'DestinationZip':
- return ($this->objShippingMethod->DestinationZip = $mixValue);
- case 'OriginZip':
- return ($this->objShippingMethod->OriginZip = $mixValue);
- case 'DestinationCountryId':
- return ($this->objShippingMethod->DestinationCountryId = $mixValue);
- case 'OriginCountryId':
- return ($this->objShippingMethod->OriginCountryId = $mixValue);
- case 'Container':
- return ($this->objShippingMethod->Container = $mixValue);
- case 'Pounds':
- return ($this->objShippingMethod->Pounds = $mixValue);
- case 'Rate':
- return ($this->objShippingMethod->Rate = $mixValue);
- case 'Ounces':
- return ($this->objShippingMethod->Ounces = $mixValue);
- default:
- try {
- return (parent::__set($strName, $mixValue));
- } catch (QCallerException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- }
- }
-
- }//end class
- }//end define
-
- ?>
|