<?php

namespace frontend\controllers;

use api\models\Security;
use app\controllers\CommonController;
use app\models\Common;
use app\models\ContactForm;
use app\models\ExportData;
use app\models\nhif;
use app\models\PasswordResetRequests;
use app\models\Query;
use app\models\Routines;
use app\models\SpSystem;
use app\models\TblAcademicYear;
use app\models\TblCollege;
use app\models\TblDepartment;
use app\models\TblOnlineRegistrationWindow;
use app\models\TblProgramme;
use app\models\TblSemester;
use app\models\TblStudent;
use app\models\TblStudentOnlineRegistration;
use app\models\TblStudentRegistration;
use app\models\TblStudentRoom;
use app\models\TblStudyLevel;
use app\models\TblTrackPrinting;
use app\models\TblUser;
use common\models\LoginForm;
use common\models\User;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use Yii;
use yii\base\InvalidArgumentException;
use yii\base\InvalidParamException;
use yii\db\mssql\PDO;
use yii\filters\AccessControl;
use yii\filters\VerbFilter;
use yii\helpers\Html;
use yii\web\BadRequestHttpException;
use yii\web\Controller;

/**
 * Site controller
 */
class SiteController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout', 'login', 'password'],
                'rules' => [
                    [
                        'actions' => ['login'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['password'],
                        'allow' => true,
                        'roles' => ['?', '@'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::class,
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }


    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

    public function actionIndex()
    {

        if (Yii::$app->user->can('super_dashboard-site')) {

            $this->redirect('site/super_dashboard');
        } else if (Yii::$app->user->can('student_dashboard-site')) {

            $this->redirect('site/student_dashboard');
        } elseif (Yii::$app->user->can('registration_dashboard-site')) {

            $this->redirect('site/registration_dashboard');
        } else if (Yii::$app->user->can('college_dashboard-site')) {

            $this->redirect('site/college_dashboard');
        } else if (Yii::$app->user->can('department_dashboard-site')) {

            $this->redirect('site/department_dashboard');
        } else if (Yii::$app->user->can('executive_dashboard-site')) {

            $this->redirect('site/executive_dashboard');
        } else if (Yii::$app->user->can('directors_dashboard-site')) {

            $this->redirect('site/directors_dashboard');
        } else {

            return $this->render('index', []);
        }
    }

    public function actionStudent_dashboard()
    {


        $form = TblStudent::find()->where(['registration_no' => Yii::$app->user->identity->username])->one();
        $one = Yii::$app->session->get('student_id');
        $studentId = is_null($one) ? $form->id : $one;

        $activeYear1 = TblAcademicYear::find()->where(['is_active' => 1])->one();
        $bata = $this->get_NHIF_control_number(str_replace('/', '-', $form->form_four_index_number));
        $identity_cards = TblTrackPrinting::find()->where(['registration_no' => Yii::$app->user->identity->username])->andWhere(['academic_year_id' => $activeYear1->id])->one();

        $arr = [];
        if ($bata) {
            $obj = new NHIF();
            $nhif_pay_status = json_decode($obj->getPaymentStatus($bata));

            if ($nhif_pay_status->status == 'Paid') {
                $arr['nhif_from_nhif'] = ['control_number' => $bata, 'amount' => 50400];
            } else {
                $arr['nhif_from_nhif'] = ['control_number' => $bata, 'amount' => 0];
            }
            // Yii::$app->cache->flush();
        }
        // if (Yii::$app->user->identity->username == 'T21-05-00489') {
        //    var_dump($studentID);

        //    exit;
        // }

        if (isset($studentId)) {

            $model = TblStudent::findOne($studentId);

            $stRoom = TblStudentRoom::find()->where(['student_id' => $studentId])->One();

            $activeYear = TblAcademicYear::find()->where(['is_active' => 1])->one();

            $regWindows = TblOnlineRegistrationWindow::find()->where(['academic_year_id' => $activeYear->id])->andWhere(['window_status' => 'OPENED'])->all();
            $Closed_regWindows = TblOnlineRegistrationWindow::find()->where(['academic_year_id' => $activeYear->id])->andWhere(['window_status' => 'CLOSED'])->all();
            $madai = $this->getMadai($model->registration_no);

            $madeni = $this->getMadeni($model->registration_no);

            $student_reg = Routines::StudentRegActiveAcademicYear($studentId, $activeYear->id);

            if ($model->load(Yii::$app->request->post())) {

                $model->bank_account_no = trim($model->bank_account_no);

                $model->bank_info_flag = 1;

                if ($model->save()) {

                    Yii::$app->session->setFlash('success', 'Successfully Updated');

                    return $this->redirect([
                        'student_dashboard',
                        'model' => $model,
                        'madai' => $madai,
                        'madeni' => $madeni,
                        'nhif' => $arr,
                        'identity_cards' => $identity_cards,

                    ]);
                }
            }
        }



        return $this->render('student_dashboard', [
            'model' => $model,
            'student_reg' => $student_reg,
            'activeYear' => $activeYear,
            'regWindows' => $regWindows,
            'Closed_regWindows' => $Closed_regWindows,
            'stRoom' => $stRoom,
            'madai' => $madai,
            'madeni' => $madeni,
            'nhif' => $arr,
            'identity_cards' => $identity_cards,
        ]);
    }

    public function actionRegistration_dashboard()
    {


        $user = TblUser::findOne(Yii::$app->user->identity->id);
        $student_college = Common::getCollegeIdAdStudyLevelAdmitted(Yii::$app->user->identity->username);
        $model = TblStudentOnlineRegistration::find()->where(['user_id' => $user->id])->andWhere(['semester_id' => 40])->one();

        $activeYear = TblAcademicYear::find()->where(['is_active' => 1])->one();
        if ($student_college['study_level_id'] > 3) {
            $regWindows = TblOnlineRegistrationWindow::find()->where(['academic_year_id' => $activeYear->id])->all();
        } else {
            $regWindows = TblOnlineRegistrationWindow::find()->where(['academic_year_id' => $activeYear->id])->andWhere(['window_status' => 'OPENED'])->all();
        }


        return $this->render('registration_dashboard', [
            'model' => $model,
            'regWindows' => $regWindows,
        ]);
    }

    public function actionExecutive_dashboard()
    {

        $ac = Yii::$app->session->get('academic_year');

        $semesters = TblSemester::find()->where('academic_year_id=:ayear', [':ayear' => $ac->id])->all();

        $academic_year = TblAcademicYear::findOne($ac->id);

        // Undergraduate Students

        $udergraduate = array();
        $panel = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND p.study_level_id IN(1,2,3)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");

            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($udergraduate, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel++;
            }
        }

        // Postgraduate Students

        $graduate = array();
        $panel_g = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND p.study_level_id IN(4,5,6)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");

            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($graduate, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel_g++;
            }
        }

        // CHS Students

        $chs = array();
        $panel_chs = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs =1 and r.conditional=1
		 AND p.study_level_id IN(1,2,3)
        AND yr.id = :yr
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");
            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($chs, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel_chs++;
            }
        }

        // Conditional Postgraduate Students

        $postgraduateCond = array();
        $panel_postgraduateCond = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs =1 and r.conditional=1
		AND p.study_level_id IN(4,5,6)
        AND yr.id = :yr
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");
            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($postgraduateCond, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel_postgraduateCond++;
            }
        }

        return $this->render('executive_dashboard', [
            'undergraduate' => array('data' => $udergraduate, 'panels' => 12 / $panel),
            'graduate' => array('data' => $graduate, 'panels' => 12 / $panel_g),
            'chs' => array('data' => $chs, 'panels' => 12 / $panel_chs),
            'postgraduateCond' => array('data' => $postgraduateCond, 'panels' => 12 / $panel_postgraduateCond),
            // 'undergraduateCond' => $undergraduateCond,
            //'postgraduateCond' => $postgraduateCond,
        ]);
    }

    public function actionDirectors_dashboard()
    {

        $user_type = Yii::$app->user->identity->user_type_id;

        $ac = Yii::$app->session->get('academic_year');

        $semesters = TblSemester::find()->where('academic_year_id=:ayear', [':ayear' => $ac->id])->all();

        $academic_year = TblAcademicYear::findOne($ac->id);

        // Undergraduate Students

        $udergraduate = array();
        $panel = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND p.study_level_id IN(1,2,3)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");

            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($udergraduate, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel++;
            }
        }

        // Postgraduate Students

        $graduate = array();
        $panel_g = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND p.study_level_id IN(4,5,6)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");

            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($graduate, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel_g++;
            }
        }

        // Conditional Undergraduate Students

        $chs = array();
        $panel_chs = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs =1 and r.conditional=1
		 AND p.study_level_id IN(1,2,3)
        AND yr.id = :yr
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");
            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($chs, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel_chs++;
            }
        }

        // Conditional Postgraduate Students

        $postgraduateCond = array();
        $panel_postgraduateCond = 0;
        foreach ($semesters as $sem) {

            $query = Yii::$app->db->createCommand("SELECT r.year_of_study,st.name study_level,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
	    INNER JOIN tbl_study_level st ON st.id=p.study_level_id
        WHERE
        r.dvs =1 and r.conditional=1
		AND p.study_level_id IN(4,5,6)
        AND yr.id = :yr
        AND sem.auto_id=:id
        GROUP BY r.year_of_study,st.id
        ORDER BY r.year_of_study ASC");
            $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
            $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);

            $results = $query->queryAll();
            //print_r($results);
            //exit;
            $semester = array();

            if ($results) {

                foreach ($results as $data) {
                    $details = [
                        'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                        'study_level' => $data['study_level'],
                        'total' => $data['total'],

                    ];

                    array_push($semester, $details);
                }

                array_push($postgraduateCond, [
                    'semester' => $sem->name,
                    'academic_year' => $academic_year->name,
                    'data' => $semester,
                ]);
                $panel_postgraduateCond++;
            }
        }
        //registered statistics program

        //$registeredProgram=Query::UndergraduateRegisteredProgram();
        //   $RegProgram=$registeredProgram->queryAll();
        $ac = Yii::$app->session->get('academic_year');

        $yr = $ac['id'];
        if ($yr >= 14) {
            return $this->render('super_dashboard', [
                'undergraduate' => array('data' => $udergraduate, 'panels' => 12 / $panel),
                'graduate' => array('data' => $graduate, 'panels' => 12 / $panel_g),
                'chs' => array('data' => $chs, 'panels' => 12 / $panel_chs),
                'postgraduateCond' => array('data' => $postgraduateCond, 'panels' => 12 / $panel_postgraduateCond),
                //     'RegProgram'=>$RegProgram,
                // 'undergraduateCond' => $undergraduateCond,
                //'postgraduateCond' => $postgraduateCond,
            ]);
        } else {

            return $this->render('super_dashboard', [
                'undergraduate' => array('data' => $udergraduate, 'panels' => 12 / $panel),
                'graduate' => array('data' => $graduate, 'panels' => 12 / $panel_g),
                // 'chs'=>array('data'=>$chs,'panels'=>12/$panel_chs),
                //    'postgraduateCond'=>array('data'=>$postgraduateCond,'panels'=>12/$panel_postgraduateCond)
                // 'undergraduateCond' => $undergraduateCond,
                //'postgraduateCond' => $postgraduateCond,
            ]);
        }
    }

    public function actionSuper_dashboard()
    {

        $ac = Yii::$app->session->get('academic_year');

        $semesters = TblSemester::find()->where('academic_year_id=:ayear', [':ayear' => $ac->id])->all();

        $academic_year = TblAcademicYear::findOne($ac->id);

        return $this->render('super_dashboard');
    }

    public function actionDownload_college_registered($id)
    {

        $college = TblCollege::findOne($id);

        $query = Query::CollegeRegisteredStudents($id);

        $export = new ExportData();

        $export->downloadCollegeRegistered($query->queryAll(), $college);

        $export->downFile('Registered_students_' . strtolower($college->name) . '_' . date('Y-m-d_H_i_s') . '.xls');
    }

    public function actionDownload_dept_registered($id)
    {

        $dept = TblDepartment::findOne($id);

        $query = Query::DeptRegisteredStudents($id);

        $export = new ExportData();

        $export->downloadDepartmentRegistered($query->queryAll(), $dept);

        $export->downFile('Registered_students_department of ' . strtolower($dept->name) . '_' . date('Y-m-d_H_i_s') . '.xls');
    }

    public function actionDownload_prog_registered($id)
    {

        $prog = TblProgramme::findOne($id);

        $query = Query::ProgRegisteredStudents($id);

        $export = new ExportData();

        $export->downloadProgRegistered($query->queryAll(), $prog);

        $export->downFile('Registered_students_' . strtolower($prog->program_name) . '_' . date('Y-m-d_H_i_s') . '.xls');
    }

    public function actionDownload_study_level_registered($id)
    {

        $studyLevel = TblStudyLevel::findOne($id);

        $query = Query::OverallStudyLevelRegisteredStudents($id);

        $export = new ExportData();

        $export->downloadStudyLevelRegistered($query->queryAll(), $studyLevel);

        $export->downFile('Registered_students_for_' . strtolower($studyLevel->name) . '_' . date('Y-m-d_H_i_s') . '.xls');
    }

    public function actionCollege_dashboard()
    {

        $deptId = Yii::$app->session->get('department_id');

        if (isset($deptId)) {

            $department = TblDepartment::findOne($deptId);
            $cid = ($department->college_id);
            $college = TblCollege::findOne($cid);
            $cname = ($college->name);
            $date = date('Y-m-d');
            $user_type_id = \Yii::$app->user->identity->id;

            //Today Registered Undergraduate
            $query = Yii::$app->db->createCommand("SELECT count(r.id) as Total FROM tbl_student_registration r
inner join tbl_programme_curriculum pc on pc.id=r.programme_curriculum_id
inner join tbl_programme p on p.id=pc.programme_id
inner join tbl_department d on d.id=p.department_id
inner join tbl_college c on c.id=d.college_id
where r.semester_id=41 and r.dvs=3 and r.dvs_updated like '%{$date}%'and p.study_level_id<=3 and
c.id=:cid");
            $query->bindParam(':cid', $cid);

            $results = $query->queryAll();
            $TodayRegistered = $results[0]['Total'];

            //Today Registered Postgraduate
            $query = Yii::$app->db->createCommand("SELECT count(r.id) as Total FROM tbl_student_registration r
inner join tbl_programme_curriculum pc on pc.id=r.programme_curriculum_id
inner join tbl_programme p on p.id=pc.programme_id
inner join tbl_department d on d.id=p.department_id
inner join tbl_college c on c.id=d.college_id
where r.semester_id=41 and r.dvs=3 and r.dvs_updated like '%{$date}%'and p.study_level_id>3 and
c.id=:cid");
            $query->bindParam(':cid', $cid);

            $results = $query->queryAll();
            $TodayRegisteredPost = $results[0]['Total'];

            $ac = Yii::$app->session->get('academic_year');

            $semesters = TblSemester::find()->where('academic_year_id=:ayear', [':ayear' => $ac->id])->all();

            $academic_year = TblAcademicYear::findOne($ac->id);

            // Undergraduate Students

            $udergraduate = array();
            $panel = 0;
            foreach ($semesters as $sem) {

                $query = Yii::$app->db->createCommand("SELECT r.year_of_study,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_department d ON d.id=p.department_id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND d.college_id=:cid
        AND p.study_level_id IN(1,2,3)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study
        ORDER BY r.year_of_study ASC");

                $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
                $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);
                $query->bindParam(':cid', $cid, PDO::PARAM_INT);

                $results = $query->queryAll();
                $semester = array();

                if ($results) {

                    foreach ($results as $data) {
                        $details = [
                            'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                            'total' => $data['total'],

                        ];

                        array_push($semester, $details);
                    }

                    array_push($udergraduate, [
                        'semester' => $sem->name,
                        'academic_year' => $academic_year->name,
                        'data' => $semester,
                        'cname' => $cname,
                    ]);
                    $panel++;
                }
            }

            // Postgraduate Students

            $graduate = array();
            $panel_g = 0;
            foreach ($semesters as $sem) {

                $query = Yii::$app->db->createCommand("SELECT r.year_of_study,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_department d ON d.id=p.department_id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND d.college_id=:cid
        AND p.study_level_id IN(4,5,6)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study
        ORDER BY r.year_of_study ASC");

                $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
                $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);
                $query->bindParam(':cid', $cid, PDO::PARAM_INT);

                $results = $query->queryAll();
                $semester = array();

                if ($results) {

                    foreach ($results as $data) {
                        $details = [
                            'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                            'total' => $data['total'],

                        ];

                        array_push($semester, $details);
                    }

                    array_push($graduate, [
                        'semester' => $sem->name,
                        'academic_year' => $academic_year->name,
                        'data' => $semester,
                    ]);
                    $panel_g++;
                }
            }
            if ($panel == 0 || $panel_g == 0) {
                $panel_g = 2;
                $panel = 3;
            }
            return $this->render('college_dashboard', [
                'undergraduate' => array('data' => $udergraduate, 'panels' => 12 / $panel),
                'graduate' => array('data' => $graduate, 'panels' => 12 / $panel_g),
                'TodayRegistered' => $TodayRegistered,
                'TodayRegisteredPost' => $TodayRegisteredPost,

            ]);
        }
    }
    public function actionDepartment_dashboard()
    {


        $deptId = Yii::$app->session->get('department_id');

        if (isset($deptId)) {

            $department = TblDepartment::findOne($deptId);
            $did = ($department->id);
            $college = TblCollege::findOne($department->college_id);
            $cname = ($college->name);
            $date = date('Y-m-d');
            $user_type_id = \Yii::$app->user->identity->id;
            $semester_id = TblSemester::find()->andWhere(['is_active' => 1])->one()->auto_id;

            //Today Registered Undergraduate
            $query = Yii::$app->db->createCommand("SELECT count(r.id) as Total FROM tbl_student_registration r
                        inner join tbl_programme_curriculum pc on pc.id=r.programme_curriculum_id
                        inner join tbl_programme p on p.id=pc.programme_id
                        inner join tbl_department d on d.id=p.department_id
                        where r.semester_id=:semester_id and r.dvs=3 and r.dvs_updated like '%{$date}%'and p.study_level_id<=3 and
                        d.id=:did");
            $query->bindParam(':did', $did);
            $query->bindParam(':semester_id', $semester_id);

            $results = $query->queryAll();
            $TodayRegistered = $results[0]['Total'];

            //Today Registered Postgraduate
            $query = Yii::$app->db->createCommand("SELECT count(r.id) as Total FROM tbl_student_registration r
                        inner join tbl_programme_curriculum pc on pc.id=r.programme_curriculum_id
                        inner join tbl_programme p on p.id=pc.programme_id
                        inner join tbl_department d on d.id=p.department_id
                        where r.semester_id=41 and r.dvs=3 and r.dvs_updated like '%{$date}%'and p.study_level_id>3 and
                        d.id=:did");
            $query->bindParam(':did', $did);

            $results = $query->queryAll();
            $TodayRegisteredPost = $results[0]['Total'];

            $ac = Yii::$app->session->get('academic_year');

            $semesters = TblSemester::find()->where('academic_year_id=:ayear', [':ayear' => $ac->id])->all();

            $academic_year = TblAcademicYear::findOne($ac->id);

            // Undergraduate Students

            $udergraduate = array();
            $panel = 0;
            foreach ($semesters as $sem) {

                $query = Yii::$app->db->createCommand("SELECT r.year_of_study,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_department d ON d.id=p.department_id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND d.id=:did
        AND p.study_level_id IN(1,2,3)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study
        ORDER BY r.year_of_study ASC");

                $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
                $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);
                $query->bindParam(':did', $did, PDO::PARAM_INT);

                $results = $query->queryAll();
                // var_dump($query->getRawSql()); exit;
                $semester = array();

                if ($results) {

                    foreach ($results as $data) {
                        $details = [
                            'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                            'total' => $data['total'],

                        ];

                        array_push($semester, $details);
                    }

                    array_push($udergraduate, [
                        'semester' => $sem->name,
                        'academic_year' => $academic_year->name,
                        'data' => $semester,
                        'cname' => $cname,
                    ]);
                    $panel++;
                } else {
                    $panel = 1;
                }
                // $panel = 1;
            }

            // Postgraduate Students

            $graduate = array();
            $panel_g = 0;
            foreach ($semesters as $sem) {

                $query = Yii::$app->db->createCommand("SELECT r.year_of_study,sem.name semester,yr.name academic_year,COUNT(r.id) AS total FROM tbl_student_registration AS r
        INNER JOIN tbl_student AS s ON r.student_id = s.id
        INNER JOIN tbl_programme_curriculum AS curr ON s.programme_curriculum_id = curr.id
        INNER JOIN tbl_programme AS p ON curr.programme_id = p.id
        INNER JOIN tbl_department d ON d.id=p.department_id
        INNER JOIN tbl_semester AS sem ON r.semester_id = sem.auto_id
        INNER JOIN tbl_academic_year AS yr ON sem.academic_year_id = yr.id
        WHERE
        r.dvs = 3
        AND yr.id = :yr
        AND d.id=:did
        AND p.study_level_id IN(4,5,6)
        AND sem.auto_id=:id
        GROUP BY r.year_of_study
        ORDER BY r.year_of_study ASC");

                $query->bindParam(':yr', $sem->academic_year_id, PDO::PARAM_INT);
                $query->bindParam(':id', $sem->auto_id, PDO::PARAM_INT);
                $query->bindParam(':did', $did, PDO::PARAM_INT);

                $results = $query->queryAll();
                $semester = array();

                if ($results) {

                    foreach ($results as $data) {
                        $details = [
                            'year_of_study' => CommonController::noSuffix($data['year_of_study']) . ' Year Students',
                            'total' => $data['total'],

                        ];

                        array_push($semester, $details);
                    }

                    array_push($graduate, [
                        'semester' => $sem->name,
                        'academic_year' => $academic_year->name,
                        'data' => $semester,
                    ]);
                    $panel_g++;
                } else {
                    $panel_g = 1;
                }
            }

            return $this->render('department_dashboard', [
                'undergraduate' => array('data' => $udergraduate, 'panels' => 12 / $panel),
                //   'graduate'=>array('data'=>$graduate,'panels'=>12/$panel_g),
                'TodayRegistered' => $TodayRegistered,
                //    'TodayRegisteredPost'=>$TodayRegisteredPost,

            ]);
        }
    }

    public function actionLogin()
    {


        $group_by = Yii::$app->db->createCommand("SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
        $group_by->execute();

        $this->layout = 'guest';

        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();

        if ($model->load(Yii::$app->request->post()) && $model->login()) {

            $date = date('Y-m-d H:i:s');
            $last_login = Yii::$app->db->createCommand("UPDATE tbl_user SET last_login_date='{$date}' WHERE id=:id");

            $last_login->bindValue(':id', Yii::$app->user->identity->id);
            $last_login->execute();

            // Yii::$app->session->set("academic_year", TblAcademicYear::find()->where(['is_active'=> 1])->one()->name);

            // Yii::$app->session->set("academic_sem", TblSemester::find()->select('tbl_academic_year.name as active_academic_year, tbl_academic_year.id as active_academic_year_id, tbl_semester.auto_id as active_semester_id, tbl_semester.name as active_semester, tbl_semester.id as active_semester_num')->innerJoinWith('academicYear')->where(['tbl_semester.is_active' => 1])->andWhere(['tbl_academic_year.is_active' => 1])->asArray()->One());

            Yii::$app->session->set("academic_year", TblAcademicYear::find()->where(['is_active' => 1])->one());

            Yii::$app->session->set("semester", TblSemester::find()->where(['is_active' => 1])->one());

            Common::setStaffDetailsForSession();

            if (Yii::$app->user->identity->user_type_id == 11) {

                if (!Common::setStudentDetailsForSession()) {
                    // Yii::$app->user->logout();
                    //    Yii::$app->getSession()->setFlash('success', [
                    //        'type' => 'danger',
                    //        'duration' => 6000,
                    //        'icon' => 'fas fa-stop',
                    //        'message' => Html::encode('You have successfully activate your account.'),
                    //        'title' => Html::encode('Account Activation'),
                    //        'positonY' => 'top',
                    //        'positonX' => 'right'
                    //    ]);

                    return $this->goHome();
                }
            }

            return $this->goBack();
        } else {
            $model->password = '';
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

    public function actionLogout()
    {
        Yii::$app->user->logout();

        return $this->goHome();
    }

    public function actionContact()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail(Yii::$app->params['adminEmail'])) {
                Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
            } else {
                Yii::$app->session->setFlash('error', 'There was an error sending your message.');
            }

            return $this->refresh();
        } else {
            return $this->render('contact', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Displays about page.
     *
     * @return mixed
     */
    public function actionAbout()
    {
        return $this->render('about');
    }

    /**
     * Signs user up.
     *
     * @return mixed
     */
    public function actionSignup()
    {
        $model = new SignupForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', [
            'model' => $model,
        ]);
    }

    /**
     * Signs user up.
     *
     * @return mixed
     */
    public function actionActivation($key)
    {
        $this->layout = "guest";
        $model = new TblUser();
        $model->scenario = 'activation';
        $token = base64_decode($key);

        if ($model->load(Yii::$app->request->post()) && $model->validate()) {

            $query = Yii::$app->db->createCommand()->update(
                'tbl_user',
                [
                    'is_blocked' => 1,
                    'auth_key' => null,
                    'password_hash' => Yii::$app->security->generatePasswordHash($model->password_hash),
                ],
                [
                    'auth_key' => $token,
                ]

            );

            if ($query->execute()) {
                Yii::$app->getSession()->setFlash('success', [
                    'type' => 'success',
                    'duration' => 6000,
                    'icon' => 'fas fa-check',
                    'message' => Html::encode('You have successfully activate your account.'),
                    'title' => Html::encode('Account Activation'),
                    'positonY' => 'top',
                    'positonX' => 'right',
                ]);

                $model->password_hash = '';
                $model->password_confirmation = '';
                return $this->redirect(['login']);
            } else {

                return $this->render('activation', ['model' => $model]);
            }
        } else {
            if (empty($key) || !is_string($key)) {
                throw new InvalidArgumentException('Invalid activation key or Empty key.');
            }

            if ($user = TblUser::find()->where('auth_key=:key', [':key' => $token])->one()) {

                return $this->render('activation', ['model' => $model, 'user' => $user]);
            } else {

                throw new InvalidArgumentException('Wrong activation key. ' . base64_encode("E4-8uKF2jTXu_Cso-30VvvsWP3SX-m8s_1564314362"));
            }
        }
    }

    /**
     * Requests password reset.
     *
     * @return mixed
     */
    public function actionRequestPasswordReset()
    {
        $this->layout = 'guest';

        $model = new PasswordResetRequestForm();

        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $user = User::find()->where('username=:username', [':username' => $model->username])->one();
            $new_password = $model->generatePassword();
            $user->setPassword($new_password);
            $user->save(false);  
          try {
                if ($model->deliveryMethod == "email") {
                    $user->setPassword($new_password);
                    $emailResponse = $model->sendEmail($new_password);
                  
                    if (is_bool($emailResponse) && $emailResponse == TRUE) {
                        Yii::$app->getSession()->setFlash("success", "Password Reseted Successfully, Please check your email");
                        return $this->render("passwordResetConfirmation",[
                            "model"=> $model,
                        ]);
                    } else {
                        $model->addError('username', 'Please contact System Administrator');
                        return $this->render('requestPasswordResetToken', [
                            'model' => $model,
                        ]);
                    }
                } else if ($model->deliveryMethod == "sms") {
               
                    if (!empty(trim($user->phone)) && ($user->phone != null)) {
                            $response = $model->sendSMS($new_password);

                            if($response->statusCode==48200 && $response->success == true) {
                                Yii::$app->getSession()->setFlash("success", "Password Reseted Successfully, Please check your phone");
                                return $this->render("passwordResetConfirmation",[
                                    "model"=> $model,
                                ]);
                            }
                        if($response->statusCode==48206) {
                            $emailResponse = $model->sendEmail($new_password);
                            Yii::$app->getSession()->setFlash("success", "Password Reseted Successfully, Please check your email");
                            return $this->render("passwordResetConfirmation",[
                                "model"=> $model,
                            ]);

                        }

                    } else {
                       
                        $model->addError('username', 'Please contact System Administrator');
                        return $this->render('requestPasswordResetToken', [
                            'model' => $model,
                        ]);
                    }
                } else {
                    $model->addError('username', 'Please contact System Administrator');
                    return $this->render('requestPasswordResetToken', [
                        'model' => $model,
                    ]);
                }
            } catch (\Exception $e) {
                Yii::error("Error in password reset: " . $e->getMessage(), __METHOD__);
                var_dump($e->getMessage());
                exit;
                // $model->addError('username', "An error occurred while processing your request. Please try again later.");
                // return $this->render('requestPasswordResetToken', [
                //     'model' => $model,
                // ]);
            }
            $model->username = '';
        }

        return $this->render('requestPasswordResetToken', [
            'model' => $model,
        ]);
    }

    /**
     * Resets password.
     *
     * @param string $token
     * @return mixed
     * @throws BadRequestHttpException
     */
    public function actionResetPassword($token)
    {
        $this->layout = 'guest';
        try {
            $model = new ResetPasswordForm($token);
        } catch (InvalidParamException $e) {
            throw new BadRequestHttpException($e->getMessage());
        }

        if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
            Yii::$app->session->setFlash('success', 'New password saved.');

            return $this->goHome();
        }

        return $this->render('resetPassword', [
            'model' => $model,
        ]);
    }

    public function actionLwendo()
    {

        $this->layout = 'guest';

        $password = Yii::$app->security->generatePasswordHash(Yii::$app->security->generateRandomString(8));

        $myfile = fopen("Passwords_sila.txt", "a") or die("Unable to open file!");

        $user = User::find()->where('user_type_id<>:user', [':user' => 11])->all();
        $i = 1;
        foreach ($user as $details) {

            try {

                if (Yii::$app->security->validatePassword('staff@udom', $details->password_hash)) {

                    fwrite($myfile, $i . '. Names : ' . $details->first_name . ' ' . $details->middle_name . ' ' . $details->last_name . ' Username : ' . $details->username . ' Email : ' . $details->email . ' Phone Number : ' . $details->phone);
                    $txt = "\n";
                    fwrite($myfile, $txt);

                    fclose($myfile);

                    Yii::$app->db->createCommand("UPDATE tbl_user SET password_hash='{$password}' WHERE id='{$details->id}'")->execute();

                    $i++;
                }
            } catch (\Exception $e) {

                Yii::$app->db->createCommand("UPDATE tbl_user SET password_hash='{$password}' WHERE id='{$details->id}'")->execute();

                //  print('Error: '.$e->getMessage());
                continue;
            }
        }
    }

    // print_r("sila");
    // $query=Yii::$app->db->createCommand("SELECT st.registration_no reg_no,u.last_name FROM `tbl_student_registration` reg
    //  INNER JOIN tbl_student st ON  st.id=reg.student_id
    //  INNER JOIN tbl_user u ON u.username=st.registration_no
    //  where reg.year_of_study>1 and st.registration_no not in(select reg_no from cont_password) group by student_id");
    // $i=1;
    // foreach($query->query() as $data){

    //   $password_hash=Yii::$app->security->generatePasswordHash(strtoupper(trim($data['last_name'])));
    //   $reg_no=$data['reg_no'];
    //   Yii::$app->db->createCommand("INSERT INTO cont_password (reg_no,password) VALUES ('{$reg_no}', '{$password_hash}')")->execute();

    // }

    /**
     * added by revo
     */
    public function getMadai($reg_no)
    {

        $query = Yii::$app->db->createCommand("SELECT * FROM tbl_opening_balances_madai WHERE registration_no='{$reg_no}'  AND approvar is not null limit 1");

        return $query->queryOne();
    }
    public function getMadai1stYear($reg_no)
    {

        $query = Yii::$app->db->createCommand("SELECT * FROM tbl_opening_balances_madai WHERE registration_no='{$reg_no}'  AND approvar is not null ");

        return $query->queryAll();
    }

    public function getMadeni($reg_no)
    {

        $query = Yii::$app->db->createCommand("SELECT * FROM tbl_opening_balances_madeni WHERE registration_no='{$reg_no}'  limit 1");

        return $query->queryOne();
    }

    public function actionControlnum($id = null)
    {
        $control = new Common();
        $res = $control->Controlnum($id);
        return $this->redirect(Yii::$app->request->referrer);
    }

    private function control_number($id = null)
    {
        $system = SpSystem::find()->where(['system_acronym' => 'GePG'])->one();

        $url = "https://gepgadmin.mjnuat.ac.tz/api/web/v1/billing/studentBillSubRequest";

        $user_id = \Yii::$app->user->identity->id;
        $student = Tblstudent::find()->where(['id' => Yii::$app->session->get('student_id')])->one();
        $reg_no = $student->registration_no;
        $payer_name = $student->users->first_name . ' ' . $student->users->middle_name . ' ' . $student->users->last_name;
        $program_code = $student->programmeCurriculum->programme->program_code;
        $is_foreign = 2;
        $year_of_study = TblStudentRegistration::find()->where(['student_id' => $student->id, 'semester_id' => 46])->one()->year_of_study;
        if (is_null($year_of_study)) {
            $msg = "You are not in the current academic year \n (2022-2023) \n Contact HoD or System Administrator";
            Yii::$app->session->setFlash('error', $msg);
            return $this->redirect(['student_dashboard']);
        }
        $data = [
            'reg_no' => $reg_no,
            'payer_name' => $payer_name,
            'programme_code' => $program_code,
            'is_foreign' => $is_foreign,
            'year_of_study' => $year_of_study,
        ];

        $payload = json_encode([
            'data' => $data,
            'signature' => Security::generateSignature(json_encode($data)),
        ]);




        $response = json_decode(Common::HttpPost($url, $payload, $system->sys_access_token));


        if (Security::generateSignature($response->TrxResp) == $response->signature) {

            if ($response->TrxResp->statusCode == 7101) {
                $msg = "Operation was successful \n Refresh to get control Numbers";
                Yii::$app->session->setFlash('success', $msg);
            } else {
                $msg = "Operation was not successful, try again later " . $response->TrxResp->data->message;

                Yii::$app->session->setFlash('error', $msg);
            }

            // return $this->redirect(['bill','id'=>$id]);

        } else {
            $msg = "Invalid Signature \n Contact system Administrator";
            Yii::$app->session->setFlash('error', $msg);
        }

        // return $this->redirect(['student_dashboard']);
    }
    /**
     * Fetch control numbers from
     */
    public function get_NHIF_control_number($arg)
    {
        $activeYear1 = TblAcademicYear::find()->where(['is_active' => 1])->one();
        $yr = $activeYear1->name;
        $statement = "SELECT ControlNo FROM nhif_card_applicantion_status WHERE FormFourIndexNo='{$arg}' and academic_year='$yr' ";

        $query = Yii::$app->db->createCommand($statement);
        $res = $query->queryOne();
        if ($res) {
            return $res['ControlNo'];
        } else {
            return $res;
        }
    }
}
