|
<?php
|
|
/**
|
|
* AccountOrderViewPanel - provides a panel for user viewing a specific
|
|
* order in the user account area.
|
|
*
|
|
*@author Erik Winn <sidewalksoftware@gmail.com>
|
|
*
|
|
*@version 0.3
|
|
*
|
|
* @package Quinta
|
|
* @subpackage Classes
|
|
*/
|
|
class AccountOrderViewPanel extends QPanel{
|
|
/**
|
|
* @var QPanel objControlBlock - the DOM parent panel
|
|
*/
|
|
protected $objControlBlock;
|
|
/**
|
|
* @var Order objOrder - local reference to the order
|
|
*/
|
|
public $objOrder;
|
|
/**
|
|
* @var OrderTotalsController - module to display shipping, handling and total price for order
|
|
*/
|
|
public $objOrderTotalsController;
|
|
/**
|
|
* @var AddressController objShippingAddressController - display for the shipping address
|
|
*/
|
|
public $objShippingAddressController;
|
|
/**
|
|
* @var AddressController objBillingAddressController - display for the billing address
|
|
*/
|
|
public $objBillingAddressController;
|
|
/**
|
|
* @var QPanel pnlPaymentMethod - panel to display information about the selected method
|
|
*/
|
|
public $pnlPaymentMethod;
|
|
/**
|
|
* @var QPanel pnlShippinggMethod - panel to display information about the selected method
|
|
*/
|
|
public $pnlShippingMethod;
|
|
/**
|
|
* @var QDataGrid dtgOrderItems - datagrid for displaying the order items
|
|
*/
|
|
public $dtgOrderItems;
|
|
/**
|
|
* @var QDataGrid dtgOrderStatusHistory - datagrid for displaying the order history
|
|
*/
|
|
public $dtgOrderStatusHistory;
|
|
/**
|
|
* @var QControlProxy pxyProductName - a proxy for making the product column active (clickable)
|
|
*/
|
|
public $pxyProductName;
|
|
/**
|
|
* @var string strTrackingNumbers - tracking numbers for order shipping
|
|
*/
|
|
public $strTrackingNumbers;
|
|
/**
|
|
* @var QPaginator paginator for the order history items
|
|
*/
|
|
public $objOrderStatusHistoryPaginator;
|
|
public $objOrderItemsPaginator;
|
|
|
|
// Other Controls
|
|
public $btnBack;
|
|
|
|
// Callback
|
|
protected $strClosePanelMethod;
|
|
|
|
|
|
public function __construct($objParentObject,
|
|
$objControlBlock,
|
|
$strClosePanelMethod,
|
|
$intOrderId = null,
|
|
$strControlId = null)
|
|
{
|
|
|
|
try {
|
|
parent::__construct($objParentObject, $strControlId);
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
$this->objControlBlock =& $objControlBlock;
|
|
|
|
$this->strTemplate = __QUINTA_CORE_VIEWS__ . '/AccountOrderViewPanel.tpl.php';
|
|
$this->strClosePanelMethod = $strClosePanelMethod;
|
|
$this->objOrder = Order::Load($intOrderId);
|
|
|
|
$aryNumbers = TrackingNumber::LoadArrayByOrderId($this->objOrder->Id);
|
|
if(!empty($aryNumbers))
|
|
foreach($aryNumbers as $objNumber ){
|
|
if('' != $this->strTrackingNumbers)
|
|
$this->strTrackingNumbers .= ', ';
|
|
|
|
$this->strTrackingNumbers .= $objNumber->Number;
|
|
}
|
|
|
|
$this->dtgOrderItems = new OrderItemDataGrid($this);
|
|
$this->dtgOrderItems->SetDataBinder('OrderItemsDataBinder', $this);
|
|
$this->dtgOrderItems->CssClass = 'datagrid';
|
|
$this->dtgOrderItems->AlternateRowStyle->CssClass = 'alternate';
|
|
/*
|
|
$this->objOrderItemsPaginator = new QPaginator($this->dtgOrderItems);
|
|
$this->dtgOrderItems->Paginator = $this->objOrderItemsPaginator;
|
|
$this->dtgOrderItems->ItemsPerPage = 20;
|
|
*/
|
|
|
|
$this->pxyProductName = new QControlProxy($this);
|
|
if(IndexPage::$blnAjaxOk)
|
|
$this->pxyProductName->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'pxyProductName_Click'));
|
|
else
|
|
$this->pxyProductName->AddAction(new QClickEvent(), new QServerControlAction($this, 'pxyProductName_Click'));
|
|
|
|
/* $this->dtgOrderItems->MetaAddProxyColumn($this->pxyProductName, QQN::OrderItem()->Product, '<?= $_ITEM->Product ?>');*/
|
|
$this->dtgOrderItems->MetaAddProxyColumn( $this->pxyProductName, QQN::OrderItem()->Product);
|
|
|
|
$this->dtgOrderItems->MetaAddColumn(QQN::OrderItem()->Product->RetailPrice);
|
|
$this->dtgOrderItems->MetaAddColumn('Quantity');
|
|
|
|
$dtgTotalColumn = new QDataGridColumn('Total', '<?= money_format("%n", $_ITEM->Product->RetailPrice * $_ITEM->Quantity ) ?>');
|
|
|
|
$this->dtgOrderItems->AddColumn($dtgTotalColumn);
|
|
|
|
$this->dtgOrderStatusHistory = new OrderStatusHistoryDataGrid($this);
|
|
$this->dtgOrderStatusHistory->SetDataBinder('OrderStatusHistoryDataBinder', $this);
|
|
$this->dtgOrderStatusHistory->CssClass = 'datagrid';
|
|
$this->dtgOrderStatusHistory->AlternateRowStyle->CssClass = 'alternate';
|
|
|
|
$this->objOrderStatusHistoryPaginator = new QPaginator($this->dtgOrderStatusHistory);
|
|
$this->dtgOrderStatusHistory->Paginator = $this->objOrderStatusHistoryPaginator;
|
|
$this->dtgOrderStatusHistory->ItemsPerPage = 4;
|
|
|
|
$this->dtgOrderStatusHistory->MetaAddColumn('Date');
|
|
$this->dtgOrderStatusHistory->MetaAddTypeColumn('StatusId', 'OrderStatusType');
|
|
$this->dtgOrderStatusHistory->MetaAddColumn('Notes');
|
|
|
|
$this->objOrderTotalsController = new OrderTotalsController($this, $this->objOrder, false);
|
|
|
|
$this->objShippingAddressController = new AddressController($this,
|
|
$this->objOrder->GetShippingAddress()->Id,
|
|
'ShippingAddress: ');
|
|
$this->objShippingAddressController->CssClass = 'ShippingAddressReview';
|
|
$this->objShippingAddressController->AutoRenderChildren = true;
|
|
|
|
$this->objBillingAddressController = new AddressController($this,
|
|
$this->objOrder->GetBillingAddress()->Id,
|
|
'BillingAddress: ');
|
|
$this->objBillingAddressController->CssClass = 'BillingAddressReview';
|
|
$this->objBillingAddressController->AutoRenderChildren = true;
|
|
|
|
if($this->objOrder->PaymentMethodId){
|
|
$objPaymentMethod = PaymentMethod::LoadById( $this->objOrder->PaymentMethodId );
|
|
|
|
$this->pnlPaymentMethod = new QPanel($this);
|
|
$this->pnlPaymentMethod->HtmlEntities = false;
|
|
$this->pnlPaymentMethod->CssClass = 'PaymentMethodReview';
|
|
$this->pnlPaymentMethod->AutoRenderChildren = true;
|
|
|
|
$strText = '<div class="heading">' . Quinta::Translate('Payment Method') . ':</div>'
|
|
. sprintf( '<div class="heading"> %s </div> <br /> %s ',
|
|
$objPaymentMethod->Title,
|
|
$objPaymentMethod->Description
|
|
);
|
|
$this->pnlPaymentMethod->Text = $strText;
|
|
}
|
|
|
|
if($this->objOrder->ShippingMethodId){
|
|
$objShippingMethod = ShippingMethod::LoadById( $this->objOrder->ShippingMethodId );
|
|
|
|
$this->pnlShippingMethod = new QPanel($this);
|
|
$this->pnlShippingMethod->HtmlEntities = false;
|
|
$this->pnlShippingMethod->CssClass = 'ShippingMethodReview';
|
|
$this->pnlShippingMethod->AutoRenderChildren = true;
|
|
|
|
$strText = '<div class="heading">' . Quinta::Translate('Shipping Method') . ':</div>'
|
|
. sprintf( '<div class="heading"> %s </div> <br /> %s ',
|
|
$objShippingMethod->Title,
|
|
$objShippingMethod->Description
|
|
);
|
|
$this->pnlShippingMethod->Text = $strText;
|
|
}
|
|
|
|
|
|
$this->btnBack = new QButton($this);
|
|
$this->btnBack->Text = Quinta::Translate('Back');
|
|
if(IndexPage::$blnAjaxOk)
|
|
$this->btnBack->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnBack_Click'));
|
|
else
|
|
$this->btnBack->AddAction(new QClickEvent(), new QServerControlAction($this, 'btnBack_Click'));
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* This binds the OrderItemDatagrid data retrieval to this Order, the items listed in the Datagrid will be those
|
|
* associated with this order in the database.
|
|
*
|
|
* If a paginator is set on this DataBinder, it will use it. If not, then no pagination will be used.
|
|
* It will also perform any sorting requested in by clicking on the column titles in the Datagrid.
|
|
*/
|
|
public function OrderItemsDataBinder(){
|
|
if ($this->objOrderItemsPaginator)
|
|
$this->dtgOrderItems->TotalItemCount = OrderItem::CountByOrderId($this->objOrder->Id) ;
|
|
|
|
$objClauses = array();
|
|
|
|
if ($objClause = $this->dtgOrderItems->OrderByClause)
|
|
array_push($objClauses, $objClause);
|
|
|
|
if ($objClause = $this->dtgOrderItems->LimitClause)
|
|
array_push($objClauses, $objClause);
|
|
|
|
// array_push($objClauses, QQ::OrderBy(QQN::Order()->CreationDate, false) );
|
|
|
|
$this->dtgOrderItems->DataSource = OrderItem::LoadArrayByOrderId($this->objOrder->Id, $objClauses);
|
|
}
|
|
|
|
/**
|
|
* This binds the OrderStatusHistoryDatagrid data retrieval to this Order, the items listed in the Datagrid will be those
|
|
* associated with this order in the database.
|
|
*
|
|
* If a paginator is set on this DataBinder, it will use it. If not, then no pagination will be used.
|
|
* It will also perform any sorting requested in by clicking on the column titles in the Datagrid.
|
|
*/
|
|
public function OrderStatusHistoryDataBinder(){
|
|
if ($this->objOrderStatusHistoryPaginator)
|
|
$this->dtgOrderStatusHistory->TotalItemCount = OrderStatusHistory::CountByOrderId($this->objOrder->Id) ;
|
|
|
|
$objClauses = array();
|
|
|
|
if ($objClause = $this->dtgOrderStatusHistory->OrderByClause)
|
|
array_push($objClauses, $objClause);
|
|
|
|
if ($objClause = $this->dtgOrderStatusHistory->LimitClause)
|
|
array_push($objClauses, $objClause);
|
|
|
|
array_push($objClauses, QQ::OrderBy(QQN::OrderStatusHistory()->Date, false) );
|
|
|
|
$this->dtgOrderStatusHistory->DataSource = OrderStatusHistory::LoadArrayByOrderId($this->objOrder->Id, $objClauses);
|
|
}
|
|
|
|
public function pxyProductName_Click($strFormId, $strControlId, $strParameters){
|
|
$pos = strpos( $strParameters, ',' );
|
|
$intProductId = substr( $strParameters, 0, $pos );
|
|
|
|
Quinta::Redirect( __QUINTA_SUBDIRECTORY__ . '/index.php/Products/' . $intProductId );
|
|
}
|
|
|
|
public function btnBack_Click($strFormId, $strControlId, $strParameter){
|
|
$this->CloseSelf(false);
|
|
}
|
|
|
|
protected function CloseSelf($blnChangesMade){
|
|
$strMethod = $this->strClosePanelMethod;
|
|
$this->objControlBlock->$strMethod($blnChangesMade);
|
|
}
|
|
}
|
|
?>
|