*
*
* $Id: ShoppingCartViewModule.class.php 462 2008-12-30 17:14:49Z 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 Views
*
*/
class ShoppingCartViewModule extends QPanel
{
/**
* @var ContentBlock objParentObject - the DOM parent,
*/
protected $objParentObject;
/**
* @var Order objOrder - order created from cart items for account,
*/
protected $objOrder;
/**
* @var ShoppingCart objShoppingCart - local reference to the current user's cart
*/
protected $objShoppingCart;
/**
* @var float fltItemsTotalPrice - the total of all the line items in the cart, aka subtotal
*/
protected $fltItemsTotalPrice;
/**
* @var boolean blnLoggedIn - indicate if the user is logged in.
*/
protected $blnLoggedIn = false;
/**
* @var array ShoppingCartItems - a list of products as cart item Views.
*/
public $aryShoppingCartItemViews = array();
/**
* @var OrderTotalsView objOrderTotalsView - panel that displays the order summary ..
*/
public $objOrderTotalsView;
///Controls ..
/**
* @var QLabel lblMessage - a text label to relay messages to the user
*/
public $lblMessage;
/**
* @var QLabel lblProgressBar - a progress bar depicting the first (Shopping cart) stage of checkout
*/
public $lblProgressBar;
public $btnSave;
public $btnCheckOut;
public function __construct( ContentBlockView $objParentObject, $intShoppingCartId=null)
{
$this->objParentObject =& $objParentObject;
$this->objShoppingCart =& IndexPage::$objShoppingCart;
try {
parent::__construct($this->objParentObject);
} catch (QCallerException $objExc) {
$objExc->IncrementOffset();
throw $objExc;
}
$this->Template = __QUASI_CORE_TEMPLATES__ . '/ShoppingCartViewModule.tpl.php';
// if not logged in show nothing ..
if( ! IndexPage::$objAccount instanceof Account )
return;
else
$this->blnLoggedIn = true;
$this->aryShoppingCartItemViews = array();
$this->fltItemsTotalPrice = 0;
if($this->objShoppingCart instanceof ShoppingCart )
{
foreach ( $this->objShoppingCart->GetShoppingCartItemArray() as $objShoppingCartItem )
{
$objItemView = new ShoppingCartItemView( $this, $objShoppingCartItem );
$this->aryShoppingCartItemViews[] = $objItemView;
}
$this->objOrder = $this->objShoppingCart->CreateNewOrder(true);
if($this->objOrder instanceof Order)
$this->objOrderTotalsView = new OrderTotalsView($this, $this->objOrder);
}
$this->lblMessage = new QLabel($this);
$this->lblProgressBar = new QLabel($this);
$this->lblProgressBar->HtmlEntities = false;
$this->lblProgressBar->CssClass = 'ProgressBarShoppingCart';
$this->lblProgressBar->Text = sprintf('%s%s
%s%s
%s%s',
STORE_NAME . ' ' . Quasi::Translate('Checkout Process') . ':',
Quasi::Translate('cart'),
Quasi::Translate('shipping'),
Quasi::Translate('payment'),
Quasi::Translate('review order'),
Quasi::Translate('receipt'));
$this->btnSave = new QButton($this);
$this->btnSave->Text = Quasi::Translate('Update');
if(IndexPage::$blnAjaxOk)
$this->btnSave->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnSave_Click'));
else
$this->btnSave->AddAction(new QClickEvent(), new QServerControlAction($this, 'btnSave_Click'));
$this->btnSave->CausesValidation = QCausesValidation::SiblingsAndChildren;
$this->btnCheckOut = new QLabel($this);
$this->btnCheckOut->AddCssClass('button');
$this->btnCheckOut->HtmlEntities = false;
$this->btnCheckOut->Text = ''
. Quasi::Translate('CheckOut') . '';
/* yes, it would be nice to make sure that we saved, but IE cannot redirect correctly to https
so we must use a hard link until somebody figures out a way around this.
$this->btnCheckOut->Text = Quasi::Translate('CheckOut');
if(IndexPage::$blnAjaxOk)
$this->btnCheckOut->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnCheckOut_Click'));
else
$this->btnCheckOut->AddAction(new QClickEvent(), new QServerControlAction($this, 'btnCheckOut_Click'));
*/
}
public function RefreshTotals()
{
if( ! $this->objOrder instanceof Order )
return;
$this->fltItemsTotalPrice = 0;
foreach($this->aryShoppingCartItemViews as $objItemView)
$this->fltItemsTotalPrice += $objItemView->ItemTotal;
$this->objOrder->ProductTotalCharged = $this->fltItemsTotalPrice;
$this->objOrderTotalsView->SetTotals($this->objOrder);
}
public function btnSave_Click($strFormId, $strControlId, $strParameter)
{
foreach($this->aryShoppingCartItemViews as &$objItemView)
{
$objItemView->ShoppingCartItem->Quantity = $objItemView->Quantity;
if($objItemView->Quantity <= 0)
$objItemView->ShoppingCartItem->Delete();
else
$objItemView->ShoppingCartItem->Save();
}
$this->objShoppingCart->Reload();
$this->RefreshTotals();
$this->lblMessage->Text = Quasi::Translate('Shopping Cart Saved') . '!';
}
//Note: unused due to IE ssl redirect incompetence ..
public function btnCheckOut_Click($strFormId, $strControlId, $strParameter)
{
foreach($this->aryShoppingCartItemViews as &$objItemView)
{
$objItemView->ShoppingCartItem->Quantity = $objItemView->Quantity;
$objItemView->ShoppingCartItem->Save();
}
Quasi::Redirect('https://' . Quasi::$ServerName . __QUASI_SUBDIRECTORY__ . '/index.php/CheckOut');
}
public function __get($strName)
{
switch ($strName)
{
case 'ShoppingCart':
return $this->objShoppingCart ;
case 'ItemsTotalPrice':
return $this->fltItemsTotalPrice ;
case 'Tax':
return $this->objOrder->Tax;
case 'LoggedIn':
return $this->blnLoggedIn;
default:
try {
return parent::__get($strName);
} catch (QCallerException $objExc) {
$objExc->IncrementOffset();
throw $objExc;
}
}
}
public function __set($strName, $mixValue)
{
switch ($strName)
{
case 'ShoppingCart':
try {
return ($this->objShoppingCart = QType::Cast($mixValue, 'ShoppingCart'));
} catch (QInvalidCastException $objExc) {
$objExc->IncrementOffset();
throw $objExc;
}
default:
try {
return (parent::__set($strName, $mixValue));
} catch (QCallerException $objExc) {
$objExc->IncrementOffset();
throw $objExc;
}
}
}
}// end class
}//end define shield
?>