Example #1
0
	/**
	 * Called from confirmAction View
	 * Customers requests to finish current order
	 * Check if all conditions match and save order
	 *
	 * @return void
	 */
	public function finishAction()
	{
		if($this->Request()->getParam('sUniqueID') && !empty($this->session['sOrderVariables'])) {
			$sql = '
				SELECT transactionID as sTransactionumber, ordernumber as sOrderNumber
				FROM s_order
				WHERE temporaryID=? AND userID=?
			';

			$order = Shopware()->Db()->fetchRow($sql, array($this->Request()->getParam('sUniqueID'), Shopware()->Session()->sUserId));
			if(!empty($order)) {
				$this->View()->assign($order);
				$this->View()->assign($this->session['sOrderVariables']->getArrayCopy());
				return;
			}
		}
		
		if(empty($this->session['sOrderVariables'])||$this->getMinimumCharge()||$this->getEsdNote()||$this->getDispatchNoOrder()) {
			return $this->forward('confirm');
		}
		
		$checkQuantities = $this->basket->sCheckBasketQuantities();
		if (!empty($checkQuantities['hideBasket'])){
			return $this->forward('confirm');
		}
		
		$this->View()->assign($this->session['sOrderVariables']->getArrayCopy());

		if ($this->basket->sCountBasket()>0
		 && empty($this->View()->sUserData['additional']['payment']['embediframe'])) {
			if($this->Request()->getParam('sNewsletter')!==null) {
				$this->session['sNewsletter'] = $this->Request()->getParam('sNewsletter') ? true : false;
			}
			if($this->Request()->getParam('sComment')!==null) {
				$this->session['sComment'] = trim(strip_tags($this->Request()->getParam('sComment')));
			}
			if (!Shopware()->Config()->get('IgnoreAGB') && !$this->Request()->getParam('sAGB')) {
				$this->View()->sAGBError = true;
				return $this->forward('confirm');
			}
			if(!empty($this->session['sNewsletter'])) {
				$this->admin->sUpdateNewsletter(true, $this->admin->sGetUserMailById(), true);
			}
            $this->saveOrder();
			
			if(!empty(Shopware()->Config()->DeleteCacheAfterOrder)) {
				Shopware()->Cache()->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('Shopware_Adodb'));
			}
		}
		
		$this->View()->assign($this->session['sOrderVariables']->getArrayCopy());
	}
Example #2
0
 /**
  * Action to handle selection of shipping and payment methods
  */
 public function shippingPaymentAction()
 {
     if (empty($this->View()->sUserLoggedIn)) {
         return $this->forward('login', 'account', null, array('sTarget' => 'checkout', 'sTargetAction' => 'shippingPayment', 'showNoAccount' => true));
     }
     // Load payment options, select option and details
     $this->View()->sPayments = $this->getPayments();
     $this->View()->sFormData = array('payment' => $this->View()->sUserData['additional']['user']['paymentID']);
     $getPaymentDetails = $this->admin->sGetPaymentMeanById($this->View()->sFormData['payment']);
     $paymentClass = $this->admin->sInitiatePaymentClass($getPaymentDetails);
     if ($paymentClass instanceof \ShopwarePlugin\PaymentMethods\Components\BasePaymentMethod) {
         $data = $paymentClass->getCurrentPaymentDataAsArray(Shopware()->Session()->sUserId);
         if (!empty($data)) {
             $this->View()->sFormData += $data;
         }
     }
     if ($this->Request()->isPost()) {
         $values = $this->Request()->getPost();
         $values['payment'] = $this->Request()->getPost('payment');
         $values['isPost'] = true;
         $this->View()->sFormData = $values;
     }
     // Load current and all shipping methods
     $this->View()->sDispatch = $this->getSelectedDispatch();
     $this->View()->sDispatches = $this->getDispatches($this->View()->sFormData['payment']);
     $this->View()->sBasket = $this->getBasket();
     $this->View()->sLaststock = $this->basket->sCheckBasketQuantities();
     $this->View()->sShippingcosts = $this->View()->sBasket['sShippingcosts'];
     $this->View()->sShippingcostsDifference = $this->View()->sBasket['sShippingcostsDifference'];
     $this->View()->sAmount = $this->View()->sBasket['sAmount'];
     $this->View()->sAmountWithTax = $this->View()->sBasket['sAmountWithTax'];
     $this->View()->sAmountTax = $this->View()->sBasket['sAmountTax'];
     $this->View()->sAmountNet = $this->View()->sBasket['AmountNetNumeric'];
     $this->View()->sRegisterFinished = !empty($this->session['sRegisterFinished']);
     $this->View()->sTargetAction = 'shippingPayment';
     if ($this->Request()->getParam('isXHR')) {
         return $this->View()->loadTemplate('frontend/checkout/shipping_payment_core.tpl');
     }
 }
Example #3
0
 /**
  * @covers sBasket::sCheckBasketQuantities
  */
 public function testsCheckBasketQuantities()
 {
     // Test with empty session, expect empty array
     $this->assertEquals(array('hideBasket' => false, 'articles' => null), $this->module->sCheckBasketQuantities());
     // Create session id
     $this->module->sSYSTEM->sSESSION_ID = uniqid();
     $this->session->offsetSet('sessionId', $this->module->sSYSTEM->sSESSION_ID);
     // Fetch an article in stock with stock control
     // Add stock-1 to basket
     // Check that basket is valid
     $inStockArticle = $this->db->fetchRow('SELECT * FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.instock > 2
         AND detail.active = 1
         AND article.laststock = 1
         ORDER BY RAND() LIMIT 1');
     $this->db->insert('s_order_basket', array('price' => 123, 'quantity' => $inStockArticle['instock'] - 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $inStockArticle['ordernumber'], 'articleID' => $inStockArticle['articleID']));
     $result = $this->module->sCheckBasketQuantities();
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('hideBasket', $result);
     $this->assertArrayHasKey('articles', $result);
     $this->assertFalse($result['hideBasket']);
     $this->assertArrayHasKey($inStockArticle['ordernumber'], $result['articles']);
     $this->assertFalse($result['articles'][$inStockArticle['ordernumber']]['OutOfStock']);
     // Fetch an article in stock with stock control
     // Add stock+1 to basket
     // Check that basket is invalid
     $outStockArticle = $this->db->fetchRow('SELECT * FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.instock > 2
         AND detail.active = 1
         AND article.laststock = 1
         ORDER BY RAND() LIMIT 1');
     $this->db->insert('s_order_basket', array('price' => 123, 'quantity' => $outStockArticle['instock'] + 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $outStockArticle['ordernumber'], 'articleID' => $outStockArticle['articleID']));
     $result = $this->module->sCheckBasketQuantities();
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('hideBasket', $result);
     $this->assertArrayHasKey('articles', $result);
     $this->assertTrue($result['hideBasket']);
     $this->assertArrayHasKey($inStockArticle['ordernumber'], $result['articles']);
     $this->assertFalse($result['articles'][$inStockArticle['ordernumber']]['OutOfStock']);
     $this->assertArrayHasKey($outStockArticle['ordernumber'], $result['articles']);
     $this->assertTrue($result['articles'][$outStockArticle['ordernumber']]['OutOfStock']);
     // Clear the current cart
     $this->db->delete('s_order_basket', array('sessionID = ?' => $this->session->get('sessionId')));
     // Fetch an article in stock without stock control
     // Add stock+1 to basket
     // Check that basket is valid
     $ignoreStockArticle = $this->db->fetchRow('SELECT * FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.active = 1
         AND article.laststock = 0
         ORDER BY RAND() LIMIT 1');
     $this->db->insert('s_order_basket', array('price' => 123, 'quantity' => $ignoreStockArticle['instock'] + 1, 'sessionID' => $this->session->get('sessionId'), 'ordernumber' => $ignoreStockArticle['ordernumber'], 'articleID' => $ignoreStockArticle['articleID']));
     $result = $this->module->sCheckBasketQuantities();
     $this->assertInternalType('array', $result);
     $this->assertArrayHasKey('hideBasket', $result);
     $this->assertArrayHasKey('articles', $result);
     $this->assertFalse($result['hideBasket']);
     $this->assertArrayHasKey($ignoreStockArticle['ordernumber'], $result['articles']);
     $this->assertFalse($result['articles'][$ignoreStockArticle['ordernumber']]['OutOfStock']);
     // Housekeeping
     $this->db->delete('s_order_basket', array('sessionID = ?' => $this->session->get('sessionId')));
 }