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); } } ?>