Your IP : 216.73.216.79


Current Path : /var/www/html/slaas/frontend/controllers/
Upload File :
Current File : /var/www/html/slaas/frontend/controllers/ReportController.php

<?php

namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use yii\data\SqlDataProvider;
use yii\helpers\ArrayHelper;

class ReportController extends Controller {

    public function actionUserparticipation($user_id = '', $state_id = '', $course_year = '') {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        $sheet->setCellValue('A1', strtoupper('Nama Pengguna'));
        $sheet->setCellValue('B1', strtoupper('Jawatan'));
        $sheet->setCellValue('C1', strtoupper('Negeri'));
        $sheet->setCellValue('D1', strtoupper('Kumpulan Perkhidmatan'));
        $sheet->setCellValue('E1', strtoupper('Tajuk Kursus'));
        $sheet->setCellValue('F1', strtoupper('Jenis Kursus'));
        $sheet->setCellValue('G1', strtoupper('Jenis Permohonan'));
        $sheet->setCellValue('H1', strtoupper('Tarikh Mula Kursus'));
        $sheet->setCellValue('I1', strtoupper('Masa Mula Kursus'));
        $sheet->setCellValue('J1', strtoupper('Tarikh Akhir Kursus'));
        $sheet->setCellValue('K1', strtoupper('Masa Akhir Kursus'));
        $sheet->setCellValue('L1', strtoupper('Tempoh Kursus'));
        $count = 1;

        $query_ext = "";
        $query_ext_arr = [];
        if ($user_id != "")
            $query_ext_arr[] = "participation_user_id='$user_id'";
        if ($state_id != "")
            $query_ext_arr[] = "user_state='$state_id'";
        if ($course_year != "")
            $query_ext_arr[] = "YEAR(course_start_date)='$course_year'";
        if (!empty($query_ext_arr))
            $query_ext = ' WHERE ' . implode(' AND ', $query_ext_arr);
        //print_r($query_ext_arr);

        $query = "SELECT * FROM (
        SELECT p.participation_user_id, 
        'merekod' AS course_category, r.record_course_name AS course_title, r.record_type AS course_type, 
        r.record_start_date AS course_start_date,  r.record_start_time AS course_start_time,  
        r.record_end_date AS course_end_date,  r.record_end_time AS course_end_time, 
        u.fullname AS user_name, u.designation AS user_designation, u.state AS user_state, u.service_group AS user_service_group
        FROM course_participation p 
        INNER JOIN course_record r ON p.participation_course_id=r.record_id 
        INNER JOIN frontend_user u ON p.participation_user_id=u.id 
        WHERE 
                p.participation_status='participate_complete' AND 
                p.participation_supervisor_status='supervisor_approve' AND 
                p.participation_course_type='course_record' 
        UNION
        SELECT p2.participation_user_id, 
        'takwim' AS course_category, i.course_title AS course_title, i.course_type AS course_type, 
        i.course_start_date AS course_start_date,  i.course_start_time AS course_start_time,  
        i.course_end_date AS course_end_date,  i.course_end_time AS course_end_time, 
        u.fullname AS user_name, u.designation AS user_designation, u.state AS user_state, u.service_group AS user_service_group
        FROM course_participation p2
        INNER JOIN course_info i ON p2.participation_course_id=i.course_id 
        INNER JOIN frontend_user u ON p2.participation_user_id=u.id 
        WHERE 
                i.course_status = 'done' AND  
                p2.participation_course_type='course_info' AND
                p2.participation_status='participate_complete' AND 
                p2.participation_user_status='user_confirm' AND
                p2.participation_supervisor_status='supervisor_support' AND 
                p2.participation_coordinator_status='coordinator_support'
        ) t1 " . $query_ext . " ORDER BY user_name,course_start_date ASC";
        $dataProvider = new SqlDataProvider(['sql' => $query, 'pagination' => ['pageSize' => false],]);
        foreach ($dataProvider->models as $row) {
            $count++;
            $course_type = '';
            if ($row['course_category'] == 'takwim')
                $course_type = strtoupper(\backend\modules\refdynawebv2\models\Ref::getDesc('COURSE_TYPE', $row['course_type'], 'descr'));
            if ($row['course_category'] == 'merekod')
                $course_type = strtoupper(\backend\modules\refdynawebv2\models\Ref::getDesc('COURSE_RECORD', $row['course_type'], 'descr'));


            $course_user_hour = "";
            $start_course = $row['course_start_date'] . ' ' . $row['course_start_time'];
            $end_course = $row['course_end_date'] . ' ' . $row['course_end_time'];

            $date1 = new \DateTime($start_course);
            $date2 = $date1->diff(new \DateTime($end_course));

            if ($row['course_start_date'] != $row['course_end_date'])
                $course_user_hour = ($date2->d + 1) . ' HARI ';
            else
                $course_user_hour = $date2->h . ' JAM ';

            $sheet->setCellValue('A' . $count, strtoupper($row['user_name']));
            $sheet->setCellValue('B' . $count, strtoupper($row['user_designation']));
            $sheet->setCellValue('C' . $count, strtoupper(\backend\modules\refdynawebv2\models\Ref::getDesc('STATE', $row['user_state'], 'descr')));
            $sheet->setCellValue('D' . $count, strtoupper(\backend\modules\refdynawebv2\models\Ref::getDesc('SERVICE_GROUP', $row['user_service_group'], 'descr')));
            $sheet->setCellValue('E' . $count, strtoupper($row['course_title']));
            $sheet->setCellValue('F' . $count, $course_type);
            $sheet->setCellValue('G' . $count, strtoupper($row['course_category']));
            $sheet->setCellValue('H' . $count, strtoupper(date("j M Y", strtotime($row['course_start_date']))));
            $sheet->setCellValue('I' . $count, strtoupper(date("h:i A", strtotime($row['course_start_time']))));
            $sheet->setCellValue('J' . $count, strtoupper(date("j M Y", strtotime($row['course_end_date']))));
            $sheet->setCellValue('K' . $count, strtoupper(date("h:i A", strtotime($row['course_end_time']))));
            $sheet->setCellValue('L' . $count, $course_user_hour);
        }
        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="Laporan Permohonan Kursus.xlsx"');
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
        exit();
    }

    public function actionCourseevaluation($course_id = '') {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        $questionArr = [];
        $modelQuestion = \backend\modules\courseEvaluation\models\CourseEvaluation::find()
                        ->groupBy(['evaluation_question', 'evaluation_question_type'])
                        ->orderBy(['evaluation_id' => SORT_ASC])->all();
        if (!empty($modelQuestion)) {
            foreach ($modelQuestion as $rowQuestion) {
                $arr = [
                    'type_code' => $rowQuestion->evaluation_question_type,
                    'type_label' => \backend\modules\refdynawebv2\models\Ref::getDesc('FIELD_TYPE', $rowQuestion->evaluation_question_type, 'descr'),
                    'question' => $rowQuestion->evaluation_question
                ];
                $questionArr[] = $arr;
            }
        }

        $alphabetArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
            'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];

        $sheet->setCellValue('A1', 'Tajuk Kursus');
        $sheet->setCellValue('B1', 'Nama Pengguna');
        $countAlphabet = 1;
        if (!empty($questionArr)) {
            foreach ($questionArr as $questionDetail) {
                $countAlphabet++;
                $questionTitle = $questionDetail['type_label'] . ' : ' . $questionDetail['question'];
                $sheet->setCellValue($alphabetArr[$countAlphabet] . '1', $questionTitle);
            }
        }
        $evaluationArr = ArrayHelper::map(\backend\modules\courseEvaluation\models\CourseEvaluation::find()
                                ->innerJoin('course_participation', 'course_participation.participation_id=course_evaluation.evaluation_participation_id')
                                ->where(['=', 'course_participation.participation_course_id', $course_id])
                                ->all(), 'evaluation_participation_id', 'evaluation_participation_id');
        $countRow = 1;
        if (!empty($evaluationArr)) {
            foreach ($evaluationArr as $participation_id) {
                $countRow++;

                $course_title = '';
                $user_name = '';
                $sqlInfo = "SELECT i.course_title, u.fullname AS user_name FROM course_participation p 
                    INNER JOIN course_info i ON i.course_id=p.participation_course_id 
                    INNER JOIN frontend_user u ON u.id=p.participation_user_id 
                    WHERE p.participation_id=" . $participation_id;
                $modelInfo = Yii::$app->db->createCommand($sqlInfo)->queryAll();
                if (!empty($modelInfo)) {
                    foreach ($modelInfo as $rowInfo) {
                        $course_title = $rowInfo['course_title'];
                        $user_name = $rowInfo['user_name'];
                    }
                }

                $sheet->setCellValue('A' . $countRow, $course_title);
                $sheet->setCellValue('B' . $countRow, $user_name);

                $countAlphabet = 1;
                if (!empty($questionArr)) {
                    foreach ($questionArr as $questionDetail) {
                        $countAlphabet++;
                        $sqlAnwer = "SELECT evaluation_user_answer FROM course_evaluation 
                            WHERE 
                                evaluation_participation_id=$participation_id AND 
                                evaluation_question='" . $questionDetail['question'] . "' AND 
                                evaluation_question_type='" . $questionDetail['type_code'] . "'";
                        $userAnswer = Yii::$app->db->createCommand($sqlAnwer)->queryScalar();

                        $cellNo = $alphabetArr[$countAlphabet] . $countRow;
                        $sheet->setCellValue($cellNo, $userAnswer);
                    }
                }
            }
        }
        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="Laporan Penilaian Kursus.xlsx"');
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
        exit();
    }

    public function actionUserevaluation($course_title = '', $user_name = '') {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        $query = "SELECT u.fullname AS user_name, i.course_title, 
        v.evaluation_knowledge_before, v.evaluation_knowledge_after, v.evaluation_skill_before, v.evaluation_skill_after, v.evaluation_objective, v.evaluation_remarks
        FROM course_user_evaluation v 
        INNER JOIN course_participation p ON p.participation_id=v.evaluation_participation_id 
        INNER JOIN course_info i ON i.course_id=p.participation_course_id 
        INNER JOIN frontend_user u ON u.id=p.participation_user_id 
        WHERE 
            u.fullname LIKE '%$user_name%' AND 
            i.course_title LIKE '%$course_title%' 
        ORDER BY i.course_end_date, i.course_title DESC";

        $dataProvider = new SqlDataProvider(['sql' => $query, 'pagination' => ['pageSize' => false],]);

        $sheet->setCellValue('A1', 'Tajuk Kursus');
        $sheet->setCellValue('B1', 'Nama Pengguna');
        $sheet->setCellValue('C1', 'Pengetahuan yang berkaitan dengan kursus ini (%) Sebelum Berkursus');
        $sheet->setCellValue('D1', 'Pengetahuan yang berkaitan dengan kursus ini (%) Selepas Berkursus');
        $sheet->setCellValue('E1', 'Kemahiran menyelesaikan masalah yang berkaitan dengan kursus yang diikuti (%) Sebelum Berkursus');
        $sheet->setCellValue('F1', 'Kemahiran menyelesaikan masalah yang berkaitan dengan kursus yang diikuti (%) Selepas Berkursus');
        $sheet->setCellValue('G1', 'Adakah objektif kursus ini tercapai?');
        $sheet->setCellValue('H1', 'Ulasan Penyelia');
        $count1 = 1;
        foreach ($dataProvider->models as $row) {
            $count1++;
            $sheet->setCellValue('A' . $count1, strtoupper($row['course_title']));
            $sheet->setCellValue('B' . $count1, strtoupper($row['user_name']));
            $sheet->setCellValue('C' . $count1, strtoupper($row['evaluation_knowledge_before']));
            $sheet->setCellValue('D' . $count1, strtoupper($row['evaluation_knowledge_after']));
            $sheet->setCellValue('E' . $count1, strtoupper($row['evaluation_skill_before']));
            $sheet->setCellValue('F' . $count1, strtoupper($row['evaluation_skill_after']));
            $sheet->setCellValue('G' . $count1, strtoupper($row['evaluation_objective']));
            $sheet->setCellValue('H' . $count1, strtoupper($row['evaluation_remarks']));
        }

        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="Laporan Keberkesanan Kursus.xlsx"');
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
        exit();
    }

    public function actionExpenses($course_title = '', $course_type = '', $record_year = '') {

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $query = "SELECT * FROM (
	SELECT e.expenses_course_type, i.course_title AS course_title, DATE (e.created_at) AS date_record, 
	e.expenses_package_name, e.expenses_accommodation, e.expenses_dobi, e.expenses_meal, e.expenses_consultant, 
	e.expenses_speaker, e.expenses_others, e.expenses_total, e.expenses_impact_form, e.expenses_remarks 
	FROM course_expenses e 
	INNER JOIN course_info i ON i.course_id=e.expenses_course_id 
	WHERE e.expenses_course_type = 'EXPENSES01'
		UNION 
	SELECT e.expenses_course_type, e.expenses_course_name AS course_title, DATE (e.created_at) AS date_record,  
	e.expenses_package_name, e.expenses_accommodation, e.expenses_dobi, e.expenses_meal, e.expenses_consultant, 
	e.expenses_speaker, e.expenses_others, e.expenses_total, e.expenses_impact_form, e.expenses_remarks
	FROM course_expenses e 
	WHERE e.expenses_course_type = 'EXPENSES02'
        ) t1 WHERE 
            course_title LIKE '%$course_title%' AND 
            expenses_course_type LIKE '%$course_type%' AND 
            YEAR(date_record) LIKE '%$record_year%' 
        ORDER BY date_record DESC";
        $dataProvider = new SqlDataProvider(['sql' => $query, 'pagination' => ['pageSize' => false],]);

        $sheet->setCellValue('A1', 'Tarikh Rekod');
        $sheet->setCellValue('B1', 'Jenis Kursus');
        $sheet->setCellValue('C1', 'Tajuk Kursus');
        $sheet->setCellValue('D1', 'Jumlah Kos');
        $sheet->setCellValue('E1', 'Nama Pakej');
        $sheet->setCellValue('F1', 'Kos Penginapan');
        $sheet->setCellValue('G1', 'Kos Dobi');
        $sheet->setCellValue('H1', 'Kos Makan');
        $sheet->setCellValue('I1', 'Kos Konsultan');
        $sheet->setCellValue('J1', 'Kos Penceramah');
        $sheet->setCellValue('K1', 'Kos Lain-Lain');
        $sheet->setCellValue('L1', 'Borang Impak');
        $sheet->setCellValue('M1', 'Catatan');
        $count1 = 1;
        foreach ($dataProvider->models as $row) {
            $count1++;
            $sheet->setCellValue('A' . $count1, date("d/m/Y", strtotime($row['date_record'])));
            $sheet->setCellValue('B' . $count1, strtoupper(\backend\modules\refdynawebv2\models\Ref::getDesc('EXPENSES_TYPE', $row['expenses_course_type'], 'descr')));
            $sheet->setCellValue('C' . $count1, strtoupper($row['course_title']));
            $sheet->setCellValue('D' . $count1, $row['expenses_total']);
            $sheet->setCellValue('E' . $count1, strtoupper($row['expenses_package_name']));
            $sheet->setCellValue('F' . $count1, $row['expenses_accommodation']);
            $sheet->setCellValue('G' . $count1, $row['expenses_dobi']);
            $sheet->setCellValue('H' . $count1, $row['expenses_meal']);
            $sheet->setCellValue('I' . $count1, $row['expenses_consultant']);
            $sheet->setCellValue('J' . $count1, $row['expenses_speaker']);
            $sheet->setCellValue('K' . $count1, $row['expenses_others']);
            $sheet->setCellValue('L' . $count1, strtoupper(\backend\modules\refdynawebv2\models\Ref::getDesc('EXPENSES_FORM', $row['expenses_impact_form'], 'descr')));
            $sheet->setCellValue('M' . $count1, strtoupper($row['expenses_remarks']));
        }

        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="Laporan Perbelanjaan Kursus.xlsx"');
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
        exit();
    }

    public function actionCancelapplication($course_title = '', $user_name = '') {

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        $query = "SELECT u.fullname AS user_name, i.course_title, p.cancel_remarks
        FROM course_participation p 
        INNER JOIN course_info i ON i.course_id=p.participation_course_id 
        INNER JOIN frontend_user u ON u.id=p.participation_user_id
        WHERE 
            p.participation_user_status = 'user_cancel' AND 
            p.participation_course_type = 'course_info' AND 
            i.course_title LIKE '%$course_title%' AND 
            u.fullname LIKE '%$user_name%'";

        $dataProvider = new SqlDataProvider(['sql' => $query, 'pagination' => ['pageSize' => false],]);

        $sheet->setCellValue('A1', 'Tajuk Kursus');
        $sheet->setCellValue('B1', 'Nama Pengguna');
        $sheet->setCellValue('C1', 'Alasan Pembatalan');
        $count1 = 1;
        foreach ($dataProvider->models as $row) {
            $count1++;
            $sheet->setCellValue('A' . $count1, strtoupper($row['course_title']));
            $sheet->setCellValue('B' . $count1, strtoupper($row['user_name']));
            $sheet->setCellValue('C' . $count1, strtoupper($row['cancel_remarks']));
        }

        $writer = new Xlsx($spreadsheet);
        header('Content-Type: application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="Laporan Pembatalan Penyertaan.xlsx"');
        header('Cache-Control: max-age=0');
        $writer->save('php://output');
        exit();
    }

}