<?php
|
|
require(__DATAGEN_CLASSES__ . '/OrderGen.class.php');
|
|
|
|
/**
|
|
* The Order class defined here represents the "order" table
|
|
* in the database, and extends from the code generated abstract OrderGen
|
|
* class, which contains all the basic CRUD-type functionality as well as
|
|
* basic methods to handle relationships and index-based loading.
|
|
*
|
|
* This class overrides several generated methods and also provides several
|
|
* other processing methods including sending emails on status change, setting
|
|
* shipping/billing addresses, creating shipping labels, etc..
|
|
*
|
|
* $Id: Order.class.php 514 2009-03-19 15:43:15Z erikwinn $
|
|
* @package Quasi
|
|
* @subpackage ORM
|
|
*
|
|
*/
|
|
class Order extends OrderGen
|
|
{
|
|
/**
|
|
* An array of new order items for a newly created order.
|
|
* Note: These OrderItems do not have the order_id set until SaveOrderItems is called and this
|
|
* may be called only after an the Order has been saved.
|
|
*
|
|
* @var array aryNewOrderItems - an array of OrderItems
|
|
*/
|
|
public $aryNewOrderItems;
|
|
/**
|
|
* An image to be used to print a shipping label
|
|
*@var gdimage objShippingLabelImage
|
|
*/
|
|
protected $objShippingLabelImage;
|
|
/**
|
|
* The weight and size members are for use during checkout - as yet they are temporary values
|
|
* and not tracked in the database by order since they are in the Product information.
|
|
*
|
|
*@todo - Consider putting dimensions (weight, size, etc ) into the Order table as well
|
|
* as they could also be (sorry) dimensional attributes ..
|
|
*@var integer the total weight in pounds
|
|
*/
|
|
protected $intTotalPounds = 0;
|
|
/**
|
|
*@var float the total weight in ounces
|
|
*/
|
|
protected $fltTotalOunces = 0;
|
|
/**
|
|
* This refers to the X axis, translates to "width" for shipping, "width" in product
|
|
* Why not "fltWidth"? Products may be eg. CAD designs, in which case "width" is ambiguous.
|
|
* Basing this on screen coordinates is more precise.
|
|
*@var float the total width in inches
|
|
*/
|
|
protected $fltXAxisSize = 0.0;
|
|
/**
|
|
* This refers to the Y axis, translates to "length" for shipping, "height" in product
|
|
*@var float the total height in inches
|
|
*/
|
|
protected $fltYAxisSize = 0.0;
|
|
/**
|
|
* This refers to the Z axis, translates to "height" for shipping, "depth" in product
|
|
*@var float the total height in inches
|
|
*/
|
|
protected $fltZAxisSize = 0.0;
|
|
/**
|
|
*@var boolean blnIsInternational - true if the ShippingCountryId != shipping origin country.
|
|
*/
|
|
protected $blnIsInternational;
|
|
/**
|
|
*@var boolean intShippingAddressId - the shipping address used to initialize the fields or null.
|
|
*/
|
|
protected $intShippingAddressId;
|
|
/**
|
|
*@var boolean intBillingAddressId - the billing address used to initialize the fields or null.
|
|
*/
|
|
protected $intBillingAddressId;
|
|
|
|
|
|
/**
|
|
* Default "to string" handler
|
|
* Allows pages to _p()/echo()/print() this object, and to define the default
|
|
* way this object would be outputted.
|
|
*
|
|
* Can also be called directly via $objOrder->__toString().
|
|
*
|
|
* @return string a nicely formatted string representation of this object
|
|
*/
|
|
public function __toString()
|
|
{
|
|
return sprintf('Order# %s', $this->intId);
|
|
}
|
|
/**
|
|
* This function sets the StatusId for the Order. Depending on the status it also
|
|
* can send an email notification to the customer. The Order is also Saved with
|
|
* the new status.
|
|
*/
|
|
public function SetStatus($intStatusId)
|
|
{
|
|
switch($intStatusId)
|
|
{
|
|
case OrderStatusType::Pending:
|
|
$this->SendPendingNotice();
|
|
break;
|
|
case OrderStatusType::Paid:
|
|
$this->SendPaidNotice();
|
|
break;
|
|
case OrderStatusType::Shipped:
|
|
if( 'PickUp' == $this->ShippingMethod->Carrier)
|
|
$this->SendLocalPickupNotice();
|
|
else
|
|
$this->SendShippingNotice();
|
|
break;
|
|
case OrderStatusType::Cancelled:
|
|
$this->SendCancellationNotice();
|
|
break;
|
|
case OrderStatusType::Problem:
|
|
$this->SendProblemNotice();
|
|
break;
|
|
default:
|
|
}
|
|
$this->StatusId = $intStatusId;
|
|
$this->Save(false, true);
|
|
$this->Reload();
|
|
}
|
|
/**
|
|
* Initializes the taxes by destination ..
|
|
*/
|
|
public function InitTax()
|
|
{
|
|
$objTaxRate = TaxRate::LoadByZoneId($this->ShippingZoneId);
|
|
if($objTaxRate)
|
|
$this->fltTax = $this->ProductTotalCharged * $objTaxRate->Rate;
|
|
}
|
|
/**
|
|
*Send a pending payment confirmation notification to the customer
|
|
*/
|
|
public function SendPendingNotice()
|
|
{
|
|
$objPerson = Person::Load($this->Account->PersonId);
|
|
|
|
$strText = Quasi::Translate('Dear') . ' ' . $objPerson->FullName . ",\n\n";
|
|
|
|
$strText .= Quasi::Translate('Thank You for your order! Your payment is currently pending.') . "\n";
|
|
$strText .= Quasi::Translate('You will receive a notification as soon as the payment has been confirmed.') . "\n\n";
|
|
|
|
$strText .= $this->formatEmailOrderItemsInfo();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= Quasi::Translate(' Thank You for placing an order with us!') . "\n";
|
|
$strText .= Quasi::Translate(' If you have any questions please email support at ') ;
|
|
$strText .= STORE_EMAIL_ADDRESS . "\n";
|
|
$strText .= STORE_NAME . ' ' . Quasi::Translate('Customer Service') . "\n";
|
|
|
|
$this->SendEmail($strText, STORE_NAME . ' Pending Payment Confirmation - Order #' . $this->Id );
|
|
}
|
|
/**
|
|
*Send a payment received confirmation notification to the customer
|
|
*/
|
|
public function SendPaidNotice()
|
|
{
|
|
$objPerson = Person::Load($this->Account->PersonId);
|
|
|
|
$strText = Quasi::Translate('Dear') . ' ' . $objPerson->FullName . ",\n\n";
|
|
|
|
$strText .= Quasi::Translate('Thank You for your order!') . "\n\n";
|
|
|
|
$strText .= $this->formatEmailOrderItemsInfo();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= $this->formatEmailOrderPaymentMethod();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= $this->formatEmailOrderShippingMethod();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= $this->formatEmailOrderShippingAddress();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= $this->formatEmailOrderBillingAddress();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= Quasi::Translate(' Thank You for placing an order with us!') . "\n";
|
|
$strText .= Quasi::Translate(' You will recieve a shipping confirmation as soon as your order is shipped.') . "\n";
|
|
$strText .= Quasi::Translate(' If you have any questions please email support at ') ;
|
|
$strText .= STORE_EMAIL_ADDRESS . "\n Thank You, \n";
|
|
$strText .= STORE_NAME . ' ' . Quasi::Translate('Customer Service') . "\n";
|
|
|
|
$this->SendEmail($strText, STORE_NAME . ' Payment Confirmation - Order #' . $this->Id );
|
|
}
|
|
/**
|
|
*Send a shipping confirmation notification to the customer
|
|
*/
|
|
public function SendShippingNotice()
|
|
{
|
|
$objPerson = Person::Load($this->Account->PersonId);
|
|
|
|
$strText = Quasi::Translate('Dear') . ' ' . $objPerson->FullName . ",\n\n";
|
|
|
|
$strText .= Quasi::Translate('Your order has been shipped!') . "\n\n";
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= $this->formatEmailOrderShippingMethod();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= $this->formatEmailOrderShippingAddress();
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= Quasi::Translate(' Thank You for placing an order with us!') . "\n";
|
|
$strText .= Quasi::Translate(' If you have any questions please email support at ') ;
|
|
$strText .= STORE_EMAIL_ADDRESS . "\n Thank You, \n";
|
|
$strText .= STORE_NAME . ' ' . Quasi::Translate('Customer Service') . "\n";
|
|
|
|
$this->SendEmail($strText, STORE_NAME . ' Shipping Confirmation - Order #' . $this->Id );
|
|
}
|
|
/**
|
|
*Send a local pickup confirmation notification to the customer
|
|
*/
|
|
public function SendLocalPickupNotice()
|
|
{
|
|
$objPerson = Person::Load($this->Account->PersonId);
|
|
|
|
$strText = Quasi::Translate('Dear') . ' ' . $objPerson->FullName . ",\n\n";
|
|
|
|
$strText .= Quasi::Translate(' Your order is ready!') . "\n\n";
|
|
$strText .= Quasi::Translate(' You can pickup your order during regular business hours.') . "\n";
|
|
$strText .= Quasi::Translate(' Our address is: ') . "\n\n";
|
|
$strText .= STORE_ADDRESS1 . "\n";
|
|
$strText .= STORE_ADDRESS2 . "\n";
|
|
$strText .= STORE_CITY . "\n";
|
|
$strText .= STORE_STATE . "\n";
|
|
$strText .= STORE_POSTAL_CODE . "\n";
|
|
$strText .= ' Phone: ' . STORE_PHONE . "\n";
|
|
$strText .= ' --------------------------------------------------' . "\n";
|
|
$strText .= Quasi::Translate(' Thank You for placing an order with us!') . "\n";
|
|
$strText .= Quasi::Translate(' If you have any questions please email support at ') ;
|
|
$strText .= STORE_EMAIL_ADDRESS . "\n Thank You, \n";
|
|
$strText .= STORE_NAME . ' ' . Quasi::Translate('Customer Service') . "\n";
|
|
|
|
$this->SendEmail($strText, STORE_NAME . ' Local Pickup Confirmation - Order #' . $this->Id );
|
|
}
|
|
/**
|
|
*Send a cancelation confirmation notification to the customer
|
|
*@todo - make cancellation email notice ..??
|
|
*/
|
|
public function SendCancellationNotice()
|
|
{
|
|
}
|
|
/**
|
|
*Send a problem notification to the customer
|
|
*/
|
|
public function SendProblemNotice()
|
|
{
|
|
$objPerson = Person::Load($this->Account->PersonId);
|
|
|
|
$strText = Quasi::Translate('Dear') . ' ' . $objPerson->FullName . ",\n\n";
|
|
|
|
$strText .= Quasi::Translate(' We have encountered a problem processing your order!') . "\n\n";
|
|
|
|
$strText .= Quasi::Translate(' Thank You for placing an order with us - we have run into a '
|
|
. 'problem that requires your attention.') . "\n";
|
|
$strText .= Quasi::Translate(' Please reply to this or email support at ') ;
|
|
$strText .= STORE_EMAIL_ADDRESS . " for further information with the Order number ("
|
|
. $this->Id . ") in the Subject line of the email. \nThank You, \n";
|
|
$strText .= STORE_NAME . ' ' . Quasi::Translate('Customer Service');
|
|
|
|
$this->SendEmail($strText, STORE_NAME . ' Problem Alert - Order #' . $this->Id );
|
|
}
|
|
/**
|
|
*Send an email message to the customer for this order.
|
|
*@param string strEmailBody - the text body of the email
|
|
*@param string strSubject - the subject line
|
|
*/
|
|
public function SendEmail($strEmailBody, $strSubject)
|
|
{
|
|
$objPerson = Person::Load($this->Account->PersonId);
|
|
$objEmail = new QEmailMessage();
|
|
$objEmail->Subject = $strSubject;
|
|
$objEmail->From = STORE_NAME . ' <' . STORE_EMAIL_ADDRESS . '>';
|
|
$objEmail->To = $objPerson->FullName . ' <' . $objPerson->EmailAddress . '>';
|
|
$objEmail->Body = $strEmailBody;
|
|
|
|
QEmailServer::Send($objEmail);
|
|
}
|
|
/**
|
|
*Print a shipping label for this order.
|
|
*/
|
|
public function CreateShippingLabel()
|
|
{
|
|
if('PickUp' == $this->ShippingMethod->Carrier)
|
|
return null;
|
|
|
|
// $this->ShippingMethod->TestMode = true;
|
|
|
|
$this->ShippingMethod->Init($this);
|
|
$objImage = $this->objShippingMethod->GetShippingLabel();
|
|
if($this->objShippingMethod->HasErrors)
|
|
die($this->objShippingMethod->Errors);
|
|
return $objImage;
|
|
}
|
|
/**
|
|
* This function adds an OrderItem to the NewOrderItems array - subsequently it will be
|
|
* associated with this order and saved with the other new items. The order_id is not
|
|
* checked and may be null, it will be set on saving. If another OrderItem for the Product
|
|
* already exists in the array, the quantity of the new item will be added to the existing item.
|
|
*
|
|
*@param OrderItem objNewOrderItem - a new order item for the new order.
|
|
*/
|
|
public function AddNewOrderItem(OrderItem $objNewOrderItem)
|
|
{
|
|
if(is_null( $objNewOrderItem->ProductId))
|
|
throw new QCallerException('Cannot add an OrderItem without a ProductId!');
|
|
$blnItemExists = false;
|
|
if($objNewOrderItem->Quantity > 0)
|
|
{
|
|
if(is_array($this->aryNewOrderItems))
|
|
{
|
|
foreach( $this->aryNewOrderItems as $objItem )
|
|
{
|
|
if( $objItem->ProductId == $objNewOrderItem->ProductId )
|
|
{
|
|
$objItem->Quantity += $objNewOrderItem->Quantity;
|
|
$blnItemExists = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if( ! $blnItemExists )
|
|
$this->aryNewOrderItems[] = $objNewOrderItem;
|
|
}
|
|
}
|
|
/**
|
|
* This function saves the array of new order items to the database making of them "real"
|
|
* order items.
|
|
*/
|
|
public function SaveNewOrderItems()
|
|
{
|
|
if( is_null($this->Id) )
|
|
throw new QCallerException('Cannot save OrderItems for an unsaved Order!');
|
|
|
|
if( is_array($this->aryNewOrderItems) && ! empty( $this->aryNewOrderItems ) )
|
|
{
|
|
foreach( $this->aryNewOrderItems as $objOrderItem )
|
|
{
|
|
$objOrderItem->OrderId = $this->Id;
|
|
$objOrderItem->StatusId = OrderItemStatusType::Ordered;
|
|
$objOrderItem->Save();
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* This function returns the array of new order items. It is provided to avoid buggy PHP get magic
|
|
* when returning arrays of objects.
|
|
* Note that the OrderItems may not have order_id set as they are new items for a new order
|
|
*@return array of OrderItems
|
|
*/
|
|
public function GetNewOrderItemsArray()
|
|
{
|
|
if( is_array($this->aryNewOrderItems))
|
|
return $this->aryNewOrderItems;
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* This fuction initializes the Shipping address fields
|
|
*@param Address objAddress - address to use for initialization
|
|
*/
|
|
public function SetShippingAddress(Address $objAddress)
|
|
{
|
|
$this->ShippingNamePrefix = $objAddress->Person->NamePrefix;
|
|
$this->ShippingFirstName = $objAddress->Person->FirstName;
|
|
$this->ShippingMiddleName = $objAddress->Person->MiddleName;
|
|
$this->ShippingLastName = $objAddress->Person->LastName;
|
|
$this->ShippingNameSuffix = $objAddress->Person->NameSuffix;
|
|
$this->ShippingCompany = $objAddress->Person->CompanyName;
|
|
$this->ShippingStreet1 = $objAddress->Street1;
|
|
$this->ShippingStreet2 = $objAddress->Street2;
|
|
$this->ShippingSuburb = $objAddress->Suburb;
|
|
$this->ShippingCounty = $objAddress->County;
|
|
$this->ShippingCity = $objAddress->City;
|
|
$this->ShippingZoneId = $objAddress->ZoneId;
|
|
$this->ShippingCountryId = $objAddress->CountryId;
|
|
$this->ShippingPostalCode = $objAddress->PostalCode;
|
|
|
|
$this->ShippingAddressId = $objAddress->Id;
|
|
$intStoreCountryId = CountryType::GetId(STORE_COUNTRY);
|
|
if($objAddress->CountryId != $intStoreCountryId)
|
|
$this->blnIsInternational = true;
|
|
else
|
|
$this->blnIsInternational = false;
|
|
|
|
}
|
|
/**
|
|
* This fuction initializes the Billing address fields
|
|
*@param Address objAddress - address to use for initialization
|
|
*/
|
|
public function SetBillingAddress(Address $objAddress)
|
|
{
|
|
$this->BillingNamePrefix = $objAddress->Person->NamePrefix;
|
|
$this->BillingFirstName = $objAddress->Person->FirstName;
|
|
$this->BillingMiddleName = $objAddress->Person->MiddleName;
|
|
$this->BillingLastName = $objAddress->Person->LastName;
|
|
$this->BillingNameSuffix = $objAddress->Person->NameSuffix;
|
|
$this->BillingCompany = $objAddress->Person->CompanyName;
|
|
$this->BillingStreet1 = $objAddress->Street1;
|
|
$this->BillingStreet2 = $objAddress->Street2;
|
|
$this->BillingSuburb = $objAddress->Suburb;
|
|
$this->BillingCounty = $objAddress->County;
|
|
$this->BillingCity = $objAddress->City;
|
|
$this->BillingZoneId = $objAddress->ZoneId;
|
|
$this->BillingCountryId = $objAddress->CountryId;
|
|
$this->BillingPostalCode = $objAddress->PostalCode;
|
|
|
|
$this->BillingAddressId = $objAddress->Id;
|
|
}
|
|
/**
|
|
* This fuction returns the Shipping address fields as an Address object - it attempts
|
|
* to return an existing address by searching for a match on fields, if that fails it
|
|
* calls createShippingAddress and returns a new Address object initilized with the
|
|
* values in the order.
|
|
*@return Address objAddress - address containing Shipping address fields
|
|
*/
|
|
public function GetShippingAddress()
|
|
{
|
|
if($this->AccountId)
|
|
$intAccountId = $this->AccountId;
|
|
elseif(IndexPage::$objAccount)
|
|
$intAccountId = IndexPage::$objAccount->Id;
|
|
else
|
|
$intAccountId = null;
|
|
|
|
$aryPersonConditions = array();
|
|
if($intAccountId)
|
|
$aryPersonConditions[] = QQ::Equal(QQN::Person()->Account->Id, $intAccountId);
|
|
$aryPersonConditions[] = QQ::Equal(QQN::Person()->FirstName, $this->ShippingFirstName);
|
|
$aryPersonConditions[] = QQ::Equal(QQN::Person()->LastName, $this->ShippingLastName);
|
|
$objPerson = Person::QuerySingle( QQ::AndCondition($aryPersonConditions) );
|
|
|
|
//for imported orders the person may not yet exist so ..
|
|
if(!$objPerson instanceof Person)
|
|
{
|
|
$objPerson = new Person();
|
|
$objPerson->FirstName = $this->ShippingFirstName;
|
|
$objPerson->LastName = $this->ShippingLastName;
|
|
$objPerson->EmailAddress = $this->Account->Person->EmailAddress;
|
|
$objPerson->OwnerPersonId = $this->Account->Person->Id;
|
|
$objPerson->IsVirtual = true;
|
|
$objPerson->Save();
|
|
}
|
|
$aryConditions = array();
|
|
// $aryConditions[] = QQ::Equal(QQN::Address()->PersonId, $this->Account->PersonId );
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->PersonId, $objPerson->Id );
|
|
|
|
if(!empty($this->ShippingStreet1))
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->Street1, $this->ShippingStreet1);
|
|
if(!empty($this->ShippingStreet2))
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->Street2, $this->ShippingStreet2);
|
|
if(!empty($this->ShippingSuburb))
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->Suburb, $this->ShippingSuburb);
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->City, $this->ShippingCity);
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->ZoneId, $this->ShippingZoneId);
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->CountryId, $this->ShippingCountryId);
|
|
|
|
$objAddress = Address::QuerySingle( QQ::AndCondition( $aryConditions ));
|
|
|
|
if($objAddress instanceof Address)
|
|
return $objAddress;
|
|
return $this->createShippingAddress();
|
|
|
|
}
|
|
/**
|
|
* This fuction returns the Billing address fields as an Address object - it attempts
|
|
* to return an existing address by searching for a match on fields, if that fails it
|
|
* calls createBillingAddress and returns a new Address object initilized with the
|
|
* values in the order.
|
|
*@return Address objAddress - address containing Billing address fields
|
|
*/
|
|
public function GetBillingAddress()
|
|
{
|
|
if($this->AccountId)
|
|
$intAccountId = $this->AccountId;
|
|
elseif(IndexPage::$objAccount)
|
|
$intAccountId = IndexPage::$objAccount->Id;
|
|
else
|
|
$intAccountId = null;
|
|
|
|
$aryPersonConditions = array();
|
|
if($intAccountId)
|
|
$aryPersonConditions[] = QQ::Equal(QQN::Person()->Account->Id, $intAccountId);
|
|
$aryPersonConditions[] = QQ::Equal(QQN::Person()->FirstName, $this->ShippingFirstName);
|
|
$aryPersonConditions[] = QQ::Equal(QQN::Person()->LastName, $this->ShippingLastName);
|
|
$objPerson = Person::QuerySingle( QQ::AndCondition($aryPersonConditions) );
|
|
|
|
//for imported orders the person may not yet exist so ..
|
|
if(!$objPerson instanceof Person)
|
|
{
|
|
$objPerson = new Person();
|
|
$objPerson->FirstName = $this->ShippingFirstName;
|
|
$objPerson->LastName = $this->ShippingLastName;
|
|
$objPerson->EmailAddress = $this->Account->Person->EmailAddress;
|
|
$objPerson->OwnerPersonId = $this->Account->Person->Id;
|
|
$objPerson->IsVirtual = true;
|
|
$objPerson->Save();
|
|
}
|
|
|
|
$aryConditions = array();
|
|
|
|
// $aryConditions[] = QQ::Equal(QQN::Address()->PersonId, $this->Account->PersonId );
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->PersonId, $objPerson->Id );
|
|
|
|
if(!empty($this->BillingStreet1))
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->Street1, $this->BillingStreet1);
|
|
if(!empty($this->BillingStreet2))
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->Street2, $this->BillingStreet2);
|
|
if(!empty($this->BillingSuburb))
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->Suburb, $this->BillingSuburb);
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->City, $this->BillingCity);
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->ZoneId, $this->BillingZoneId);
|
|
$aryConditions[] = QQ::Equal(QQN::Address()->CountryId, $this->BillingCountryId);
|
|
|
|
$objAddress = Address::QuerySingle( QQ::AndCondition( $aryConditions ));
|
|
|
|
if($objAddress instanceof Address)
|
|
return $objAddress;
|
|
return $this->createBillingAddress();
|
|
|
|
}
|
|
/**
|
|
* Insert this order, including the id, and timestamps - Save() autoincrements Id, this function
|
|
* is for overriding that behaviour (eg. for imports).
|
|
* @todo - merge with Save()?
|
|
*/
|
|
public function Insert()
|
|
{
|
|
$objDatabase = Order::GetDatabase();
|
|
|
|
$strQuery = 'INSERT INTO `order` (
|
|
`id`,
|
|
`account_id`,
|
|
`creation_date`,
|
|
`last_modification_date`,
|
|
`completion_date`,
|
|
`shipping_cost`,
|
|
`product_total_cost`,
|
|
`shipping_charged`,
|
|
`handling_charged`,
|
|
`tax`,
|
|
`product_total_charged`,
|
|
`shipping_name_prefix`,
|
|
`shipping_first_name`,
|
|
`shipping_middle_name`,
|
|
`shipping_last_name`,
|
|
`shipping_name_suffix`,
|
|
`shipping_company`,
|
|
`shipping_street1`,
|
|
`shipping_street2`,
|
|
`shipping_suburb`,
|
|
`shipping_county`,
|
|
`shipping_city`,
|
|
`shipping_zone_id`,
|
|
`shipping_country_id`,
|
|
`shipping_postal_code`,
|
|
`billing_name_prefix`,
|
|
`billing_first_name`,
|
|
`billing_middle_name`,
|
|
`billing_last_name`,
|
|
`billing_name_suffix`,
|
|
`billing_company`,
|
|
`billing_street1`,
|
|
`billing_street2`,
|
|
`billing_suburb`,
|
|
`billing_county`,
|
|
`billing_city`,
|
|
`billing_zone_id`,
|
|
`billing_country_id`,
|
|
`billing_postal_code`,
|
|
`notes`,
|
|
`shipping_method_id`,
|
|
`payment_method_id`,
|
|
`status_id`,
|
|
`type_id`
|
|
) VALUES (
|
|
' . $objDatabase->SqlVariable($this->intId) . ',
|
|
' . $objDatabase->SqlVariable($this->intAccountId) . ',
|
|
' . $objDatabase->SqlVariable($this->strCreationDate) . ',
|
|
' . $objDatabase->SqlVariable($this->strLastModificationDate) . ',
|
|
' . $objDatabase->SqlVariable($this->dttCompletionDate) . ',
|
|
' . $objDatabase->SqlVariable($this->fltShippingCost) . ',
|
|
' . $objDatabase->SqlVariable($this->fltProductTotalCost) . ',
|
|
' . $objDatabase->SqlVariable($this->fltShippingCharged) . ',
|
|
' . $objDatabase->SqlVariable($this->fltHandlingCharged) . ',
|
|
' . $objDatabase->SqlVariable($this->fltTax) . ',
|
|
' . $objDatabase->SqlVariable($this->fltProductTotalCharged) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingNamePrefix) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingFirstName) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingMiddleName) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingLastName) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingNameSuffix) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingCompany) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingStreet1) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingStreet2) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingSuburb) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingCounty) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingCity) . ',
|
|
' . $objDatabase->SqlVariable($this->intShippingZoneId) . ',
|
|
' . $objDatabase->SqlVariable($this->intShippingCountryId) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingPostalCode) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingNamePrefix) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingFirstName) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingMiddleName) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingLastName) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingNameSuffix) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingCompany) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingStreet1) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingStreet2) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingSuburb) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingCounty) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingCity) . ',
|
|
' . $objDatabase->SqlVariable($this->intBillingZoneId) . ',
|
|
' . $objDatabase->SqlVariable($this->intBillingCountryId) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingPostalCode) . ',
|
|
' . $objDatabase->SqlVariable($this->strNotes) . ',
|
|
' . $objDatabase->SqlVariable($this->intShippingMethodId) . ',
|
|
' . $objDatabase->SqlVariable($this->intPaymentMethodId) . ',
|
|
' . $objDatabase->SqlVariable($this->intStatusId) . ',
|
|
' . $objDatabase->SqlVariable($this->intTypeId) . ' )';
|
|
|
|
try{
|
|
$objDatabase->NonQuery($strQuery);
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
$this->__blnRestored = true;
|
|
}
|
|
/**
|
|
* Save this Order - overrides the generated class implementation to be able to update last_modification_date
|
|
*
|
|
* @param bool $blnForceInsert
|
|
* @param bool $blnForceUpdate
|
|
* @return integer - the Id of this Order
|
|
*/
|
|
public function Save($blnForceInsert = false, $blnForceUpdate = false)
|
|
{
|
|
// Get the Database Object for this Class
|
|
$objDatabase = Order::GetDatabase();
|
|
if(! $this->dttCompletionDate instanceof QDateTime)
|
|
$this->dttCompletionDate = new QDateTime();
|
|
$mixToReturn = null;
|
|
$strLastModificationDate = date("Y-m-d H:i:s");
|
|
|
|
try {
|
|
if ((!$this->__blnRestored) || ($blnForceInsert))
|
|
{
|
|
// Perform an INSERT query
|
|
$strQuery = 'INSERT INTO `order` (
|
|
`account_id`,
|
|
`last_modification_date`,
|
|
`completion_date`,
|
|
`shipping_cost`,
|
|
`product_total_cost`,
|
|
`shipping_charged`,
|
|
`handling_charged`,
|
|
`tax`,
|
|
`product_total_charged`,
|
|
`shipping_name_prefix`,
|
|
`shipping_first_name`,
|
|
`shipping_middle_name`,
|
|
`shipping_last_name`,
|
|
`shipping_name_suffix`,
|
|
`shipping_company`,
|
|
`shipping_street1`,
|
|
`shipping_street2`,
|
|
`shipping_suburb`,
|
|
`shipping_county`,
|
|
`shipping_city`,
|
|
`shipping_zone_id`,
|
|
`shipping_country_id`,
|
|
`shipping_postal_code`,
|
|
`billing_name_prefix`,
|
|
`billing_first_name`,
|
|
`billing_middle_name`,
|
|
`billing_last_name`,
|
|
`billing_name_suffix`,
|
|
`billing_company`,
|
|
`billing_street1`,
|
|
`billing_street2`,
|
|
`billing_suburb`,
|
|
`billing_county`,
|
|
`billing_city`,
|
|
`billing_zone_id`,
|
|
`billing_country_id`,
|
|
`billing_postal_code`,
|
|
`notes`,
|
|
`shipping_method_id`,
|
|
`payment_method_id`,
|
|
`status_id`,
|
|
`type_id`
|
|
) VALUES (
|
|
' . $objDatabase->SqlVariable($this->intAccountId) . ',
|
|
' . $objDatabase->SqlVariable($strLastModificationDate) . ',
|
|
' . $objDatabase->SqlVariable($this->dttCompletionDate) . ',
|
|
' . $objDatabase->SqlVariable($this->fltShippingCost) . ',
|
|
' . $objDatabase->SqlVariable($this->fltProductTotalCost) . ',
|
|
' . $objDatabase->SqlVariable($this->fltShippingCharged) . ',
|
|
' . $objDatabase->SqlVariable($this->fltHandlingCharged) . ',
|
|
' . $objDatabase->SqlVariable($this->fltTax) . ',
|
|
' . $objDatabase->SqlVariable($this->fltProductTotalCharged) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingNamePrefix) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingFirstName) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingMiddleName) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingLastName) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingNameSuffix) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingCompany) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingStreet1) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingStreet2) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingSuburb) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingCounty) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingCity) . ',
|
|
' . $objDatabase->SqlVariable($this->intShippingZoneId) . ',
|
|
' . $objDatabase->SqlVariable($this->intShippingCountryId) . ',
|
|
' . $objDatabase->SqlVariable($this->strShippingPostalCode) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingNamePrefix) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingFirstName) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingMiddleName) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingLastName) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingNameSuffix) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingCompany) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingStreet1) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingStreet2) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingSuburb) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingCounty) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingCity) . ',
|
|
' . $objDatabase->SqlVariable($this->intBillingZoneId) . ',
|
|
' . $objDatabase->SqlVariable($this->intBillingCountryId) . ',
|
|
' . $objDatabase->SqlVariable($this->strBillingPostalCode) . ',
|
|
' . $objDatabase->SqlVariable($this->strNotes) . ',
|
|
' . $objDatabase->SqlVariable($this->intShippingMethodId) . ',
|
|
' . $objDatabase->SqlVariable($this->intPaymentMethodId) . ',
|
|
' . $objDatabase->SqlVariable($this->intStatusId) . ',
|
|
' . $objDatabase->SqlVariable($this->intTypeId) . '
|
|
)
|
|
';
|
|
$objDatabase->NonQuery($strQuery);
|
|
// Update Identity column and return its value
|
|
$mixToReturn = $this->intId = $objDatabase->InsertId('order', 'id');
|
|
} else {
|
|
// Perform an UPDATE query
|
|
|
|
if (!$blnForceUpdate)
|
|
{
|
|
// Perform the Optimistic Locking check
|
|
$objResult = $objDatabase->Query('
|
|
SELECT
|
|
`last_modification_date`
|
|
FROM
|
|
`order`
|
|
WHERE
|
|
`id` = ' . $objDatabase->SqlVariable($this->intId) . '
|
|
');
|
|
|
|
$objRow = $objResult->FetchArray();
|
|
if ($objRow[0] != $this->strLastModificationDate)
|
|
throw new QOptimisticLockingException('Order');
|
|
}
|
|
|
|
// Perform the UPDATE query
|
|
$objDatabase->NonQuery('
|
|
UPDATE
|
|
`order`
|
|
SET
|
|
`account_id` = ' . $objDatabase->SqlVariable($this->intAccountId) . ',
|
|
`last_modification_date` = ' . $objDatabase->SqlVariable($strLastModificationDate) . ',
|
|
`completion_date` = ' . $objDatabase->SqlVariable($this->dttCompletionDate) . ',
|
|
`shipping_cost` = ' . $objDatabase->SqlVariable($this->fltShippingCost) . ',
|
|
`product_total_cost` = ' . $objDatabase->SqlVariable($this->fltProductTotalCost) . ',
|
|
`shipping_charged` = ' . $objDatabase->SqlVariable($this->fltShippingCharged) . ',
|
|
`handling_charged` = ' . $objDatabase->SqlVariable($this->fltHandlingCharged) . ',
|
|
`tax` = ' . $objDatabase->SqlVariable($this->fltTax) . ',
|
|
`product_total_charged` = ' . $objDatabase->SqlVariable($this->fltProductTotalCharged) . ',
|
|
`shipping_name_prefix` = ' . $objDatabase->SqlVariable($this->strShippingNamePrefix) . ',
|
|
`shipping_first_name` = ' . $objDatabase->SqlVariable($this->strShippingFirstName) . ',
|
|
`shipping_middle_name` = ' . $objDatabase->SqlVariable($this->strShippingMiddleName) . ',
|
|
`shipping_last_name` = ' . $objDatabase->SqlVariable($this->strShippingLastName) . ',
|
|
`shipping_name_suffix` = ' . $objDatabase->SqlVariable($this->strShippingNameSuffix) . ',
|
|
`shipping_company` = ' . $objDatabase->SqlVariable($this->strShippingCompany) . ',
|
|
`shipping_street1` = ' . $objDatabase->SqlVariable($this->strShippingStreet1) . ',
|
|
`shipping_street2` = ' . $objDatabase->SqlVariable($this->strShippingStreet2) . ',
|
|
`shipping_suburb` = ' . $objDatabase->SqlVariable($this->strShippingSuburb) . ',
|
|
`shipping_county` = ' . $objDatabase->SqlVariable($this->strShippingCounty) . ',
|
|
`shipping_city` = ' . $objDatabase->SqlVariable($this->strShippingCity) . ',
|
|
`shipping_zone_id` = ' . $objDatabase->SqlVariable($this->intShippingZoneId) . ',
|
|
`shipping_country_id` = ' . $objDatabase->SqlVariable($this->intShippingCountryId) . ',
|
|
`shipping_postal_code` = ' . $objDatabase->SqlVariable($this->strShippingPostalCode) . ',
|
|
`billing_name_prefix` = ' . $objDatabase->SqlVariable($this->strBillingNamePrefix) . ',
|
|
`billing_first_name` = ' . $objDatabase->SqlVariable($this->strBillingFirstName) . ',
|
|
`billing_middle_name` = ' . $objDatabase->SqlVariable($this->strBillingMiddleName) . ',
|
|
`billing_last_name` = ' . $objDatabase->SqlVariable($this->strBillingLastName) . ',
|
|
`billing_name_suffix` = ' . $objDatabase->SqlVariable($this->strBillingNameSuffix) . ',
|
|
`billing_company` = ' . $objDatabase->SqlVariable($this->strBillingCompany) . ',
|
|
`billing_street1` = ' . $objDatabase->SqlVariable($this->strBillingStreet1) . ',
|
|
`billing_street2` = ' . $objDatabase->SqlVariable($this->strBillingStreet2) . ',
|
|
`billing_suburb` = ' . $objDatabase->SqlVariable($this->strBillingSuburb) . ',
|
|
`billing_county` = ' . $objDatabase->SqlVariable($this->strBillingCounty) . ',
|
|
`billing_city` = ' . $objDatabase->SqlVariable($this->strBillingCity) . ',
|
|
`billing_zone_id` = ' . $objDatabase->SqlVariable($this->intBillingZoneId) . ',
|
|
`billing_country_id` = ' . $objDatabase->SqlVariable($this->intBillingCountryId) . ',
|
|
`billing_postal_code` = ' . $objDatabase->SqlVariable($this->strBillingPostalCode) . ',
|
|
`notes` = ' . $objDatabase->SqlVariable($this->strNotes) . ',
|
|
`shipping_method_id` = ' . $objDatabase->SqlVariable($this->intShippingMethodId) . ',
|
|
`payment_method_id` = ' . $objDatabase->SqlVariable($this->intPaymentMethodId) . ',
|
|
`status_id` = ' . $objDatabase->SqlVariable($this->intStatusId) . ',
|
|
`type_id` = ' . $objDatabase->SqlVariable($this->intTypeId) . '
|
|
WHERE
|
|
`id` = ' . $objDatabase->SqlVariable($this->intId) . '
|
|
');
|
|
}
|
|
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
|
|
$this->__blnRestored = true;
|
|
|
|
// Update Local Timestamp
|
|
$objResult = $objDatabase->Query('
|
|
SELECT
|
|
`creation_date`
|
|
FROM
|
|
`order`
|
|
WHERE
|
|
`id` = ' . $objDatabase->SqlVariable($this->intId) . '
|
|
');
|
|
|
|
$objRow = $objResult->FetchArray();
|
|
$this->strCreationDate = $objRow[0];
|
|
|
|
$this->strLastModificationDate = $strLastModificationDate;
|
|
|
|
return $mixToReturn;
|
|
}
|
|
/**
|
|
* Utility function to format the list of Order information in a customer email notification
|
|
* @return string - a string containing the formatted information
|
|
*/
|
|
protected function formatEmailOrderItemsInfo()
|
|
{
|
|
$strToReturn = Quasi::Translate(' The following is your order information') . ":\n\n";
|
|
$strToReturn .= ' --------------------------------------------------' . "\n";
|
|
$strToReturn .= Quasi::Translate('Order Number') . ': ' . $this->Id . "\n";
|
|
$strToReturn .= Quasi::Translate('Detailed Invoice') . ': http://' . Quasi::$ServerName . __QUASI_SUBDIRECTORY__
|
|
. '/index.php/AccountHome/Order/' . $this->Id . "\n";
|
|
$strToReturn .= Quasi::Translate('Date Ordered') . ': ' . $this->CreationDate . "\n" ;
|
|
|
|
$strToReturn .= ' --------------------------------------------------' . "\n";
|
|
$strToReturn .= Quasi::Translate('Products on Order') . ":\n\n" ;
|
|
foreach( OrderItem::LoadArrayByOrderId($this->Id) as $objOrderItem )
|
|
{
|
|
$objProduct = Product::Load($objOrderItem->ProductId);
|
|
$strToReturn .= $objOrderItem->Quantity . ' ' . $objProduct->Name . ': ' . $objProduct->Model
|
|
. ' [' . number_format($objProduct->Height, 2 ) . '" x ' . number_format($objProduct->Width, 2) . '" ]'
|
|
. ' at ' . money_format('%n', $objProduct->RetailPrice )
|
|
. '/ea. = ' . money_format('%n', $objProduct->RetailPrice * $objOrderItem->Quantity ) . "\n";
|
|
|
|
}
|
|
$strToReturn .= "\n" . Quasi::Translate('Subtotal') . ': ' . money_format('%n', $this->ProductTotalCharged);
|
|
$strToReturn .= "\n" . Quasi::Translate('Shipping') . ': ' . money_format('%n', $this->ShippingCharged);
|
|
$strToReturn .= "\n" . Quasi::Translate('Handling') . ': ' . money_format('%n', $this->HandlingCharged);
|
|
$strToReturn .= "\n" . Quasi::Translate('Total') . ': ' . money_format('%n', ($this->HandlingCharged
|
|
+ $this->ShippingCharged
|
|
+ $this->ProductTotalCharged) ) . "\n";
|
|
return $strToReturn;
|
|
}
|
|
/**
|
|
* Utility function to format the Payment method in a customer email notification
|
|
* @return string - a string containing the formatted information
|
|
*/
|
|
protected function formatEmailOrderPaymentMethod()
|
|
{
|
|
$objPaymentMethod = PaymentMethod::Load($this->PaymentMethodId);
|
|
$strToReturn = Quasi::Translate('Payment Method') . ": \n";
|
|
$strToReturn .= PaymentType::ToString($objPaymentMethod->PaymentTypeId) . ' via ' . $objPaymentMethod->ServiceProvider . "\n";
|
|
return $strToReturn;
|
|
}
|
|
/**
|
|
* Utility function to format the Shipping method in a customer email notification
|
|
* @return string - a string containing the formatted information
|
|
*/
|
|
protected function formatEmailOrderShippingMethod()
|
|
{
|
|
$objShippingMethod = ShippingMethod::Load($this->ShippingMethodId);
|
|
$strToReturn = Quasi::Translate('Shipping Method') . ": \n";
|
|
$strToReturn .= $objShippingMethod->Title . ' ' . $objShippingMethod->ServiceType . "\n";
|
|
$strToReturn .= Quasi::Translate('Estimated Transit time: ') . $objShippingMethod->TransitTime . "\n";
|
|
return $strToReturn;
|
|
}
|
|
/**
|
|
* Utility function to format the Shipping Address information in a customer email notification
|
|
* @return string - a string containing the formatted information
|
|
*/
|
|
protected function formatEmailOrderShippingAddress()
|
|
{
|
|
$strToReturn = Quasi::Translate('Delivery Address:') . "\n\n";
|
|
if('' != $this->ShippingCompany )
|
|
$strToReturn .= $this->ShippingCompany . "\n";
|
|
if('' != $this->ShippingNamePrefix )
|
|
$strToReturn .= $this->ShippingNamePrefix . ' ';
|
|
$strToReturn .= $this->ShippingFirstName . ' ';
|
|
if('' != $this->ShippingMiddleName )
|
|
$strToReturn .= $this->ShippingMiddleName . ' ';
|
|
$strToReturn .= $this->ShippingLastName. ' ';
|
|
if('' != $this->ShippingNameSuffix )
|
|
$strToReturn .= $this->ShippingNameSuffix . ' ';
|
|
$strToReturn .= "\n" . $this->ShippingStreet1 . "\n";
|
|
if('' != $this->ShippingStreet2)
|
|
$strToReturn .= $this->ShippingStreet2 . "\n";
|
|
if('' != $this->ShippingSuburb)
|
|
$strToReturn .= $this->ShippingSuburb . "\n";
|
|
if('' != $this->ShippingCounty)
|
|
$strToReturn .= $this->ShippingCounty . "\n";
|
|
$strToReturn .= $this->ShippingCity . "\n";
|
|
$strToReturn .= ZoneType::ToString($this->ShippingZoneId) . "\n";
|
|
$strToReturn .= $this->ShippingPostalCode . "\n";
|
|
$strToReturn .= CountryType::ToString($this->ShippingCountryId) . "\n";
|
|
return $strToReturn;
|
|
}
|
|
/**
|
|
* Utility function to format the Billing Address information in a customer email notification
|
|
* @return string - a string containing the formatted information
|
|
*/
|
|
protected function formatEmailOrderBillingAddress()
|
|
{
|
|
$strToReturn = Quasi::Translate('Billing Address:') . "\n\n";
|
|
if('' != $this->BillingCompany )
|
|
$strToReturn .= $this->BillingCompany . "\n";
|
|
if('' != $this->BillingNamePrefix )
|
|
$strToReturn .= $this->BillingNamePrefix . ' ';
|
|
$strToReturn .= $this->BillingFirstName . ' ';
|
|
if('' != $this->BillingMiddleName )
|
|
$strToReturn .= $this->BillingMiddleName . ' ';
|
|
$strToReturn .= $this->BillingLastName. ' ';
|
|
if('' != $this->BillingNameSuffix )
|
|
$strToReturn .= $this->BillingNameSuffix . ' ';
|
|
$strToReturn .= "\n" . $this->BillingStreet1 . "\n";
|
|
if('' != $this->BillingStreet2)
|
|
$strToReturn .= $this->BillingStreet2 . "\n";
|
|
if('' != $this->BillingSuburb)
|
|
$strToReturn .= $this->BillingSuburb . "\n";
|
|
if('' != $this->BillingCounty)
|
|
$strToReturn .= $this->BillingCounty . "\n";
|
|
$strToReturn .= $this->BillingCity . "\n";
|
|
$strToReturn .= ZoneType::ToString($this->BillingZoneId) . "\n";
|
|
$strToReturn .= $this->BillingPostalCode . "\n";
|
|
$strToReturn .= CountryType::ToString($this->BillingCountryId) . "\n";
|
|
return $strToReturn;
|
|
}
|
|
/**
|
|
* This fuction returns the Shipping address fields as an Address object
|
|
*@return Address objAddress - address containing Shipping address fields
|
|
*/
|
|
protected function createShippingAddress()
|
|
{
|
|
$objShippingAddress = new Address();
|
|
$objShippingAddress->PersonId = $this->Account->PersonId;
|
|
$objShippingAddress->Street1 = $this->ShippingStreet1;
|
|
$objShippingAddress->Street2 = $this->ShippingStreet2;
|
|
$objShippingAddress->Suburb = $this->ShippingSuburb;
|
|
$objShippingAddress->County = $this->ShippingCounty;
|
|
$objShippingAddress->City = $this->ShippingCity;
|
|
$objShippingAddress->ZoneId = $this->ShippingZoneId;
|
|
$objShippingAddress->CountryId = $this->ShippingCountryId;
|
|
$objShippingAddress->PostalCode = $this->ShippingPostalCode;
|
|
$objShippingAddress->TypeId = AddressType::Shipping;
|
|
$objShippingAddress->Save();
|
|
return $objShippingAddress;
|
|
}
|
|
/**
|
|
* This fuction returns the Billing address fields as an Address object
|
|
*@return Address objAddress - address containing Billing address fields
|
|
*/
|
|
protected function createBillingAddress()
|
|
{
|
|
$objBillingAddress = new Address();
|
|
$objBillingAddress->PersonId = $this->Account->PersonId;
|
|
$objBillingAddress->Street1 = $this->BillingStreet1;
|
|
$objBillingAddress->Street2 = $this->BillingStreet2;
|
|
$objBillingAddress->Suburb = $this->BillingSuburb;
|
|
$objBillingAddress->County = $this->BillingCounty;
|
|
$objBillingAddress->City = $this->BillingCity;
|
|
$objBillingAddress->ZoneId = $this->BillingZoneId;
|
|
$objBillingAddress->CountryId = $this->BillingCountryId;
|
|
$objBillingAddress->PostalCode = $this->BillingPostalCode;
|
|
$objBillingAddress->TypeId = AddressType::Billing;
|
|
$objBillingAddress->Save();
|
|
return $objBillingAddress;
|
|
}
|
|
|
|
public function __get($strName)
|
|
{
|
|
switch ($strName) {
|
|
case 'FullBillingName':
|
|
$strToReturn = '';
|
|
if('' != $this->BillingNamePrefix )
|
|
$strToReturn .= $this->BillingNamePrefix . ' ';
|
|
$strToReturn .= $this->BillingFirstName . ' ';
|
|
if('' != $this->BillingMiddleName )
|
|
$strToReturn .= $this->BillingMiddleName . ' ';
|
|
$strToReturn .= $this->BillingLastName. ' ';
|
|
if('' != $this->BillingNameSuffix )
|
|
$strToReturn .= $this->BillingNameSuffix . ' ';
|
|
return $strToReturn;
|
|
case 'FullShippingName':
|
|
$strToReturn = '';
|
|
if('' != $this->ShippingNamePrefix )
|
|
$strToReturn .= $this->ShippingNamePrefix . ' ';
|
|
$strToReturn .= $this->ShippingFirstName . ' ';
|
|
if('' != $this->ShippingMiddleName )
|
|
$strToReturn .= $this->ShippingMiddleName . ' ';
|
|
$strToReturn .= $this->ShippingLastName. ' ';
|
|
if('' != $this->ShippingNameSuffix )
|
|
$strToReturn .= $this->ShippingNameSuffix . ' ';
|
|
return $strToReturn;
|
|
case 'ShippingCountry':
|
|
return ($this->ShippingCountryId) ? CountryType::$NameArray[$this->ShippingCountryId] : null;
|
|
case 'BillingCountry':
|
|
return ($this->BillingCountryId) ? CountryType::$NameArray[$this->BillingCountryId] : null;
|
|
case 'ShippingZone':
|
|
case 'ShippingState':
|
|
return ($this->ShippingZoneId) ? ZoneType::$NameArray[$this->ShippingZoneId] : null;
|
|
case 'BillingZone':
|
|
case 'BillingState':
|
|
return ($this->BillingZoneId) ? ZoneType::$NameArray[$this->BillingZoneId] : null;
|
|
case 'TotalPounds':
|
|
return $this->intTotalPounds;
|
|
case 'TotalOunces':
|
|
return $this->fltTotalOunces;
|
|
case 'XAxisSize':
|
|
return $this->fltXAxisSize;
|
|
case 'YAxisSize':
|
|
return $this->fltYAxisSize;
|
|
case 'ZAxisSize':
|
|
return $this->fltZAxisSize;
|
|
case 'IsInternational':
|
|
if(isset($this->blnIsInternational))
|
|
return $this->blnIsInternational;
|
|
else
|
|
return ($this->ShippingCountryId != CountryType::GetId(STORE_COUNTRY) );
|
|
case 'ShippingAddressId':
|
|
return $this->intShippingAddressId;
|
|
case 'BillingAddressId':
|
|
return $this->intBillingAddressId;
|
|
case 'ExtraDocumentImages':
|
|
return $this->ShippingMethod->ExtraDocumentImages;
|
|
case 'CustomsFormImages':
|
|
return $this->ShippingMethod->CustomsFormImages;
|
|
|
|
default:
|
|
try {
|
|
return parent::__get($strName);
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
}
|
|
}
|
|
public function __set($strName, $mixValue)
|
|
{
|
|
switch ($strName)
|
|
{
|
|
case 'Restored':
|
|
try {
|
|
return ($this->__blnRestored = QType::Cast($mixValue, QType::Boolean));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'Id':
|
|
try {
|
|
return ($this->intId = QType::Cast($mixValue, QType::Integer));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'StatusId':
|
|
try {
|
|
$intStatusIdCheck = QType::Cast($mixValue, QType::Integer);
|
|
$blnStatusChanged = ($intStatusIdCheck != $this->intStatusId);
|
|
$this->intStatusId = QType::Cast($mixValue, QType::Integer);
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
if($this->Id)
|
|
{
|
|
if($blnStatusChanged)
|
|
{
|
|
$objOrderStatusHistory = new OrderStatusHistory();
|
|
$objOrderStatusHistory->OrderId = $this->Id;
|
|
$objOrderStatusHistory->StatusId = $this->intStatusId;
|
|
$objOrderStatusHistory->Save();
|
|
switch($mixValue)
|
|
{
|
|
///set completion date when shipped:
|
|
case OrderStatusType::Shipped:
|
|
$this->dttCompletionDate = QDateTime::Now();
|
|
break;
|
|
//add other cases as needed ..
|
|
}
|
|
}
|
|
}
|
|
return $this->intStatusId;
|
|
case 'CreationDate':
|
|
try {
|
|
return ($this->strCreationDate = QType::Cast($mixValue, QType::String));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'LastModificationDate':
|
|
try {
|
|
return ($this->strLastModificationDate = QType::Cast($mixValue, QType::String));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'CompletionDate':
|
|
if(is_string($mixValue))
|
|
try {
|
|
return($this->dttCompletionDate = new QDateTime($mixValue));
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
else
|
|
try {
|
|
return ($this->dttCompletionDate = QType::Cast($mixValue, 'QDateTime'));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
/* try {
|
|
return ($this->strCompletionDate = QType::Cast($mixValue, QType::String));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}*/
|
|
case 'TotalPounds':
|
|
try {
|
|
return ($this->intTotalPounds = QType::Cast($mixValue, QType::Integer));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'TotalOunces':
|
|
try {
|
|
return ($this->fltTotalOunces = QType::Cast($mixValue, QType::Float));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'XAxisSize':
|
|
try {
|
|
return ($this->fltXAxisSize = QType::Cast($mixValue, QType::Float));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'YAxisSize':
|
|
try {
|
|
return ($this->fltYAxisSize = QType::Cast($mixValue, QType::Float));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'ZAxisSize':
|
|
try {
|
|
return ($this->fltZAxisSize = QType::Cast($mixValue, QType::Float));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'IsInternational':
|
|
try {
|
|
return ($this->blnIsInternational = QType::Cast($mixValue, QType::Boolean));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'ShippingAddressId':
|
|
try {
|
|
return ($this->intShippingAddressId = QType::Cast($mixValue, QType::Integer));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
case 'BillingAddressId':
|
|
try {
|
|
return ($this->intBillingAddressId = QType::Cast($mixValue, QType::Integer));
|
|
} catch (QInvalidCastException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
|
|
default:
|
|
try {
|
|
return (parent::__set($strName, $mixValue));
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function Dump()
|
|
{
|
|
$strToReturn = '';
|
|
$strToReturn .= ' | intId => ' . $this->intId;
|
|
$strToReturn .= ' | strCreationDate => ' . $this->strCreationDate;
|
|
$strToReturn .= ' | strLastModificationDate => ' . $this->strLastModificationDate;
|
|
$strToReturn .= ' | dttCompletionDate => ' . $this->dttCompletionDate;
|
|
$strToReturn .= ' | fltShippingCost => ' . $this->fltShippingCost;
|
|
$strToReturn .= ' | fltProductTotalCost => ' . $this->fltProductTotalCost;
|
|
$strToReturn .= ' | fltShippingCharged => ' . $this->fltShippingCharged;
|
|
$strToReturn .= ' | fltHandlingCharged => ' . $this->fltHandlingCharged;
|
|
$strToReturn .= ' | fltTax => ' . $this->fltTax;
|
|
$strToReturn .= ' | fltProductTotalCharged => ' . $this->fltProductTotalCharged;
|
|
$strToReturn .= ' | strShippingNamePrefix => ' . $this->strShippingNamePrefix;
|
|
$strToReturn .= ' | strShippingFirstName => ' . $this->strShippingFirstName;
|
|
$strToReturn .= ' | strShippingMiddleName => ' . $this->strShippingMiddleName;
|
|
$strToReturn .= ' | strShippingLastName => ' . $this->strShippingLastName;
|
|
$strToReturn .= ' | strShippingNameSuffix => ' . $this->strShippingNameSuffix;
|
|
$strToReturn .= ' | strShippingCompany => ' . $this->strShippingCompany;
|
|
$strToReturn .= ' | strShippingStreet1 => ' . $this->strShippingStreet1;
|
|
$strToReturn .= ' | strShippingStreet2 => ' . $this->strShippingStreet2;
|
|
$strToReturn .= ' | strShippingSuburb => ' . $this->strShippingSuburb;
|
|
$strToReturn .= ' | strShippingCounty => ' . $this->strShippingCounty;
|
|
$strToReturn .= ' | strShippingCity => ' . $this->strShippingCity;
|
|
$strToReturn .= ' | intShippingZoneId => ' . $this->intShippingZoneId;
|
|
$strToReturn .= ' | intShippingCountryId => ' . $this->intShippingCountryId;
|
|
$strToReturn .= ' | strShippingPostalCode => ' . $this->strShippingPostalCode;
|
|
$strToReturn .= ' | strBillingNamePrefix => ' . $this->strBillingNamePrefix;
|
|
$strToReturn .= ' | strBillingFirstName => ' . $this->strBillingFirstName;
|
|
$strToReturn .= ' | strBillingMiddleName => ' . $this->strBillingMiddleName;
|
|
$strToReturn .= ' | strBillingLastName => ' . $this->strBillingLastName;
|
|
$strToReturn .= ' | strBillingNameSuffix => ' . $this->strBillingNameSuffix;
|
|
$strToReturn .= ' | strBillingCompany => ' . $this->strBillingCompany;
|
|
$strToReturn .= ' | strBillingStreet1 => ' . $this->strBillingStreet1;
|
|
$strToReturn .= ' | strBillingStreet2 => ' . $this->strBillingStreet2;
|
|
$strToReturn .= ' | strBillingSuburb => ' . $this->strBillingSuburb;
|
|
$strToReturn .= ' | strBillingCounty => ' . $this->strBillingCounty;
|
|
$strToReturn .= ' | strBillingCity => ' . $this->strBillingCity;
|
|
$strToReturn .= ' | intBillingZoneId => ' . $this->intBillingZoneId;
|
|
$strToReturn .= ' | intBillingCountryId => ' . $this->intBillingCountryId;
|
|
$strToReturn .= ' | strBillingPostalCode => ' . $this->strBillingPostalCode;
|
|
$strToReturn .= ' | strNotes => ' . $this->strNotes;
|
|
$strToReturn .= ' | intShippingMethodId => ' . $this->intShippingMethodId;
|
|
$strToReturn .= ' | intPaymentMethodId => ' . $this->intPaymentMethodId;
|
|
$strToReturn .= ' | intStatusId => ' . $this->intStatusId;
|
|
$strToReturn .= ' | intTypeId => ' . $this->intTypeId;
|
|
return $strToReturn;
|
|
|
|
}
|
|
|
|
}//end class
|
|
?>
|