1
0
Fork 0
mirror of synced 2025-04-20 01:21:01 +00:00

add events hadler and bonus pay system

This commit is contained in:
Sergey Chazov 2020-08-19 17:37:37 +03:00 committed by Павел
parent 7590cc9027
commit c3b7e72943
12 changed files with 235 additions and 39 deletions

View file

@ -0,0 +1,3 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/intaro.retailcrm/lib/component/payment/retailcrmbonus/.description.php');

View file

@ -0,0 +1,3 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/intaro.retailcrm/lib/component/payment/retailcrmbonus/handler.php');

View file

@ -8,6 +8,8 @@
global $MESS;
use Bitrix\Main\ArgumentException;
use Bitrix\Main\EventManager;
use Bitrix\Main\Loader;
use Bitrix\Main\ObjectPropertyException;
use Bitrix\Main\SystemException;
use Bitrix\Sale\Internals\OrderPropsGroupTable;
@ -23,6 +25,7 @@ use Bitrix\sale\EventActions;
use Bitrix\Sale\Internals\OrderTable;
use \RetailCrm\ApiClient;
use RetailCrm\Exception\CurlException;
use Intaro\RetailCrm\Component\Loyalty\EventsHandlers;
IncludeModuleLangFile(__FILE__);
if (class_exists('intaro_retailcrm')) {
@ -33,6 +36,23 @@ class intaro_retailcrm extends CModule
{
public const LP_ORDER_GROUP_NAME = 'Программа лояльности';
public const BONUS_COUNT = 'Количество бонусов';
public const BONUS_PAY_SYSTEM_NAME = 'Оплата бонусами';
public const BONUS_PAY_SYSTEM_CODE = 'retailcrmbonus';
public const BONUS_PAY_SYSTEM_DESCRIPTION = 'Оплата бонусами программы лояльности retailCRM';
/**
* @var string[][]
*/
private const SUBSCRIBE_LP_EVENTS = [
['EVENT_NAME' => 'OnBeforeSalePaymentSetField', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnBeforeEndBufferContent', 'MODULE' => 'main'],
['EVENT_NAME' => 'OnSaleOrderBeforeSaved', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnSaleOrderPaid', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnSaleStatusOrderChange', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnSaleOrderSaved', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnSaleOrderCanceled', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnSaleOrderDeleted', 'MODULE' => 'sale'],
['EVENT_NAME' => 'OnSaleComponentOrderOneStepProcess', 'MODULE' => 'sale'],
];
public const V5 = 'v5';
public $MODULE_ID = 'intaro.retailcrm';
public $OLD_MODULE_ID = 'intaro.intarocrm';
@ -141,7 +161,11 @@ class intaro_retailcrm extends CModule
$infoSale = CModule::CreateModuleObject('sale')->MODULE_VERSION;
if (version_compare($infoSale, '16', '<=')) {
$APPLICATION->ThrowException(GetMessage("SALE_VERSION_ERR"));
return false;
}
if (!Loader::includeModule('sale')) {
return false;
}
@ -197,15 +221,17 @@ class intaro_retailcrm extends CModule
unset($type);
}
}
$this->CopyFiles();
$this->addBonusPaySystem();
$this->addLPUserFields();
$this->addLPEvents();
try {
$this->addLPOrderProps();
} catch (ObjectPropertyException | ArgumentException | SystemException $e) {
return false;
}
if ($step == 11) {
$arResult['arSites'] = RCrmActions::SitesList();
if (count($arResult['arSites']) < 2) {
@ -979,8 +1005,6 @@ class intaro_retailcrm extends CModule
$dateAgent->format('d.m.Y H:i:s'), // date of first start
30
);
$this->CopyFiles();
if (isset($_POST['LOAD_NOW'])) {
$loader = new RetailCrmICML();
$loader->iblocks = $iblocks;
@ -1243,6 +1267,7 @@ class intaro_retailcrm extends CModule
RCrmActions::sendConfiguration($retail_crm_api, $api_version, false);
$this->DeleteFiles();
$this->deleteLPEvents();
UnRegisterModule($this->MODULE_ID);
@ -1253,8 +1278,21 @@ class intaro_retailcrm extends CModule
public function CopyFiles(): void
{
$path_from = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install';
CopyDirFiles(
$_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/export/', $_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/', true, true
$path_from . '/export',
$_SERVER['DOCUMENT_ROOT'],
true,
true,
false
);
$saleSystemPath = COption::GetOptionString('sale', 'path2user_ps_files');
CopyDirFiles(
$path_from . '/export_sale_payment',
$_SERVER['DOCUMENT_ROOT'] . $saleSystemPath,
true,
true,
false
);
}
@ -1271,6 +1309,9 @@ class intaro_retailcrm extends CModule
unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/retailcrm_setup.php');
unlink($defaultSite['ABS_DOC_ROOT'] . '/retailcrm/agent.php');
rmdir($defaultSite['ABS_DOC_ROOT'] . '/retailcrm/');
$saleSystemPath = COption::GetOptionString('sale', 'path2user_ps_files');
DeleteDirFilesEx($_SERVER['DOCUMENT_ROOT'] . $saleSystemPath . 'retailcrmbonus');
}
public function GetProfileSetupVars(
@ -1450,11 +1491,11 @@ class intaro_retailcrm extends CModule
->fetchCollection();
foreach ($persons as $person) {
$groupID = $this->getGroupID();
$personId = $person->getID();
$groupID = $this->getGroupID($personId);
if (isset($groupID)) {
$this->addBonusField($person->ID, $groupID);
$this->addBonusField($personId, $groupID);
}
}
}
@ -1482,33 +1523,35 @@ class intaro_retailcrm extends CModule
}
/**
* @return int|false
* @param $personId
* @return \Bitrix\Main\ORM\Data\AddResult|mixed
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ObjectPropertyException
* @throws \Bitrix\Main\SystemException
*/
private function getGroupID()
private function getGroupID($personId)
{
$LPGroup = OrderPropsGroupTable::query()
->setSelect(['ID'])
->where(
[
['PERSON_TYPE_ID', '=', $person->ID],
['PERSON_TYPE_ID', '=', $personId],
['NAME', '=', self::LP_ORDER_GROUP_NAME],
]
)
->fetch();
if (is_array($LPGroup)) {
return $LPGroup['ID'];
}
if ($LPGroup === false) {
$groupFields = [
'PERSON_TYPE_ID' => $person->ID,
'PERSON_TYPE_ID' => $personId,
'NAME' => self::LP_ORDER_GROUP_NAME,
];
return OrderPropsGroupTable::add($groupFields);
$result = OrderPropsGroupTable::add($groupFields);
return $result->getId();
}
}
@ -1533,7 +1576,7 @@ class intaro_retailcrm extends CModule
"REQUIRED" => "N",
"NAME" => self::BONUS_COUNT,
"TYPE" => "TEXT",
"CODE" => "BONUS_COUNT_LP",
"CODE" => "BONUS_RETAILCRM",
"USER_PROPS" => "Y",
"IS_LOCATION" => "N",
"IS_LOCATION4TAX" => "N",
@ -1550,20 +1593,76 @@ class intaro_retailcrm extends CModule
}
}
private function addBonusPaySystem()
private function addBonusPaySystem(): void
{
$path_from = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/netpay.sale/install/www';
$path_to = $_SERVER['DOCUMENT_ROOT'];
DeleteDirFilesEx('/netpay');
DeleteDirFilesEx('/bitrix/php_interface/include/sale_payment/netpay.sale');
$arrPaySystemAction = PaySystemActionTable::query()->setSelect(['ID'])->where(
[
['PAY_SYSTEM_ID', '=', $arrOrderPayment['PAY_SYSTEM_ID']],
['ACTIVE', '=', 'Y'],
['ACTION_FILE', '=', self::BONUS_PAY_SYSTEM_CODE],
]
)->fetch();
)->fetchCollection();
if (count($arrPaySystemAction) === 0) {
$data = [
'NAME' => self::BONUS_PAY_SYSTEM_NAME,
'PSA_NAME' => self::BONUS_PAY_SYSTEM_NAME,
'ACTION_FILE' => self::BONUS_PAY_SYSTEM_CODE,
'DESCRIPTION' => self::BONUS_PAY_SYSTEM_DESCRIPTION,
'RESULT_FILE' => '',
'NEW_WINDOW' => 'N',
'ENCODING' => 'utf-8',
'ACTIVE' => 'Y',
'HAVE_PAYMENT' => 'Y',
'HAVE_ACTION' => 'N',
'AUTO_CHANGE_1C' => 'N',
'HAVE_RESULT' => 'N',
'HAVE_PRICE' => 'N',
'HAVE_PREPAY' => 'N',
'HAVE_RESULT_RECEIVE' => 'N',
'ALLOW_EDIT_PAYMENT' => 'Y',
'IS_CASH' => 'N',
'CAN_PRINT_CHECK' => 'N',
'ENTITY_REGISTRY_TYPE' => 'ORDER',
'XML_ID' => 'intaro_' . randString(15),
];
$result = PaySystemActionTable::add($data);
$updateData = [
'PAY_SYSTEM_ID' => $result->getId(),
'PARAMS' => serialize(['BX_PAY_SYSTEM_ID' => $result->getId()]),
];
PaySystemActionTable::update($result->getId(), $updateData);
}
}
private function addLPEvents(): void
{
$eventManager = EventManager::getInstance();
foreach (self::SUBSCRIBE_LP_EVENTS as $event){
$eventManager->registerEventHandler(
$event['MODULE'],
$event['EVENT_NAME'],
$this->MODULE_ID,
EventsHandlers::class,
$event['EVENT_NAME'].'Handler'
);
}
}
private function deleteLPEvents()
{
$eventManager = EventManager::getInstance();
foreach (self::SUBSCRIBE_LP_EVENTS as $event){
$eventManager->unRegisterEventHandler(
$event['MODULE'],
$event['EVENT_NAME'],
$this->MODULE_ID,
EventsHandlers::class,
$event['EVENT_NAME'].'Handler'
);
}
}
}

View file

@ -1,5 +0,0 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/netpay.sale/payment/netpay.sale/.description.php');
?>

View file

@ -1,5 +0,0 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/netpay.sale/payment/netpay.sale/payment.php');
?>

View file

@ -0,0 +1,101 @@
<?php
/**
* PHP version 7.1
*
* @category Integration
* @package Intaro\RetailCrm\Component
* @author retailCRM <integration@retailcrm.ru>
* @license MIT
* @link http://retailcrm.ru
* @see http://retailcrm.ru/docs
*/
namespace Intaro\RetailCrm\Component\Loyalty;
use Bitrix\Main\Event;
/**
* Class ServiceLocator
*
* @package Intaro\RetailCrm\Component\EventsHandlers
*/
class EventsHandlers
{
/**
* @param \Bitrix\Main\Event $event
*/
public function OnBeforeSalePaymentSetFieldHandler(Event $event)
{
AddMessage2Log('OnBeforeSalePaymentSetFieldHandler work! ' . $event->getDebugInfo());
}
/**
* @param &$content
* @return mixed
*/
public function OnBeforeEndBufferContentHandler($content)
{
AddMessage2Log('OnBeforeEndBufferContentHandler work! ');
return $content;
}
/**
* @param \Bitrix\Main\Event $event
*/
public function OnSaleOrderBeforeSavedHandler(Event $event)
{
AddMessage2Log('OnSaleOrderBeforeSavedHandler work! ' . $event->getDebugInfo());
}
/**
* @param \Bitrix\Main\Event $event
*/
public function OnSaleOrderPaidHandler(Event $event)
{
AddMessage2Log('OnSaleOrderPaidHandler work! '. $event->getDebugInfo());
}
/**
* @param \Bitrix\Main\Event $event
*/
public function OnSaleStatusOrderChangeHandler(Event $event)
{
AddMessage2Log('OnSaleStatusOrderChangeHandler work! '. $event->getDebugInfo());
}
/**
* @param \Bitrix\Main\Event $event
*/
public function OnSaleOrderSavedHandler(Event $event)
{
AddMessage2Log('OnSaleOrderSavedHandler work! '. $event->getDebugInfo());
}
/**
* @param \Bitrix\Main\Event $event
*/
public function OnSaleOrderCanceledHandler(Event $event)
{
AddMessage2Log('OnSaleOrderCanceledHandler work! '. $event->getDebugInfo());
}
/**
* @param \Bitrix\Main\Event $event
*/
public function OnSaleOrderDeletedHandler(Event $event)
{
AddMessage2Log('OnSaleOrderDeletedHandler work! '. $event->getDebugInfo());
}
/**
* @param $arResult
* @param $arUserResult
* @param $arParams
* @return mixed
*/
public function OnSaleComponentOrderOneStepProcessHandler($arResult, $arUserResult, $arParams)
{
AddMessage2Log('OnSaleComponentOrderOneStepProcessHandler work! '. $arUserResult. $arParams);
return $arResult;
}
}

View file

@ -1,6 +1,6 @@
<?php
namespace Sale\Handlers\PaySystem;
namespace Intaro\RetailCrm\Component\Payment\RetailCrmBonus;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Request;