From 38535d47dd4f37074b16786caeabc932c63e84ef Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Fri, 22 Jan 2021 13:05:28 +0100 Subject: [PATCH 1/8] Add GambioOrderProduct and GambioSpecials repositories Added repositories for handling order_products and specials tables ISSUE: CS-1653 --- .../GambioOrderProductRepository.php | 79 +++++++++++++++++++ .../Repository/GambioSpecialsRepository.php | 79 +++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 GXModules/Mollie/Mollie/Components/Entity/Repository/GambioOrderProductRepository.php create mode 100644 GXModules/Mollie/Mollie/Components/Entity/Repository/GambioSpecialsRepository.php diff --git a/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioOrderProductRepository.php b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioOrderProductRepository.php new file mode 100644 index 00000000..5a24e5bb --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioOrderProductRepository.php @@ -0,0 +1,79 @@ +queryBuilder->query($this->getOrderProductsWithDetailsQuery($orderId))->result_array(); + } + + /** + * @inheritDoc + * @return string + */ + protected function _getTableName() + { + return TABLE_ORDERS_PRODUCTS; + } + + /** + * @inheritDoc + * @return string + */ + protected function _getIdentifierKey() + { + return 'orders_products_id'; + } + + /** + * @param string $orderId + * + * @return string + */ + private function getOrderProductsWithDetailsQuery($orderId) + { + return 'SELECT DISTINCT + op.orders_products_id, + op.products_id, + op.products_quantity, + opp.products_properties_combis_id, + pad.products_attributes_filename, + o.date_purchased + FROM ' . TABLE_ORDERS_PRODUCTS . ' op + LEFT JOIN ' . TABLE_ORDERS . ' o + ON op.orders_id = o.orders_id + LEFT JOIN orders_products_properties opp + ON opp.orders_products_id = op.orders_products_id + LEFT JOIN ' . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ' `opa` + ON opa.orders_products_id = op.orders_products_id + LEFT JOIN ' . TABLE_PRODUCTS_ATTRIBUTES . ' pa + ON op.products_id = pa.products_id + AND opa.options_id = pa.options_id + AND opa.options_values_id = pa.options_values_id + LEFT JOIN ' . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad + ON pa.products_attributes_id=pad.products_attributes_id + WHERE + op.orders_id = '" . xtc_db_input($orderId) . "'"; + } +} diff --git a/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioSpecialsRepository.php b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioSpecialsRepository.php new file mode 100644 index 00000000..62eb4296 --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioSpecialsRepository.php @@ -0,0 +1,79 @@ +queryBuilder->query($this->getFilterByProductAndDateQuery($productId, $datePurchased))->num_rows(); + } + + /** + * Increase current specials quantity with the given value + * + * @param string $productId + * @param int $quantity + */ + public function increaseProductsQuantity($productId, $quantity) + { + $this->queryBuilder->query($this->getIncreaseQuantityQuery($productId, $quantity)); + } + + /** + * @inheritDoc + */ + protected function _getTableName() + { + return TABLE_SPECIALS; + } + + /** + * @inheritDoc + */ + protected function _getIdentifierKey() + { + return 'specials_id'; + } + + /** + * @param string $productId + * @param string $datePurchased + * + * @return string + */ + private function getFilterByProductAndDateQuery($productId, $datePurchased) + { + return 'SELECT (specials_date_added) + FROM ' . $this->_getTableName() . " + WHERE specials_date_added < '" . $datePurchased . "' + AND products_id = '" . $productId . "'"; + } + + /** + * @param int $productId + * @param int $quantity + * + * @return string + */ + private function getIncreaseQuantityQuery($productId, $quantity) + { + return 'UPDATE ' . TABLE_SPECIALS . ' + SET specials_quantity = specials_quantity + ' . (int)$quantity . " + WHERE products_id = '" . (int)$productId . "'"; + } +} From 8433cd79331e8f6c20df9e7c4fe09fcadac21be9 Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Fri, 22 Jan 2021 14:24:51 +0100 Subject: [PATCH 2/8] Add GambioProductPropertiesCombisRepository Added repository products_properties_combis ISSUE: CS-1653 --- ...ambioProductPropertiesCombisRepository.php | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductPropertiesCombisRepository.php diff --git a/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductPropertiesCombisRepository.php b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductPropertiesCombisRepository.php new file mode 100644 index 00000000..17390090 --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductPropertiesCombisRepository.php @@ -0,0 +1,73 @@ +queryBuilder + ->select('products_properties_combis_id') + ->from($this->_getTableName()) + ->where('products_id', $productId) + ->get() + ->num_rows(); + } + + /** + * Increases combi quantity by productId + * + * @param int $productId + * @param int $productsPropertiesCombisId + * @param int $quantity + */ + public function increaseCombiQuantity($productId, $productsPropertiesCombisId, $quantity) + { + $this->queryBuilder->query($this->getUpdateProductPropertiesCombiesQuery($productId, $productsPropertiesCombisId, $quantity)); + } + + /** + * @inheritDoc + */ + protected function _getTableName() + { + return 'products_properties_combis'; + } + + /** + * @inheritDoc + */ + protected function _getIdentifierKey() + { + return 'products_properties_combis_values_id'; + } + + /** + * @param int $productId + * @param int $productsPropertiesCombisId + * @param int $quantity + * + * @return string + */ + private function getUpdateProductPropertiesCombiesQuery($productId, $productsPropertiesCombisId, $quantity) + { + return 'UPDATE ' . $this->_getTableName() . ' + SET combi_quantity = combi_quantity + ' . (int)$quantity . " + WHERE products_properties_combis_id = '" . (int)$productsPropertiesCombisId . "' + AND products_id = '" . (int)$productId . "'"; + } +} From 9f9a7b8bc946bae4787a8af82ba75433253ffcd8 Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Fri, 22 Jan 2021 15:14:14 +0100 Subject: [PATCH 3/8] Update GambioProductRepository Added methods for increasing stock and decreasing ordered quantity ISSUE: CS-1653 --- .../Repository/GambioProductRepository.php | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductRepository.php b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductRepository.php index 113152b6..6ebb628f 100644 --- a/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductRepository.php +++ b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductRepository.php @@ -10,6 +10,49 @@ */ class GambioProductRepository extends GambioBaseRepository { + const INCREASE_OPERATOR = '+'; + const DECREASE_OPERATOR = '-'; + const PRODUCT_QUANTITY_COLUMN = 'products_quantity'; + const ORDERED_QUANTITY_COLUMN = 'products_ordered'; + + + /** + * Increases products stock by given value for specific product + * + * @param int $productId + * @param int $quantity + */ + public function increaseProductQuantity($productId, $quantity) + { + $this->updateQuantity($productId, $quantity, self::PRODUCT_QUANTITY_COLUMN, self::INCREASE_OPERATOR); + } + + /** + * Decreases ordered quantity by given value for specific product + * + * @param int $productId + * @param int $quantity + */ + public function decreaseProductOrderedQuantity($productId, $quantity) + { + $this->updateQuantity($productId, $quantity, self::ORDERED_QUANTITY_COLUMN, self::DECREASE_OPERATOR); + } + + /** + * @param int $productId + * @param int $quantity + * @param string $columnName + * @param string $operator + */ + private function updateQuantity($productId, $quantity, $columnName, $operator) + { + $query = 'UPDATE ' .$this->_getTableName() . ' + SET ' . $columnName . ' = ' . $columnName . $operator . (int)$quantity . " + WHERE products_id = '" . (int)$productId . "'"; + + $this->queryBuilder->query($query); + } + /** * @return string */ @@ -25,6 +68,4 @@ protected function _getIdentifierKey() { return 'products_id'; } - - } From 2b06d28fd89bc644e0b6209a6d4364c1ad86c53b Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Mon, 25 Jan 2021 08:58:42 +0100 Subject: [PATCH 4/8] Add order reset mechanism Added order cancel mechanism in case when order is cancelled or failed on checkout ISSUE: CS-1653 --- .../GambioProductAttributesRepository.php | 88 +++++++++++++++++++ .../MollieRedirect/MollieRedirectProvider.php | 8 ++ .../OrderReset/BaseResetService.php | 65 ++++++++++++++ .../OrderReset/OrderResetService.php | 56 ++++++++++++ .../OrderReset/ReactivateArticleService.php | 71 +++++++++++++++ .../Components/OrderReset/ReshipService.php | 17 ++++ .../Components/OrderReset/RestockService.php | 70 +++++++++++++++ 7 files changed, 375 insertions(+) create mode 100644 GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductAttributesRepository.php create mode 100644 GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php create mode 100644 GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php create mode 100644 GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php create mode 100644 GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php create mode 100644 GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php diff --git a/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductAttributesRepository.php b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductAttributesRepository.php new file mode 100644 index 00000000..44f710ee --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/Entity/Repository/GambioProductAttributesRepository.php @@ -0,0 +1,88 @@ +queryBuilder + ->select('products_options, products_options_values') + ->where('orders_id', $orderId, true) + ->where('orders_products_id', $ordersProductsId, true) + ->get($this->_getTableName()) + ->result('array'); + } + + /** + * @param int $productsId + * @param string $productsOptions + * @param string $productsOptionsValues + * + * @return mixed + */ + public function getProductAttributesId($productsId, $productsOptions, $productsOptionsValues) + { + $query = "SELECT pa.products_attributes_id + FROM products_options_values pov, + products_options po, + products_attributes pa + WHERE po.products_options_name = '" . addslashes($productsOptions) . "' + AND po.products_options_id = pa.options_id + AND pov.products_options_values_id = pa.options_values_id + AND pov.products_options_values_name = '" . addslashes($productsOptionsValues) . "' + AND pa.products_id = '" . $productsId . "' + LIMIT 1"; + + $result = $this->queryBuilder->query($query)->result_array(); + + return !empty($result[0]['products_attributes_id']) ? $result[0]['products_attributes_id'] : null; + } + + /** + * Increases attributes stock + * + * @param int $productAttributesId + * @param int $quantity + */ + public function increaseAttributesStock($productAttributesId, $quantity) + { + $query = 'UPDATE products_attributes + SET attributes_stock = attributes_stock + ' . (int)$quantity . " + WHERE products_attributes_id = '" . (int)$productAttributesId . "'"; + + $this->queryBuilder->query($query); + } + + /** + * @inheritDoc + */ + protected function _getTableName() + { + return TABLE_ORDERS_PRODUCTS_ATTRIBUTES; + } + + /** + * @inheritDoc + */ + protected function _getIdentifierKey() + { + return 'products_attributes_id'; + } +} diff --git a/GXModules/Mollie/Mollie/Components/MollieRedirect/MollieRedirectProvider.php b/GXModules/Mollie/Mollie/Components/MollieRedirect/MollieRedirectProvider.php index 2ee621ec..3b11002d 100644 --- a/GXModules/Mollie/Mollie/Components/MollieRedirect/MollieRedirectProvider.php +++ b/GXModules/Mollie/Mollie/Components/MollieRedirect/MollieRedirectProvider.php @@ -4,6 +4,7 @@ namespace Mollie\Gambio\MollieRedirect; use Mollie\Gambio\Mappers\OrderStatusMapper; +use Mollie\Gambio\OrderReset\OrderResetService; use Mollie\Gambio\Utility\MollieTranslator; use Mollie\Gambio\Utility\UrlProvider; @@ -23,6 +24,10 @@ class MollieRedirectProvider * @var OrderStatusMapper */ private $statusMapper; + /** + * @var OrderResetService + */ + private $orderResetService; /** * PaymentLinkProvider constructor. @@ -30,6 +35,7 @@ class MollieRedirectProvider public function __construct() { $this->orderReadService = \StaticGXCoreLoader::getService('OrderRead'); + $this->orderResetService = new OrderResetService(); $this->statusMapper = new OrderStatusMapper(); } @@ -48,6 +54,8 @@ public function getRedirectUrl($orderId) if ($order) { $statusMapping = $this->statusMapper->getStatusMap(); if ((int)$order->getStatusId() === (int)$statusMapping['mollie_canceled']) { + $this->orderResetService->resetOrder($orderId); + return $this->_getCanceledPaymentUrl($order); } } diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php b/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php new file mode 100644 index 00000000..520ec2d3 --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php @@ -0,0 +1,65 @@ +productRepository = new GambioProductRepository(); + $this->productAttributesRepository = new GambioProductAttributesRepository(); + $this->productPropertiesCombisRepository = new GambioProductPropertiesCombisRepository(); + $this->specialsRepository = new GambioSpecialsRepository(); + $this->orderProductRepository = new GambioOrderProductRepository(); + } + + + /** + * @param int $combisCount + * @param array $order + * + * @return int + */ + protected function getUseCombisCount($combisCount, $order) + { + if($combisCount > 0) { + $combisAdminControl = \MainFactory::create_object("PropertiesCombisAdminControl"); + + return (int)$combisAdminControl->get_use_properties_combis_quantity($order['products_id']); + } + + return 0; + } +} \ No newline at end of file diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php b/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php new file mode 100644 index 00000000..693110b6 --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php @@ -0,0 +1,56 @@ +reshipService = new ReshipService(); + $this->restockService = new RestockService(); + $this->reactivateArticleService = new ReactivateArticleService(); + } + + + /** + * + * @param int $orderId + */ + public function resetOrder($orderId) + { + $orders = $this->orderProductRepository->getOrderProductsWithAttributes($orderId); + + foreach ($orders as $order) { + $this->restockService->restock($order, $orderId); + $this->reactivateArticleService->reactivate($order); + $this->reshipService->reship($order); + } + + $deleteHistoryService = \DeleteHistoryServiceFactory::writeService(); + $deleteHistoryService->reportDeletion(\DeletedId::create($orderId), \DeleteHistoryScope::orders()); + } +} diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php b/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php new file mode 100644 index 00000000..d28f7763 --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php @@ -0,0 +1,71 @@ +reactivateProduct($order)) { + $setProduct = new \GMDataObject('products'); + $setProduct->set_keys(['products_id' => $order['products_id']]); + $setProduct->set_data_value('products_status', 1); + $setProduct->save_body_data(); + } + } + + /** + * @param $order + * + * @return bool + */ + private function reactivateProduct($order) + { + $combisCount = $this->productPropertiesCombisRepository->countByProductId($order['products_id']); + $useCombisQuantity = $this->getUseCombisCount($combisCount, $order); + + if ($this->combisNotExists($combisCount, $useCombisQuantity)) { + $getProduct = new \GMDataObject('products', ['products_id' => $order['products_id']]); + if ($getProduct->get_data_value('products_quantity') > 0 && $getProduct->get_data_value('products_status') == 0) { + return true; + } + } + + if ($this->combisExists($combisCount, $useCombisQuantity)) { + $propertiesControl = \MainFactory::create_object('PropertiesControl'); + + return $propertiesControl->available_combi_exists($order['products_id']); + } + + return false; + } + + private function combisNotExists($combisCount, $useCombisQuantity) + { + return $combisCount === 0 || + $useCombisQuantity === 1 || + ($useCombisQuantity == 0 && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK != 'true'); + } + + /** + * @param int $combisCount + * @param int $useCombisQuantity + * + * @return bool + */ + private function combisExists($combisCount, $useCombisQuantity) + { + return $combisCount > 0 && + ( + ($useCombisQuantity == 0 && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK == 'true') || + $useCombisQuantity == 2 + ); + } +} \ No newline at end of file diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php b/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php new file mode 100644 index 00000000..a389aeb9 --- /dev/null +++ b/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php @@ -0,0 +1,17 @@ +specialsRepository->countByProductAndDate($order['products_id'], $order['date_purchased']) > 0) { + $this->specialsRepository->increaseProductsQuantity($order['products_id'], $order['products_quantity']); + } + + $combisCount = $this->productPropertiesCombisRepository->countByProductId($order['products_id']); + $useCombisQuantity = $this->getUseCombisCount($combisCount, $order); + + $stockService = \MainFactory::create('ProductStockService'); + if($stockService->isChangeProductStock($useCombisQuantity, (int)$order['products_properties_combis_id'], $order['products_attributes_filename'])) { + $this->productRepository->increaseProductQuantity($order['products_id'], $order['products_quantity']); + } + + $this->productRepository->decreaseProductOrderedQuantity($order['products_id'], $order['products_quantity']); + if($this->increaseCombisQuantity($combisCount, $useCombisQuantity)) { + $this->productPropertiesCombisRepository->increaseCombiQuantity( + $order['products_id'], + $order['products_properties_combis_id'], + $order['products_quantity'] + ); + } + + if(ATTRIBUTE_STOCK_CHECK == 'true') { + $this->increaseAttributesStock($order_id, $order); + } + } + + /** + * @param int $combisCount + * @param int $useCombisQuantity + * + * @return bool + */ + private function increaseCombisQuantity(int $combisCount, int $useCombisQuantity) + { + return $combisCount > 0 && + ( + ($useCombisQuantity === \PropertiesCombisAdminControl::DEFAULT_GLOBAL && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK == 'true') || + $useCombisQuantity === \PropertiesCombisAdminControl::COMBI_STOCK + ); + } + + /** + * @param int $order_id + * @param array $order + */ + private function increaseAttributesStock($order_id, $order) + { + $ordersAttributes = $this->productAttributesRepository->getOrdersAttributes($order_id, $order['orders_products_id']); + foreach ($ordersAttributes as $ordersAttribute) { + $productAttributesId = $this->productAttributesRepository->getProductAttributesId($order['products_id'], $ordersAttribute['products_options'], $ordersAttribute['products_options_values']); + if($productAttributesId) { + $this->productAttributesRepository->increaseAttributesStock($productAttributesId, $order['products_quantity']); + } + } + } +} From 3b51ab169e86ef65b9efff0b6efda29512fa08e0 Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Mon, 25 Jan 2021 10:23:29 +0100 Subject: [PATCH 5/8] Remove return type from method ReshipService::reship ISSUE: CS-1653 --- .../OrderReset/ReactivateArticleService.php | 3 +++ .../Mollie/Components/OrderReset/ReshipService.php | 6 +++--- .../Components/OrderReset/RestockService.php | 14 +++++++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php b/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php index d28f7763..e4600572 100644 --- a/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php +++ b/GXModules/Mollie/Mollie/Components/OrderReset/ReactivateArticleService.php @@ -11,6 +11,9 @@ class ReactivateArticleService extends BaseResetService { + /** + * @param array $order + */ public function reactivate($order) { if ($this->reactivateProduct($order)) { diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php b/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php index a389aeb9..aedbe30b 100644 --- a/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php +++ b/GXModules/Mollie/Mollie/Components/OrderReset/ReshipService.php @@ -7,11 +7,11 @@ class ReshipService { /** - * @param $order + * @param array $order */ - public function reship($order): void + public function reship($order) { require_once(DIR_FS_CATALOG . 'gm/inc/set_shipping_status.php'); set_shipping_status($order['products_id'], $order['products_properties_combis_id']); } -} \ No newline at end of file +} diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php b/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php index 47a6630f..988ee881 100644 --- a/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php +++ b/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php @@ -10,7 +10,11 @@ class RestockService extends BaseResetService { - public function restock($order, $order_id) + /** + * @param array $order + * @param int $orderId + */ + public function restock($order, $orderId) { if($this->specialsRepository->countByProductAndDate($order['products_id'], $order['date_purchased']) > 0) { $this->specialsRepository->increaseProductsQuantity($order['products_id'], $order['products_quantity']); @@ -34,7 +38,7 @@ public function restock($order, $order_id) } if(ATTRIBUTE_STOCK_CHECK == 'true') { - $this->increaseAttributesStock($order_id, $order); + $this->increaseAttributesStock($orderId, $order); } } @@ -54,12 +58,12 @@ private function increaseCombisQuantity(int $combisCount, int $useCombisQuantity } /** - * @param int $order_id + * @param int $orderId * @param array $order */ - private function increaseAttributesStock($order_id, $order) + private function increaseAttributesStock($orderId, $order) { - $ordersAttributes = $this->productAttributesRepository->getOrdersAttributes($order_id, $order['orders_products_id']); + $ordersAttributes = $this->productAttributesRepository->getOrdersAttributes($orderId, $order['orders_products_id']); foreach ($ordersAttributes as $ordersAttribute) { $productAttributesId = $this->productAttributesRepository->getProductAttributesId($order['products_id'], $ordersAttribute['products_options'], $ordersAttribute['products_options_values']); if($productAttributesId) { From b7f493a5604cdaa9bc0927582aac68f296a46b25 Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Mon, 25 Jan 2021 11:09:02 +0100 Subject: [PATCH 6/8] Adjust to GX3 ISSUE: CS-1653 --- .../OrderReset/BaseResetService.php | 14 ++++++ .../OrderReset/OrderResetService.php | 6 ++- .../Components/OrderReset/RestockService.php | 43 ++++++++++++++++--- 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php b/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php index 520ec2d3..43f4b720 100644 --- a/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php +++ b/GXModules/Mollie/Mollie/Components/OrderReset/BaseResetService.php @@ -9,6 +9,9 @@ use Mollie\Gambio\Entity\Repository\GambioProductPropertiesCombisRepository; use Mollie\Gambio\Entity\Repository\GambioProductRepository; use Mollie\Gambio\Entity\Repository\GambioSpecialsRepository; +use Mollie\Gambio\Services\Business\ConfigurationService; +use Mollie\Infrastructure\Configuration\Configuration; +use Mollie\Infrastructure\ServiceRegister; abstract class BaseResetService { @@ -62,4 +65,15 @@ protected function getUseCombisCount($combisCount, $order) return 0; } + + /** + * @return bool + */ + protected function isVersion4() + { + /** @var ConfigurationService $configService */ + $configService = ServiceRegister::getService(Configuration::CLASS_NAME); + + return version_compare($configService->getIntegrationVersion(), '4.0.0', 'ge'); + } } \ No newline at end of file diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php b/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php index 693110b6..5105b862 100644 --- a/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php +++ b/GXModules/Mollie/Mollie/Components/OrderReset/OrderResetService.php @@ -50,7 +50,9 @@ public function resetOrder($orderId) $this->reshipService->reship($order); } - $deleteHistoryService = \DeleteHistoryServiceFactory::writeService(); - $deleteHistoryService->reportDeletion(\DeletedId::create($orderId), \DeleteHistoryScope::orders()); + if ($this->isVersion4()) { + $deleteHistoryService = \DeleteHistoryServiceFactory::writeService(); + $deleteHistoryService->reportDeletion(\DeletedId::create($orderId), \DeleteHistoryScope::orders()); + } } } diff --git a/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php b/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php index 988ee881..83d20539 100644 --- a/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php +++ b/GXModules/Mollie/Mollie/Components/OrderReset/RestockService.php @@ -23,8 +23,8 @@ public function restock($order, $orderId) $combisCount = $this->productPropertiesCombisRepository->countByProductId($order['products_id']); $useCombisQuantity = $this->getUseCombisCount($combisCount, $order); - $stockService = \MainFactory::create('ProductStockService'); - if($stockService->isChangeProductStock($useCombisQuantity, (int)$order['products_properties_combis_id'], $order['products_attributes_filename'])) { + + if($this->isChangedProductStock($combisCount, $useCombisQuantity, $order)) { $this->productRepository->increaseProductQuantity($order['products_id'], $order['products_quantity']); } @@ -48,12 +48,20 @@ public function restock($order, $orderId) * * @return bool */ - private function increaseCombisQuantity(int $combisCount, int $useCombisQuantity) + private function increaseCombisQuantity($combisCount, $useCombisQuantity) { + if ($this->isVersion4()) { + return $combisCount > 0 && + ( + ($useCombisQuantity === \PropertiesCombisAdminControl::DEFAULT_GLOBAL && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK == 'true') || + $useCombisQuantity === \PropertiesCombisAdminControl::COMBI_STOCK + ); + } + return $combisCount > 0 && ( - ($useCombisQuantity === \PropertiesCombisAdminControl::DEFAULT_GLOBAL && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK == 'true') || - $useCombisQuantity === \PropertiesCombisAdminControl::COMBI_STOCK + ((int)$useCombisQuantity === 0 && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK == 'true') || + (int)$useCombisQuantity === 2 ); } @@ -71,4 +79,29 @@ private function increaseAttributesStock($orderId, $order) } } } + + /** + * @param int $combisCount + * @param int $useCombisQuantity + * @param array $order + * + * @return bool + */ + private function isChangedProductStock($combisCount, $useCombisQuantity, $order) + { + if ($this->isVersion4()) { + /** @var \ProductStockService $stockService */ + $stockService = \MainFactory::create('ProductStockService'); + + return $stockService->isChangeProductStock( + $useCombisQuantity, + (int)$order['products_properties_combis_id'], + $order['products_attributes_filename'] + ); + } + + return (int)$combisCount === 0 || + (int)$useCombisQuantity === 1 || + ((int)$useCombisQuantity === 0 && STOCK_CHECK == 'true' && ATTRIBUTE_STOCK_CHECK != 'true'); + } } From 1ef5825db2fc08d0458ca4e1aa004e7d78d88313 Mon Sep 17 00:00:00 2001 From: "predrag.krstojevic" Date: Tue, 26 Jan 2021 12:49:33 +0100 Subject: [PATCH 7/8] Update version --- .../Components/Services/Business/ConfigurationService.php | 2 +- README.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/GXModules/Mollie/Mollie/Components/Services/Business/ConfigurationService.php b/GXModules/Mollie/Mollie/Components/Services/Business/ConfigurationService.php index b32795d2..e3998ad2 100644 --- a/GXModules/Mollie/Mollie/Components/Services/Business/ConfigurationService.php +++ b/GXModules/Mollie/Mollie/Components/Services/Business/ConfigurationService.php @@ -12,7 +12,7 @@ */ class ConfigurationService extends Configuration { - const MOLLIE_GAMBIO_VERSION = '1.0.5'; + const MOLLIE_GAMBIO_VERSION = '1.0.6'; /** * @inheritDoc diff --git a/README.md b/README.md index 03611c2a..d435f864 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,9 @@ The payment methods are disabled by default in your account so you firstly need 6. **Check if there is any information in the logfile `Toolbox` ยป `Show logs`** # Release notes +*1.0.6* +- Optimization: Restock product quantity, recalculate delivery status and reset article status when order is canceled during the checkout due to failed payment. + *1.0.5* - Bugfix: Fix issues with mollie components when it is only payment method. - Bugfix: Add assets files on the checkout for Honeygrid theme. From 0e162b1387dd9eca5dd64b38c939c05662ece6be Mon Sep 17 00:00:00 2001 From: ivan_bojovic Date: Tue, 26 Jan 2021 13:05:07 +0100 Subject: [PATCH 8/8] Reset order on expiry webhook ISSUE: CS-1653 --- .../Components/Services/Business/OrderTransitionService.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/GXModules/Mollie/Mollie/Components/Services/Business/OrderTransitionService.php b/GXModules/Mollie/Mollie/Components/Services/Business/OrderTransitionService.php index eb48356e..65e41a66 100644 --- a/GXModules/Mollie/Mollie/Components/Services/Business/OrderTransitionService.php +++ b/GXModules/Mollie/Mollie/Components/Services/Business/OrderTransitionService.php @@ -3,6 +3,7 @@ namespace Mollie\Gambio\Services\Business; use Mollie\BusinessLogic\Integration\Interfaces\OrderTransitionService as BaseService; +use Mollie\Gambio\OrderReset\OrderResetService; use Mollie\Gambio\Utility\MollieTranslator; /** @@ -30,6 +31,8 @@ public function expireOrder($orderId, array $metadata) { $comment = $this->getComment('mollie_expired'); $this->mapToCancelledStatus($orderId, $comment); + $orderResetService = new OrderResetService(); + $orderResetService->resetOrder($orderId); } /**