From ea2220b8a2ddb3af454249c3faa70175e58c8af3 Mon Sep 17 00:00:00 2001 From: Sergej Date: Sun, 9 Jun 2024 13:21:46 +0200 Subject: [PATCH 1/2] implement fix for wrong sAddresses data issue. consider userId to get unique order if there are multiple orders with same orderid --- .../Shopware/Controllers/Frontend/Checkout.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/engine/Shopware/Controllers/Frontend/Checkout.php b/engine/Shopware/Controllers/Frontend/Checkout.php index c9b7f8824a3..f1aba4b79df 100644 --- a/engine/Shopware/Controllers/Frontend/Checkout.php +++ b/engine/Shopware/Controllers/Frontend/Checkout.php @@ -373,8 +373,8 @@ public function finishAction() $orderVariables = $this->session['sOrderVariables']->getArrayCopy(); if (!empty($orderVariables['sOrderNumber'])) { - $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'billing'); - $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'shipping'); + $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'billing'); + $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'shipping'); $orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']); } @@ -407,8 +407,8 @@ public function finishAction() $orderVariables = $this->session['sOrderVariables']->getArrayCopy(); if (!empty($orderVariables['sOrderNumber'])) { - $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'billing'); - $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'shipping'); + $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'billing'); + $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'shipping'); $orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']); } @@ -503,8 +503,8 @@ public function finishAction() $orderVariables = $this->session['sOrderVariables']->getArrayCopy(); - $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'billing'); - $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'shipping'); + $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'billing'); + $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'shipping'); $orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']); $this->View()->assign($orderVariables); @@ -2131,7 +2131,7 @@ private function isValidAddress(int $addressId, bool $isShippingAddress = false) /** * @return array */ - private function getOrderAddress(string $orderNumber, string $source): array + private function getOrderAddress(string $orderNumber, int $userId, string $source): array { $builder = $this->get(Connection::class)->createQueryBuilder(); $context = $this->get(ContextServiceInterface::class)->getShopContext(); @@ -2140,8 +2140,9 @@ private function getOrderAddress(string $orderNumber, string $source): array $address = $builder->select(['address.*']) ->from($sourceTable, 'address') - ->join('address', 's_order', '', 'address.orderID = s_order.id AND s_order.ordernumber = :orderNumber') + ->join('address', 's_order', '', 'address.orderID = s_order.id AND s_order.ordernumber = :orderNumber AND s_order.userID = :userID') ->setParameter('orderNumber', $orderNumber) + ->setParameter('userID', $userId) ->execute() ->fetch(); From 22dfcc0c31edaa3d7aeeee3ebf98952d06e3ab50 Mon Sep 17 00:00:00 2001 From: Sergej Date: Mon, 10 Jun 2024 16:35:51 +0200 Subject: [PATCH 2/2] rename var to customerId use injected session object --- .../Controllers/Frontend/Checkout.php | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/engine/Shopware/Controllers/Frontend/Checkout.php b/engine/Shopware/Controllers/Frontend/Checkout.php index f1aba4b79df..c690d059f0e 100644 --- a/engine/Shopware/Controllers/Frontend/Checkout.php +++ b/engine/Shopware/Controllers/Frontend/Checkout.php @@ -353,6 +353,8 @@ public function confirmAction() */ public function finishAction() { + $customerId = $this->session->get('sUserId'); + if ($this->Request()->getParam('sUniqueID') && !empty($this->session['sOrderVariables'])) { $sql = ' SELECT transactionID as sTransactionumber, ordernumber as sOrderNumber @@ -373,8 +375,8 @@ public function finishAction() $orderVariables = $this->session['sOrderVariables']->getArrayCopy(); if (!empty($orderVariables['sOrderNumber'])) { - $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'billing'); - $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'shipping'); + $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], $customerId, 'billing'); + $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], $customerId, 'shipping'); $orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']); } @@ -407,8 +409,8 @@ public function finishAction() $orderVariables = $this->session['sOrderVariables']->getArrayCopy(); if (!empty($orderVariables['sOrderNumber'])) { - $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'billing'); - $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'shipping'); + $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], $customerId , 'billing'); + $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], $customerId , 'shipping'); $orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']); } @@ -502,9 +504,9 @@ public function finishAction() $this->session->offsetUnset('sComment'); $orderVariables = $this->session['sOrderVariables']->getArrayCopy(); - - $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'billing'); - $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], Shopware()->Session()->get('sUserId'), 'shipping'); + + $orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], $customerId, 'billing'); + $orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], $customerId, 'shipping'); $orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']); $this->View()->assign($orderVariables); @@ -2131,7 +2133,7 @@ private function isValidAddress(int $addressId, bool $isShippingAddress = false) /** * @return array */ - private function getOrderAddress(string $orderNumber, int $userId, string $source): array + private function getOrderAddress(string $orderNumber, int $customerId, string $source): array { $builder = $this->get(Connection::class)->createQueryBuilder(); $context = $this->get(ContextServiceInterface::class)->getShopContext(); @@ -2142,7 +2144,7 @@ private function getOrderAddress(string $orderNumber, int $userId, string $sourc ->from($sourceTable, 'address') ->join('address', 's_order', '', 'address.orderID = s_order.id AND s_order.ordernumber = :orderNumber AND s_order.userID = :userID') ->setParameter('orderNumber', $orderNumber) - ->setParameter('userID', $userId) + ->setParameter('userID', $customerId) ->execute() ->fetch();