_orderSummary = $orderSummary;
}
/**
* @return array
*/
public function getOrderSummary()
{
return $this->_orderSummary;
}
/**
* Return checkout config
*
* @return Zend_Config
*/
protected function _getCheckoutConfig()
{
if (null === $this->_checkoutConfig) {
$this->_checkoutConfig = Qs_Application::getConfig('ECommerce_Checkout');
}
return $this->_checkoutConfig;
}
protected function _initElements()
{
$this->_initBaseFields();
$this->_initShippingFields();
$this->_initPaymentFields();
$this->_initSummaryInfo();
if (!$this->_getCart()->hasShippableItems()) {
$this->addAttribs(['class' => $this->getAttrib('class') . ' no-shipping']);
}
return $this;
}
/**
* "Address" fields for "simple" mode
* @param string $type
* @param bool $isRequired
* @return $this
*/
protected function _initAddressFields($type, $isRequired = true)
{
$form = new Qs_Form_SubForm(array('legend' => ucfirst($type) . ' Address'));
if (Entity::ADDRESS_SHIPPING == $type && !$this->_getCart()->hasShippableItems()) {
$form->addElement(
'static',
'noShippingAddress',
['value' => $this->getDoc()->getSmarty()->fetch('ECommerce/Checkout/noShippingMessage.tpl')]
);
$this->addSubForm($form, $type);
return $this;
}
if ($type != Entity::ADDRESS_BILLING) {
$form->addElement(
'checkbox',
'asBilling',
array('label' => 'My shipping address is the same as my billing address', 'decoration' => 'simple')
);
}
$form->addElement('text', 'firstName', array('label' => 'First Name'));
$form->addElement('text', 'lastName', array('label' => 'Last Name'));
$form->addElement('text', 'address', array('label' => 'Address'));
$form->addElement('text', 'city', array('label' => 'City', 'class' => 'city'));
$form->addElement(
'select',
'state',
array(
'label' => 'State',
'class' => 'state',
'multiOptions' => array('' => 'Select One') + $this->_getStates4Select()
)
);
$form->addElement('zip', 'zip', array('label' => 'Zip Code', 'class' => 'zip'));
if ($isRequired) {
/** @var $element \Zend_Form_Element */
$element = null;
if ($type == Entity::ADDRESS_BILLING) {
foreach ($form as $element) {
$element->setRequired();
}
} else {
$asBilling = $this->_getData($type . '[asBilling]');
foreach ($form as $element) {
if ('asBilling' == $element->getName()) {
continue;
}
if ($asBilling && 'n' == $asBilling) {
$element->setRequired();
} else {
$element->getDecorator('Label')->setOption('class', 'required');
}
}
}
}
$this->addSubForm($form, $type);
return $this;
}
/**
* Init base checkout fields
*
* @return App_ECommerce_Checkout_Form_New
*/
protected function _initBaseFields()
{
$this->_initAddressFields(Entity::ADDRESS_BILLING);
$this->_initAddressFields(Entity::ADDRESS_SHIPPING);
// additional billing email field
$billingForm = $this->getSubForm('billing');
$billingForm->addElement(
'email',
'email',
array('label' => 'Email Address', 'required' => true, 'attribs' => array('autocomplete' => 'off'))
);
$billingForm->addElement(
'phone',
'phone',
array('label' => 'Phone Number', 'attribs' => array('autocomplete' => 'off'))
);
return $this;
}
/**
* Init fields for shipping info
*
* @return App_ECommerce_Checkout_Form_New
*/
protected function _initShippingFields()
{
if ($this->_getCheckoutConfig()->get('shipping')) {
$subForm = $this->_getCheckoutSubform('shipping');
if ($subForm) {
$this->addSubForm($subForm, App_ECommerce_Checkout_View::SHIPPING_SECTION_DATA);
}
}
return $this;
}
/**
* Init fields for payment info
*
* @return App_ECommerce_Checkout_Form_New
*/
protected function _initPaymentFields()
{
if ($this->_getCheckoutConfig()->get('payment')) {
$subForm = $this->_getCheckoutSubform('payment');
if ($subForm) {
$this->addSubForm($subForm, App_ECommerce_Checkout_View::PAYMENT_SECTION_DATA);
$this->_initDiscountFields();
}
}
return $this;
}
/**
* Init fields for discount
*
* @return App_ECommerce_Checkout_Form_New
*/
protected function _initDiscountFields()
{
$groupElements = array();
$cart = $this->_getCart();
$subForm = $this->getSubForm(App_ECommerce_Checkout_View::PAYMENT_SECTION_DATA);
if (Qs_SiteMap::getAliasByItem('ECommerce_Promo_Admin_')) {
$hasPromo = (bool) $cart->getData('promoCode');
$subForm->addElement(
'checkbox',
'usePromoCode',
array('label' => 'I want to use a Promo Code', 'decoration' => 'simple')
);
$groupElements[] = 'usePromoCode';
if ($hasPromo) {
/** @var Qs_Form_Decorator_DtDdWrapper $dtDdWrapper */
$dtDdWrapper = $subForm->getElement('usePromoCode')->getDecorator('DtDdWrapper');
$dtDdWrapper->setDdAttrib('style', 'display: none;');
}
$subForm->addElement('text', 'usePromoCodeValue');
$groupElements[] = 'usePromoCodeValue';
$subForm->getElement('usePromoCodeValue')->getDecorator('HtmlTag')->setOption('style', 'display: none;');
$applyButton = $this->getView()->formButton(
'usePromoCodeApply',
'Apply',
array(
'onclick' => 'App_ECommerce_Checkout_OtherServices.applyPromoCode(this)',
'class' => 'btn'
)
);
$subForm->getElement('usePromoCodeValue')
->getDecorator('ViewHelper')
->setAdditionalHtmlAfterElement($applyButton);
$subForm->addElement('static', 'usePromoCodeStatic', array('value' => ''));
$groupElements[] = 'usePromoCodeStatic';
if ($hasPromo) {
$staticValue = $cart->renderPromoCodeDescription();
$staticValue .= 'remove';
$subForm->getElement('usePromoCodeStatic')->setValue($staticValue);
} else {
/** @var Qs_Form_Decorator_HtmlTag $dtDdWrapper */
$dtDdWrapper = $subForm->getElement('usePromoCodeStatic')->getDecorator('HtmlTag');
$dtDdWrapper->setOption('style', 'display: none;');
}
}
/** @var App_Doc_Site $doc */
$doc = Zend_Registry::get('doc');
if (Qs_SiteMap::getAliasByItem('ECommerce_GiftCard_Admin_') && $doc->getAuth()->isLoggedIn()) {
$hasGift = (bool) $cart->getData('giftCardCode');
$subForm->addElement(
'checkbox',
'useGiftCard',
array('label' => 'I want to use a Gift Card', 'decoration' => 'simple')
);
$groupElements[] = 'useGiftCard';
if ($hasGift) {
/** @var Qs_Form_Decorator_DtDdWrapper $dtDdWrapper */
$dtDdWrapper = $subForm->getElement('useGiftCard')->getDecorator('DtDdWrapper');
$dtDdWrapper->setDdAttrib('style', 'display: none;');
}
$subForm->addElement('text', 'useGiftCardValue');
$groupElements[] = 'useGiftCardValue';
$subForm->getElement('useGiftCardValue')->getDecorator('HtmlTag')->setOption('style', 'display: none;');
$redeemButton = $this->getView()->formButton(
'useGiftCardApply',
'Redeem Card',
array(
'onclick' => 'App_ECommerce_Checkout_OtherServices.applyGiftCard(this)',
'class' => 'btn'
)
);
$subForm->getElement('useGiftCardValue')
->getDecorator('ViewHelper')
->setAdditionalHtmlAfterElement($redeemButton);
$subForm->addElement('static', 'useGiftCardStatic', array('value' => ''));
$groupElements[] = 'useGiftCardStatic';
if ($hasGift) {
$staticValue = $cart->renderGiftCardDescription();
$staticValue .= 'remove';
$subForm->getElement('useGiftCardStatic')->setValue($staticValue);
} else {
/** @var Qs_Form_Decorator_HtmlTag $dtDdWrapper */
$dtDdWrapper = $subForm->getElement('useGiftCardStatic')->getDecorator('HtmlTag');
$dtDdWrapper->setOption('style', 'display: none;');
}
}
if (!empty($groupElements)) {
$subForm->addDisplayGroup($groupElements, 'additionalGroup');
}
return $this;
}
public function setDefaults(array $defaults = array())
{
parent::setDefaults($defaults);
if (null !== ($serviceShippingSubForm = $this->getSubForm(App_ECommerce_Checkout_View::SHIPPING_SECTION_DATA))) {
/** @var $serviceShippingSubForm App_ECommerce_Checkout_Form_Service_Shipping */
$serviceShippingSubForm->reinitData($this->_getData());
}
if (null !== ($servicePaymentSubForm = $this->getSubForm(App_ECommerce_Checkout_View::PAYMENT_SECTION_DATA))) {
/** @var $servicePaymentSubForm App_ECommerce_Checkout_Form_Service_Payment */
$servicePaymentSubForm->reinitData($this->_getData());
}
return $this;
}
protected function _initButtons()
{
parent::_initButtons();
$this->getElement('btnSubmit')->setLabel('Continue Checkout');
$this->removeElement('btnCancel');
return $this;
}
/**
* Return subform for checkout
*
* @param string $type
* @return Qs_Form_SubForm
*/
protected function _getCheckoutSubform($type)
{
$subFormClass = 'App_ECommerce_Checkout_Form_Service_' . ucfirst($type);
$form = false;
$defaults = [];
if (!empty($this->_defaults['id'])) {
$defaults['orderId'] = $this->_defaults['id'];
}
if (class_exists($subFormClass)) {
$form = new $subFormClass(['orderSummary' => $this->getOrderSummary(), 'defaults' => $defaults]);
}
return $form;
}
protected function _initSummaryInfo()
{
$item = new Qs_Doc_Item($this->getOrderSummary());
Qs_Smarty_Text::setTemplate(file_get_contents($item->tpl));
$summary = Qs_Smarty_Text::render(array('item' => $item));
$this->addElement('static', 'orderTotal', array('value' => $summary));
$this->getElement('orderTotal')->getDecorator('Label')->setTagOption('class', 'hidden');
$this->addDisplayGroup(array('orderTotal'), 'orderSummary', array('legend' => 'Order Summary'));
return $this;
}
public function render(Zend_View_Interface $view = null)
{
/** @var $doc App_Doc_Admin */
$doc = Zend_Registry::get('doc');
$doc->addScript('js/app/ECommerce/checkout.js');
$options = [
'orderTotal' => Qs_Array::get($this->getOrderSummary(), 'total'),
'noPaymentMessage' => $this->getDoc()->getSmarty()->fetch('ECommerce/Checkout/noPaymentMessage.tpl')
];
$options = $this->getScriptOptions() + $options;
if ($doc->isGtmEnabled()) {
$options['gtmProducts'] = Qs_Gtm::eeGetProducts($this->_getCart()->getList(), Qs_Gtm::DATASET_CHECKOUT);
}
$params = [$this->getId(), $options];
$doc->addInitFunction('App_ECommerce_Checkout.init', $params);
$params = array(App_ECommerce_Checkout_View::PAYMENT_SECTION_DATA . '-additionalGroup-element');
$doc->addInitFunction('App_ECommerce_Checkout_OtherServices.init', $params);
if ($doc->isGtmEnabled()) {
if ($this->_ajaxValidation) {
$this->setScriptOption('onSuccessCallback', 'App_ECommerce_Checkout.gtmCheckout');
} else {
$doc->addInitFunction('App_ECommerce_Checkout.initGtmOnSubmit');
}
}
return parent::render($view);
}
}