Answer the question
In order to leave comments, you need to log in
I can't figure out how to filter the calendar?
Shifts are written in a certain order, only with filtering it’s not clear how things are going, that is, you need to look at the schedule of employees in stores for the past week, or another week, but I don’t understand how to organize it if the user chose the previous month.
Here is my implementation usually without filters the usual statics can be called
<?php //Выводит все смены по магазинам с понедельника по восресение
function day($shop_id, $day){
return Shifts::find()->andWhere(['shop_id' => $shop_id, 'date' => date('Y-m-d 00:00:00', strtotime($day))])->all();
}
//Ввыводит сотрудиков всех учитывая в каком магазине от работал. Формат начало смены, конец смены и фамилия и имя сотрудника
function cell($start, $end, $employee){
echo Yii::$app->formatter->asTime($start, 'php:H:i').'-'.Yii::$app->formatter->asTime($end, 'php:H:i').' '.Html::a($employee->user->lastNameEmployee, ['shifts/update', 'id' => $employee->id], ['class' => 'button-editShifts', 'data-pjax' => 0]).'<br>';
}
$weekDay = [
'Пн' => 'last Monday',
'Вт' => 'last Tuesday',
'Ср' => 'last Wednesday',
'Чт' => 'Thursday',
'Пт' => 'Friday',
'Сб' => 'Saturday',
'Вс' => 'Sunday',
]?>
<?php foreach ($weekDay as $shortname => $time): ?>
//Формирует столбцы недель с пн по вс
<th><?= $shortname ?> <?= date('d.m', strtotime($time)) ?></th>
<?php endforeach; ?>
<?php foreach ($shops as $shop) : ?>
//Формирует строку магазина
<tr>
<td><?= $shop->name ?></td>
<?php foreach ($weekDay as $time): ?>
// Формирует всех сотрудников которые работаю в магазине данном
<td>
<?php $emloyeeDate = array_map(function (Shifts $employee) {return cell($employee->start_time, $employee->end_time, $employee); }, day($shop->id, $time));
echo implode('<br>', $emloyeeDate)
?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
class ShiftsSearch extends Shifts
{
public $weekDay = [
'Пн' => 'last Monday',
'Вт' => 'last Tuesday',
//И тд
];
public function search($params)
{
function day($shop_id, $day){
return Shifts::find()->andWhere(['shop_id' => $shop_id, 'date' => date('Y-m-d 00:00:00', strtotime($day))])->all();
}
function cell($start, $end, $employee){
echo Yii::$app->formatter->asTime($start, 'php:H:i').'-'.Yii::$app->formatter->asTime($end, 'php:H:i').' '.Html::a($employee->user->lastNameEmployee, ['shifts/update', 'id' => $employee->id], ['class' => 'button-editShifts', 'data-pjax' => 0]).'<br>';
}
if ($this->date){
$weekDay = [
'Пн' => $this->date.' Monday',
'Вт' => $this->date.'last Tuesday',
'Ср' => $this->date.'last Wednesday',
'Чт' => $this->date + 1 .'Thursday',
'Пт' => $this->date + 1 .'Friday',
'Сб' => $this->date + 1 .'Saturday',
'Вс' => $this->date + 1 .'Sunday',
];
}
$query = Shifts::find()->andWhere('between', 'date', date('Y-m-d', strtotime($this->weekDay['Пн'])), date('Y-m-d', strtotime($this->weekDay['Вс'])));
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
//И тд
$dataProvider->weekDay
something that doesn’t work, how can I be in this regard?
Answer the question
In order to leave comments, you need to log in
А зачем dataProvider-у знать про дни недели? Вам надо любым способом вычислить диапазон и сформировать запрос, запрос передать в дата провайдер.
Я так понимаю на фронте ставите любой виджет для выбора диапазона дат, неделя тм будет или 2 дня - это выбор пользователя, зачем его ограничивать? Соответственно у Вас в запрос попадает две даты, а далее $query->andFilterWhere
как в стандартной search модели
Я не понимаю зачем Вы с днями недели завязались? Если надо выводить все товары проданные во вторник (любой за все время) - тогда понятно. А если это некий диапазон дат, то есть дата начала и конца.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question