add customer edit request etc
This commit is contained in:
parent
e5a85b38e8
commit
3ed8846dd9
14 changed files with 237 additions and 257 deletions
|
@ -2,7 +2,6 @@
|
|||
|
||||
use Bitrix\Main\Context;
|
||||
use Bitrix\Main\Loader;
|
||||
use Intaro\RetailCrm\Component\Builder\Api\Request\LoyaltyAccountEditRequestBuilder;
|
||||
use Intaro\RetailCrm\Component\ServiceLocator;
|
||||
use Intaro\RetailCrm\Service\CookieService;
|
||||
use Intaro\RetailCrm\Service\OrderLoyaltyDataService;
|
||||
|
@ -11,6 +10,7 @@ use Intaro\RetailCrm\Service\LoyaltyAccountService;
|
|||
use Intaro\RetailCrm\Service\CustomerService;
|
||||
use Intaro\RetailCrm\Vendor\Doctrine\Common\Annotations\AnnotationReader;
|
||||
use Intaro\RetailCrm\Vendor\Doctrine\Common\Annotations\AnnotationRegistry;
|
||||
use \Intaro\RetailCrm\Component\Builder\Api\CustomerBuilder;
|
||||
|
||||
require_once __DIR__ . '/RetailcrmClasspathBuilder.php';
|
||||
|
||||
|
@ -38,7 +38,7 @@ ServiceLocator::registerServices([
|
|||
LoyaltyService::class,
|
||||
CustomerService::class,
|
||||
OrderLoyaltyDataService::class,
|
||||
LoyaltyAccountEditRequestBuilder::class
|
||||
CustomerBuilder::class
|
||||
]);
|
||||
|
||||
$arJsConfig = [
|
||||
|
|
|
@ -39,6 +39,8 @@ if (checkLoadIntaro()) {
|
|||
$arResult['LP_REGISTER'] = $service->checkRegInLp();
|
||||
}
|
||||
|
||||
$arResult['ACTIVATE'] = isset($_GET['activate']) && $_GET['activate'] === 'Y';
|
||||
|
||||
try {
|
||||
$agreementPersonalData = AgreementRepository::getFirstByWhere(
|
||||
['AGREEMENT_TEXT'],
|
||||
|
|
|
@ -14,8 +14,7 @@ function serializeObject(array) {
|
|||
}
|
||||
|
||||
|
||||
//TODO переименовать в saveUserLpFields
|
||||
function createAccount() {
|
||||
function saveUserLpFields() {
|
||||
const formArray = $('#lpRegFormInputs').serializeArray();
|
||||
const formObject = serializeObject(formArray);
|
||||
|
||||
|
@ -65,7 +64,7 @@ function activateAccount() {
|
|||
}
|
||||
)
|
||||
|
||||
form.find(':input[type="string"], :input[type="text"], textarea')
|
||||
form.find(':input[type="string"], :input[type="text"], :input[type="email"], textarea')
|
||||
.each(
|
||||
(index, value) => {
|
||||
strings[index] = {
|
||||
|
@ -112,7 +111,7 @@ function activateAccount() {
|
|||
}
|
||||
).then(
|
||||
function(response) {
|
||||
if (response.data.result === true) {
|
||||
if (response.data.status === 'activate') {
|
||||
location.reload();
|
||||
} else {
|
||||
$('#errMsg').text(response.data.msg)
|
||||
|
|
|
@ -119,87 +119,80 @@ if ($arResult["SHOW_SMS_FIELD"] == true) {
|
|||
<?php } ?>
|
||||
|
||||
<?php
|
||||
foreach ($arResult['LP_REGISTER']['form']['externalFields'] as $externalField) {
|
||||
?>
|
||||
<lable>
|
||||
<?php
|
||||
if ($externalField['type'] === 'string' || $externalField['type'] === 'date') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="<?=$externalField['type']?>"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
if ($arResult['ACTIVATE'] === true) {
|
||||
foreach ($arResult['LP_REGISTER']['form']['externalFields'] as $externalField) {
|
||||
?>
|
||||
<lable>
|
||||
<?php
|
||||
if ($externalField['type'] === 'string' || $externalField['type'] === 'date') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="<?=$externalField['type']?>"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
if ($externalField['type'] === 'boolean') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="checkbox"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
<?php
|
||||
if ($externalField['type'] === 'boolean') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="checkbox"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
if ($externalField['type'] === 'text') { ?>
|
||||
<textarea
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
cols="30"
|
||||
rows="10"
|
||||
></textarea>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
<?php
|
||||
if ($externalField['type'] === 'text') { ?>
|
||||
<textarea
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
cols="30"
|
||||
rows="10"
|
||||
></textarea>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
if ($externalField['type'] === 'integer' || $externalField['type'] === 'numeric') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="number"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
<?php
|
||||
if ($externalField['type'] === 'integer' || $externalField['type'] === 'numeric') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="number"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
if ($externalField['type'] === 'email') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="email"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
<?php
|
||||
if ($externalField['type'] === 'email') { ?>
|
||||
<input
|
||||
name="<?=$externalField['code']?>"
|
||||
id="external_<?=$externalField['code']?>"
|
||||
type="email"
|
||||
>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
if ($externalField['type'] === 'dictionary') { ?>
|
||||
<select name="<?=$externalField['code']?>">
|
||||
<?php
|
||||
foreach ($externalField['dictionaryElements'] as $dictionaryElement) {
|
||||
<?php
|
||||
if ($externalField['type'] === 'dictionary') { ?>
|
||||
<select name="<?=$externalField['code']?>">
|
||||
<?php
|
||||
foreach ($externalField['dictionaryElements'] as $dictionaryElement) {
|
||||
?>
|
||||
<option value="<?=$dictionaryElement['code']?>"><?=$dictionaryElement['name']?> </option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<option value="<?=$dictionaryElement['code']?>"><?=$dictionaryElement['name']?> </option>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
</lable>
|
||||
<br>
|
||||
<?php
|
||||
</select>
|
||||
<?=$externalField['name']?>
|
||||
<?php } ?>
|
||||
</lable>
|
||||
<br>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if (isset($arResult['LP_REGISTER']['form']['idInLoyalty'])) { ?>
|
||||
<input
|
||||
name="idInLoyalty"
|
||||
id="idInLoyalty"
|
||||
type="number"
|
||||
value="<?=$arResult['LP_REGISTER']['form']['idInLoyalty']?>"
|
||||
hidden>
|
||||
<?php } ?>
|
||||
</form>
|
||||
<?php
|
||||
if (isset($arResult['LP_REGISTER']['resendAvailable']) && !empty($arResult['LP_REGISTER']['resendAvailable'])) {
|
||||
|
|
|
@ -36,3 +36,4 @@ $MESS['EACH_RUB'] = 'рублей покупки';
|
|||
$MESS['SIMPLE_PRODUCTS'] = 'Обычные товары:';
|
||||
$MESS['SALE_PRODUCTS'] = 'Акционные товары:';
|
||||
$MESS['REMAINING_SUM'] = 'Сумма, оставшаяся до перехода на следующий уровень:';
|
||||
$MESS['ACTIVATE'] = 'Активировать';
|
||||
|
|
|
@ -22,7 +22,7 @@ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
|
|||
<?php if (isset($arResult['ACTIVE'])) { ?>
|
||||
<b><?=GetMessage('ACTIVE')?></b> <?=$arResult['ACTIVE'] ? GetMessage('YES') : GetMessage('NO')?>
|
||||
<?php if ($arResult['ACTIVE'] === false) { ?>
|
||||
<a href="/lp-register"> Активировать</a>
|
||||
<a href="/lp-register?activate=Y"> <?= GetMessage('ACTIVATE') ?></a>
|
||||
<?php } ?>
|
||||
<br>
|
||||
<?php } ?>
|
||||
|
|
|
@ -13,7 +13,7 @@ function serializeObject(array) {
|
|||
return object;
|
||||
}
|
||||
|
||||
function createAccount() {
|
||||
function saveUserLpFields() {
|
||||
const formArray = $('#lpRegFormInputs').serializeArray();
|
||||
const formObject = serializeObject(formArray);
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ $APPLICATION->SetTitle("Регистрация");
|
|||
?>
|
||||
|
||||
<?php $APPLICATION->IncludeComponent(
|
||||
"bitrix:main.register",
|
||||
"default_loyalty",
|
||||
"intaro:lp.register",
|
||||
".default",
|
||||
[
|
||||
"AUTH" => "Y",
|
||||
"REQUIRED_FIELDS" => [],
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
namespace Intaro\RetailCrm\Component\Builder\Api;
|
||||
|
||||
use DateTime;
|
||||
use Intaro\RetailCrm\Component\Builder\Exception\BuilderException;
|
||||
use Intaro\RetailCrm\Service\CookieService;
|
||||
use Intaro\RetailCrm\Component\ConfigProvider;
|
||||
|
@ -48,6 +49,9 @@ class CustomerBuilder implements BuilderInterface
|
|||
/** @var bool */
|
||||
private $attachDaemonCollectorId = false;
|
||||
|
||||
/** @var array */
|
||||
private $customFields;
|
||||
|
||||
/**
|
||||
* CustomerBuilder constructor.
|
||||
*/
|
||||
|
@ -61,16 +65,10 @@ class CustomerBuilder implements BuilderInterface
|
|||
*/
|
||||
public function build(): BuilderInterface
|
||||
{
|
||||
$contragentType = ConfigProvider::getContragentTypeForPersonType($this->personTypeId);
|
||||
|
||||
if (null === $contragentType) {
|
||||
throw new BuilderException(sprintf(
|
||||
'Cannot find corresponding contragent type for PERSON_TYPE_ID `%s`',
|
||||
$this->personTypeId
|
||||
));
|
||||
}
|
||||
|
||||
$this->buildBase($contragentType);
|
||||
$this->buildBase(
|
||||
ConfigProvider::getContragentTypeForPersonType($this->personTypeId ?? '')
|
||||
?? 'individual'
|
||||
);
|
||||
$this->buildNames();
|
||||
$this->buildPhones();
|
||||
$this->buildAddress();
|
||||
|
@ -137,6 +135,18 @@ class CustomerBuilder implements BuilderInterface
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $customFields
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setCustomFields(array $customFields): CustomerBuilder
|
||||
{
|
||||
$this->customFields = $customFields;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create base customer with initial data.
|
||||
*
|
||||
|
@ -152,6 +162,7 @@ class CustomerBuilder implements BuilderInterface
|
|||
$this->customer->email = $this->user->getEmail();
|
||||
$this->customer->createdAt = $this->user->getDateRegister();
|
||||
$this->customer->subscribed = false;
|
||||
$this->customer->customFields = $this->handleFields();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -221,4 +232,60 @@ class CustomerBuilder implements BuilderInterface
|
|||
$phone->number = $number;
|
||||
$this->customer->phones[] = $phone;
|
||||
}
|
||||
|
||||
private function handleFields(): array
|
||||
{
|
||||
$resultFieldsArray = [];
|
||||
|
||||
foreach ($this->customFields as $type => $fields) {
|
||||
$resultFieldsArray = array_merge(
|
||||
$resultFieldsArray,
|
||||
$this->handleFieldByType($type, $fields)
|
||||
);
|
||||
}
|
||||
|
||||
return $resultFieldsArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param array $fields
|
||||
*
|
||||
* @return array
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function handleFieldByType(string $type, array $fields): array
|
||||
{
|
||||
$newFields = [];
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if ($type === 'checkboxes') {
|
||||
$newFields[$field['code']] = (bool) $field['value'];
|
||||
}
|
||||
|
||||
if ($type === 'numbers') {
|
||||
$newFields[$field['code']] = (int) $field['value'];
|
||||
}
|
||||
|
||||
if ($type === 'strings') {
|
||||
if ($field['code'] === 'PERSONAL_PHONE') {
|
||||
$this->addPhone(htmlspecialchars(trim($field['value'])));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$newFields[$field['code']] = htmlspecialchars(trim($field['value']));
|
||||
}
|
||||
|
||||
if ($type === 'dates') {
|
||||
$newFields[$field['code']] = date('d.m.Y', strtotime($field['value']));
|
||||
}
|
||||
|
||||
if ($type === 'options') {
|
||||
$newFields[$field['code']] = htmlspecialchars(trim($field['value']));
|
||||
}
|
||||
}
|
||||
|
||||
return $newFields;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,129 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* @category Integration
|
||||
* @package Intaro\RetailCrm\Component\Builder\API
|
||||
* @author RetailCRM <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see http://retailcrm.ru/docs
|
||||
*/
|
||||
|
||||
namespace Intaro\RetailCrm\Component\Builder\Api\Request;
|
||||
|
||||
use Bitrix\Main\Type\DateTime;
|
||||
use Intaro\RetailCrm\Component\Builder\BuilderInterface;
|
||||
use Intaro\RetailCrm\Model\Api\LoyaltyAccount;
|
||||
use Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountEditRequest;
|
||||
|
||||
/**
|
||||
* Class LoyaltyAccountEditRequestBuilder
|
||||
*
|
||||
*
|
||||
* @package Intaro\RetailCrm\Component\Builder\Api\Request
|
||||
*/
|
||||
class LoyaltyAccountEditRequestBuilder implements BuilderInterface
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $formFields;
|
||||
|
||||
/**
|
||||
* @var \Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountEditRequest
|
||||
*/
|
||||
private $request;
|
||||
|
||||
/**
|
||||
* @param array $formFields
|
||||
*/
|
||||
public function setFormFields(array $formFields): LoyaltyAccountEditRequestBuilder
|
||||
{
|
||||
$this->formFields = $formFields;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function build(): BuilderInterface
|
||||
{
|
||||
$this->request = new LoyaltyAccountEditRequest();
|
||||
$this->request->loyaltyAccount = new LoyaltyAccount();
|
||||
$this->request->loyaltyAccount->customFields = [];
|
||||
|
||||
foreach ($this->formFields as $type => $fields) {
|
||||
$this->request->loyaltyAccount->customFields = array_merge(
|
||||
$this->request->loyaltyAccount->customFields,
|
||||
$this->handleFields($type, $fields)
|
||||
);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function reset(): BuilderInterface
|
||||
{
|
||||
$this->request = new LoyaltyAccountEditRequest();
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getResult(): LoyaltyAccountEditRequest
|
||||
{
|
||||
return $this->request;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param array $fields
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function handleFields(string $type, array $fields): array
|
||||
{
|
||||
$newFields = [];
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if ($type === 'checkboxes') {
|
||||
$newFields[$field['code']] = (bool) $field['value'];
|
||||
}
|
||||
|
||||
if ($type === 'numbers') {
|
||||
if ($field['code'] === 'idInLoyalty') {
|
||||
$this->request->id = (int) $field['value'];
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$newFields[$field['code']] = (int) $field['value'];
|
||||
}
|
||||
|
||||
if ($type === 'strings') {
|
||||
if ($field['code'] === 'PERSONAL_PHONE') {
|
||||
$this->request->loyaltyAccount->phoneNumber = htmlspecialchars(trim($field['value']));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($field['code'] === 'UF_CARD_NUM_INTARO') {
|
||||
$this->request->loyaltyAccount->cardNumber = htmlspecialchars(trim($field['value']));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$newFields[$field['code']] = htmlspecialchars(trim($field['value']));
|
||||
}
|
||||
|
||||
if ($type === 'dates') {
|
||||
$newFields[$field['code']] = strtotime($field['value']);
|
||||
}
|
||||
|
||||
if ($type === 'options') {
|
||||
$newFields[$field['code']] = htmlspecialchars(trim($field['value']));
|
||||
}
|
||||
}
|
||||
|
||||
return $newFields;
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ namespace Intaro\RetailCrm\Controller\Loyalty;
|
|||
use Bitrix\Main\Engine\ActionFilter\Authentication;
|
||||
use Bitrix\Main\Engine\Controller;
|
||||
use Bitrix\Main\Request;
|
||||
use Intaro\RetailCrm\Component\Builder\Api\Request\LoyaltyAccountEditRequestBuilder;
|
||||
use Intaro\RetailCrm\Component\Builder\Api\CustomerBuilder;
|
||||
use Intaro\RetailCrm\Component\Factory\ClientFactory;
|
||||
use Intaro\RetailCrm\Component\ServiceLocator;
|
||||
use Intaro\RetailCrm\DataProvider\CurrentUserProvider;
|
||||
|
@ -13,9 +13,11 @@ use Intaro\RetailCrm\Model\Api\LoyaltyAccount;
|
|||
use Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountActivateRequest;
|
||||
use Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountEditRequest;
|
||||
use Intaro\RetailCrm\Model\Api\Request\SmsVerification\SmsVerificationConfirmRequest;
|
||||
use Intaro\RetailCrm\Model\Api\Response\Loyalty\Account\LoyaltyAccountEditResponse;
|
||||
use Intaro\RetailCrm\Model\Api\SmsVerificationConfirm;
|
||||
use Intaro\RetailCrm\Model\Bitrix\User;
|
||||
use Intaro\RetailCrm\Repository\UserRepository;
|
||||
use Intaro\RetailCrm\Service\CustomerService;
|
||||
use Intaro\RetailCrm\Service\LoyaltyService;
|
||||
use Intaro\RetailCrm\Service\LoyaltyAccountService;
|
||||
use Intaro\RetailCrm\Service\Utils;
|
||||
|
@ -81,7 +83,7 @@ class Register extends Controller
|
|||
}
|
||||
|
||||
if ((!isset($request['UF_AGREE_PL_INTARO'])
|
||||
|| $request['UF_AGREE_PL_INTARO'] !== "on")
|
||||
|| $request['UF_AGREE_PL_INTARO'] !== 'on')
|
||||
&& $customer->getLoyalty()->getIsAgreeLoyaltyProgramRules() !== 1
|
||||
) {
|
||||
return [
|
||||
|
@ -91,7 +93,7 @@ class Register extends Controller
|
|||
}
|
||||
|
||||
if ((!isset($request['UF_PD_PROC_PL_INTARO'])
|
||||
|| $request['UF_PD_PROC_PL_INTARO'] !== "on")
|
||||
|| $request['UF_PD_PROC_PL_INTARO'] !== 'on')
|
||||
&& $customer->getLoyalty()->getIsAgreePersonalDataRules() !== 1
|
||||
) {
|
||||
return [
|
||||
|
@ -304,26 +306,66 @@ class Register extends Controller
|
|||
*
|
||||
* @return array
|
||||
* @throws \Intaro\RetailCrm\Component\Builder\Exception\BuilderException
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function activateAccountAction(array $allFields): array
|
||||
{
|
||||
/** @var LoyaltyAccountService $service */
|
||||
$service = ServiceLocator::get(LoyaltyAccountService::class);
|
||||
$editResponse = $service->editLoyaltyAccount($allFields);
|
||||
global $USER;
|
||||
|
||||
if (
|
||||
$editResponse === null
|
||||
|| (!$editResponse->success && !empty($editResponse->errorMsg))
|
||||
) {
|
||||
/** @var CustomerService $customerService */
|
||||
$customerService = ServiceLocator::get(CustomerService::class);
|
||||
/** @var \Intaro\RetailCrm\Component\Builder\Api\CustomerBuilder $customerBuilder */
|
||||
$customerBuilder = ServiceLocator::get(CustomerBuilder::class);
|
||||
|
||||
/** @var LoyaltyAccountService $loyaltyAccountService */
|
||||
$loyaltyAccountService = ServiceLocator::get(LoyaltyAccountService::class);
|
||||
$userObject = UserRepository::getById($USER->GetID());
|
||||
|
||||
if ($userObject === null) {
|
||||
return [
|
||||
'status' => 'error',
|
||||
'msg' => GetMessage('ERROR') . $editResponse->errorMsg ?? '',
|
||||
'msg' => GetMessage('ERROR'),
|
||||
'msgColor' => 'brown',
|
||||
];
|
||||
}
|
||||
|
||||
$customer = $customerBuilder
|
||||
->setCustomFields($allFields)
|
||||
->setUser($userObject)
|
||||
->build()
|
||||
->getResult();
|
||||
|
||||
return $service->tryActivate($editResponse->id);
|
||||
$customerBuilder->reset();
|
||||
|
||||
$editResponse = $customerService->editCustomer($customer);
|
||||
|
||||
if ($editResponse === false) {
|
||||
return [
|
||||
'status' => 'error',
|
||||
'msg' => GetMessage('ERROR'),
|
||||
'msgColor' => 'brown',
|
||||
];
|
||||
}
|
||||
|
||||
$response = $loyaltyAccountService->activateLoyaltyAccount($userObject->getLoyalty()->getIdInLoyalty());
|
||||
|
||||
//Если отметка не стоит, но аккаунт активирован на стороне CRM
|
||||
if ($response !== null && $response->errorMsg === GetMessage('ALREADY_ACTIVE')) {
|
||||
$loyaltyAccountService->setLoyaltyActivateFlag($USER->GetID());
|
||||
return [
|
||||
'status' => 'activate',
|
||||
];
|
||||
}
|
||||
|
||||
if ($response !== null && $response->loyaltyAccount->active === true) {
|
||||
$loyaltyAccountService->setLoyaltyActivateFlag($userObject->getId());
|
||||
|
||||
return [
|
||||
'status' => 'activate',
|
||||
'msg' => GetMessage('SUCCESS_REGISTER'),
|
||||
'msgColor' => 'green',
|
||||
];
|
||||
}
|
||||
|
||||
return $loyaltyAccountService->tryActivate($userObject->getLoyalty()->getIdInLoyalty());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,3 +11,4 @@ $MESS["NOT_AGREE_PERSONAL_DATA_RULES"] = 'Необходимо согласие
|
|||
$MESS["PHONE_EMPTY"] = 'Необходимо ввести номер телефона';
|
||||
$MESS["NOT_REGISTER"] = 'Пользователь не зарегистрирован';
|
||||
$MESS["ARGUMENT_ERROR"] = 'Ошибка валидации: некорректный id аккаунта в программе лояльности';
|
||||
$MESS["ALREADY_ACTIVE"] = 'LoyaltyAccount has been already activated';
|
||||
|
|
|
@ -2,3 +2,7 @@
|
|||
|
||||
$MESS['LOYALTY_FIELD_ERROR']
|
||||
= 'To activate participation in the loyalty program, the following fields should be filled in for the customer:';
|
||||
$MESS['ALREADY_ACTIVE']
|
||||
= 'LoyaltyAccount has been already activated';
|
||||
$MESS['GO_TO_PERSONAL']
|
||||
= 'Ваш аккаунт создан. Его можно активировать в личном кабинете';
|
||||
|
|
|
@ -15,8 +15,8 @@ namespace Intaro\RetailCrm\Service;
|
|||
|
||||
use CUser;
|
||||
use DateTime;
|
||||
use Intaro\RetailCrm\Component\Builder\Api\Request\LoyaltyAccountEditRequestBuilder;
|
||||
use Intaro\RetailCrm\Component\ConfigProvider;
|
||||
use Intaro\RetailCrm\Component\Constants;
|
||||
use Intaro\RetailCrm\Component\Factory\ClientFactory;
|
||||
use Intaro\RetailCrm\Component\Json\Deserializer;
|
||||
use Intaro\RetailCrm\Component\Json\Serializer;
|
||||
|
@ -227,6 +227,14 @@ class LoyaltyAccountService
|
|||
return ['msg' => GetMessage('ACTIVATE_ERROR')];
|
||||
}
|
||||
|
||||
//Если отметка не стоит, но аккаунт активирован на стороне CRM
|
||||
if ($activateResponse->errorMsg === GetMessage('ALREADY_ACTIVE')) {
|
||||
$this->setLoyaltyActivateFlag($USER->GetID());
|
||||
return [
|
||||
'msg' => GetMessage('REG_COMPLETE'),
|
||||
];
|
||||
}
|
||||
|
||||
if ($activateResponse->success && $activateResponse->loyaltyAccount->active === true) {
|
||||
return ['msg' => GetMessage('REG_COMPLETE')];
|
||||
}
|
||||
|
@ -235,8 +243,6 @@ class LoyaltyAccountService
|
|||
|
||||
//если есть незаполненные обязательные поля
|
||||
if (count($requiredFields) > 0) {
|
||||
$extFields = $this->getExternalFields($requiredFields);
|
||||
|
||||
return [
|
||||
'msg' => GetMessage('ACTIVATE_YOUR_ACCOUNT'),
|
||||
'form' => [
|
||||
|
@ -245,8 +251,7 @@ class LoyaltyAccountService
|
|||
'action' => 'activateAccount',
|
||||
],
|
||||
'fields' => $this->getStandardFields($this->user),
|
||||
'externalFields' => $extFields,
|
||||
'idInLoyalty' => $loyalty->getIdInLoyalty(),
|
||||
'externalFields' => $this->getExternalFields($requiredFields),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
@ -272,7 +277,7 @@ class LoyaltyAccountService
|
|||
'form' => [
|
||||
'button' => [
|
||||
'name' => GetMessage('CREATE'),
|
||||
'action' => 'createAccount',
|
||||
'action' => 'saveUserLpFields',
|
||||
],
|
||||
'fields' => $this->getStandardFields($this->user),
|
||||
'externalFields' => (array)json_decode(ConfigProvider::getLoyaltyFields(), true),
|
||||
|
@ -286,7 +291,7 @@ class LoyaltyAccountService
|
|||
'form' => [
|
||||
'button' => [
|
||||
'name' => GetMessage('CREATE'),
|
||||
'action' => 'createAccount',
|
||||
'action' => 'saveUserLpFields',
|
||||
],
|
||||
'fields' => $this->getStandardFields($this->user),
|
||||
'externalFields' => (array)json_decode(ConfigProvider::getLoyaltyFields(), true),
|
||||
|
@ -385,24 +390,17 @@ class LoyaltyAccountService
|
|||
}
|
||||
|
||||
/**
|
||||
* @param array $allFields
|
||||
*
|
||||
* @return \Intaro\RetailCrm\Model\Api\Response\Loyalty\Account\LoyaltyAccountEditResponse|null
|
||||
* @throws \Intaro\RetailCrm\Component\Builder\Exception\BuilderException
|
||||
* @throws \ReflectionException
|
||||
* @param int|null $userId
|
||||
*/
|
||||
public function editLoyaltyAccount(array $allFields): ?LoyaltyAccountEditResponse
|
||||
public function setLoyaltyActivateFlag(?int $userId): void
|
||||
{
|
||||
/** @var LoyaltyAccountEditRequestBuilder $requestBuilder */
|
||||
$requestBuilder = ServiceLocator::get(LoyaltyAccountEditRequestBuilder::class);
|
||||
/** @var LoyaltyAccountEditRequest $editRequest */
|
||||
$editRequest = $requestBuilder->setFormFields($allFields)->build()->getResult();
|
||||
$requestBuilder->reset();
|
||||
if ($userId === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var \Intaro\RetailCrm\Component\ApiClient\ClientAdapter $client */
|
||||
$client = ClientFactory::createClientAdapter();
|
||||
global $USER_FIELD_MANAGER;
|
||||
|
||||
return $client->editLoyaltyAccount($editRequest);
|
||||
$USER_FIELD_MANAGER->Update('USER', $userId, ['UF_REG_IN_PL_INTARO' => true]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -493,7 +491,9 @@ class LoyaltyAccountService
|
|||
&& $createResponse->loyaltyAccount->activatedAt === null
|
||||
&& isset($createResponse->loyaltyAccount->id)
|
||||
) {
|
||||
return $this->tryActivate($createResponse->loyaltyAccount->id);
|
||||
return [
|
||||
'msg' => GetMessage('GO_TO_PERSONAL')
|
||||
];
|
||||
}
|
||||
|
||||
if ($createResponse !== null && $createResponse->success === true) {
|
||||
|
|
Loading…
Add table
Reference in a new issue