Merge pull request #59 from q6q9/calendarWidget_reports_and_birthdays
Переделал виджет, более понятен
This commit is contained in:
		| @@ -4,22 +4,29 @@ namespace backend\modules\calendar\controllers; | |||||||
|  |  | ||||||
| use backend\modules\card\models\UserCardSearch; | use backend\modules\card\models\UserCardSearch; | ||||||
| use Yii; | use Yii; | ||||||
| use yii\helpers\ArrayHelper; |  | ||||||
| use yii\web\Response; | use yii\web\Response; | ||||||
|  |  | ||||||
| class AjaxController extends \yii\web\Controller | class AjaxController extends \yii\web\Controller | ||||||
| { | { | ||||||
|     public function actionGetBirthdayByMonth($month ) |  | ||||||
|  |     public function actionGetBirthdayDate($date) | ||||||
|  |     { | ||||||
|  |         $searchModel = new UserCardSearch(); | ||||||
|  |         $dataProvider = $searchModel->search(['date' => $date]); | ||||||
|  |  | ||||||
|  |         return $this->render('_gridView', [ | ||||||
|  |             'dataProvider' => $dataProvider | ||||||
|  |         ]); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function actionGetBirthdayDatesByMonth($month ) | ||||||
|     { |     { | ||||||
|         $searchModel = new UserCardSearch(); |         $searchModel = new UserCardSearch(); | ||||||
|         $models = $searchModel->search(Yii::$app->request->queryParams)->getModels(); |         $models = $searchModel->search(Yii::$app->request->queryParams)->getModels(); | ||||||
|         $models_array = ArrayHelper::toArray($models, [ |         $models_array = array_map(function ($date){return date('Y').substr($date, 4,6);}, | ||||||
|             'backend\modules\card\models\UserCard' => [ |             array_column($models, 'dob') | ||||||
|                 'id', |         ); | ||||||
|                 'dob', |  | ||||||
|                 'fio' |  | ||||||
|             ], |  | ||||||
|         ]); |  | ||||||
|  |  | ||||||
|         $response = Yii::$app->response; |         $response = Yii::$app->response; | ||||||
|         $response->format = Response::FORMAT_JSON; |         $response->format = Response::FORMAT_JSON; | ||||||
|   | |||||||
| @@ -42,11 +42,11 @@ class CalendarController extends Controller | |||||||
|      * Renders the index view for the module |      * Renders the index view for the module | ||||||
|      * @return string |      * @return string | ||||||
|      */ |      */ | ||||||
|     public function actionCalendar(){ |     public function actionIndex(){ | ||||||
|         return $this->render('calendar'); |         return $this->render('index'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function actionIndex() |     public function actionTable() | ||||||
|     { |     { | ||||||
|         $searchModel = new UserCardSearch(); |         $searchModel = new UserCardSearch(); | ||||||
|         $user_card = \common\models\UserCard::find()->all(); |         $user_card = \common\models\UserCard::find()->all(); | ||||||
| @@ -67,7 +67,7 @@ class CalendarController extends Controller | |||||||
|             $dataProvider = $searchModel->search(Yii::$app->request->queryParams); |             $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return $this->render('index', [ |         return $this->render('table', [ | ||||||
|             'searchModel' => $searchModel, |             'searchModel' => $searchModel, | ||||||
|             'dataProvider' => $dataProvider, |             'dataProvider' => $dataProvider, | ||||||
|         ]); |         ]); | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								backend/modules/calendar/views/ajax/_gridView.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								backend/modules/calendar/views/ajax/_gridView.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | use yii\grid\GridView; | ||||||
|  |  | ||||||
|  | /* @var $this yii\web\View */ | ||||||
|  | /* @var $dataProvider yii\data\ActiveDataProvider */ | ||||||
|  |  | ||||||
|  | echo GridView::widget([ | ||||||
|  |     'dataProvider' => $dataProvider, | ||||||
|  |     'columns' => [ | ||||||
|  |         ['class' => 'yii\grid\SerialColumn'], | ||||||
|  |         'fio', | ||||||
|  |         'dob', | ||||||
|  |         ['class' => 'yii\grid\ActionColumn'], | ||||||
|  |     ], | ||||||
|  | ]); | ||||||
|  | die(); | ||||||
|  |  | ||||||
| @@ -1,59 +0,0 @@ | |||||||
| <?php |  | ||||||
| use yii\helpers\Html; |  | ||||||
|  |  | ||||||
| $this->title = 'Календарь ДР'; |  | ||||||
| ?> |  | ||||||
| <?= \backend\widgets\Calendar::widget([ |  | ||||||
|  |  | ||||||
|     'css' => '.success{color: orange;}', |  | ||||||
|  |  | ||||||
|     'button' => Html::a('<i class="fas fa-long-arrow-alt-left"></i> Назад', |  | ||||||
|         Yii::$app->request->referrer, ['class' => 'btn btn-primary',]), |  | ||||||
|     'runBuild' => "function (date, content){ |  | ||||||
|         this.build(date, content) |  | ||||||
|     }", |  | ||||||
|     'updateContent' => "function(date){ |  | ||||||
|         let monthNumber = date.substr(5, 2); |  | ||||||
|         return fetch('../ajax/get-birthday-by-month?' + |  | ||||||
|             'month=' + monthNumber) |  | ||||||
|             .then((res) => { |  | ||||||
|                 return res.json() |  | ||||||
|             }) |  | ||||||
|     }", |  | ||||||
|     'getColor' => "function (date, dates = null) { |  | ||||||
|         for (let contentDate of dates) { |  | ||||||
|             if (contentDate['dob'].substr(8, 2) == DateHelper.intToDate(date.getDate())) { |  | ||||||
|                 return 'success'; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }", |  | ||||||
|     'getHtmlContentForDate' => 'function (content, date) { |  | ||||||
|         let flag = false |  | ||||||
|         let html = `<table class="table table-striped table-bordered"> |  | ||||||
|     <thead> |  | ||||||
|     <tr> |  | ||||||
|         <th>#</th> |  | ||||||
|         <th>ФИО</th> |  | ||||||
|         <th>Дата рождения</th> |  | ||||||
|         <th class="action-column"> </th> |  | ||||||
|     </tr> |  | ||||||
|     </thead><tbody>`; |  | ||||||
|         for (let i = 1; i <= content.length; i++) { |  | ||||||
|             let model = content[i - 1]; |  | ||||||
|             if (model["dob"].substr(8, 2) == date.substr(8, 2)) { |  | ||||||
|                 flag = true; |  | ||||||
|                 html += `<tr data-key="${model["id"]}">` |  | ||||||
|                 html += `<td>${i}</td>` |  | ||||||
|                 html += `<td>${model["fio"]}</td>` |  | ||||||
|                 html += `<td>${model["dob"]}</td>` |  | ||||||
|                 html += CalendarHelper._getActionColumn(`secure/calendar/calendar`,model[`id`]) |  | ||||||
|                 html += `</tr>` |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         html += `</tbody></table>` |  | ||||||
|         if (flag) return html; |  | ||||||
|         return "empty" |  | ||||||
|     }' |  | ||||||
| ]) ?> |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1,45 +1,25 @@ | |||||||
| <?php | <?php | ||||||
|  |  | ||||||
| /* @var $searchModel backend\modules\card\models\UserCardSearch */ |  | ||||||
| /* @var $dataProvider yii\data\ActiveDataProvider */ |  | ||||||
|  |  | ||||||
| use yii\grid\GridView; |  | ||||||
| use yii\helpers\Html; | use yii\helpers\Html; | ||||||
| use yii\widgets\Pjax; | use yii\helpers\Url; | ||||||
|  |  | ||||||
|  | $this->title = 'Календарь ДР'; | ||||||
| ?> | ?> | ||||||
| <div style="display: flex;align-items: flex-start;"> | <?= \backend\widgets\Calendar::widget([ | ||||||
| <p> |  | ||||||
|     <select id="options" class="btn btn-secondary dropdown-toggle"> |     'css' => '.success{color: orange;}', | ||||||
|         <option selected="selected" value="?month=00">Выберите месяц</option> |  | ||||||
|         <option value="?month=00">Показать все</option> |     'button' => Html::a('<i class="fa fa-table" aria-hidden="true"></i> Таблица', | ||||||
|         <option value="?month=01">январь</option> |         ['table'], ['class' => 'btn btn-primary',]), | ||||||
|         <option value="?month=02">февраль</option> |  | ||||||
|         <option value="?month=03">март</option> |     'monthUpdate' => [ | ||||||
|         <option value="?month=04">апрель</option> |         'url' => Url::base() . '/calendar/ajax/get-birthday-dates-by-month' | ||||||
|         <option value="?month=05">май</option> |  | ||||||
|         <option value="?month=06">июнь</option> |  | ||||||
|         <option value="?month=07">июль</option> |  | ||||||
|         <option value="?month=08">август</option> |  | ||||||
|         <option value="?month=09">сентябрь</option> |  | ||||||
|         <option value="?month=10">октябрь</option> |  | ||||||
|         <option value="?month=11">ноябрь</option> |  | ||||||
|         <option value="?month=12">декабрь</option> |  | ||||||
|     </select> |  | ||||||
| </p> |  | ||||||
| <?=Html::a('Календарь дней рождений '.Html::tag('i', null, ['class' => 'far fa-calendar-alt']), |  | ||||||
|     ['calendar'], ['class' => 'btn btn-success', 'style' => 'margin-left: 10px'])?> |  | ||||||
| </div> |  | ||||||
| <?php |  | ||||||
| Pjax::begin(['id' => 'reload']); |  | ||||||
| echo GridView::widget([ |  | ||||||
|     'dataProvider' => $dataProvider, |  | ||||||
|     'filterModel' => $searchModel, |  | ||||||
|     'columns' => [ |  | ||||||
|         ['class' => 'yii\grid\SerialColumn'], |  | ||||||
|         'fio', |  | ||||||
|         'dob', |  | ||||||
|         ['class' => 'yii\grid\ActionColumn'], |  | ||||||
|     ], |     ], | ||||||
| ]); |     'dayUpdate' => [ | ||||||
| Pjax::end(); |         'url' => Url::base() . '/calendar/ajax/get-birthday-date' | ||||||
| ?> |     ], | ||||||
|  |     'colorClasses' => ['accept' => 'success', 'default' => '', 'offDay' => ''], | ||||||
|  |     'offDaysShow' => 0, | ||||||
|  |  | ||||||
|  | ]) ?> | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								backend/modules/calendar/views/calendar/table.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								backend/modules/calendar/views/calendar/table.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | /* @var $searchModel backend\modules\card\models\UserCardSearch */ | ||||||
|  | /* @var $dataProvider yii\data\ActiveDataProvider */ | ||||||
|  |  | ||||||
|  | use yii\grid\GridView; | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\widgets\Pjax; | ||||||
|  | ?> | ||||||
|  | <div style="display: flex;align-items: flex-start;"> | ||||||
|  | <p> | ||||||
|  |     <select id="options" class="btn btn-secondary dropdown-toggle"> | ||||||
|  |         <option selected="selected" value="?month=00">Выберите месяц</option> | ||||||
|  |         <option value="?month=00">Показать все</option> | ||||||
|  |         <option value="?month=01">январь</option> | ||||||
|  |         <option value="?month=02">февраль</option> | ||||||
|  |         <option value="?month=03">март</option> | ||||||
|  |         <option value="?month=04">апрель</option> | ||||||
|  |         <option value="?month=05">май</option> | ||||||
|  |         <option value="?month=06">июнь</option> | ||||||
|  |         <option value="?month=07">июль</option> | ||||||
|  |         <option value="?month=08">август</option> | ||||||
|  |         <option value="?month=09">сентябрь</option> | ||||||
|  |         <option value="?month=10">октябрь</option> | ||||||
|  |         <option value="?month=11">ноябрь</option> | ||||||
|  |         <option value="?month=12">декабрь</option> | ||||||
|  |     </select> | ||||||
|  | </p> | ||||||
|  | <?=Html::a('Календарь дней рождений '.Html::tag('i', null, ['class' => 'far fa-calendar-alt']), | ||||||
|  |     ['index'], ['class' => 'btn btn-success', 'style' => 'margin-left: 10px'])?> | ||||||
|  | </div> | ||||||
|  | <?php | ||||||
|  | Pjax::begin(['id' => 'reload']); | ||||||
|  | echo GridView::widget([ | ||||||
|  |     'dataProvider' => $dataProvider, | ||||||
|  |     'filterModel' => $searchModel, | ||||||
|  |     'columns' => [ | ||||||
|  |         ['class' => 'yii\grid\SerialColumn'], | ||||||
|  |         'fio', | ||||||
|  |         'dob', | ||||||
|  |         ['class' => 'yii\grid\ActionColumn'], | ||||||
|  |     ], | ||||||
|  | ]); | ||||||
|  | Pjax::end(); | ||||||
|  | ?> | ||||||
| @@ -66,6 +66,13 @@ class UserCardSearch extends UserCard | |||||||
|         if (isset($params['month'])) { |         if (isset($params['month'])) { | ||||||
|             $query->andFilterWhere(['=', 'MONTH(dob)', $params['month']]); |             $query->andFilterWhere(['=', 'MONTH(dob)', $params['month']]); | ||||||
|         } |         } | ||||||
|  |         if (isset($params['day'])) { | ||||||
|  |             $query->andFilterWhere(['=', 'DAY(dob)', $params['day']]); | ||||||
|  |         } | ||||||
|  |         if (isset($params['date'])) { | ||||||
|  |             $query->andFilterWhere(['=', 'MONTH(dob)', substr($params['date'], 5,2)]); | ||||||
|  |             $query->andFilterWhere(['=', 'DAY(dob)', substr($params['date'],8,2)]); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         // grid filtering conditions |         // grid filtering conditions | ||||||
|         $query->andFilterWhere([ |         $query->andFilterWhere([ | ||||||
|   | |||||||
| @@ -2,35 +2,29 @@ | |||||||
|  |  | ||||||
| namespace backend\modules\reports\controllers; | namespace backend\modules\reports\controllers; | ||||||
|  |  | ||||||
| use backend\modules\reports\models\Month; |  | ||||||
| use Yii; | use Yii; | ||||||
| use backend\modules\reports\models\ReportsSearch; | use backend\modules\reports\models\ReportsSearch; | ||||||
| use yii\helpers\ArrayHelper; |  | ||||||
| use yii\web\Response; | use yii\web\Response; | ||||||
|  |  | ||||||
| class AjaxController extends \yii\web\Controller | class AjaxController extends \yii\web\Controller | ||||||
| { | { | ||||||
|  |  | ||||||
|     public function actionGetReportsForMonthByIdYearMonth($user_id, $year, $month){ |     public function actionGetReportsForDayByDate($user_id, $date) | ||||||
|  |     { | ||||||
|  |         $searchModel = new ReportsSearch(); | ||||||
|  |         $params = ['ReportsSearch' => ['created_at' => $date], 'user_id' => $user_id]; | ||||||
|  |         $dataProvider = $searchModel->search($params); | ||||||
|  |         return $this->render('_gridView', [ | ||||||
|  |             'dataProvider' => $dataProvider | ||||||
|  |         ]); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function actionGetReportsForMonthByIdYearMonth($user_id, $year, $month) | ||||||
|  |     { | ||||||
|         $searchModel = new ReportsSearch(); |         $searchModel = new ReportsSearch(); | ||||||
|         $dataProvider = $searchModel->search(Yii::$app->request->queryParams); |         $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | ||||||
|         $reports_array = ArrayHelper::toArray($dataProvider->getModels(), [ |         $reports_array = array_column($dataProvider->getModels(), 'created_at'); | ||||||
|             'common\models\Reports' => [ |  | ||||||
|                 'id', |  | ||||||
|                 'created_at', |  | ||||||
|                 'difficulties', |  | ||||||
|                 'tomorrow', |  | ||||||
|                 'user_card_id', |  | ||||||
|                 'today' => function ($report) { |  | ||||||
|                     return ArrayHelper::toArray($report->task, [ |  | ||||||
|                         'common\models\ReportsTask' => [ |  | ||||||
|                             'hours_spent', |  | ||||||
|                             'task' |  | ||||||
|                         ], |  | ||||||
|                     ]); |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|         ]); |  | ||||||
|  |  | ||||||
|         $response = Yii::$app->response; |         $response = Yii::$app->response; | ||||||
|         $response->format = Response::FORMAT_JSON; |         $response->format = Response::FORMAT_JSON; | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								backend/modules/reports/views/ajax/_gridView.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								backend/modules/reports/views/ajax/_gridView.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | use yii\grid\GridView; | ||||||
|  |  | ||||||
|  | /* @var $this yii\web\View */ | ||||||
|  | /* @var $dataProvider yii\data\ActiveDataProvider */ | ||||||
|  |  | ||||||
|  | echo GridView::widget([ | ||||||
|  |     'dataProvider' => $dataProvider, | ||||||
|  |     'columns' => [ | ||||||
|  |         ['class' => 'yii\grid\SerialColumn'], | ||||||
|  |         [ | ||||||
|  |             'attribute' => 'today', | ||||||
|  |             'format' => 'raw', | ||||||
|  |             'value' => function ($model) { | ||||||
|  |  | ||||||
|  |                 $text = ''; | ||||||
|  |                 if ($model->task) { | ||||||
|  |                     $i = 1; | ||||||
|  |                     foreach ($model->task as $task) { | ||||||
|  |                         $text .= "<p>$i. ($task->hours_spent ч.) $task->task</p>"; | ||||||
|  |                         $i++; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return $text; | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         'difficulties', | ||||||
|  |         'tomorrow', | ||||||
|  |         ['class' => 'yii\grid\ActionColumn'], | ||||||
|  |     ], | ||||||
|  | ]); | ||||||
|  | die(); | ||||||
|  |  | ||||||
| @@ -2,6 +2,7 @@ | |||||||
|  |  | ||||||
| use backend\widgets\Calendar; | use backend\widgets\Calendar; | ||||||
| use yii\helpers\Html; | use yii\helpers\Html; | ||||||
|  | use yii\helpers\Url; | ||||||
|  |  | ||||||
| /* @var $this yii\web\View */ | /* @var $this yii\web\View */ | ||||||
| /* @var $fio */ | /* @var $fio */ | ||||||
| @@ -10,80 +11,20 @@ use yii\helpers\Html; | |||||||
| $this->title = 'Календарь пользователя - ' . $fio; | $this->title = 'Календарь пользователя - ' . $fio; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| <?=Calendar::widget([ | <?= Calendar::widget([ | ||||||
|  |  | ||||||
|     'button' => Html::a('<i class="fas fa-long-arrow-alt-left"></i> Назад', |     'button' => Html::a('<i class="fas fa-long-arrow-alt-left"></i> Назад', | ||||||
|         Yii::$app->request->referrer, ['class' => 'btn btn-primary',]), |         Yii::$app->request->referrer, ['class' => 'btn btn-primary',]), | ||||||
|  |  | ||||||
|     'runBuild' => "function (date, content){ |     'monthUpdate' => [ | ||||||
|         contentDays = [] |         'url' => Url::base() . '/reports/ajax/get-reports-for-month-by-id-year-month', | ||||||
|         for (let item of content){ |         'data' => ['user_id' => $USER_ID] | ||||||
|             contentDays.push(item['created_at']) |     ], | ||||||
|         } |     'dayUpdate' => [ | ||||||
|         this.build(date, contentDays) |         'url' => Url::base() . '/reports/ajax/get-reports-for-day-by-date', | ||||||
|     }", |         'data' => ['user_id' => $USER_ID] | ||||||
|  |         ], | ||||||
|  |     'colorClasses' => ['accept' => 'success', 'default' => 'danger', 'offDay' => ''], | ||||||
|  |     'offDaysShow' => 1, | ||||||
|  |  | ||||||
|     'updateContent' => "function(date){ |  | ||||||
|         let monthNumber = date.substr(5, 2); |  | ||||||
|         let yearNumber = date.substr(0, 4); |  | ||||||
|         return fetch('../ajax/get-reports-for-month-by-id-year-month?user_id='+".$USER_ID."+ |  | ||||||
|             '&month=' + monthNumber + |  | ||||||
|             '&year=' + yearNumber) |  | ||||||
|         .then((res) => { |  | ||||||
|             return res.json() |  | ||||||
|         }) |  | ||||||
|     }", |  | ||||||
|  |  | ||||||
|     'getColor' => "function (date, dates = null) { |  | ||||||
|         let d = date; |  | ||||||
|         if ([6, 0].includes(d.getDay())) |  | ||||||
|             return; |  | ||||||
|         for (let i = 0; i < dates.length; i++) { |  | ||||||
|             if (dates[i] == DateHelper.dateToString(date)) { |  | ||||||
|                 return 'success'; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return 'danger'; |  | ||||||
|     }", |  | ||||||
|  |  | ||||||
|     'getHtmlContentForDate' => "function (content, date) { |  | ||||||
|         if ([0, 6].includes(new Date(date).getDay())) { |  | ||||||
|             return 'Выходной день'; |  | ||||||
|         } |  | ||||||
|         let j = 0; |  | ||||||
|         let html = `<ul class='sidebar__list'> |  | ||||||
|                 <table class='table table-striped table-bordered'> |  | ||||||
|                     <thead> |  | ||||||
|                     <tr> |  | ||||||
|                         <th>#</th> |  | ||||||
|                         <th>Что было сделано сегодня?</th> |  | ||||||
|                         <th>Какие сложности возникли?</th> |  | ||||||
|                         <th>Что планируется сделать завтра?</th> |  | ||||||
|                         <th class='action-column'> </th> |  | ||||||
|                     </tr> |  | ||||||
|                     </thead> |  | ||||||
|                     <tbody>`; |  | ||||||
|         for (let k = 0, i = 0; i < content.length; i++) { |  | ||||||
|             let report = content[i]; |  | ||||||
|             if (report['created_at'] == date) { |  | ||||||
|                 k++; |  | ||||||
|                 html += `<tr data-key='\${report['id']}'> |  | ||||||
|                     <td>\${k}</td><td>`; |  | ||||||
|                      |  | ||||||
|                 for (j = 0; j < Object.keys(report['today']).length; j++) { |  | ||||||
|                     html += `<p>\${j + 1}. (\${report['today'][j]['hours_spent']} ч.) |  | ||||||
| \${report['today'][j]['task']}</p>` |  | ||||||
|                 } |  | ||||||
|                  |  | ||||||
|                 html += `</td> |  | ||||||
|                     <td>\${report['difficulties']}</td> |  | ||||||
|                     <td>\${report['tomorrow']}</td> |  | ||||||
|                     \${CalendarHelper._getActionColumn(`/secure/reports/reports`, report['id'])}`; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         if (j == 0) { |  | ||||||
|             return 'За этот день не было отчетов'; |  | ||||||
|         } |  | ||||||
|         return html; |  | ||||||
|     }" |  | ||||||
| ]) ?> | ]) ?> | ||||||
|   | |||||||
| @@ -13,30 +13,13 @@ class Calendar extends Widget | |||||||
|  |  | ||||||
|     public $css; |     public $css; | ||||||
|  |  | ||||||
|     public $runBuild = 'function (date, content){ |     public $dayUpdate; | ||||||
|         this.build(date, content) |  | ||||||
|     }'; |  | ||||||
|  |  | ||||||
|     public $updateContent = "function(){ |     public $monthUpdate; | ||||||
|         return []; |  | ||||||
|         /* |  | ||||||
|         Example, return [model1, model2, model3 , ...] :  |  | ||||||
|          |  | ||||||
|         let monthNumber = date.substr(5, 2); |  | ||||||
|         return fetch('../ajax/get-birthday-by-month?' + |  | ||||||
|             'month=' + monthNumber) |  | ||||||
|             .then((res) => { |  | ||||||
|                 return res.json() |  | ||||||
|             })*/ |  | ||||||
|     }"; |  | ||||||
|  |  | ||||||
|     public $getColor = "function (date, dates = null) { |     public $colorClasses = ['accept' => 'access', 'default' => 'danger', 'offDay' => '']; | ||||||
|         return `className`;  |  | ||||||
|         }"; |  | ||||||
|  |  | ||||||
|     public $getHtmlContentForDate = 'function (content, date) { |     public $offDaysShow = 1; | ||||||
|         return `<div class="content">${content}</div>`; |  | ||||||
|     }'; |  | ||||||
|  |  | ||||||
|     public $script = 'CalendarHelper.main()'; |     public $script = 'CalendarHelper.main()'; | ||||||
|  |  | ||||||
| @@ -62,12 +45,59 @@ class Calendar extends Widget | |||||||
|             echo Html::beginTag('section', ['class' => 'calendar__days']); |             echo Html::beginTag('section', ['class' => 'calendar__days']); | ||||||
|             echo Html::endTag('section'); |             echo Html::endTag('section'); | ||||||
|         echo Html::endTag('section'); |         echo Html::endTag('section'); | ||||||
|  |  | ||||||
|         $this->view->registerJs(' |         $this->view->registerJs(' | ||||||
|             CalendarHelper._runBuild = ' . $this->runBuild . '; |             CalendarHelper._getDayContent = async function(date){ | ||||||
|             CalendarHelper._getHtmlContentForDate = ' . $this->getHtmlContentForDate . '; |                 let url =  `'.$this->dayUpdate['url'].'?`; | ||||||
|             CalendarHelper._updateContent = async ' . $this->updateContent . '; |                 '.(isset($this->dayUpdate['data'])?' | ||||||
|             CalendarHelper._getColor = ' . $this->getColor . '; |                 let data = '.json_encode($this->dayUpdate['data']):' | ||||||
|  |                 let data = {}; | ||||||
|  |                     ').' | ||||||
|  |                 if(Object.keys(data).length){ | ||||||
|  |                     for (let key in data){ | ||||||
|  |                         url += key+`=`+ data[key]+`&` | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return fetch(url+ | ||||||
|  |                 `date=` + DateHelper.dateToString(date)) | ||||||
|  |                 .then((res) => { | ||||||
|  |                     return res.text() | ||||||
|  |                 }) | ||||||
|  |             }; | ||||||
|  |              | ||||||
|  |              | ||||||
|  |             CalendarHelper._getMonth = async function(month, year){ | ||||||
|  |                 let url =  `'.$this->monthUpdate['url'].'?`; | ||||||
|  |                 '.(isset($this->monthUpdate['data'])?' | ||||||
|  |                 let data = '.json_encode($this->monthUpdate['data']):' | ||||||
|  |                 let data = {}; | ||||||
|  |                     ').' | ||||||
|  |                 if(Object.keys(data).length){ | ||||||
|  |                     for (let key in data){ | ||||||
|  |                         url += key+`=`+ data[key]+`&` | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 return fetch(url+ | ||||||
|  |                 `&month=` + month + | ||||||
|  |                 `&year=` + year) | ||||||
|  |                 .then((res) => { | ||||||
|  |                     return res.json() | ||||||
|  |                 }) | ||||||
|  |             }; | ||||||
|  |              | ||||||
|  |             CalendarHelper._getColor = function (date, dates = null) { | ||||||
|  |             if ('.$this->offDaysShow.') | ||||||
|  |                     if ([6, 0].includes(date.getDay())) | ||||||
|  |                         return `'.$this->colorClasses['offDay'].'`; | ||||||
|  |                          | ||||||
|  |                 for (let i = 0; i<dates.length; i++){ | ||||||
|  |                     if (dates[i] == DateHelper.dateToString(date)){ | ||||||
|  |                         return `'.$this->colorClasses['accept'].'` | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |                 return `'.$this->colorClasses['default'].'`; | ||||||
|  |             } | ||||||
|  |              | ||||||
|              |              | ||||||
|             '.$this->script |             '.$this->script | ||||||
|         ); |         ); | ||||||
|   | |||||||
| @@ -48,42 +48,44 @@ class CalendarHelper { | |||||||
|         let nameDateBoard = document.querySelector('.sidebar__heading'); |         let nameDateBoard = document.querySelector('.sidebar__heading'); | ||||||
|         let contentBoard = document.querySelector('.sidebar__list'); |         let contentBoard = document.querySelector('.sidebar__list'); | ||||||
|  |  | ||||||
|         this._updateContent(datePicker.value) |         this._getMonth(datePicker.value.substr(5, 2), datePicker.value.substr(0, 4)) | ||||||
|             .then(content => { |             .then(dates => { | ||||||
|  |  | ||||||
|                 this._runBuild(DateHelper.stringToDate(datePicker.value), content) |                 this.build(DateHelper.stringToDate(datePicker.value), dates) | ||||||
|  |  | ||||||
|                 datePicker.onchange = function (day = null) { |                 datePicker.onchange = async function (day = null) { | ||||||
|                     let days = document.querySelectorAll('.calendar__day ') |                     let days = document.querySelectorAll('.calendar__day ') | ||||||
|  |  | ||||||
|                     for (let i = 0; i < days.length; i++) { |                     for (let i = 0; i < days.length; i++) { | ||||||
|                         if (parseInt(days[i].textContent)===parseInt(datePicker.value.substr(8,2))){ |                         if (parseInt(days[i].textContent) === parseInt(datePicker.value.substr(8, 2)) && | ||||||
|  |                             !days[i].classList.contains('inactive')) { | ||||||
|                             days[i].classList.add('active_day') |                             days[i].classList.add('active_day') | ||||||
|                         } else |                         } else if (days[i].classList.contains('active_day')) | ||||||
|                         if (days[i].classList.contains('active_day')) |  | ||||||
|                             days[i].classList.remove('active_day') |                             days[i].classList.remove('active_day') | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     if (!CalendarHelper.isOldDatePicker(datePicker, oldDate)) { |                     if (!CalendarHelper.isOldDatePicker(datePicker, oldDate)) { | ||||||
|                         oldDate = datePicker.value.substr(0, 7); |                         oldDate = datePicker.value.substr(0, 7); | ||||||
|  |  | ||||||
|                         CalendarHelper._updateContent(datePicker.value) |                         CalendarHelper._getMonth(datePicker.value.substr(5, 2), datePicker.value.substr(0, 4)) | ||||||
|                             .then(content => { |                             .then(dates => { | ||||||
|  |  | ||||||
|                                 CalendarHelper.main(day) |                                 CalendarHelper.main(day) | ||||||
|                                 let date = new Date(datePicker.value); |                                 let date = new Date(datePicker.value); | ||||||
|                                 let monthName = date.toLocaleString('default', {month: 'long'}); |                                 let monthName = date.toLocaleString('default', {month: 'long'}); | ||||||
|                                 let dayWeekName = date.toLocaleString('default', {weekday: 'long'}); |                                 let dayWeekName = date.toLocaleString('default', {weekday: 'long'}); | ||||||
|                                 nameDateBoard.innerHTML = `${dayWeekName} <br>${monthName} ${datePicker.value.substr(8, 2)}`; |                                 nameDateBoard.innerHTML = `${dayWeekName} <br>${monthName} ${datePicker.value.substr(8, 2)}`; | ||||||
|                                 contentBoard.innerHTML = CalendarHelper._getHtmlContentForDate(content, datePicker.value) |                                 contentBoard.innerHTML = CalendarHelper._getHtmlContentForDate(dates, datePicker.value) | ||||||
|                             }) |                             }) | ||||||
|  |  | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|  |  | ||||||
|                     let date = new Date(datePicker.value); |                     let date = new Date(datePicker.value); | ||||||
|                     let monthName = date.toLocaleString('default', {month: 'long'}); |                     let monthName = date.toLocaleString('default', {month: 'long'}); | ||||||
|                     let dayWeekName = date.toLocaleString('default', {weekday: 'long'}); |                     let dayWeekName = date.toLocaleString('default', {weekday: 'long'}); | ||||||
|                     nameDateBoard.innerHTML = `${dayWeekName} <br>${monthName} ${datePicker.value.substr(8, 2)}`; |                     nameDateBoard.innerHTML = `${dayWeekName} <br>${monthName} ${datePicker.value.substr(8, 2)}`; | ||||||
|                     contentBoard.innerHTML = CalendarHelper._getHtmlContentForDate(content, datePicker.value) |                     contentBoard.innerHTML = await CalendarHelper._getDayContent(date) | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 let days = document.querySelectorAll('.calendar__day'); |                 let days = document.querySelectorAll('.calendar__day'); | ||||||
| @@ -125,10 +127,9 @@ class CalendarHelper { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     static |     static | ||||||
|     async _updateContent(date) { |     async _getMonth(month, year) { | ||||||
|         let monthNumber = date.substr(5, 2); |  | ||||||
|         return fetch('../ajax/get-birthday-by-month?' + |         return fetch('../ajax/get-birthday-by-month?' + | ||||||
|             'month=' + monthNumber) |             'month=' + month) | ||||||
|             .then((res) => { |             .then((res) => { | ||||||
|                 return res.json() |                 return res.json() | ||||||
|             }) |             }) | ||||||
| @@ -156,13 +157,19 @@ class CalendarHelper { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     static _getColor(date, dates = null) { |     static _getColor(date, dates = null) { | ||||||
|         if (dates != null && dates.includes(DateHelper.dateToString(date))) { |         if (dates == null || dates.length == 0) { | ||||||
|             return 'success'; |             return ``; | ||||||
|         } |         } | ||||||
|         if ([6, 0].includes(date.getDay())) |         for (dateContent of dates){ | ||||||
|             return; |             if (dateContent['date'] == date){ | ||||||
|  |                 return dateContent['class']; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return ``; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     static async _getDayContent(date){ | ||||||
|  |  | ||||||
|         return 'danger'; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     static _getFutureDate(dat, value) { |     static _getFutureDate(dat, value) { | ||||||
| @@ -218,3 +225,5 @@ class CalendarHelper { | |||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 GitHub
						GitHub