463 lines
17 KiB
PHP
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 '%"{$typeCl}"%'";
|
|
}
|
|
$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 '%"{$activitieCl}"%'";
|
|
}
|
|
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 '%"{$roleCl}"%'";
|
|
}
|
|
$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);
|