H
H
hollanditkzn2018-03-23 14:29:09
Yii
hollanditkzn, 2018-03-23 14:29:09

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; ?>

I am now trying through the searchModel, then I got into a stupor, how to form the days of the week in the dataProvider
Then, approximately, my release was as follows
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,
        ]);
//И тд

And in foreach I output $dataProvider->weekDaysomething that doesn’t work, how can I be in this regard?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Maxim Timofeev, 2018-03-23
@webinar

А зачем dataProvider-у знать про дни недели? Вам надо любым способом вычислить диапазон и сформировать запрос, запрос передать в дата провайдер.
Я так понимаю на фронте ставите любой виджет для выбора диапазона дат, неделя тм будет или 2 дня - это выбор пользователя, зачем его ограничивать? Соответственно у Вас в запрос попадает две даты, а далее $query->andFilterWhere как в стандартной search модели
Я не понимаю зачем Вы с днями недели завязались? Если надо выводить все товары проданные во вторник (любой за все время) - тогда понятно. А если это некий диапазон дат, то есть дата начала и конца.

Дмитрий, 2018-03-23
@slo_nik Куратор тега Yii

Добрый день.
Как у Вас выводится дата в фильтре?
Посмотрите мой ответ на похожий вопрос. Там речь идёт о времени, но Вы легко переделаете на фильтр даты.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question