Files
crm.clientright.ru/income.php

167 lines
9.9 KiB
PHP
Raw Permalink Normal View History

<?php
include_once 'modules/Users/Users.php';
require_once('include/Webservices/Utils.php');
require_once 'include/Webservices/Create.php';
require_once 'include/Webservices/Revise.php';
require_once 'include/Webservices/AddRelated.php';
require_once 'includes/Loader.php';
require_once 'include/utils/WhatsApp.php';
vimport ('includes.runtime.Globals');
vimport ('includes.runtime.BaseModel');
vimport ('includes.runtime.LanguageHandler');
$str = file_get_contents('php://input'); //Вынимаем пришедшие данные вот таким оригинальным образом
// $str = '{"operationId":"a76cae4c-a9d7-0009-99ac-01dae5bce157","typeOfOperation":"Credit","accountNumber":"40703810900000742816","accountAmount":"5575.39","accountCurrencyDigitalCode":"643","status":"Active","operationStatus":"transaction","bic":"044525974","category":"incomePeople","documentNumber":"984","operationAmount":"5575.39","operationCurrencyDigitalCode":"643","rubleAmount":"5575.39","counterParty":{"account":"40702810010000891412","bankBic":"044525974","corrAccount":"30101810145250000974","inn":"7726381870","kpp":"771401001","name":"ООО \"ГИКБРЕИНС\""},"description":"Взыскание на основании ИЛ ФС №046844960 от 2024-08-20, выданного на основании суд. решения №2-1263/2024 органа Правобережный районный суд г. Магнитогорска от 2024-07-11","authorizationDate":"2024-09-09T07:38:08Z","trxnPostDate":"2024-09-09T07:39:31Z","payVo":"collection-order","cardNumber":"518901******3270","ucid":"1309555210","mcc":"0001","merch":{"id":"SMENOLIM","city":"MOSCOW","country":"RUS"},"acquirerId":"999999","rrn":"007382945495","payPurpose":"Взыскание на основании ИЛ ФС №046844960 от 2024-08-20, выданного на основании суд. решения №2-1263/2024 органа Правобережный районный суд г. Магнитогорска от 2024-07-11","chargeDate":"2024-09-08T21:00:00Z","drawDate":"2024-09-09T07:38:34Z","receiver":{"account":"40703810900000742816","name":"Межрегиональная общественная организация потребителей \"Клуб защиты покупателей \"Клиентправ\"","inn":"9728036753","kpp":"772801001","bic":"044525974","corrAccount":"30101810145250000974","bankName":"АО \"ТБанк\""},"payer":{"account":"40702810010000891412","name":"ООО \"ГИКБРЕИНС\"","inn":"7726381870","kpp":"771401001","bic":"044525974","corrAccount":"30101810145250000974","bankName":"АО \"ТБанк\""},"docDate":"2024-09-08T21:00:00Z","VO":"06"}';
$logstring = date('Y-m-d H:i:s').' '.print_r($str, true).PHP_EOL; // Пишем в лог то, что будем обрабатывать
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
echo "OK"; // Вернем наружу банку сообщение, что у нас все хорошо и повторно отправлять данные не надо
$data = json_decode($str, true); // Формируем массив
$amount = $data['accountAmount'];
$description = $data['description'];
$inn = $data['payer']['inn'];
global $adb;
// Сначала поищем плательщика-контрагента по ИНН
$query = "select a.accountid
from vtiger_account a
left join vtiger_crmentity e on e.crmid = a.accountid
where e.deleted = '0' and a.inn = '".$inn."'";
$qresult = $adb->pquery($query);
if($adb->num_rows($qresult) == 0) {
// Не нашелся Контрагент - поищем Контакт. Причем с извращением - в базе ИННы почему-то хранятся с пробелами
$query = "select c.contactid
from vtiger_contactscf c
left join vtiger_crmentity e on e.crmid = c.contactid
where e.deleted = '0' and replace(c.cf_1257, ' ', '') = '".$inn."'";
$qresult = $adb->pquery($query);
if($adb->num_rows($qresult) == 0) {
// И Контакт по ИНН не найден - Платеж будет без привязки
$logstring = date('Y-m-d H:i:s').' с ИНН '.$inn.' не найден ни Контакт, ни Контрагент - Платеж будет без привязки'.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
} else {
$contactid = $adb->query_result($qresult, 0, 'contactid');
$payer = '12x'.$contactid;
$payerid = $contactid;
$logstring = date('Y-m-d H:i:s').' Найден Контакт с id = '.$contactid.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
}
} else {
$accountid = $adb->query_result($qresult, 0, 'accountid');
$payer = '11x'.$accountid;
$payerid = $accountid;
$logstring = date('Y-m-d H:i:s').' Найден Контрагент с id = '.$accountid.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
}
$user = Users::getActiveAdminUser(); // Получаем пользователя, под которым будем создавать платеж
$params = array (
'pay_date' => date('Y-m-d'),
'pay_type' => 'Receipt',
'pay_details' => $description,
'type_payment' => 'Cashless Transfer',
'amount' => $amount,
'spstatus' => 'Executed',
'spcompany' => 'МОО "Клиентправ"',
'assigned_user_id' => '19x1'
);
if (isset($payer)) {
$params['payer'] = $payer;
}
$logstring = date("Y-m-d H:i:s").' Подготовлен массив для создания Платежа: '.json_encode($params).PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
try {
$payment = vtws_create('SPPayments', $params, $user);
$output = 'Платеж создан: '.$payment['id'];
} catch (WebServiceException $ex) {
$output = $ex->getMessage();
}
$logstring = date("Y-m-d H:i:s").' '.$output.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
// Шаг второй - связка Платежа с Проектом
if (isset($payer)) {
// А теперь поищем Проекты, где фигурирует плательщик в качестве злодея и выберем из них тот, по которому пришли деньги
$query = "select cf.projectid, cf.cf_1752, cf.cf_1507
from vtiger_projectcf cf
left join vtiger_crmentity e on e.crmid = cf.projectid
where e.deleted = '0' and cf.cf_2274 = ".$payerid." and (cf.cf_1752 <> '' or cf.cf_1507 <> '')";
$logstring = date("Y-m-d H:i:s").' Запрос поиска Проектов: '.PHP_EOL.$query.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
$qresult = $adb->pquery($query);
$pcount = $adb->num_rows($qresult);
if($pcount > 0) {
// Проекты найдены - побежим по ним в цикле
$logstring = date("Y-m-d H:i:s").' Нашли Проекты у злодея. Всего: '.$pcount.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
$logstring = date("Y-m-d H:i:s").' Поищем среди них что-то из назначения платежа: '.$description.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
for ($i=0; $i<$pcount; $i++) {
$logstring = date("Y-m-d H:i:s").' Берем '.($i+1).'-й Проект'.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
$list = $adb->query_result($qresult, $i, 'cf_1752');
$num = $adb->query_result($qresult, $i, 'cf_1507');
$logstring = date("Y-m-d H:i:s").' Выкурили оттуда №ИЛ : '.$list.' и номер дела : '.$num.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
preg_match('/\d+$/', $list, $matches); // Вынимаем последние цифры из поля с исполнительным листом
if (!empty($matches)) {
$list = $matches[0];
} else {
$list = null;
}
$logstring = date("Y-m-d H:i:s").' Вытащили чисто цифры из ИЛ : '.$list.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
if ((mb_strpos($description, $list) !== false and !empty($list)) or
(mb_strpos($description, $num) !== false and !empty($num))) {
// В назначении нашлось значение одного из двух полей
$projectid = $adb->query_result($qresult, 0, 'projectid');
$logstring = date("Y-m-d H:i:s").' Найден Проект, по котому пришла оплата : '.$projectid.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
// Отметим галку о том, что Проект оплачен
try {
$params = array (
'id' => '33x'.$projectid,
'cf_2470' => '1'
);
vtws_revise($params, $user);
$logstring = date("Y-m-d H:i:s").' Поставлена метка об оплате в Проекте : '.$projectid.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
} catch (WebserviceException $ex) {
$logstring = date("Y-m-d H:i:s").' Ошибка установки метки об оплате в Проекте : '.$ex->getMessage().PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
}
// Привяжем Платеж к Проекту
vtws_add_related('33x'.$projectid, $payment['id']);
$logstring = date("Y-m-d H:i:s").' Платеж привязан к Проекту '.$projectid.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
// И уходим
break;
} else {
$logstring = date("Y-m-d H:i:s").' В назначении Платежа нет ни '.$list.', ни '.$num.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
}
}
} else {
$logstring = date("Y-m-d H:i:s").' У злодея не нашлось Проектов? - странно...'.PHP_EOL;
file_put_contents('logs/income.log', $logstring, FILE_APPEND);
}
}
?>