Joywork/ajax/stat_sources.php
2026-05-22 21:21:54 +03:00

463 lines
17 KiB
PHP

<?php
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
/*ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);*/
ini_set('max_execution_time', 300);
//Список групп источников
$funnelId = 'all';
$arrGroups = array();
$groupId = 1;
$res = array();
$user = new User;
$user->checkPermissions();
//Закрытие
$denial_work = array();
$sql_d = "SELECT * FROM denial_work WHERE (agency_id = 0 or agency_id={$user->agencyId})";
if($user->agencyId == 19895){
$sql_d = "SELECT * FROM denial_work WHERE agency_id = {$user->agencyId} AND del = 0";
}
$q_d = mysql_query($sql_d);
while($r_d = mysql_fetch_assoc($q_d)){
$denial_work[] = $r_d['id'];
}
$denial_work[] = 0;
$sql_advg = "SELECT * FROM `advertising_sources_groups` WHERE `user_id` = '".$user->id."' or `manager_id` = '".$user->id."'";
if($user->id_manager){
$sql_advg .= " or `manager_id` = '".$user->id_manager."' or `user_id` = '".$user->id_manager."'";
}
if($user -> agencyId || $_SESSION['users_admin']){
$sql_advg .= " or `user_id` in (select id from users where id={$user->agencyId} or id_manager={$user->agencyId} or id_manager in
(select id from users where id_manager={$user->agencyId} or id_manager in
(select id from users where id_manager={$user->agencyId})))";
}
$sql_advg .= " order by id";
$q_advg = mysql_query($sql_advg);
while($r_advg = mysql_fetch_assoc($q_advg)){
$arrGroups[(int)$r_advg['id']] = $r_advg;
$groupId = (int)$r_advg['id'];
}
$groupId++;
$arrGroups[$groupId] = array('id'=>$groupId, 'name'=>'Без группы');
foreach($arrGroups as $idGroup => $group){
$res[$idGroup]['id'] = $idGroup;
$res[$idGroup]['source'] = $group['name'];
$res[$idGroup]['pid'] = 0;
$res[$idGroup]['calls_all'] = 0;
$res[$idGroup]['work'] = 0;
foreach($denial_work as $denial){
$res[$idGroup]['closest_'.$denial] = 0;
}
$res[$idGroup]['closest_all'] = 0;
$res[$idGroup]['expenditure'] = 0;
$res[$idGroup]['sdelka'] = 0;
$res[$idGroup]['summa'] = 0;
$res[$idGroup]['cost'] = 0;
$res[$idGroup]['cost_transaction'] = 0;
$res[$idGroup]['sources'] = 0;
}
//Список источников
$sourceId = 10001;
$arrSource = array();
$sql_adv = "SELECT * FROM `advertising_sources` WHERE (`user_id` = '".$user->id."' or `manager_id` = '".$user->id."'";
if($user->id_manager){
$sql_adv .= " or `manager_id` = '".$user->id_manager."' or `user_id` = '".$user->id_manager."'";
}
if($user -> agencyId || $_SESSION['users_admin']){
$sql_adv .= " or `manager_id` = '".$user -> agencyId."' or `user_id` = '".$user -> agencyId."'";
}
$sql_adv .= ")";
$sql_adv .= ' order by id';
$q_adv = mysql_query($sql_adv);
while($r_adv = mysql_fetch_assoc($q_adv)){
if((int)$r_adv['group_id'] == 0){
$r_adv['group_id'] = $groupId;
}
$arrSource[(int)$r_adv['id']] = $r_adv;
$sourceId = (int)$r_adv['id'];
}
$sourceId++;
$arrSource[10000] = array('id'=>10000, 'source'=>'Объекты нашей компании', 'group_id'=>$groupId);
$arrSource[$sourceId] = array('id'=>$sourceId, 'source'=>'Источник не выбран', 'group_id'=>$groupId);
//var_dump($arrSource);
foreach($arrSource as $idSource => $source){
$res[$idSource]['id'] = $idSource;
$res[$idSource]['source'] = $source['source'];
$res[$idSource]['pid'] = (int)$source['group_id'];
$res[$idSource]['calls_all'] = 0;
$res[$idSource]['work'] = 0;
foreach($denial_work as $denial){
$res[$idSource]['closest_'.$denial] = 0;
}
$res[$idSource]['closest_all'] = 0;
$res[$idSource]['expenditure'] = 0;
$res[$idSource]['sdelka'] = 0;
$res[$idSource]['summa'] = 0;
$res[$idSource]['cost'] = 0;
$res[$idSource]['cost_transaction'] = 0;
$res[$idSource]['sources'] = -1;
}
$cl = new Clients();
$usersArr = json_decode($_POST['responsible'], true);
//file_put_contents(__DIR__.'/log.txt', date('H:i:s'));
$usersId = $cl -> getUsersFilter($usersArr, $_POST['user_id'], $_POST['users_admin']);
$bd_usl_managers = '';
$bd_usl = ' AND cancel=0';
$arrIdUser = array();
$arrIdAgent = array();
foreach($usersId as $userId){
$arrIdUser[] = "who_work = $userId";
$arrIdAgent[] = "id_agent = $userId";
}
$period = 'all';
$whereTasks = "";
$bd_period = '';
$bd_do_period = '';
if(isset($_POST['period'])){
//$_SESSION['client_period'] = $_POST['period'];
$period = $_POST['period'];
if($period == 'dates'){
// $_SESSION['client_period'] = 'period';
$onDate = date('Y-m-d 00:00:00', strtotime($_POST['onDate']));
if(empty($onDate)) $onDate = '1970-01-01 00:00:00';
if(!empty($_POST['offDate'])) {
$offDate = date('Y-m-d 23:59:59', strtotime($_POST['offDate']));
} else {
$offDate = date('Y-m-d 23:59:59');
}
$bd_piriod .= " AND `date_add` between '{$onDate}' AND '{$offDate}'";
$bd_do_period .= " AND `date_add` < '{$onDate}'";
$_SESSION['on_date'] = $_POST['onDate'];
$_SESSION['off_date'] = $_POST['offDate'];
} else {
unset($_SESSION['on_date']);
unset($_SESSION['off_date']);
$arrPeriod = ['today' => '-0 day', 'week' => '-6 day', 'month' => '-30 day', 'quarter' => '-120 day', 'year' => '-365'];
if($_POST['period'] != 'all'){
$days = date('Y-m-d', strtotime($arrPeriod[$_POST['period']]));
$bd_period .= " AND `date_add` > '{$days}'";
$bd_do_period .= " AND `date_add` < '{$days}'";
}
//$whereTasks = " and DATE(create_date) > '{$days}'";
//$_SESSION['client_period'] = $_POST['period'];
}
}
if(isset($_POST['charts_type'])){
$typesArr = json_decode(html_entity_decode($_POST['charts_type']), ENT_QUOTES);
if(!empty($typesArr)){
$typeArr = array();
foreach($typesArr as $typeCl){
$typeArr[] = "work_type like '%&quot;{$typeCl}&quot;%'";
}
$bd_usl .= " AND (".implode(" OR ",$typeArr).")";
}
}
if($_POST['charts_activities'] && $_POST['charts_activities'] != "null"){
$activitiesArr = json_decode(html_entity_decode($_POST['charts_activities']), ENT_QUOTES);
//var_dump($activitiesArr);
$activitieArr = array();
foreach($activitiesArr as $activitieCl){
$activitieArr[] = "`activities` like '%&quot;{$activitieCl}&quot;%'";
}
if(!empty($activitieArr)){
$bd_usl .= " AND (".implode(" OR ",$activitieArr).")";
}
}
if(isset($_POST['charts_rol'])){
$rolesArr = json_decode(html_entity_decode($_POST['charts_rol']), ENT_QUOTES);
if(!empty($rolesArr)){
$sroleArr = array();
foreach($rolesArr as $roleCl){
$roleArr[] = "`role` like '%&quot;{$roleCl}&quot;%'";
}
$bd_usl .= " AND (".implode(" OR ",$roleArr).")";
}
}
if(isset($_POST['source'])){
$sourcesArr = json_decode(html_entity_decode($_POST['source']), ENT_QUOTES);
$sourceArr = array();
if(!empty($sourcesArr )){
foreach($sourcesArr as $sourceCl){
if($sourceCl == 0){
$sourceArr[] = "`source` is null";
$sourceArr[] = "`source` = ''";
$sourceArr[] = "`source` = 'null'";
} else {
$sourceArr[] = "`source` = '{$sourceCl}'";
}
}
$bd_usl .= " AND (".implode(" OR ",$sourceArr).")";
}
}
if(isset($_POST['funnel'])){
$funnelArr = json_decode(html_entity_decode($_POST['funnel']), ENT_QUOTES);
if(!empty($funnelArr)){
$bd_usl .= " AND funnel_id in (".implode(', ',$funnelArr).")";
$funnelId = implode(', ',$funnelArr);
}
}
$bd_usl_managers = " AND (".implode(" OR ",$arrIdUser).")";
$onDate = null;
$offDate = null;
if(isset($_POST['onDate'])){
$onDate = $_POST['onDate'];
}
if(isset($_POST['offDate'])){
$offDate = $_POST['offDate'];
}
$dates = getPeriod($period, $onDate, $offDate);
$date_between = $dates['between'];
//$whereTasks = $dates['whereTasks'];
$table = 'clients';
$date_add = 'date_add';
$script = 'clients.php';
if(isset($_POST['client_req']) && $_POST['client_req'] == 1){
$table = 'requisitions';
$date_add = 'created_at';
$script = 'requisitions.php';
}
$sql = "SELECT `source`, count(*) as total FROM $table WHERE 1 $bd_usl_managers $bd_usl and $date_add $date_between group by `source`";
//echo $sql;
/* $sql = "SELECT c.id, c.id_agent, c.stage, c.summa, c.work_type, c.role, c.step_id, c.deleted, c.confirm, c.employee_id, c.date_add, a.source, p.name as p_name, e.name as e_name, e.position as e_position, c.source as num_source, c.who_work*
FROM clients as c
LEFT JOIN advertising_sources as a on c.source = a.id
LEFT JOIN partners_employees as e on c.employee_id = e.id
LEFT JOIN partners as p on e.partner_id = p.id
WHERE 1 $bd_usl_managers $bd_usl and c.date_add $date_between order by c.date_add";*/
//echo $sql;
$q = mysql_query($sql);
while($r = mysql_fetch_assoc($q)){
$source_id = $sourceId;
$group_id = $groupId;
if($r['total'] > 0){
if(!empty($r['source'])){
$source_id = (int)$r['source'];
$sql_s = "SELECT id, source, group_id FROM advertising_sources WHERE id = $source_id";
$q_s = mysql_query($sql_s);
$r_s = mysql_fetch_assoc($q_s);
if(!empty($r_s['group_id'])){
$group_id = (int)$r_s['group_id'];
}
}
$res[$group_id]['calls_all'] += (int)$r['total'];
$res[$source_id]['calls_all'] += (int)$r['total'];
$res[$source_id]['sources'] = $source_id;
if($res[$source_id]['source'] == 'Источник не выбран'){
$res[$source_id]['sources'] = -1;
}
if($res[$group_id]['sources'] != 0){
$res[$group_id]['sources'] .= ",".$res[$source_id]['sources'];
} else {
$res[$group_id]['sources'] = $res[$source_id]['sources'];
}
}
}
$sql = "SELECT `source`, count(*) as total FROM $table WHERE 1 $bd_usl_managers $bd_usl and deleted=0 and $date_add $date_between group by `source`";
$q = mysql_query($sql);
while($r = mysql_fetch_assoc($q)){
$source_id = $sourceId;
$group_id = $groupId;
if($r['total'] > 0){
if(!empty($r['source'])){
$source_id = (int)$r['source'];
$sql_s = "SELECT id, source, group_id FROM advertising_sources WHERE id = $source_id";
$q_s = mysql_query($sql_s);
$r_s = mysql_fetch_assoc($q_s);
if(!empty($r_s['group_id'])){
$group_id = (int)$r_s['group_id'];
}
}
$res[$group_id]['work'] += (int)$r['total'];
$res[$source_id]['work'] += (int)$r['total'];
}
}
$sql = "SELECT `source`, denial, count(*) as total FROM $table WHERE 1 $bd_usl_managers $bd_usl and deleted=1 and confirm != 10 and $date_add $date_between group by `source`, denial";
$q = mysql_query($sql);
while($r = mysql_fetch_assoc($q)){
$source_id = $sourceId;
$group_id = $groupId;
if($r['total'] > 0){
if(!empty($r['source'])){
$source_id = (int)$r['source'];
$sql_s = "SELECT id, source, group_id FROM advertising_sources WHERE id = $source_id";
$q_s = mysql_query($sql_s);
$r_s = mysql_fetch_assoc($q_s);
if(!empty($r_s['group_id'])){
$group_id = (int)$r_s['group_id'];
}
}
foreach($denial_work as $denial){
if($denial == (int)$r['denial']){
$res[$group_id]['closest_'.$denial] += (int)$r['total'];
$res[$source_id]['closest_'.$denial] += (int)$r['total'];
}
}
$res[$group_id]['closest_all'] += (int)$r['total'];
$res[$source_id]['closest_all'] += (int)$r['total'];
}
}
$sql = "SELECT `source`, sum(summa) as summa, count(*) as total FROM $table WHERE 1 $bd_usl_managers $bd_usl and deleted=1 and confirm = 10 and $date_add $date_between group by `source`";
$q = mysql_query($sql);
while($r = mysql_fetch_assoc($q)){
$source_id = $sourceId;
$group_id = $groupId;
if($r['total'] > 0){
if(!empty($r['source'])){
$source_id = (int)$r['source'];
$sql_s = "SELECT id, source, group_id FROM advertising_sources WHERE id = $source_id";
$q_s = mysql_query($sql_s);
$r_s = mysql_fetch_assoc($q_s);
if(!empty($r_s['group_id'])){
$group_id = (int)$r_s['group_id'];
}
}
$res[$group_id]['summa'] += (int)$r['summa'];
$res[$source_id]['summa'] += (int)$r['summa'];
$res[$group_id]['sdelka'] += (int)$r['total'];
$res[$source_id]['sdelka'] += (int)$r['total'];
}
}
if($post['responsible']){
} else {
unset($_SESSION['filter_emp']);
}
$responsible = '';
if(!empty($usersArr)){
$responsible = implode(',', $usersArr);
}
$row = array();
foreach($res as $rw){
if($rw['calls_all'] > 0){
$isParent = (bool)$rw['pid'] == 0;
$sources = $rw['sources'];
$calls_all = $rw['calls_all'];
$rw['calls_all'] = "<a " . ($isParent ? "data-val=\"$calls_all\"" : '') . " href=\"/$script?filter_stage=filter_work_all&resetFilter=1&period=$period&source=$sources&funnelId=$funnelId";
if($responsible != ''){
$rw['calls_all'] .= "&responsible=$responsible";
}
$rw['calls_all'] .= "\" target=\"_blank\">$calls_all</a>";
$work = $rw['work'];
$rw['work'] = "<a " . ($isParent ? "data-val=\"$work\"" : '') . " href=\"/$script?filter_stage=filter_stage_work&resetFilter=1&period=$period&source=$sources&funnelId=$funnelId";
if($responsible != ''){
$rw['work'] .= "&responsible=$responsible";
}
$rw['work'] .= "\" target=\"_blank\">$work</a>";
$expenditure = $rw['expenditure'];
$rw['expenditure'] = "<a " . ($isParent ? "data-val=\"$expenditure\"" : '') . " href=\"\">$expenditure</a>";
$sdelka_summa = $rw['sdelka'].'/'.number_format($rw['summa'],0 , '.', ' ');
$rw['transaction'] = "<a " . ($isParent ? "data-val=\"$sdelka_summa\"" : '') . " href=\"/$script?filter_stage=filter_stage_hit&resetFilter=1&period=$period&source=$sources&funnelId=$funnelId";
if($responsible != ''){
$rw['transaction'] .= "&responsible=$responsible";
}
$rw['transaction'] .= "\" target=\"_blank\">$sdelka_summa</a>";
$sdelka_calls_all = round($rw['sdelka']/$rw['calls_all']*100, 2);
$rw['conversion'] = "<a " . ($isParent ? "data-val=\"$sdelka_calls_all\"" : '') . " href=\"\">$sdelka_calls_all%</a>";
$closestAll_callsAll = round($rw['closest_all']/$rw['calls_all']*100, 2);
$rw['conversion_closes'] = "<a " . ($isParent ? "data-val=\"$closestAll_callsAll\"" : '') . " href=\"\">$closestAll_callsAll%</a>";
$rw['summa'] = number_format($rw['summa'],0 , '.', ' ');
foreach($denial_work as $denial){
$tempC = $rw['closest_'.$denial];
$rw['closest_'.$denial] = "<a " . ($isParent ? "data-val=\"$tempC\"" : '') . " href=\"/$script?filter_stage=filter_stage_close&resetFilter=1&period=$period&source=$sources&denial=$denial&date_closer=11&funnelId=$funnelId";
if($responsible != ''){
$rw['closest_'.$denial] .= "&responsible=$responsible";
}
$rw['closest_'.$denial] .= "\" target=\"_blank\">$tempC</a>";
}
$tempC = $rw['closest_all'];
$rw['closest_all'] = "<a " . ($isParent ? "data-val=\"$tempC\"" : '') . " href=\"/$script?filter_stage=filter_stage_close&resetFilter=1&period=$period&source=$sources&funnelId=$funnelId";
if($responsible != '')
{
$rw['closest_all'] .= "&responsible=$responsible";
}
$rw['closest_all'] .= "\" target=\"_blank\">$tempC</a>";
$row[] = $rw;
}
}
$result = array(
'rows' => $row,
'total' => count($row),
'totalNotFiltered' => count($row)
);
foreach ($row as $key => $r) {
if (!isset($r['id'])) {
unset($row[$key]);
}
}
echo json_encode($row, JSON_UNESCAPED_UNICODE);