liveusers.blade.php 13.7 KB
<?php
use App\Models\CRMCall;
use App\Models\CRMCallArchive;
use App\Models\User;
use App\Models\UserLog;
use App\Jobs\KHRMSLib;

$wakka = new KHRMSLib();
$dashboarduser=Auth::user();
$timeoffset = $dashboarduser->timezone; //-330; //$dashboarduser->timezone;
$timeoffset = $timeoffset*60;

$logtime    =(isset($_GET['logtime']))  ? $_GET['logtime']  :9;
$logtimeto  =(isset($_GET['logtimeto']))? $_GET['logtimeto']:20;

$logdate    =(isset($_GET['logdate']))  ? strtotime($_GET['logdate']." ".$logtime.":00:00")
                                        : strtotime(date("Y-m-d")." 09:00:00");
$logdateto  =(isset($_GET['logdateto']))? strtotime($_GET['logdateto']." ".$logtimeto.":00:00")
                                        : strtotime(date("Y-m-d")." 20:00:00");

$oclientlst=$wakka->clientsReadAccess(); sort($oclientlst);

$alist=CRMCallArchive::whereIn('client',$oclientlst)->where('created_at','>=',date("Y-m-d H:i:s",$logdate+$timeoffset))->where('created_at','<=',date("Y-m-d H:i:s",$logdateto+$timeoffset))->orderBy('user_id', 'ASC')->orderBy('ts_Close', 'ASC')->get();

$userlog=UserLog::where('created_at','>=',date("Y-m-d H:i:s",$logdate+$timeoffset))->where('created_at','<=',date("Y-m-d H:i:s",$logdateto+$timeoffset))->get();

$total_Accounts_loaded=DB::table('records')->whereIn('client',$oclientlst)->get();


$breaks=array("AgentBriefing","TeamMeeting","QualityFeedback","LunchBreak","TeaBreak","UtilityBreak","FloorAnnouncements","DownTime");
$reporthead=array("Campaigns","Accounts Loaded","LoggedIn users","Unique accounts dialled","Total accounts Dialled","Disposed Calls","Contacts","RPC","PTP","Preview","Wrap","Idle","Talk","Hold");
$reportarray=array();

$campaign_wisearr= array();
$camp_userlist=array();
$uniquenumberarray=array();
$prev_close = 0;
foreach ($alist as $key => $value) {

    if (!array_key_exists($value->client, $camp_userlist)) $camp_userlist[$value->client]=[];

    if (!in_array($value->user_id, $camp_userlist[$value->client])) $camp_userlist[$value->client][]=$value->user_id;

    $campaign_wisearr[$value->client]["LoggedIn users"] = count($camp_userlist[$value->client]);
    $campaign_wisearr[$value->client]["Campaigns"] = $value->client;
    $campaign_wisearr[$value->client]["Total accounts Dialled"]++;

    if (!array_key_exists($value->client, $uniquenumberarray)) $uniquenumberarray[$value->client]=[];
    if (!in_array($value->number, $uniquenumberarray[$value->client])) $uniquenumberarray[$value->client][]=$value->number;

    $campaign_wisearr[$value->client]["Unique accounts dialled"] = count($uniquenumberarray[$value->client]);

    if($value->userstatus == 'Contacted') {
        $campaign_wisearr[$value->client]["Disposed Calls"]++;
    }
    if($value->resultCode =='PTP'|| $value->resultCode =='CB'||$value->resultCode =='RTP'||$value->resultCode =='CEREP'||$value->resultCode =='PV'||$value->resultCode =='DEAD'||$value->resultCode =='LM'||$value->resultCode =='TPC') {
        $campaign_wisearr[$value->client]["Contacts"]++;
    }
    if($value->resultCode == 'PTP' || $value->resultCode == 'CEREP' || $value->resultCode == 'PV') {
        $campaign_wisearr[$value->client]["PTP"]++;
    }
    if($value->resultCode == 'PTP' || $value->resultCode == 'CB' || $value->resultCode == 'CEREP' || $value->resultCode == 'RTP' || $value->resultCode == 'PV') {
        $campaign_wisearr[$value->client]["RPC"]++;
    }
    if($prev_user != $value->user_id || $prev_close <= $value->ts_Wait)
    {
        $talktime=$value->talkSec+$value->recstartSec+$value->recendSec;
        $totaltime=$value->callSec+$talktime+$value->dispoSec;

        $campaign_wisearr[$value->client]["oncall"]+=$totaltime/1000;
      //  $campaign_wisearr[$value->client]["Preview"]+=$value->waitSec/1000;
        $campaign_wisearr[$value->client]["Hold"]+=$value->callSec/1000;
        $campaign_wisearr[$value->client]["Talk"]+=$talktime/1000;
        $campaign_wisearr[$value->client]["Wrap"]+=$value->dispoSec/1000;
    }

    $prev_close = $value->ts_Close;//-ts_Wait
    $prev_user = $value->user_id;//-ts_Wait

}
function cmp($a, $b) {
    return $a["ts"] - $b["ts"];
}

$userLogin=array();
$checkhead = array_merge($reporthead, $breaks);
foreach($userlog as $ulog)
{
    $data=json_decode($ulog->data,true);
    usort($data, "cmp");

    $lastSip = end($data);
    $starttime = strtotime($ulog->startdate.' '.$ulog->starttime);
    $endtime   = round($lastSip['ts']/1000);
    $userLogin[$ulog->user_id]['duration'] += ($endtime-$starttime);

    $prets=strtotime($ulog->startdate." ".$ulog->starttime)*1000;
    $previous="Paused-Paused";
    foreach($data as $sdata)
    {
        $pts=$sdata['ts'];
        if(isset($sdata['states']))
        {
            foreach($sdata['states'] as $ts=>$states)
            {
                $previous = str_replace('Paused-', '', $previous);
                if(!in_array($previous,$checkhead) && !in_array($previous,array('Progressive-','Manual-','Ready-Incoming','Ready-Predictive','DialNext-'))) {
                    $previous = 'Paused';  
                } 
                
                $reportarray[$ulog->user_id][$previous]+=round($ts-$prets,2)/1000;
                $prets=$ts;
                $previous=$states[0].'-'.$states[1];
            }
            $previous = str_replace('Paused-', '', $previous);
            $reportarray[$ulog->user_id][$previous]+=round($pts-$prets,2)/1000;
            $prets=$pts;
        }
    }    
}
if(count($userLogin)) foreach ($userLogin as $userid => $value) 
{
    $break_time=0;
    foreach ($breaks as $break) {
        $break_time+=$reportarray[$userid][$break];
    }
    $reportarray[$userid]["Duration"]=$value['duration'];
    $reportarray[$userid]["Total"]=$value['duration']-$break_time-$reportarray[$userid]['Paused'];
    $reportarray[$userid]["Preview"]=$reportarray[$userid]["Total"]-$reportarray[$userid]['oncall'];
    $reportarray[$userid]["Breaks"]=$break_time;
    $reportarray[$userid]["Idle"]=$reportarray[$userid]['Paused'];
}

$i=1;
foreach ($camp_userlist as $campaign => $campaignUserCountArr) {
    
   // $campaign_wisearr[$campaign]['#']= $i++;

    foreach ($campaignUserCountArr as $eachCampaignUserCount) {
    
       if(array_key_exists($eachCampaignUserCount, $reportarray)) {
        $campaign_wisearr[$campaign]['Duration'] += $reportarray[$eachCampaignUserCount]['Duration'];
        $campaign_wisearr[$campaign]['Idle'] += $reportarray[$eachCampaignUserCount]['Idle'];
        $campaign_wisearr[$campaign]['Breaks'] += $reportarray[$eachCampaignUserCount]['Breaks'];
        $campaign_wisearr[$campaign]['Preview'] += $reportarray[$eachCampaignUserCount]['Preview'];
        $campaign_wisearr[$campaign]['Total'] += $reportarray[$eachCampaignUserCount]['Total'];

       }
   }
}

foreach ($total_Accounts_loaded as $key => $value) {
    $campaign_wisearr[$value->client]["Campaigns"] = $value->client;
    $campaign_wisearr[$value->client]['Accounts Loaded']++;
}

$highestColumn = sizeof($reporthead);
if(count($campaign_wisearr)) {
    $outhead="<tr>";$outstr="";
    for ($head = 0; $head < $highestColumn; $head++){
        if($reporthead[$head] == '#') {
            $mode_str = "<a onclick='displayMode(".'"summation"'.");return false;' href='#'><i class='fa fa-plus-square-o'></i></a> / <a onclick='displayMode(".'"percent"'.");return false;' href='#'>%</a>";
            $outhead.="<td>".$mode_str."</td>";
        }
        else {
            $outhead.="<td>".$reporthead[$head]."</td>";
        }
    }
    $outhead.="</tr>";
    $utotalarr = array("Campaigns"=>'Total');
    
    foreach($campaign_wisearr as $uid=>$uarr)
    {

        $outstr.="<tr>";
        for ($head = 0; $head < $highestColumn; $head++){
            if($head < 1) {
                $data_str = $uarr[$reporthead[$head]];
            }
            elseif($head < 9) {
                $data_str = $uarr[$reporthead[$head]];
                $utotalarr[$reporthead[$head]] += $uarr[$reporthead[$head]];          
            }
            else {
                $data_str = secToDuration(round($uarr[$reporthead[$head]]));
                $utotalarr[$reporthead[$head]] += $uarr[$reporthead[$head]];          
            }
            $outstr.="<td>".$data_str."</td>";
        }
        $outstr.="</tr>";
    }
    $outstr.="<tr>";
    for ($head = 0; $head < $highestColumn; $head++)
    {
        if($head < 9) {
            $data_str = $utotalarr[$reporthead[$head]];
        }
        else {
            $data_str = secToDuration($utotalarr[$reporthead[$head]]);  
        }
        $outstr.="<td>".$data_str."</td>";
    }
    $outstr.="</tr>";
}
else
{
    $outhead.="<tr><td>No Records Found.</td></tr>";
}  

if(Input::has("dllogxls"))
{
    include_once(app_path().'/lib/phpexcel/PHPExcel.php');
    
    $inputFileType = "Excel5";
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load("assets/extras/blank.xls");
    $baseRow = 2;


    $highestColumn = sizeof($reporthead);
    for ($head = 0; $head < $highestColumn; $head++){
        $colstr=PHPExcel_Cell::stringFromColumnIndex($head);
        $objPHPExcel->getActiveSheet()->setCellValue($colstr."1", $reporthead[$head]);
    }

    foreach($campaign_wisearr as $uid=>$uarr)
    {
        $row = $baseRow++;
        $col = 0;
        
        for ($head = 0; $head < $highestColumn; $head++){
            $excelval = ($head < 6) ? $uarr[$reporthead[$head]] : secToDuration(round($uarr[$reporthead[$head]]));
            $colstr=PHPExcel_Cell::stringFromColumnIndex($head); 
            $objPHPExcel->getActiveSheet()->setCellValue($colstr.$row, $excelval);
        }
    }

    $row++;
    for ($head = 0; $head < $highestColumn; $head++){
        $excelval = ($head < 6) ? $utotalarr[$reporthead[$head]] : secToDuration(round($utotalarr[$reporthead[$head]]));
        $colstr=PHPExcel_Cell::stringFromColumnIndex($head);
        $objPHPExcel->getActiveSheet()->setCellValue($colstr.$row, $excelval);
    }

    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="Campaignlevel.xls"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $inputFileType);
    $objWriter->save('php://output');
    
    return ;
}

function secToDuration($sec) {
    return sprintf("%02d%s%02d%s%02d", floor($sec/3600), ':', ($sec/60)%60, ':', $sec%60);
}
?>

<style>#logtable.td{vertical-align:top;}#logtable.tr{height:28px;overflow-y:hidden;}</style>

<div class=innerAll>
<h4 style="float:left;width:50%;margin:10px 0;">Campaign Level Report</h4>
<div style="float:right;width:50%">
<button class='pull-right btn btn-sm btn-default' onclick='dlAgentlogXls();return false;' title='Download'><i class='fa fa-download'></i> Download</button>
</div>
<div style="clear:both"></div>
<hr style="margin-bottom: 5px;">
<div>
    Search <input id=filter name="filter" type="text" style="border:1px solid #efefef; padding: 2px 10px;">&nbsp;&nbsp;
    Date: From <input size=10 id='modfrom' name='modfrom' type='text' value='<?php echo date("Y-m-d",$logdate); ?>' onchange='statusLogReloadFun("");' /> 
        <select id="modtime" style="border:1px solid #efefef;" onchange='statusLogReloadFun("");'>
        <?php 
            foreach (range(0,23) as $hour) {
                $selected = ($hour == $logtime) ? "selected" : "";
                echo "<option value='$hour' $selected>".str_pad($hour, 2, "0", STR_PAD_LEFT) . ":00</option>";
            }
        ?></select>
        To <input size=10 id='modto' name='modto' type='text' value='<?php echo date("Y-m-d",$logdateto); ?>' onchange='statusLogReloadFun("");' />
        <select id="modtimeto" style="border:1px solid #efefef;" onchange='statusLogReloadFun("");'>
        <?php 
            foreach (range(0,23) as $hour) {
                $selected = ($hour == $logtimeto) ? "selected" : "";
                echo "<option value='$hour' $selected>".str_pad($hour, 2, "0", STR_PAD_LEFT) . ":00</option>";
            }
        ?></select>
</div>

<div style="clear:both"></div>
<hr style="margin:5px;">

<div style="overflow: auto; margin-top: 10px;">
    <table id=logtable class='footable table table-striped table-bordered table-white table-primary footable-loaded' style='font-size:12px; margin:0; border:1px solid #BBB;'>
        <thead><?php echo $outhead; ?></thead>
        <?php echo $outstr; ?>
    </table>
</div>

<div id=dialoglog></div>
</div>

<script>
$(document).ready(function() {
    if(!$('#dialoglog').hasClass('ui-dialog-content'))
    {
        $('#dialoglog').dialog({
            autoOpen: false,
            width: '70%',
            buttons: {
                "Ok": function() { 
                    $(this).dialog("close"); 
                }, 
                "Cancel": function() { 
                    $(this).dialog("close"); 
                } 
            }
        });
    }

    waitKeyUpRun("filter",function() { filter2(document.getElementById('filter'), 'logtable') },"2000");
    $('#modfrom').datepicker({dateFormat: 'yy-mm-dd',inline: true,changeYear: true,selectOtherMonths: true,yearRange: '<?php echo (date('Y')-70).":".(date('Y')+5); ?>'});
    $('#modto').datepicker({dateFormat: 'yy-mm-dd',inline: true,changeYear: true,selectOtherMonths: true,yearRange: '<?php echo (date('Y')-70).":".(date('Y')+5); ?>'});
});

function dataString()
{
    return 'logdate='+$("#modfrom").val()+'&logtime='+$("#modtime").val()+'&logdateto='+$("#modto").val()+'&logtimeto='+$("#modtimeto").val()+'&campaign=All';//+$("#campaign").val();
}
function statusLogReloadFun(sortby)
{
    var sortstr='';if(sortby!="")sortstr="&sort="+sortby
    var searchStr = dataString();
    doAjax('dialer/campaignlevel?'+searchStr+sortstr,'','rightmainreportdiv','ajax_dialer_reports','singlethis','GET');
}
function dlAgentlogXls()
{
    var searchStr = dataString();
    window.open('dialer/campaignlevel?dllogxls=1&'+searchStr);
    return false;
}
</script>