Your IP : 216.73.216.79


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

<?php

namespace app\controllers;

use Yii;
use app\models\Templates;
use app\models\TemplatesSearch;
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 yii\helpers\Html;
use yii\widgets\ActiveForm;
use app\models\User;
use yii\helpers\ArrayHelper;
use app\models\Products;
use app\models\Phase;
use app\models\Step;
use app\models\Adhoc;

/**
 * TemplatesController implements the CRUD actions for Templates model.
 */
class TemplatesController 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 Templates models.
     * @return mixed
     */
    public function actionIndex() {
        $searchModel = new TemplatesSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

    /**
     * Displays a single Templates 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 Templates model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public function actionCreate() {
        $model = new Templates();
        $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;
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $Log = new Log();
            $Log->insertlog('templates', 'create', $model->id);
            $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(['templates/index']) . "';});");
        }

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

    /**
     * Updates an existing Templates 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) {
        $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 = new Log();
            $Log->insertlog('templates', 'update', $model->id);
            $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(['templates/index']) . "';});");
        }

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

    /**
     * Deletes an existing Templates 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 = Templates::findOne($id);
        if (!empty($model)) {
            $model->status = 0;
            if ($model->save(false)) {
                $Log = new Log();
                $Log->insertlog('templates', 'delete', $model->id);
                $status = 'success';
            }
        }
        return $status;
    }

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

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

    public function actionGeneratetasklist() {
        $template_id = $_POST['template_id'];
        $start_dt = $_POST['start_dt'];
        $output = '';
        $counttask = 0;
        $taskstardt = $start_dt;

        $modelPhase = Phase::find()->where(['status' => '1'])->andwhere(['template_id' => $template_id])->orderBy(['sort' => SORT_ASC])->all();
        if (!empty($modelPhase)) {
            foreach ($modelPhase as $rowPhase) {
                $output .= '<tr class="rowphase_' . $rowPhase->id . '">
                              <th class="align-middle">
                                <input type="hidden" class="form-control" value="' . $rowPhase->id . '" name="phaseno[]">
                                <label class="kt-checkbox">
                                    <input type="checkbox" checked onclick="removephase(' . $rowPhase->id . ')" name="phase_checkbox_' . $rowPhase->id . '" id="phase_checkbox_' . $rowPhase->id . '" value="1">
                                    <span></span>
                                </label>
                              </th>
                              <th colspan="7" class="align-middle">
                                <input type="hidden" class="form-control" value="' . $rowPhase->sort . '" name="phase_sort_' . $rowPhase->id . '">
                                <input type="hidden" class="form-control" value="' . $rowPhase->name . '" name="phase_name_' . $rowPhase->id . '">
                                Phase ' . $rowPhase->sort . ' : ' . $rowPhase->name . '
                              </th>
                            </tr>';

                $modelStep = Step::find()->where(['status' => '1'])->andwhere(['=', 'phase_id', $rowPhase->id])->orderBy(['sort' => SORT_ASC])->all();
                if (!empty($modelStep)) {
                    foreach ($modelStep as $rowStep) {

                        if ($rowStep->start_day != 'same' && $counttask != 0)
                            $taskstardt = date('Y-m-d', strtotime($taskenddt . '  1 weekdays'));

                        $btn_copy = '';
                        if ($counttask != 0) {
                            $btn_copy = '<div class="input-group-append">
                                <button class="btn btn-brand btn-sm" type="button" data-placement="bottom" data-toggle="tooltip" title="Start date same day as previous task" onclick="copyprevdttask(' . $counttask . ')">
                                    <i class="fas fa-arrow-up text-white"></i>
                                </button>
                            </div>';
                        }

                        if ($rowStep->duration < 1)
                            $taskenddt = $taskstardt;
                        else
                            $taskenddt = date('Y-m-d', strtotime($taskstardt . '  ' . ($rowStep->duration - 1) . ' weekdays'));

                        $counttask++;

                        $output .= '
                              <tr id="rowtask_' . $counttask . '" class="rowphase_' . $rowPhase->id . '">
                                <td class="align-middle">
                                    <input type="hidden" class="form-control" value="' . $counttask . '" name="taskno[]">
                                    <input type="hidden" class="form-control" value="' . $rowStep->id . '" name="task_id_' . $counttask . '">
                                    <input type="hidden" class="form-control" value="' . $rowStep->phase_id . '" name="task_phaseid_' . $counttask . '">
                                    <input type="hidden" class="form-control" value="' . $rowStep->track . '" name="task_tracktype_' . $counttask . '">
                                    <label class="kt-checkbox">
                                        <input type="checkbox" checked onclick="removetask(' . $counttask . ')" name="task_checkbox_' . $counttask . '" id="task_checkbox_' . $counttask . '" value="1">
                                        <span></span>
                                    </label>
                                    
                                </td>
                                <td class="align-middle">
                                    <button type="button" class="btn btn-outline-hover-primary btn-icon btn-sm" data-placement="top" 
                                    data-toggle="tooltip" title="Add new task" onclick="addnewtask(\'rowtask_' . $counttask . '\',' . $rowPhase->id . ')">
                                        <i class="fas fa-plus"></i>
                                    </button>
                                </td>
                                <td><input type="text" class="form-control taskno" value="' . $rowStep->sort . '" name="task_sort_' . $counttask . '"></td>
                                <td><input type="text" class="form-control taskname" value="' . $rowStep->name . '" name="task_name_' . $counttask . '"></td>
                                <td>' . Html::dropDownList('task_assignto_' . $counttask, NULL, ArrayHelper::map(User::find()->where(['status' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'), [
                                    'class' => 'taskassignto form-control kt-selectpicker assignto_' . $rowStep->assignto,
                                    'empty' => '- Please choose -', 'id' => 'task_assignto_' . $counttask, 'data-live-search' => 'true', 'multiple' => 'true']) . '
                                </td>
                                <td><input type="text" onchange="updatetaskenddate(' . $counttask . ')" id="task_duration_' . $counttask . '" name="task_duration_' . $counttask . '" class="form-control task_duration" value="' . $rowStep->duration . '"></td>
                                <td>
                                    <div class="input-group">
                                        <input type="text" onchange="updatetaskenddate(' . $counttask . ')" id="task_startdt_' . $counttask . '" name="task_startdt_' . $counttask . '" class="form-control datepicker taskstardt" readonly="" style="width:110px;" value="' . $taskstardt . '">
                                    </div>
                                </td>
                                <td><input type="text" id="task_enddt_' . $counttask . '" name="task_enddt_' . $counttask . '" class="form-control taskenddt" readonly="" value="' . $taskenddt . '"></td>
                              </tr>';
                    }
                }
            }
        }

        return '<input type="hidden" id="totaltask" value="' . $counttask . '">
            <table class="table mb-0 table-borderless table-striped">
                        <thead>
                            <tr>
                                <th scope="col" class="text-center align-middle" width="1%"></th>
                                <th scope="col" class="text-center align-middle" width="1%"></th>
                                <th scope="col" class="text-center align-middle" width="6%">No.</th>
                                <th scope="col" class="align-middle">Task</th>
                                <th scope="col" class="align-middle" width="25%">Assign To</th>
                                <th scope="col" width="10%" class="align-middle">Duration (days)</th>
                                <th scope="col" width="10%" class="align-middle">Start Date</th>
                                <th scope="col" width="10%" class="align-middle">End Date</th>
                            </tr>
                        </thead>
                        <tbody>
                            ' . $output . '
                        </tbody>
                    </table>';
    }

    public function actionAddnewtask($totaltask, $rowPhaseID) {
        $counttask = $totaltask + 1;

        return '<tr id="rowtask_' . $counttask . '" class="rowphase_' . $rowPhaseID . '">
            <td class="align-middle">
                <input type="hidden" class="form-control" value="' . $counttask . '" name="taskno[]">
                <input type="hidden" class="form-control" value="0" name="task_id_' . $counttask . '">
                <input type="hidden" class="form-control" value="' . $rowPhaseID . '" name="task_phaseid_' . $counttask . '">
                <input type="hidden" class="form-control" value="project" name="task_tracktype_' . $counttask . '">
                <label class="kt-checkbox">
                    <input type="checkbox" checked onclick="removetask(' . $counttask . ')" name="task_checkbox_' . $counttask . '" id="task_checkbox_' . $counttask . '" value="1">
                    <span></span>
                </label>
            </td>
            <td class="align-middle">
                <button type="button" class="btn btn-outline-hover-primary btn-icon btn-sm" data-placement="top" data-toggle="tooltip" title="Add new task" 
                onclick="addnewtask(\'rowtask_' . $counttask . '\',' . $rowPhaseID . ')">
                    <i class="fas fa-plus"></i>
                </button>
            </td>
            <td><input type="text" class="form-control taskno" value="0" name="task_sort_' . $counttask . '"></td>
            <td><input type="text" class="form-control taskname" value="" name="task_name_' . $counttask . '"></td>
            <td>' . Html::dropDownList('task_assignto_' . $counttask, NULL, ArrayHelper::map(User::find()->where(['status' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'), [
                    'class' => 'taskassignto form-control kt-selectpicker',
                    'empty' => '- Please choose -',
                    'id' => 'task_assignto_' . $counttask,
                    'data-live-search' => 'true', 'multiple' => 'true']) . '
            </td>
            <td><input type="text" onchange="updatetaskenddate(' . $counttask . ')" id="task_duration_' . $counttask . '" name="task_duration_' . $counttask . '" class="form-control task_duration" value="1"></td>
            <td>
                <div class="input-group">
                    <input type="text" onchange="updatetaskenddate(' . $counttask . ')" id="task_startdt_' . $counttask . '" name="task_startdt_' . $counttask . '" 
                        class="form-control datepicker taskstardt" readonly="" style="width:110px;" value="' . date('Y-m-d') . '">
                </div>
            </td>
            <td><input type="text" id="task_enddt_' . $counttask . '" name="task_enddt_' . $counttask . '" class="form-control taskenddt" readonly="" value="' . date('Y-m-d') . '"></td>
        </tr>';
    }

    public function actionAddnewtask2($totaltask, $rowPhaseID, $projectID) {
        $counttask = $totaltask + 1;

        return '<tr id="rowtask_' . $counttask . '" class="rowphase_' . $rowPhaseID . '">
            <td class="align-middle">
                <input type="hidden" class="form-control" value="' . $counttask . '" name="newtaskno[]">
                <input type="hidden" class="form-control" value="0" name="newtask_id_' . $counttask . '">
                <input type="hidden" class="form-control" value="' . $rowPhaseID . '" name="newtask_phaseid_' . $counttask . '">
                <input type="hidden" class="form-control" value="project" name="newtask_tracktype_' . $counttask . '">
                <button type="button" class="btn btn-outline-hover-primary btn-icon btn-sm" data-placement="top" data-toggle="tooltip" title="Add new task" 
                onclick="addnewtask2(\'rowtask_' . $counttask . '\',' . $rowPhaseID . ',' . $projectID . ')">
                    <i class="fas fa-plus"></i>
                </button>
            </td>
            <td><input type="text" class="form-control taskno" value="0" name="newtask_sort_' . $counttask . '"></td>
            <td><input type="text" class="form-control taskname" value="" name="newtask_name_' . $counttask . '"></td>
            <td>' . Html::dropDownList('newtask_assignto_' . $counttask, NULL, ArrayHelper::map(
                                User::find()->innerjoin('pic', 'user.id=pic.user_id')
                                        ->where(['user.status' => '1'])
                                        ->andwhere(['=', 'pic.project_id', $projectID])
                                        ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'), [
                    'class' => 'taskassignto form-control kt-selectpicker',
                    'empty' => '- Please choose -',
                    'id' => 'task_assignto_' . $counttask,
                    'data-live-search' => 'true', 'multiple' => 'true']) . '
            </td>
            <td><input type="text" onchange="updatetaskenddate(' . $counttask . ')" id="task_duration_' . $counttask . '" name="newtask_duration_' . $counttask . '" class="form-control task_duration" value="1"></td>
            <td>
                <div class="input-group">
                    <input type="text" onchange="updatetaskenddate(' . $counttask . ')" id="task_startdt_' . $counttask . '" name="newtask_startdt_' . $counttask . '" 
                        class="form-control datepicker taskstardt" readonly="" style="width:110px;" value="' . date('Y-m-d') . '">
                </div>
            </td>
            <td><input type="text" id="task_enddt_' . $counttask . '" name="newtask_enddt_' . $counttask . '" class="form-control taskenddt" readonly="" value="' . date('Y-m-d') . '"></td>
            <td></td>
        </tr>';
    }

    public function actionAddnewadhoc($countadhoc, $projectid) {
        return '<tr id="new_adhoc_' . $countadhoc . '">
            <td class="align-middle">
                <input type="hidden" value="' . $countadhoc . '" name="newadhocid[]">
                <button type="button" class="btn btn-outline-hover-primary btn-icon btn-sm" data-placement="top" 
                data-toggle="tooltip" title="Add new adhoc task" onclick="addnewadhoc(\'new_adhoc_' . $countadhoc . '\','.$projectid.')">
                    <i class="fas fa-plus"></i>
                </button>
            </td>
            <td><input type="text" class="form-control" name="new_adhoc_sort_' . $countadhoc . '"></td>
            <td><input type="text" class="form-control" name="new_adhoc_task_name_' . $countadhoc . '"></td>
            <td>' . Html::dropDownList('new_adhoc_assign_to_' . $countadhoc, '', ArrayHelper::map(
                                User::find()->innerjoin('pic', 'user.id=pic.user_id')
                                        ->where(['user.status' => '1'])
                                        ->andwhere(['=', 'pic.project_id', $projectid])
                                        ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name'), [
                    'id' => 'new_adhoc_assign_to_'.$countadhoc,
                    'class' => 'form-control kt-selectpicker',
                    'empty' => '- Please choose -',
                    'data-live-search' => 'true']) . '
                    </td>
            <td><input type="text" class="form-control" name="new_adhoc_duration_' . $countadhoc . '" id="new_adhoc_duration_' . $countadhoc . '" onchange="updatetaskenddate2(' . $countadhoc . ')"></td>
            <td><input type="text" class="form-control datepicker" name="new_adhoc_start_dt_' . $countadhoc . '" id="new_adhoc_start_dt_' . $countadhoc . '" onchange="updatetaskenddate2(' . $countadhoc . ')" readonly="" style="width:110px;"></td>
            <td><input type="text" class="form-control" name="new_adhoc_end_dt_' . $countadhoc . '"  id="new_adhoc_end_dt_' . $countadhoc . '" readonly=""></td>
            <td></td>
        </tr>';
    }

}