Your IP : 216.73.216.79


Current Path : /var/www/html/dyna-project/controllers/
Upload File :
Current File : /var/www/html/dyna-project/controllers/ProjectsController.php

<?php

namespace app\controllers;

use Yii;
use app\models\Projects;
use app\models\ProjectsSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\helpers\Url;
use app\models\Log;
use app\models\LogSearch;
use app\models\Products;
use app\models\Tasks;
use app\models\Adhoc;
use app\models\User;
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use app\models\ParamList;
use app\models\Pic;

/**
 * ProjectsController implements the CRUD actions for Projects model.
 */
class ProjectsController extends Controller {

    /**
     * {@inheritdoc}
     */
    public function behaviors() {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['post'],
                ],
            ],
            'access' => [
                'class' => \yii\filters\AccessControl::className(),
                'only' => ['index', 'create', 'update', 'view'],
                'rules' => [
                    // allow authenticated users
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                // everything else is denied
                ],
            ],
        ];
    }

    /**
     * Lists all Projects models.
     * @return mixed
     */
    public function actionIndex() {
        $searchModel = new ProjectsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        return $this->render('index', ['searchModel' => $searchModel, 'dataProvider' => $dataProvider,]);
    }

    /**
     * Displays a single Projects model.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionView($id) {
        return $this->render('view', [
                    'model' => $this->findModel($id),
        ]);
    }

    /**
     * Creates a new Projects model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public function actionCreate() {
        $model = new Projects();
        $model->start_dt = date("Y-m-d");
        $model->end_dt = date('Y-m-d', strtotime($model->start_dt . ' + 60 days'));
        $model->created_dt = date("Y-m-d H:i:s");
        $model->created_by = Yii::$app->user->identity->id;
        $model->updated_dt = date("Y-m-d H:i:s");
        $model->updated_by = Yii::$app->user->identity->id;
        $model->status = 1;
        $model->progress = 'Pending';

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

            $Log = new Log();
            $Log->insertlog('project', 'create', $model->id);

            if (!empty($_POST['new_pic_id'])) {
                foreach ($_POST['new_pic_id'] as $pic) {
                    $modelPic = new Pic();
                    $modelPic->status = 1;
                    $modelPic->project_id = $model->id;
                    $modelPic->role = $_POST['new_pic_role_' . $pic];
                    $modelPic->user_id = $_POST['new_pic_user_' . $pic];
                    $modelPic->created_dt = date("Y-m-d H:i:s");
                    $modelPic->created_by = Yii::$app->user->identity->id;
                    $modelPic->updated_dt = date("Y-m-d H:i:s");
                    $modelPic->updated_by = Yii::$app->user->identity->id;
                    $modelPic->save();
                    $Log->insertlog('pic', 'create', $modelPic->id);
                }
            }

            if (!empty($_POST['phaseno'])) {
                $countphase = 0;
                foreach ($_POST['phaseno'] as $phaseno) {
                    if (!empty($_POST['phase_checkbox_' . $phaseno])) {
                        $countphase++;
                        $modelTask1 = new Tasks();
                        $modelTask1->project_id = $model->id;
                        $modelTask1->task_type = 'phase';
                        $modelTask1->data_id = $phaseno;
                        $modelTask1->task_no = $_POST['phase_sort_' . $phaseno];
                        $modelTask1->task_full_no = $_POST['phase_sort_' . $phaseno];
                        $modelTask1->task_name = $_POST['phase_name_' . $phaseno];
                        $modelTask1->sort = $countphase;
                        $modelTask1->task_status = 'pending';
                        $modelTask1->deleted_status = '0';
                        $modelTask1->created_dt = date("Y-m-d H:i:s");
                        $modelTask1->created_by = Yii::$app->user->identity->id;
                        $modelTask1->updated_dt = date("Y-m-d H:i:s");
                        $modelTask1->updated_by = Yii::$app->user->identity->id;
                        $modelTask1->save();
                    }
                }
            }

            if (!empty($_POST['taskno'])) {
                $counttask = 0;
                foreach ($_POST['taskno'] as $taskno) {

                    if (!empty($_POST['task_checkbox_' . $taskno])) {

                        $counttask++;
                        $parent_id = '';
                        $parent_no = '';

                        if (($modelParent = Tasks::findOne(['project_id' => $model->id, 'task_type' => 'phase', 'data_id' => $_POST['task_phaseid_' . $taskno]])) !== null) {
                            $parent_id = $modelParent->id;
                            $parent_no = $modelParent->task_no;
                        }

                        $modelTask = new Tasks();
                        $modelTask->project_id = $model->id;
                        $modelTask->task_type = 'step';
                        $modelTask->parent_id = $parent_id;
                        $modelTask->data_id = $_POST['task_id_' . $taskno];
                        $modelTask->task_no = $_POST['task_sort_' . $taskno];
                        $modelTask->task_full_no = $parent_no . '.' . $modelTask->task_no;
                        $modelTask->task_name = $_POST['task_name_' . $taskno];
                        $modelTask->sort = $counttask;
                        if (!empty($_POST['task_assignto_' . $taskno]))
                            $modelTask->assign_to = implode(',', $_POST['task_assignto_' . $taskno]);
                        $modelTask->duration = $_POST['task_duration_' . $taskno];
                        $modelTask->start_dt = $_POST['task_startdt_' . $taskno];
                        $modelTask->end_dt = $_POST['task_enddt_' . $taskno];
                        $modelTask->track_type = $_POST['task_tracktype_' . $taskno];
                        $modelTask->task_status = 'pending';
                        $modelTask->deleted_status = '0';
                        $modelTask->created_dt = date("Y-m-d H:i:s");
                        $modelTask->created_by = Yii::$app->user->identity->id;
                        $modelTask->updated_dt = date("Y-m-d H:i:s");
                        $modelTask->updated_by = Yii::$app->user->identity->id;
                        $modelTask->save();
                    }
                }
            }

            $this->getView()->registerJs("swal.fire({
              position: 'center-center',type: 'success',title: 'Project have been created.',showConfirmButton: false,timer: 5000,
              }).then(function(result){window.location = '" . Url::to(['projects/index', 'id' => $model->id]) . "';});");
        }
        return $this->render('create', ['model' => $model,]);
    }

    /**
     * Updates an existing Projects model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionUpdate($id) {
        $Log = new Log();
        $model = $this->findModel($id);
        $model->updated_dt = date("Y-m-d H:i:s");
        $model->updated_by = Yii::$app->user->identity->id;
        if ($model->load(Yii::$app->request->post()) && $model->save()) {

            $Log->insertlog('project', 'update', $model->id);

            if (!empty($_POST['pic_id'])) {
                foreach ($_POST['pic_id'] as $pic_id) {

                    if (($modelPic = Pic::findOne($pic_id)) !== null) {
                        $modelPic->role = $_POST['pic_role_' . $pic_id];
                        $modelPic->user_id = $_POST['pic_user_' . $pic_id];
                        $modelPic->updated_dt = date("Y-m-d H:i:s");
                        $modelPic->updated_by = Yii::$app->user->identity->id;
                        if ($modelPic->save(false)) {
                            $Log->insertlog('pic', 'update', $modelPic->id);
                        }
                    }
                }
            }

            if (!empty($_POST['new_pic_id'])) {
                foreach ($_POST['new_pic_id'] as $pic) {
                    $modelPic = new Pic();
                    $modelPic->status = 1;
                    $modelPic->project_id = $model->id;
                    $modelPic->role = $_POST['new_pic_role_' . $pic];
                    $modelPic->user_id = $_POST['new_pic_user_' . $pic];
                    $modelPic->created_dt = date("Y-m-d H:i:s");
                    $modelPic->created_by = Yii::$app->user->identity->id;
                    $modelPic->updated_dt = date("Y-m-d H:i:s");
                    $modelPic->updated_by = Yii::$app->user->identity->id;
                    $modelPic->save();
                    $Log->insertlog('pic', 'create', $modelPic->id);
                }
            }

            if (!empty($_POST['taskid'])) {
                foreach ($_POST['taskid'] as $taskid) {
                    if (($modelTask = Tasks::findOne($taskid)) !== null) {

                        if ($modelTask->task_type == 'step') {
                            $modelTask->task_no = $_POST['task_no_' . $taskid];
                            $modelTask->sort = $modelTask->task_no;
                            $modelTask->task_name = $_POST['task_name_' . $taskid];
                        }

                        $parent_no = '';
                        if (($modelParent = Tasks::findOne($modelTask->parent_id)) !== null) {
                            $parent_no = $modelParent->task_full_no;
                        }
                        $modelTask->task_full_no = $parent_no . '.' . $modelTask->task_no;
                        if (!empty($_POST['task_assignto_' . $taskid]))
                            $modelTask->assign_to = implode(',', $_POST['task_assignto_' . $taskid]);
                        $modelTask->duration = $_POST['task_duration_' . $taskid];
                        $modelTask->start_dt = $_POST['task_startdt_' . $taskid];
                        $modelTask->end_dt = $_POST['task_enddt_' . $taskid];
                        $modelTask->actual_start_dt = $_POST['task_actual_start_dt_' . $taskid];
                        $modelTask->actual_end_dt = $_POST['task_actual_end_dt_' . $taskid];
                        $modelTask->percentage_complete = $_POST['task_percentage_complete_' . $taskid];
                        $modelTask->updated_dt = date("Y-m-d H:i:s");
                        $modelTask->updated_by = Yii::$app->user->identity->id;
                        $modelTask->save();
                    }
                }
            }

            //new task
            if (!empty($_POST['newtaskno'])) {

                foreach ($_POST['newtaskno'] as $taskno) {

                    $parent_id = '';
                    $parent_no = '';

                    if (($modelParent = Tasks::findOne(['project_id' => $model->id, 'task_type' => 'phase', 'data_id' => $_POST['newtask_phaseid_' . $taskno]])) !== null) {
                        $parent_id = $modelParent->id;
                        $parent_no = $modelParent->task_no;
                    }

                    $modelTask = new Tasks();
                    $modelTask->project_id = $model->id;
                    $modelTask->task_type = 'step';
                    $modelTask->parent_id = $parent_id;
                    $modelTask->data_id = $_POST['newtask_id_' . $taskno];
                    $modelTask->task_no = $_POST['newtask_sort_' . $taskno];
                    $modelTask->task_full_no = $parent_no . '.' . $modelTask->task_no;
                    $modelTask->task_name = $_POST['newtask_name_' . $taskno];
                    $modelTask->sort = $_POST['newtask_sort_' . $taskno];
                    $modelTask->assign_to = implode(',', $_POST['newtask_assignto_' . $taskno]);
                    $modelTask->duration = $_POST['newtask_duration_' . $taskno];
                    $modelTask->start_dt = $_POST['newtask_startdt_' . $taskno];
                    $modelTask->end_dt = $_POST['newtask_enddt_' . $taskno];
                    $modelTask->track_type = $_POST['newtask_tracktype_' . $taskno];
                    $modelTask->task_status = 'pending';
                    $modelTask->deleted_status = '0';
                    $modelTask->created_dt = date("Y-m-d H:i:s");
                    $modelTask->created_by = Yii::$app->user->identity->id;
                    $modelTask->updated_dt = date("Y-m-d H:i:s");
                    $modelTask->updated_by = Yii::$app->user->identity->id;
                    $modelTask->save();
                }
            }

            //add adhoc
            if (!empty($_POST['newadhocid'])) {
                foreach ($_POST['newadhocid'] as $newadhocid) {
                    $modelNewAdhoc = new Tasks();

                    $modelNewAdhoc->project_id = $model->id;
                    $modelNewAdhoc->sort = $_POST['new_adhoc_sort_' . $newadhocid];
                    $modelNewAdhoc->task_name = $_POST['new_adhoc_task_name_' . $newadhocid];
                    $modelNewAdhoc->assign_to = $_POST['new_adhoc_assign_to_' . $newadhocid];
                    $modelNewAdhoc->duration = $_POST['new_adhoc_duration_' . $newadhocid];
                    $modelNewAdhoc->start_dt = $_POST['new_adhoc_start_dt_' . $newadhocid];
                    $modelNewAdhoc->end_dt = $_POST['new_adhoc_end_dt_' . $newadhocid];

                    $modelNewAdhoc->created_dt = date("Y-m-d H:i:s");
                    $modelNewAdhoc->created_by = Yii::$app->user->identity->id;
                    $modelNewAdhoc->updated_dt = date("Y-m-d H:i:s");
                    $modelNewAdhoc->updated_by = Yii::$app->user->identity->id;
                    $modelNewAdhoc->task_type = 'adhoc';
                    $modelNewAdhoc->task_status = 'pending';
                    $modelNewAdhoc->deleted_status = '0';
                    $modelNewAdhoc->save(false);
                }
            }

            //update adhoc
            if (!empty($_POST['adhocid'])) {
                foreach ($_POST['adhocid'] as $adhocid) {
                    if (($modelAdhoc = Tasks::findOne($adhocid)) !== null) {

                        $modelAdhoc->sort = $_POST['adhoc_sort_' . $adhocid];
                        $modelAdhoc->task_name = $_POST['adhoc_task_name_' . $adhocid];
                        $modelAdhoc->assign_to = $_POST['adhoc_assign_to_' . $adhocid];
                        $modelAdhoc->duration = $_POST['adhoc_duration_' . $adhocid];
                        $modelAdhoc->start_dt = $_POST['adhoc_start_dt_' . $adhocid];
                        $modelAdhoc->end_dt = $_POST['adhoc_end_dt_' . $adhocid];
                        $modelAdhoc->actual_start_dt = $_POST['adhoc_actual_start_dt_' . $adhocid];
                        $modelAdhoc->actual_end_dt = $_POST['adhoc_actual_end_dt_' . $adhocid];
                        $modelAdhoc->percentage_complete = $_POST['adhoc_percentage_complete_' . $adhocid];

                        $modelAdhoc->updated_dt = date("Y-m-d H:i:s");
                        $modelAdhoc->updated_by = Yii::$app->user->identity->id;
                        $modelAdhoc->save(false);
                    }
                }
            }

            $this->getView()->registerJs("swal.fire({
                position: 'center-center',type: 'success',title: 'Data has been saved',showConfirmButton: false,timer: 1500,
                }).then(function(result){window.location = '" . Url::to(['projects/index']) . "';});");
        }

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

    /**
     * Deletes an existing Projects model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionDelete() {
        $id = $_POST['id'];
        $status = 'failed';
        $model = Projects::findOne($id);
        if (!empty($model)) {
            $model->status = 0;
            if ($model->save(false)) {
                $Log = new Log();
                $Log->insertlog('project', 'delete', $model->id);
                $status = 'success';
            }
        }
        return $status;
    }

    /**
     * Finds the Projects model based on its primary key value.
     * If the model is not found, a 404 HTTP exception will be thrown.
     * @param integer $id
     * @return Projects the loaded model
     * @throws NotFoundHttpException if the model cannot be found
     */
    protected function findModel($id) {
        if (($model = Projects::findOne($id)) !== null) {
            return $model;
        }

        throw new NotFoundHttpException('The requested page does not exist.');
    }

    public function actionCalcprojectdue() {
        return date('Y-m-d', strtotime($_POST['start_dt'] . ' + 60 days'));
    }

    public function actionCalctaskend() {
        $duration = $_POST['duration'];
        if ($duration == '0.5')
            $duration = 1;
        $end_date = date('Y-m-d', strtotime($_POST['start_dt'] . '  ' . ($duration - 1) . ' weekdays'));
        $next_start_date = date('Y-m-d', strtotime($end_date . '  1 weekdays'));
        return $end_date . '<--->' . $next_start_date;
    }

    public function actionAddadhoc() {
        $output = '';
        $no = $_POST['countaddhoc'];
        $ParamList = new ParamList();
        if (($model = Adhoc::findOne($_POST['selected_adhoc'])) !== null) {
            $output = '<tr>
                    <td class="text-center align-middle">
                        <input type="text" class="form-control adhocinput" name="adhoc_no_' . $no . '" value="' . $no . '">
                        <input type="hidden" value="' . $no . '" name="adhoc[]">
                        <input type="hidden" value="' . $model->id . '" name="adhoc_dataid_' . $no . '">
                        <input type="hidden" value="' . strtolower($model->assignto) . '" id="adhoc_usertype_' . $no . '">
                    </td>
                    <td><input type="text" class="form-control adhocinput" name="adhoc_name_' . $no . '" value="' . $model->name . '"></td>
                    <td>' . Html::dropDownList('adhoc_freq_' . $no, $model->freq, $ParamList->getparamlist2(36), [
                        'class' => 'form-control kt-selectpicker',
                        'id' => 'adhoc_freq_' . $no]) . '</td>
                    <td>' . Html::dropDownList('adhoc_assignto_' . $no, NULL, ArrayHelper::map(User::find()->where(['status' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'), [
                        'class' => 'form-control kt-selectpicker',
                        'id' => 'adhoc_assignto_' . $no]) . '</td>
                    <td><input type="text" class="form-control adhocinput" onchange="updateadhocenddate(' . $no . ')" name="adhoc_duration_' . $no . '" id="adhoc_duration_' . $no . '"></td>
                    <td><input type="text" id="adhoc_startdt_' . $no . '" onchange="updateadhocenddate(' . $no . ')" name="adhoc_startdt_' . $no . '" class="form-control datepicker adhocinput" readonly="" style="width:110px;"></td>
                    <td><input type="text" id="adhoc_enddt_' . $no . '" name="adhoc_enddt_' . $no . '" class="form-control adhocinput" readonly=""></td>
                </tr>';
        }
        return $output;
    }

}