| Current Path : /var/www/html/protegev2/frontend/controllers/ |
| Current File : /var/www/html/protegev2/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();
}
}