/** * 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()); }
/** * 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'); } }
/** * @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'))); }