222 lines
7.8 KiB
PHP
222 lines
7.8 KiB
PHP
|
|
<?php
|
|||
|
|
require "../config.php";
|
|||
|
|
|
|||
|
|
ini_set('display_errors', 1);
|
|||
|
|
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
|
|||
|
|
|
|||
|
|
/** GET CSV FROM SOURCE
|
|||
|
|
* @param file_path - путь к файлу на сервере (URL)
|
|||
|
|
* @return body - массив лидов без шапки CSV или false, если файл не открыт
|
|||
|
|
*/
|
|||
|
|
function getCSV($file_path, &$head)
|
|||
|
|
{
|
|||
|
|
$body = array();
|
|||
|
|
if (($handle = fopen($file_path, "r")) !== false) {
|
|||
|
|
while (($row = fgetcsv($handle, 0, ",")) !== false) {
|
|||
|
|
array_push($body, $row);
|
|||
|
|
}
|
|||
|
|
$head = array_shift($body);
|
|||
|
|
fclose($handle);
|
|||
|
|
return $body;
|
|||
|
|
} else {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/** NORMALIZE PHONE
|
|||
|
|
* @param phone - телефон
|
|||
|
|
* @return phone - телефон вида +79999999999
|
|||
|
|
*/
|
|||
|
|
function normalizePhone($phone)
|
|||
|
|
{
|
|||
|
|
$phone = trim($phone);
|
|||
|
|
$phone = '+' . preg_replace("/[^0-9A-Za-z]/", '', $phone);
|
|||
|
|
return $phone;
|
|||
|
|
}
|
|||
|
|
/** CHECK LEAD IN DB
|
|||
|
|
* @param phone - телефон, по которому ищем
|
|||
|
|
* @param $agencyID - агентство, в котором ищем
|
|||
|
|
* @return id - возвращаем ИД лида или 0, если нет ничего
|
|||
|
|
*/
|
|||
|
|
function checkLeadInDB($phone, $agencyID)
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT id, source, deleted, opis FROM `clients` WHERE phone = '$phone' and id_agent in (select id from users where id = $agencyID or id_manager=$agencyID or id_manager in (select id from users where id_manager=$agencyID))";
|
|||
|
|
$result = mysql_query($sql);
|
|||
|
|
|
|||
|
|
if (mysql_num_rows($result) > 0) {
|
|||
|
|
$lead = mysql_fetch_assoc($result);
|
|||
|
|
} else {
|
|||
|
|
$lead = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $lead;
|
|||
|
|
}
|
|||
|
|
function setLeadSource($source, $leadId)
|
|||
|
|
{
|
|||
|
|
$sql = "UPDATE `clients` SET source = '$source' WHERE id= $leadId";
|
|||
|
|
$result = mysql_query($sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function checkLeadRenew($opis, $newDate)
|
|||
|
|
{
|
|||
|
|
$pos = strpos($opis, $newDate);
|
|||
|
|
if ($pos === false) {
|
|||
|
|
return true;
|
|||
|
|
} else {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function setLeadNonDelete($leadId, $opis)
|
|||
|
|
{
|
|||
|
|
$opis = mysql_real_escape_string($opis);
|
|||
|
|
$sql = "UPDATE `clients` SET deleted = 0, denial = 0, opis = '$opis', reason = '' WHERE id= $leadId";
|
|||
|
|
$result = mysql_query($sql);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** GET ID SOURCE IN AGENCY
|
|||
|
|
* @param input - искомый источник
|
|||
|
|
* @param agencyID - ID агенства
|
|||
|
|
* @return id - возвращает ID источника или 0
|
|||
|
|
*/
|
|||
|
|
function getIDSource($input, $agencyID)
|
|||
|
|
{
|
|||
|
|
$sql = "SELECT id FROM `advertising_sources` WHERE user_id = '$agencyID' AND source = '$input'";
|
|||
|
|
$res = mysql_query($sql);
|
|||
|
|
if (mysql_num_rows($res) > 0) {
|
|||
|
|
$id = mysql_fetch_assoc($res)['id'];
|
|||
|
|
} else {
|
|||
|
|
$id = 0;
|
|||
|
|
}
|
|||
|
|
return $id;
|
|||
|
|
}
|
|||
|
|
/** Class for lead */
|
|||
|
|
class Lead
|
|||
|
|
{
|
|||
|
|
private $fio;
|
|||
|
|
private $email;
|
|||
|
|
private $phone;
|
|||
|
|
private $comment;
|
|||
|
|
private $source;
|
|||
|
|
private $funnel;
|
|||
|
|
private $role;
|
|||
|
|
|
|||
|
|
public function __construct($fio, $email, $phone, $comment = '', $source, $funnel = 438, $userType = false)
|
|||
|
|
{
|
|||
|
|
$this->fio = $fio;
|
|||
|
|
$this->email = $email;
|
|||
|
|
$this->phone = normalizePhone($phone);
|
|||
|
|
$this->comment = $comment;
|
|||
|
|
$this->source = $source;
|
|||
|
|
$this->funnel = $funnel;
|
|||
|
|
$this->role = $userType;
|
|||
|
|
}
|
|||
|
|
public function addLeadToDB($userID)
|
|||
|
|
{
|
|||
|
|
$fio = $this->fio;
|
|||
|
|
$email = $this->email;
|
|||
|
|
$phone = $this->phone;
|
|||
|
|
$opis = mysql_real_escape_string($this->comment);
|
|||
|
|
$source = $this->source;
|
|||
|
|
$funnel = $this->funnel;
|
|||
|
|
$who_work = $userID;
|
|||
|
|
$date_add = date("Y-m-d H:i:s");
|
|||
|
|
|
|||
|
|
$role = $this->role ? '["'.$this->role.'"]' : '';
|
|||
|
|
|
|||
|
|
$sql = "INSERT INTO clients (`fio`, `email`, `phone`, `opis`, `source`, `type`, `who_work`,`id_agent`,`date_add`,`deleted`,`stage`,`confirm`,`funnel_id`,`budget`,`status`, `role`)
|
|||
|
|
VALUES ('$fio','$email','$phone','$opis','$source','','0','$who_work','$date_add',0,1,0,'$funnel','','', '$role')";
|
|||
|
|
$res = mysql_query($sql);
|
|||
|
|
if ($res) {
|
|||
|
|
$id = mysql_insert_id();
|
|||
|
|
$client = new Clients;
|
|||
|
|
$client->get_class_etap($id, $funnel);
|
|||
|
|
} else {
|
|||
|
|
$id = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $id;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// DO IT!
|
|||
|
|
/*$agencyID = 7864; // Restate.Agency
|
|||
|
|
$userID = 9426; // Новак Алексей Сергеевич
|
|||
|
|
$head = array(); // на всякий случай сохранятся шапка
|
|||
|
|
$leads = getCSV('http://tk.promit.ru/lead-send.csv?key=7da0e684609e4e1cc077f046be79e0be', $head);
|
|||
|
|
if (is_array($leads) && !empty($leads)) {
|
|||
|
|
foreach ($leads as $lead) {
|
|||
|
|
|
|||
|
|
// Получаем телефон лида (по-другому его не идентифицировать в нашей базе)
|
|||
|
|
$phone = normalizePhone($lead[6]);
|
|||
|
|
$comment = "Дата поступления: $lead[1]<br>Регион: $lead[2]<br>Стоимость квартиры: $lead[3]<br>Нужна ли ипотека: $lead[4]<br>Срок сдачи: $lead[8]<br>Первоначальный взнос: $lead[9]<br>Покупка планируется: $lead[10]<br>Продажа перед покупкой: $lead[11]<br>Название: $lead[12]<br>Комменатарий: $lead[15]<br>";
|
|||
|
|
// Смотрим есть ли источник
|
|||
|
|
$source = 0;
|
|||
|
|
if (!empty($lead[21])) {
|
|||
|
|
$source = getIDSource($lead[21], $agencyID);
|
|||
|
|
if ($source == 0) {
|
|||
|
|
$comment .= '<br><br>Источник: ' . $lead[21] . '<br>';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$userType = false;
|
|||
|
|
if (!empty($lead[22])) {
|
|||
|
|
switch ($lead[22]){
|
|||
|
|
case 'Купить':
|
|||
|
|
$userType = 'Покупатель';
|
|||
|
|
break;
|
|||
|
|
case 'Продать':
|
|||
|
|
$userType = 'Продавец';
|
|||
|
|
break;
|
|||
|
|
case 'Снять':
|
|||
|
|
$userType = 'Арендатор';
|
|||
|
|
break;
|
|||
|
|
case 'Сдать':
|
|||
|
|
$userType = 'Арендодатель';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$funnelId = 438;
|
|||
|
|
if (!empty($lead[23])) {
|
|||
|
|
$type = $lead[23];
|
|||
|
|
if (strpos($type, 'Квартира в новостройке') !== false) {
|
|||
|
|
$funnelId = 438;
|
|||
|
|
}
|
|||
|
|
if (strpos($type, 'Квартира (вторичка)') !== false) {
|
|||
|
|
$funnelId = 121;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($lead[16] != '') {
|
|||
|
|
$comment .= '<br><br>Послушать аудио по ссылке: <a href="' . $lead[16] . '">ссылка</a>';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$leadInDB = checkLeadInDB($phone, $agencyID);
|
|||
|
|
if (is_array($leadInDB)) {
|
|||
|
|
$leadSource = $leadInDB['source'];
|
|||
|
|
$leadDeleted = $leadInDB['deleted'];
|
|||
|
|
$leadId = $leadInDB['id'];
|
|||
|
|
if ((empty($leadSource) || $leadSource == 0) && $source != 0) {
|
|||
|
|
setLeadSource($source, $leadId);
|
|||
|
|
}
|
|||
|
|
if ($leadDeleted == 1) {
|
|||
|
|
// Если дата с CSV отлична от даты в комментарии лида
|
|||
|
|
if (checkLeadRenew($leadInDB['opis'], $lead[1])) {
|
|||
|
|
$newComment = 'Восстановлен.<br>' . $comment;
|
|||
|
|
setLeadNonDelete($leadId, $newComment);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$newLead = new Lead($lead[5], $lead[7], $phone, $comment, $source, $funnelId, $userType);
|
|||
|
|
$newLeadID = $newLead->addLeadToDB($userID);
|
|||
|
|
|
|||
|
|
// Send event Telegram
|
|||
|
|
$event = 'add'; // событие: Добавлен
|
|||
|
|
$from = $userID; //
|
|||
|
|
$sqlEvent = "INSERT INTO `events_clients` (user_id, client_id, from_id, event, `read`, send_telegramm) VALUES ('" . $userID . "', '" . $newLeadID . "', '" . $from . "', '" . $event . "', '2', '0')";
|
|||
|
|
$resultEvent = mysql_query($sqlEvent);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}*/
|