Пишутся смены в определенномпорядке, только с фильтрацией не понятно как обстоят дела, то есть нужно посмотреть расписание сотрудников по магазинам за прошлую неделю, или другую неделю, только я я не пойму как эт организовать если выбрал пользователь за предыдущий месяц.
Вот моя реализация обычно без фильтров обычная статика можно назвать
<?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; ?>
Я сейчас пробую через searchModel то у меня встал в ступор, как днии недели формировать в dataProvider
То примерно моя релизация была следующая
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,
]);
//И тд
И в foreach я выводит
$dataProvider->weekDay
то не получается, как мне быть в этом плане?