<?php
|
|
|
|
/**
|
|
* CheckOutItemController - provides a panel for the display of a single item in an Order
|
|
*
|
|
* This class displays the Order item with a field for adjusting the quantity and an
|
|
* optional thumbnail image of the item.
|
|
*
|
|
* If Modifiable is false the quantity field is a label and not adjustable, if true it is an
|
|
* input field allowing the user to change the quantity of the item.
|
|
*
|
|
*@todo
|
|
* - implement image support
|
|
* - base class most of this and use for ShoppingCartItemController as well, perhaps renaming to
|
|
* the more generic term OrderItemView; this needs to provide functionality like a DataGrid
|
|
* keeping an array of columns with AddColumn(foo) ..
|
|
*
|
|
*@author Erik Winn <sidewalksoftware@gmail.com>
|
|
*
|
|
*@version 0.3
|
|
*
|
|
* @package Quinta
|
|
* @subpackage Classes
|
|
*/
|
|
|
|
class CheckOutItemController extends QPanel{
|
|
/**
|
|
* @var QPanel objControlBlock - DOM parent .. usually a CheckOutItemListModule
|
|
*/
|
|
protected $objControlBlock;
|
|
/**
|
|
* @var Product objProduct - local instance of the Product item
|
|
*/
|
|
protected $objProduct;
|
|
/**
|
|
* @var boolean blnModifiable - if true, the quantity fields are rendered as input, otherwise as labels
|
|
*/
|
|
protected $blnModifiable;
|
|
/**
|
|
* @var float fltItemTotal - total price of this line item (*quantity)
|
|
*/
|
|
protected $fltItemTotal;
|
|
/**
|
|
* Note: this is public to avoid an obscure php bug that may have dissappeared by the
|
|
* time you see this .. fixme if possible.
|
|
* @var OrderItem objOrderItem - Local instance of the OrderItem
|
|
*/
|
|
public $objOrderItem;
|
|
|
|
public $ctlProductImage;
|
|
|
|
public $lblProductName;
|
|
public $lblItemPrice;
|
|
public $lblTotalPrice;
|
|
|
|
public $lblQuantity;
|
|
public $txtQuantity;
|
|
|
|
/**
|
|
*
|
|
*@param QPanel objParentObject - the panel in which this item view is rendered.
|
|
*@param OrderItem objOrderItem - the order item to be displayed
|
|
*@param boolean blnModifiable - quantity may be modified if true
|
|
*/
|
|
public function __construct($objParentObject, $objOrderItem, $blnModifiable=true){
|
|
|
|
try {
|
|
parent::__construct($objParentObject);
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
|
|
$this->objControlBlock =& $objParentObject;
|
|
$this->objOrderItem =& $objOrderItem;
|
|
$this->blnModifiable = $blnModifiable;
|
|
|
|
$this->strTemplate = __QUINTA_CORE_VIEWS__ . '/CheckOutItemView.tpl.php';
|
|
|
|
$this->objProduct = Product::Load($this->objOrderItem->ProductId);
|
|
|
|
$this->lblProductName = new QLabel($this);
|
|
$this->lblProductName->CssClass = 'ProductName';
|
|
$this->lblProductName->Text = $this->objProduct->Model;
|
|
|
|
$this->lblItemPrice = new QLabel($this);
|
|
$this->lblItemPrice->CssClass = 'ItemPrice';
|
|
|
|
$this->lblItemPrice->Text = money_format('%n',$this->objProduct->RetailPrice);
|
|
|
|
$this->lblTotalPrice = new QLabel($this);
|
|
$this->lblTotalPrice->CssClass = 'ItemTotal';
|
|
|
|
$this->fltItemTotal = $this->objProduct->RetailPrice * $this->objOrderItem->Quantity;
|
|
$this->lblTotalPrice->Text = money_format('%n', $this->fltItemTotal );
|
|
|
|
if($blnModifiable)
|
|
{
|
|
$this->txtQuantity = new QIntegerTextBox($this);
|
|
$this->txtQuantity->Text = $this->objOrderItem->Quantity;
|
|
$this->txtQuantity->CssClass = 'ProductQtyBox';
|
|
if(IndexPage::$blnAjaxOk)
|
|
$this->txtQuantity->AddAction(new QChangeEvent(), new QAjaxControlAction($this, 'InitTotal') );
|
|
else
|
|
$this->txtQuantity->AddAction(new QChangeEvent(), new QServerControlAction($this, 'InitTotal') );
|
|
}
|
|
else
|
|
{
|
|
$this->lblQuantity = new QLabel($this);
|
|
$this->lblQuantity->Text = $this->objOrderItem->Quantity;
|
|
}
|
|
}
|
|
/**
|
|
*@param string strFormId - the main QForm's identifier
|
|
*@param string strControlId - the calling Control's id
|
|
*@param string strParameters - ingored, as are the above ..
|
|
*/
|
|
public function InitTotal( $strFormId, $strControlId, $strParameters){
|
|
$this->objOrderItem->Quantity = $this->txtQuantity->Text;
|
|
|
|
$this->fltItemTotal = $this->objProduct->RetailPrice * $this->objOrderItem->Quantity;
|
|
$this->lblTotalPrice->Text = money_format('%n', $this->fltItemTotal );
|
|
$this->MarkAsModified();
|
|
$this->Refresh();
|
|
if($this->objControlBlock instanceof CheckOutItemListModule ){
|
|
$this->objControlBlock->MarkAsModified();
|
|
$this->objControlBlock->RefreshTotalPrice();
|
|
}
|
|
}
|
|
|
|
public function __get($strName){
|
|
switch ($strName){
|
|
case 'Modifiable':
|
|
return $this->blnModifiable ;
|
|
case 'OrderItem':
|
|
return $this->objOrderItem ;
|
|
case 'ItemTotal':
|
|
return $this->fltItemTotal ;
|
|
//if user modified this differs from the quantity in the OrderItem
|
|
case 'Quantity':
|
|
if($this->blnModifiable)
|
|
return $this->txtQuantity->Text ;
|
|
else
|
|
return $this->lblQuantity->Text;
|
|
default:
|
|
try {
|
|
return parent::__get($strName);
|
|
} catch (QCallerException $objExc) {
|
|
$objExc->IncrementOffset();
|
|
throw $objExc;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
?>
|