From 73f38afc7f707a3d895d6efc2acf3064e6ba2f3c Mon Sep 17 00:00:00 2001 From: Daniel Seifert Date: Wed, 16 Oct 2019 14:56:55 +0200 Subject: [PATCH] adjust displayed mails to show bundle articles --- .../Application/Model/d3_dev_oxbasket.php | 43 +++++++++++++-- .../Application/Model/d3_dev_oxbasketitem.php | 27 ++++++++-- .../Application/Model/d3_dev_oxorder.php | 53 +++++++++++-------- 3 files changed, 93 insertions(+), 30 deletions(-) diff --git a/src/Modules/Application/Model/d3_dev_oxbasket.php b/src/Modules/Application/Model/d3_dev_oxbasket.php index ca65b7f..7d57d72 100644 --- a/src/Modules/Application/Model/d3_dev_oxbasket.php +++ b/src/Modules/Application/Model/d3_dev_oxbasket.php @@ -1,9 +1,5 @@ 0 + if ($oOrderArticle->oxorderarticles__oxamount->value > 0) { + $this->_isForOrderRecalculation = true; + $sItemId = $oOrderArticle->getId(); + + //inserting new + /** @var d3_dev_oxbasketitem $oBasketItem */ + $oBasketItem = oxNew( BasketItem::class); + $oBasketItem->initFromOrderArticle($oOrderArticle); + $oBasketItem->d3ConvertToArticleObject(); + $oBasketItem->setWrapping($oOrderArticle->oxorderarticles__oxwrapid->value); + $oBasketItem->setBundle($oOrderArticle->isBundle()); + + $this->_aBasketContents[$sItemId] = $oBasketItem; + + //calling update method + $this->onUpdate(); + + return $this->_aBasketContents[$sItemId]; + } + + return null; + } } diff --git a/src/Modules/Application/Model/d3_dev_oxbasketitem.php b/src/Modules/Application/Model/d3_dev_oxbasketitem.php index 1d23c3d..e8f0ef4 100644 --- a/src/Modules/Application/Model/d3_dev_oxbasketitem.php +++ b/src/Modules/Application/Model/d3_dev_oxbasketitem.php @@ -16,6 +16,12 @@ namespace D3\Devhelper\Modules\Application\Model; +use OxidEsales\Eshop\Application\Model\Article; +use OxidEsales\Eshop\Application\Model\OrderArticle; +use OxidEsales\Eshop\Core\Exception\ArticleException; +use OxidEsales\Eshop\Core\Exception\ArticleInputException; +use OxidEsales\Eshop\Core\Exception\NoArticleException; + class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent { public function d3ClearArticle() @@ -25,9 +31,9 @@ class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent /** * @return string - * @throws \OxidEsales\Eshop\Core\Exception\ArticleException - * @throws \OxidEsales\Eshop\Core\Exception\ArticleInputException - * @throws \OxidEsales\Eshop\Core\Exception\NoArticleException + * @throws ArticleException + * @throws ArticleInputException + * @throws NoArticleException */ public function getTitle() { @@ -40,4 +46,19 @@ class d3_dev_oxbasketitem extends d3_dev_oxbasketitem_parent return $this->_sTitle; } + + /** + * @throws \oxArticleInputException + * @throws \oxNoArticleException + */ + public function d3ConvertToArticleObject() + { + $oEmbeddedArticle = $this->getArticle(); + + if ($oEmbeddedArticle instanceof OrderArticle) { + $oArticle = oxNew(Article::class); + $oArticle->load($oEmbeddedArticle->getFieldData('oxartid')); + $this->_oArticle = $oArticle; + } + } } diff --git a/src/Modules/Application/Model/d3_dev_oxorder.php b/src/Modules/Application/Model/d3_dev_oxorder.php index c6eff1c..514b8ec 100644 --- a/src/Modules/Application/Model/d3_dev_oxorder.php +++ b/src/Modules/Application/Model/d3_dev_oxorder.php @@ -1,16 +1,5 @@ _getOrderBasket(); - // unsetting bundles - /** @var ListModel $oOrderArticles */ - $oOrderArticles = $this->getOrderArticles(); - foreach ($oOrderArticles as $sItemId => $oItem) { - /** @var $oItem OrderArticle */ - if ($oItem->isBundle()) { - $oOrderArticles->offsetUnset($sItemId); - } - } - // add this order articles to basket and recalculate basket - $this->_addOrderArticlesToBasket($oBasket, $oOrderArticles); + $this->_d3AddOrderArticlesToBasket($oBasket, $this->getOrderArticles()); + // recalculating basket $oBasket->calculateBasket(true); $oBasket->d3ClearBasketItemArticles(); @@ -66,7 +56,7 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent $orderNr = (int) Registry::get(Request::class)->getRequestEscapedParameter('d3ordernr'); $sWhere = 1; if ($orderNr) { - $sWhere = ' oxordernr = ' . $orderNr; + $sWhere = ' oxordernr = ' . DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->quote($orderNr); } $sSelect = "SELECT oxid FROM ".getViewName('oxorder')." WHERE ".$sWhere." ORDER BY oxorderdate DESC LIMIT 1"; @@ -114,4 +104,21 @@ class d3_dev_oxorder extends d3_dev_oxorder_parent $this->_aVoucherList[$oVoucher->getId()] = $oVoucher; } } + + /** + * Adds order articles back to virtual basket. Needed for recalculating order. + * + * @param d3_dev_oxbasket $oBasket basket object + * @param ListModel $aOrderArticles order articles + */ + protected function _d3AddOrderArticlesToBasket($oBasket, $aOrderArticles) + { + // if no order articles, return empty basket + if (count($aOrderArticles) > 0) { + //adding order articles to basket + foreach ($aOrderArticles as $oOrderArticle) { + $oBasket->d3addOrderArticleToBasket($oOrderArticle); + } + } + } }