diff --git a/src/include/class-wc-retailcrm-loyalty.php b/src/include/class-wc-retailcrm-loyalty.php index d5aec33..2cc51ff 100644 --- a/src/include/class-wc-retailcrm-loyalty.php +++ b/src/include/class-wc-retailcrm-loyalty.php @@ -348,7 +348,30 @@ if (!class_exists('WC_Retailcrm_Loyalty')) : public function isValidOrder($wcUser, $wcOrder) { - return !(!$wcUser || (isCorporateUserActivate($this->settings) && isCorporateOrder($wcUser, $wcOrder))); + if (!$wcUser) { + return false; + } + + $wcCustomer = new WC_Customer($wcUser->ID); + + return !(!$wcCustomer || (isCorporateUserActivate($this->settings) && isCorporateOrder($wcCustomer, $wcOrder))); + } + + public function isValidUser($wcUser) + { + if (empty($wcUser)) { + return false; + } + + try { + $response = $this->getLoyaltyAccounts($wcUser->ID); + } catch (Throwable $exception) { + writeBaseLogs('Exception get loyalty accounts: ' . $exception->getMessage()); + + return false; + } + + return isset($response['loyaltyAccounts'][0]); } public function applyLoyaltyDiscount($wcOrder, $createdOrder, $discountLp = 0) diff --git a/src/include/class-wc-retailcrm-orders.php b/src/include/class-wc-retailcrm-orders.php index 3b37dcf..45d9275 100644 --- a/src/include/class-wc-retailcrm-orders.php +++ b/src/include/class-wc-retailcrm-orders.php @@ -100,9 +100,9 @@ if (!class_exists('WC_Retailcrm_Orders')) : $this->order_payment->resetData(); $wcOrder = wc_get_order($orderId); - $privilegeType = 'none'; if ($this->loyalty) { + $privilegeType = 'none'; $discountLp = $this->loyalty->deleteLoyaltyCouponInOrder($wcOrder); $wcUser = $wcOrder->get_user(); @@ -112,13 +112,17 @@ if (!class_exists('WC_Retailcrm_Orders')) : } $discountLp = 0; - } else { + $privilegeType = 'none'; + } elseif ($this->loyalty->isValidUser($wcUser)) { $privilegeType = 'loyalty_level'; } } $this->processOrder($wcOrder); - $this->order['privilegeType'] = $privilegeType; + + if (isset($privilegeType)) { + $this->order['privilegeType'] = $privilegeType; + } $response = $this->retailcrm->ordersCreate($this->order); @@ -322,7 +326,13 @@ if (!class_exists('WC_Retailcrm_Orders')) : } if ($this->loyaltyDiscountType === 'bonus_charge') { - $this->retailcrm->cancelBonusOrder(['externalId' => $this->order['externalId']]); + $responseCancelBonus = $this->retailcrm->cancelBonusOrder(['externalId' => $this->order['externalId']]); + + if (!$responseCancelBonus instanceof WC_Retailcrm_Response || !$responseCancelBonus->isSuccessful()) { + writeBaseLogs('Error when canceling bonuses'); + + return null; + } } } diff --git a/src/include/functions.php b/src/include/functions.php index b1afd25..2e099ea 100644 --- a/src/include/functions.php +++ b/src/include/functions.php @@ -213,7 +213,7 @@ function isCorporateUserActivate($settings) return isset($settings['corporate_enabled']) && $settings['corporate_enabled'] === WC_Retailcrm_Base::YES; } -function isCorporateOrder($wcUser, $wcOrder) +function isCorporateOrder($wcCustomer, $wcOrder) { - return !empty($wcUser->get_billing_company()) || !empty($wcOrder->get_billing_company()); + return !empty($wcCustomer->get_billing_company()) || !empty($wcOrder->get_billing_company()); } diff --git a/tests/test-wc-retailcrm-loyalty.php b/tests/test-wc-retailcrm-loyalty.php index c511081..cdd70ad 100644 --- a/tests/test-wc-retailcrm-loyalty.php +++ b/tests/test-wc-retailcrm-loyalty.php @@ -121,6 +121,12 @@ class WC_Retailcrm_Loyalty_Test extends WC_Retailcrm_Test_Case_Helper */ public function testIsValidOrder($customer, $corporate_enabled, $expected, $orderCorporate) { + $wp_user = null; + + if ($customer) { + $wp_user = get_user_by('ID', $customer->get_id()); + } + $this->loyalty = new WC_Retailcrm_Loyalty($this->apiMock, ['corporate_enabled' => $corporate_enabled]); $wcOrder = new WC_Order(); @@ -128,7 +134,7 @@ class WC_Retailcrm_Loyalty_Test extends WC_Retailcrm_Test_Case_Helper $wcOrder->set_billing_company('OOO TEST'); } - $this->assertEquals($expected, $this->loyalty->isValidOrder($customer, $wcOrder)); + $this->assertEquals($expected, $this->loyalty->isValidOrder($wp_user, $wcOrder)); } /**