From caa05a4188f2da450cf9019139db6a9073d92a33 Mon Sep 17 00:00:00 2001 From: Ivan Chaplygin Date: Wed, 10 Apr 2024 12:45:59 +0300 Subject: [PATCH] =?UTF-8?q?ref=20#72067=20=D0=9F=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B0=D0=BF=D0=B8=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B0=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20?= =?UTF-8?q?=D0=BB=D0=BE=D1=8F=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/pot/retailcrm-ru_RU.pot | 3 ++ src/assets/js/retailcrm-loyalty-actions.js | 31 ++++++++++++++++++ .../api/class-wc-retailcrm-client-v5.php | 2 +- src/include/class-wc-retailcrm-base.php | 28 ++++++++++++++-- src/include/class-wc-retailcrm-loyalty.php | 31 ++++++++++++++---- src/languages/retailcrm-ru_RU.mo | Bin 20054 -> 20251 bytes 6 files changed, 84 insertions(+), 11 deletions(-) diff --git a/resources/pot/retailcrm-ru_RU.pot b/resources/pot/retailcrm-ru_RU.pot index 6658a64..8c451d5 100644 --- a/resources/pot/retailcrm-ru_RU.pot +++ b/resources/pot/retailcrm-ru_RU.pot @@ -549,3 +549,6 @@ msgstr "скидка" msgid "Error while retrieving data. Try again later." msgstr "Ошибка при получении данных. Попробуйте позже." + +msgid "Error when activating the loyalty program. Try again later." +msgstr "Ошибка при активации программы лояльности. Попробуйте позже." diff --git a/src/assets/js/retailcrm-loyalty-actions.js b/src/assets/js/retailcrm-loyalty-actions.js index fb89a0c..cee73ca 100644 --- a/src/assets/js/retailcrm-loyalty-actions.js +++ b/src/assets/js/retailcrm-loyalty-actions.js @@ -48,4 +48,35 @@ jQuery(function() { event.preventDefault(); }); + + jQuery('#loyaltyActivateForm').on("submit", function (event) { + var activateCheckbox = jQuery('#loyaltyActiveCheckbox'); + + if (activateCheckbox.length) { + if (!activateCheckbox.is(':checked')) { + event.preventDefault(); + return false; + } + } + + jQuery.ajax({ + url: LoyaltyUrl.url + '/admin-ajax.php?action=activate_customer_loyalty', + method: 'POST', + timeout: 0, + data: {ajax: 1, loyaltyId: loyaltyId}, + dataType: 'json' + }) + .done(function (response) { + if (response.hasOwnProperty('error')) { + jQuery('#loyaltyRegisterForm').append('

'+ response.error + '

') + + event.preventDefault(); + return false; + } else { + location.reload(); + } + }) + + event.preventDefault(); + }); }); diff --git a/src/include/api/class-wc-retailcrm-client-v5.php b/src/include/api/class-wc-retailcrm-client-v5.php index 540172a..485db22 100644 --- a/src/include/api/class-wc-retailcrm-client-v5.php +++ b/src/include/api/class-wc-retailcrm-client-v5.php @@ -2972,7 +2972,7 @@ class WC_Retailcrm_Client_V5 $parameters['status'] = $status; return $this->client->makeRequest( - "/api/v5/loyalty/account/$clientIdLoyalty/bonus/$status/details", + "/loyalty/account/$clientIdLoyalty/bonus/$status/details", WC_Retailcrm_Request::METHOD_GET, $parameters ); diff --git a/src/include/class-wc-retailcrm-base.php b/src/include/class-wc-retailcrm-base.php index f7961f7..fbbd701 100644 --- a/src/include/class-wc-retailcrm-base.php +++ b/src/include/class-wc-retailcrm-base.php @@ -91,6 +91,7 @@ if (!class_exists('WC_Retailcrm_Base')) { add_action('wp_ajax_clear_cron_tasks', [$this, 'clear_cron_tasks']); add_action('wp_ajax_get_status_coupon', [$this, 'get_status_coupon']); add_action('wp_ajax_register_customer_loyalty', [$this, 'register_customer_loyalty']); + add_action('wp_ajax_activate_customer_loyalty', [$this, 'activate_customer_loyalty']); add_action('admin_print_footer_scripts', [$this, 'ajax_generate_icml'], 99); add_action('woocommerce_update_customer', [$this, 'update_customer'], 10, 1); add_action('user_register', [$this, 'create_customer'], 10, 2); @@ -643,7 +644,7 @@ if (!class_exists('WC_Retailcrm_Base')) { } if (!$userId || !$phone) { - writeBaseLogs('Errors when registering a loyalty program. Passed parameters: userId = ' . $userId ?? 'NULL' . ' phone = ' . $phone ?? 'NULL'); + writeBaseLogs('Errors when registering a loyalty program. Passed parameters: userId = ' . ($userId ?? 'NULL') . ' phone = ' . ($phone ?? 'NULL')); echo json_encode(['error' => __('Error while registering in the loyalty program. Try again later.', 'retailcrm')]); } @@ -658,6 +659,26 @@ if (!class_exists('WC_Retailcrm_Base')) { wp_die(); } + public function activate_customer_loyalty() + { + $loyaltyId = filter_input(INPUT_POST, 'loyaltyId'); + + if (!$loyaltyId) { + writeBaseLogs('Errors when activate loyalty program. loyaltyId is missing'); + echo json_encode(['error' => __('Error when activating the loyalty program. Try again later.', 'retailcrm')]); + } + + $isSuccessful = $this->loyalty->activateLoyaltyCustomer($loyaltyId); + + if (!$isSuccessful) { + echo json_encode(['error' => __('Error when activating the loyalty program. Try again later.', 'retailcrm')]); + } else { + echo json_encode(['isSuccessful' => true]); + } + + wp_die(); + } + /** * In this method we include CSS file * @@ -885,10 +906,11 @@ if (!class_exists('WC_Retailcrm_Base')) { $result = $this->loyalty->getForm($userId); - if (!isset($result)) { + if ([] === $result) { echo '

'. __('Error while retrieving data. Try again later.', 'retailcrm') . '

'; } else { - echo $result; + wp_localize_script($jsScript, 'loyaltyId', $result['loyaltyId'] ?? null); + echo $result['form']; } } diff --git a/src/include/class-wc-retailcrm-loyalty.php b/src/include/class-wc-retailcrm-loyalty.php index 2cb0e20..599bead 100644 --- a/src/include/class-wc-retailcrm-loyalty.php +++ b/src/include/class-wc-retailcrm-loyalty.php @@ -29,7 +29,7 @@ if (!class_exists('WC_Retailcrm_Loyalty')) : public function getForm(int $userId) { - $result = null; + $result = []; $response = $this->apiClient->customersGet($userId); @@ -55,22 +55,22 @@ if (!class_exists('WC_Retailcrm_Loyalty')) : if (isset($response['loyaltyAccounts'][0]) && (int)$loyaltyAccount['customer']['externalId'] === $userId) { if ($loyaltyAccount['active'] === true) { - $result = $this->getLoyaltyInfo($loyaltyAccount); + $result['form'] = $this->getLoyaltyInfo($loyaltyAccount); } else { - $result = sprintf( + $result['form'] = sprintf( '
- - -
+

%s

', __('Activate participation in the loyalty program', 'retailcrm'), __('Send', 'retailcrm') ); + + $result['loyaltyId'] = $loyaltyAccount['id']; } } else { - $result = sprintf( + $result['form'] = sprintf( '

%s

@@ -116,6 +116,23 @@ if (!class_exists('WC_Retailcrm_Loyalty')) : } } + public function activateLoyaltyCustomer(int $loyaltyId) + { + try { + $response = $this->apiClient->activateLoyaltyAccount($loyaltyId); + + if (!$response->isSuccessful()) { + writeBaseLogs('Error while registering in the loyalty program: ' . $response->getRawResponse()); + } + + return $response->isSuccessful(); + } catch (Throwable $exception) { + writeBaseLogs('Exception while activate loyalty account: ' . $exception->getMessage()); + + return false; + } + } + private function getLoyaltyInfo(array $loyaltyAccount) { $data = [ diff --git a/src/languages/retailcrm-ru_RU.mo b/src/languages/retailcrm-ru_RU.mo index 4abcc17cf6f55e65ec185015e734f8b84928c561..7ca912e9ac377f65a204fb27a6c8706e2b38bc6c 100644 GIT binary patch delta 3947 zcmZA4dyti79S87dX}QB9mqqR@7eRJe5LlN*?st&u%B2!;Aw*gbl(;JB2}(dI$VCO^ zq6lc9sDO>+I7Ktng#KYp6HO^Fqm-Cdl4DH6lzo1C4%ze!-}8B%_nh;d=lwm;`>vkd zo403wUgms@{Ku2_s&tSy>ZWv=a~pfnikhWVz%H!Mn|K2&*ob$q39A`jSwsKQCNFJS zlRN$*n;V~E8@|cXlrrgq+=1rTrPS3M#T>*bY|kx>FC1iNzQOq6_t=ylGEV$CTeH5w zWOkxMX({03t?7|Y7Lz=>vU=>GmJ)=TDWd;Aq z-t6zJ)vRI(&oGwkbH@As;wTm?M@(oLGgEc8=)@JAM|6fxc}Wt?}Ym#E0B-0^iRHr{%@`p?%n>A*;~ve0qD*>q89AEP42 z8DBWf9{iX?*urI$a~k9Go7sm?F|POw0%Kxp8QL6DPjJ ziM+}v;aKmzhm}iE zTXnkYoMM#b9ODarp(>}mPTAY49d{Y`qkrj)mr`D$kEYh{&7Le{d~YtJf~z^3M;S|- zSCrio6Zl}<|MPWjPAOeroT$*&ufqY12TD1kRHGPcIfHR!YZyzDq5YRO)2gI>jL)5- z-%Rhaf>#+!R_0AbPNUf;?*A&CIKg%<R<2m03Pvf%GLFxn zVx%fYB_GVWoiXA4jJ@$ZV~LKjh2KxF>BMe*lkveTj5UqtY|OYdV}ds@PB4V|97PwE z#&cDkd!JGI^LBJh@Cs)#-@3$e;OmU@EMQc09iw{bVVz!lfl->@GLB#7B(}WKMr0L7 z@B|0&Ge*UF`f{9bTh6`gXMBvYDKF3+m@dC4=$tSOb@Y=FEJ_+kE@yJ&JTDWw{qSmUERA|B5a~PZR_T2bx7R3F(RcEX>cCjPRG1m4f?_qm8E|z8+$fO zVwCV=&H_8ms-y~bjnDBN)=&}BougB_iw9`=Q-d+tyJIM0|D`25%ejZ!*ho1x@(D&o z+Kls;isf9)0_zod!9~W*uP~OV`_$}O4`46j+o1+_7dw1^8ojI$ySzeL;a+h3d@eJ54D`bs4F3}#yQv3H{m%gp= z-!@p!&6U0{8Jj#Embhp0rMsLI&y(8c0BW1tIN2VxZJyT}DU}8Cgv^lGEC1iV=fGZR zC~KvM+$Xt~sV!^UYeUYKqY}4Fv~Nj?#6x76M2k(TZU43UKbIY+`D`X5WsrPZHc4xlCee<|zS>^)WinzjEtmUct9)0Yy__X2 z;U03;^}v-#iR3%+~7vODBGk!o|o-XEYU{D3AtT5%NB_? zTE1D^%l;YH&HjEDy}l9;iz%{Ds^n3LHbkb&aCul7$KNw=l! zko6L`X9Fpd+W+0Dhhx$!#@a-gDm!JVM0-ej%S-a4JSYQC)@}CtdQBHCFIup0RrQ($ itE!hT-uY?a%_lDwmUP_te&1VmP9HGvWU~R|+y4ib@{20~ delta 3897 zcmYk;39waV0SE98Lu8czSp=VeAR>#&Ls4-25sJgE35xXV5H_IULK&tLr~y z*1)f;>u)g6dyg5377lV>e-7dyJe#w+8~@`}o^>J*+|5MmOqsxp#F@+u7jpnt@hCpS z5!}IizfpG%;#j7qS1>QWkB$5V(}0hdjqg+KF74%tLqvTk#f}m9m;f zuROvu>{;f%7n%FEGK*^)(~#{U;;Fov^`?EGjB}226Y4Pne zs^u}7zVZTB@onzQD|`&)3OZGu;{n{t+}GM3%?S4849;Mt_A#2}vYpqkeIE-u`@cyg z58BAx_zv?!@+W4fwlQ=0DbthvY>iCKV5WhMG}>hX^SwFrj&cJJ=UQgUw$h-M_n9eb z=gZx)|3|9Kc47*r@F`|!_vly3PuRdT=yhg_-erdJgX;XJ)cMlRcxEIARgPpDJds%& z)0iom$;|z14)OkSrAoedKl9>8nHE3C^zbF-0e@plZlg|=4|#bD_v~LE`eg&^4ZNSz zU0=`a|J}_`p3{LD(f-W+hq88{%BdAfyUqHmH9S#=42)Fpyz28%I`UjAMqHD^0U^K zH9A$6u@9eO*3f2V|8J*vl)es*$r}mbLhdP+|8vN&4D%Jl?Gf)+o4>|OV~`` zDSaEA<5Z@{zvETh!Be=vd}Q@+Vz$@2OhZ563G8MsW@OH#*(^(#?>$7bS8C6yOi_7{ z8G$3UVmfE>&wP?Ma`lK(7P9YQ^#|R-Joq`LAzL|~BkZ};SmR8-&WvE=5%ue5FjM*< zO--%*Q{{3ehMJJH@IGdB{*rU~52j%=j;xQ!VrFO`VS9Ezs{YrmKhvX=*^7(Vi7Tt) zwcOM3&pC!KvmyJxhn11J9>IB>!A!{uOhaDdt^Bw;UT!7+!SUnl%%!@ajpZ)p_%)^h ze`gxrYE=FCgV@ILM0VkH_N%E}ppup?ue_5P%5}7m%ZJPm_CBue1e%SqfY~MM_!56Z zohtWOiRbYxn$5WWqY45v4PW!&ug5|^EqK`eerGJZjRq# zSH8nE;NMJxdzjenJck*HMN9*h(~c_}nFem7cbCEAjsHxQdF~#@O+0`*cq02vsBg#l zOoQ&_*STKatpr+mU>&~PoGp@6X#VfV9qb0bzGXb4>!_}X4x{y__tSS>20mp zsj>&tgWep%MrMj;F>`$>GbImmU%paZ{})?3ZZWyO{n}FdJ}a5-485gO9+MMuVwR+= zkgv(jwGwm$RKGWcvWUlm)ma8XG^y8cV$<}Vob>o);V%n z_P@njzAtO!+cHg3&Xg;pw``EzCB@G`d04W77fVWqI^`>s_wbIY{va=u8IrXzUv`xn zy?hUFBxEPf~`+QF4C{lsoIB|MlPL z_>i0=x5*TFRJzIG;-{h9E7^Wm$wWC=R$7TNa zSILh~%D6h8eV$s??&e52Sgw^}a;w}fOC;qwIY