321 lines
16 KiB
PHP
321 lines
16 KiB
PHP
|
|
<?php
|
||
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
|
||
|
|
header('Content-Type: application/json');
|
||
|
|
error_reporting(E_ALL | E_STRICT);
|
||
|
|
ini_set('display_errors', 1);
|
||
|
|
|
||
|
|
$pdo = new MysqlPdo(hst, ndb, user, pass);
|
||
|
|
|
||
|
|
$sql = "SET NAMES 'utf8'";
|
||
|
|
|
||
|
|
$pdo->query($sql);
|
||
|
|
|
||
|
|
$tel = new Telegram(false, $pdo);
|
||
|
|
$max = new MaxClass();
|
||
|
|
|
||
|
|
function move_req($req, $steps){
|
||
|
|
global $pdo;
|
||
|
|
global $agency_users;
|
||
|
|
global $users;
|
||
|
|
global $tel;
|
||
|
|
global $max;
|
||
|
|
$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
|
||
|
|
$text_tel = "Ваша Заявка ID {$req['id']} переведен в общие, по причине истечения срока даты выполнения этапа \"".$steps[(int)$req['step_id']]['name']."\"";
|
||
|
|
if(isset($users[$req['who_work']])){
|
||
|
|
$user = $users[$req['who_work']];
|
||
|
|
|
||
|
|
} else {
|
||
|
|
$user = new User();
|
||
|
|
$user->get($req['who_work']);
|
||
|
|
$users[$req['who_work']] = $user;
|
||
|
|
$agency_users[$req['who_work']] = $user->agencyId;
|
||
|
|
}
|
||
|
|
|
||
|
|
$sql_u = "UPDATE requisitions SET who_work=0, confirm=0 WHERE id = {$req['id']}";
|
||
|
|
$pdo->query($sql_u);
|
||
|
|
if($user->telegramm_chat_id > 0){
|
||
|
|
$tel->send($text_tel, $user->telegramm_chat_id);
|
||
|
|
}
|
||
|
|
if($user->max_notice > 0 && $user->max_user_id > 0){
|
||
|
|
$max->send_messages_to_user($user->max_user_id, $text_tel);
|
||
|
|
}
|
||
|
|
$dop_text = "Переведена в общие так как просрочен срок закрытия этапа «".$steps[(int)$req['step_id']]['name']."»";
|
||
|
|
$sql_ev = "INSERT INTO events_clients (req_id, event, dop_text, user_id) VALUES ({$req['id']}, 'update', '{$dop_text}', {$req['who_work']})";
|
||
|
|
$pdo->query($sql_ev);
|
||
|
|
if(($req['type_id'] == 2 || $req['heir'] == 2) && $req['object_id']>0){
|
||
|
|
//Данные объекта
|
||
|
|
$sql_obj = "SELECT * FROM objects WHERE id = {$req['object_id']}";
|
||
|
|
$q_obj = $pdo->query($sql_obj);
|
||
|
|
$obj = $pdo->fetch_assoc($q_obj);
|
||
|
|
$user_id = $obj['id_add_user'];
|
||
|
|
$agency_id = 0;
|
||
|
|
//Вычисляем агенство
|
||
|
|
if(!isset($agency_users[$user_id])){
|
||
|
|
$user = new User();
|
||
|
|
$user->get($user_id);
|
||
|
|
$agency_id = $user->agencyId;
|
||
|
|
$agency_users[$user_id] = $agency_id;
|
||
|
|
} else {
|
||
|
|
$agency_id = $agency_users[$user_id];
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
if($agency_id > 0){
|
||
|
|
$newUser = new User;
|
||
|
|
$newUser->get($agency_id);
|
||
|
|
|
||
|
|
|
||
|
|
$currentUser = $newUser;
|
||
|
|
|
||
|
|
|
||
|
|
$phone = $newUser->phone;
|
||
|
|
$num_search = User::num_search($phone);
|
||
|
|
|
||
|
|
$sobstv = trim($newUser->last_name . ' ' . $newUser->first_name . ' ' . $newUser->middle_name);
|
||
|
|
|
||
|
|
if ($newUser->agency == 0) {
|
||
|
|
$sql="SELECT * FROM users WHERE id=$newUser->id_manager";
|
||
|
|
$rez=$this->db->query($sql);
|
||
|
|
$manager = $this->db->fetch_assoc($rez);
|
||
|
|
|
||
|
|
if($manager['id_manager']) {
|
||
|
|
$agency = $this->db->fetch_assoc($this->db->query("SELECT * FROM users WHERE id=$manager[id_manager]"));
|
||
|
|
} else {
|
||
|
|
$agency = $manager;
|
||
|
|
}
|
||
|
|
if ($agency) {
|
||
|
|
$sobstv = trim($currentUser->last_name . ' ' . $currentUser->first_name . ' ' . $currentUser->middle_name) . ", агентство " . $agency['agency_name'];
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$sobstv = $sobstv . ", агентство " . $newUser->agency_name;
|
||
|
|
}
|
||
|
|
|
||
|
|
$sql_obj_up = "UPDATE objects SET id_add_user={$agency_id}, phone = '{$phone}', phone_search = '{$num_search}', sobstv = '{$sobstv}', is_main = 0 WHERE id = {$obj['id']}";
|
||
|
|
$pdo->query($sql_obj_up);
|
||
|
|
//Запись в сфинкс
|
||
|
|
$sql_sph = "UPDATE objects SET id_add_user={$agency_id}, phone_search = '$num_search' WHERE id={$obj['id']}";
|
||
|
|
|
||
|
|
$db_sphinx->query($sql_sph);
|
||
|
|
$sql_ev = "INSERT INTO user_object_events(user_id, object_id, create_date, type, address, sum, schedule_date, comment, calendar_view)
|
||
|
|
VALUES({$agency_id}, {$obj['id']}, NOW(), 'comment', NULL, NULL, NULL, 'Объект был переведен по причине просрочки этапа «{$steps[(int)$req['step_id']]['name']}»', '1')";
|
||
|
|
$pdo->query($sql_ev);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function move_client($client, $steps){
|
||
|
|
global $pdo;
|
||
|
|
global $agency_users;
|
||
|
|
global $users;
|
||
|
|
global $tel;
|
||
|
|
$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
|
||
|
|
$text_tel = "Ваша Клиент ID {$client['id']} переведен в общие, по причине истечения срока даты выполнения этапа \"".$steps[(int)$client['step_id']]['name']."\"";
|
||
|
|
if(isset($users[$client['who_work']])){
|
||
|
|
$user = $users[$client['who_work']];
|
||
|
|
|
||
|
|
} else {
|
||
|
|
$user = new User();
|
||
|
|
$user->get($client['who_work']);
|
||
|
|
$users[$client['who_work']] = $user;
|
||
|
|
$agency_users[$client['who_work']] = $user->agencyId;
|
||
|
|
}
|
||
|
|
//$db_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306');
|
||
|
|
$sql_u = "UPDATE clients SET who_work=0, confirm=0 WHERE id = {$client['id']}";
|
||
|
|
$pdo->query($sql_u);
|
||
|
|
if($user->telegramm_chat_id > 0){
|
||
|
|
$tel->send($text_tel, $user->telegramm_chat_id);
|
||
|
|
}
|
||
|
|
$dop_text = "Переведен в общие так как просрочен срок закрытия этапа «".$steps[(int)$client['step_id']]['name']."»";
|
||
|
|
$sql_ev = "INSERT INTO events_clients (client_id, event, dop_text, user_id) VALUES ({$client['id']}, 'update', '{$dop_text}', {$client['who_work']})";
|
||
|
|
$pdo->query($sql_ev);
|
||
|
|
}
|
||
|
|
|
||
|
|
$steps = array();
|
||
|
|
$steps_ids = array();
|
||
|
|
$agency_users = array();
|
||
|
|
$users = array();
|
||
|
|
|
||
|
|
$sql = "SELECT * FROM funnel_steps WHERE is_move_end_srok = 1 AND deleted = 0";
|
||
|
|
$q = $pdo->query($sql);
|
||
|
|
while($r = $pdo->fetch_assoc($q)){
|
||
|
|
$steps[$r['id']] = $r;
|
||
|
|
$steps_ids[] = $r['id'];
|
||
|
|
}
|
||
|
|
|
||
|
|
//var_dump($steps_ids);
|
||
|
|
if(!empty($steps_ids)){
|
||
|
|
//Для заявок
|
||
|
|
|
||
|
|
$sql_req = "SELECT id, step_id, created_at, object_id, who_work, type_id,(SELECT heir FROM requisitions_type WHERE id = requisitions.type_id) as heir, (SELECT date_update FROM clients_funnel_step WHERE req_id=requisitions.id) as date_update FROM requisitions WHERE funnel_id > 0 AND step_id in (".implode(',',$steps_ids).") and who_work > 0 AND deleted=0 AND cancel=0";
|
||
|
|
|
||
|
|
$q_req = $pdo->query($sql_req);
|
||
|
|
$reqs_task = array();
|
||
|
|
|
||
|
|
while($r_req = $pdo->fetch_assoc($q_req)){
|
||
|
|
if($steps[(int)$r_req['step_id']]['days_step'] > 0){
|
||
|
|
$set_move = array('is_task'=>0);
|
||
|
|
if(!empty($steps[(int)$r_req['step_id']]['tasks_move'])){
|
||
|
|
$set_move = json_decode($steps[(int)$r_req['step_id']]['tasks_move'], true);
|
||
|
|
}
|
||
|
|
$days_step = $steps[(int)$r_req['step_id']]['days_step'];
|
||
|
|
if(!empty($r_req['date_update'])){
|
||
|
|
$lostDate = $r_req['date_update'];
|
||
|
|
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
|
||
|
|
|
||
|
|
if($interval >= $days_step){
|
||
|
|
|
||
|
|
if($set_move['is_task'] == 1){
|
||
|
|
$delta_time = '-1 hour';
|
||
|
|
if(isset($users[$r_req['who_work']])){
|
||
|
|
$user = $users[$r_req['who_work']];
|
||
|
|
|
||
|
|
} else {
|
||
|
|
$user = new User();
|
||
|
|
$user->get($r_req['who_work']);
|
||
|
|
$users[$r_req['who_work']] = $user;
|
||
|
|
$agency_users[$r_req['who_work']] = $user->agencyId;
|
||
|
|
}
|
||
|
|
//Вычисляем агенство
|
||
|
|
if(!isset($agency_users[$r_req['who_work']])){
|
||
|
|
$user = new User();
|
||
|
|
$user->get($r_req['who_work']);
|
||
|
|
$agency_id = $user->agencyId;
|
||
|
|
$agency_users[$r_req['who_work']] = $agency_id;
|
||
|
|
} else {
|
||
|
|
$agency_id = $agency_users[$r_req['who_work']];
|
||
|
|
|
||
|
|
}
|
||
|
|
if($agency_id == 13154){
|
||
|
|
$delta_time = '-1 day';
|
||
|
|
}
|
||
|
|
$sql_task = "SELECT id FROM user_client_events WHERE req_id = {$r_req['id']}
|
||
|
|
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s", strtotime($delta_time))."'";
|
||
|
|
|
||
|
|
// echo $sql_task;
|
||
|
|
$q_task = $pdo->query($sql_task);
|
||
|
|
if($pdo->num_rows($q_task) == 0){
|
||
|
|
move_req($r_req, $steps);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
move_req($r_req, $steps);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$lostDate = $r_req['created_at'];
|
||
|
|
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
|
||
|
|
|
||
|
|
if($interval >= $days_step){
|
||
|
|
$sql_event = "SELECT * FROM `events_clients` where `req_id` = {$r_req['id']} and event = 'update' order by id desc limit 1";
|
||
|
|
//echo $sql_event."\n";
|
||
|
|
$q_event = $pdo->query($sql_event);
|
||
|
|
if($pdo->num_rows($q_event) > 0){
|
||
|
|
$r_event = $pdo->fetch_assoc($q_event);
|
||
|
|
$lostDate1 = $r_event['date_update'];
|
||
|
|
$interval1 = date_diff(new DateTime(), new DateTime($lostDate1))->days;
|
||
|
|
if($interval1 >= $days_step){
|
||
|
|
if($set_move['is_task'] == 1){
|
||
|
|
$delta_time = '-1 hour';
|
||
|
|
if(isset($users[$r_req['who_work']])){
|
||
|
|
$user = $users[$r_req['who_work']];
|
||
|
|
|
||
|
|
} else {
|
||
|
|
$user = new User();
|
||
|
|
$user->get($r_req['who_work']);
|
||
|
|
$users[$r_req['who_work']] = $user;
|
||
|
|
$agency_users[$r_req['who_work']] = $user->agencyId;
|
||
|
|
}
|
||
|
|
//Вычисляем агенство
|
||
|
|
if(!isset($agency_users[$r_req['who_work']])){
|
||
|
|
$user = new User();
|
||
|
|
$user->get($r_req['who_work']);
|
||
|
|
$agency_id = $user->agencyId;
|
||
|
|
$agency_users[$r_req['who_work']] = $agency_id;
|
||
|
|
} else {
|
||
|
|
$agency_id = $agency_users[$r_req['who_work']];
|
||
|
|
|
||
|
|
}
|
||
|
|
if($agency_id == 13154){
|
||
|
|
$delta_time = '-1 day';
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
$sql_task = "SELECT id FROM user_client_events WHERE req_id = {$r_req['id']}
|
||
|
|
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s", strtotime($delta_time))."'";
|
||
|
|
|
||
|
|
$q_task = $pdo->query($sql_task);
|
||
|
|
if($pdo->num_rows($q_task) == 0){
|
||
|
|
move_req($r_req, $steps);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
move_req($r_req, $steps);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
move_req($r_req, $steps);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//Для клиентов
|
||
|
|
$sql_client = "SELECT id, step_id, date_add, who_work, (SELECT date_update FROM clients_funnel_step WHERE client_id=clients.id) as date_update FROM clients WHERE funnel_id > 0 AND step_id in (".implode(',',$steps_ids).") and who_work > 0 AND deleted=0";
|
||
|
|
|
||
|
|
|
||
|
|
$q_client = $pdo->query($sql_client);
|
||
|
|
|
||
|
|
while($r_client = $pdo->fetch_assoc($q_client)){
|
||
|
|
if($steps[(int)$r_client['step_id']]['days_step'] > 0){
|
||
|
|
$set_move = array('is_task'=>0);
|
||
|
|
if(!empty($steps[(int)$r_req['step_id']]['tasks_move'])){
|
||
|
|
$set_move = json_decode($steps[(int)$r_req['step_id']]['tasks_move'], true);
|
||
|
|
}
|
||
|
|
$days_step = $steps[(int)$r_client['step_id']]['days_step'];
|
||
|
|
if(!empty($r_client['date_update'])){
|
||
|
|
$lostDate = $r_client['date_update'];
|
||
|
|
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
|
||
|
|
// echo $r_client['id']." - ".$interval." - ".$days_step."\n";
|
||
|
|
if($interval >= $days_step){
|
||
|
|
if($set_move['is_task'] == 1){
|
||
|
|
$sql_task = "SELECT id FROM user_client_events WHERE client_id = {$r_client['id']}
|
||
|
|
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s")."'";
|
||
|
|
$q_task = $pdo->query($sql_task);
|
||
|
|
if($pdo->num_rows($q_task) == 0){
|
||
|
|
move_req($r_client, $steps);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
move_client($r_client, $steps);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$lostDate = $r_client['date_add'];
|
||
|
|
$interval = date_diff(new DateTime(), new DateTime($lostDate))->days;
|
||
|
|
// echo $r_client['id']." - ".$interval." - ".$days_step."\n";
|
||
|
|
if($interval >= $days_step){
|
||
|
|
if($set_move['is_task'] == 1){
|
||
|
|
$sql_task = "SELECT id FROM user_client_events WHERE client_id = {$r_client['id']}
|
||
|
|
AND calendar_view = 0 and schedule_date is not null AND schedule_date >= '".date("Y-m-d H:i:s")."'";
|
||
|
|
$q_task = $pdo->query($sql_task);
|
||
|
|
if($pdo->num_rows($q_task) == 0){
|
||
|
|
move_req($r_client, $steps);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
move_client($r_client, $steps);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//var_dump($expiredStagesClients);
|
||
|
|
// var_dump($agency_users);
|
||
|
|
}
|