| <?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; | |
| 					} | |
| 			} | |
| 		} | |
| 	} | |
| ?>
 |