| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?php
- namespace App\Http\Controllers;
- use App\Helpers\DateHelper;
- use App\Models\Order;
- use App\Models\OrderStatus;
- use Illuminate\Http\Request;
- class ScheduleController extends Controller
- {
- protected array $data = [
- 'active' => 'reports',
- 'title' => 'Отчёты',
- 'id' => 'reports',
- ];
- public function index(Request $request)
- {
- $this->data['weekNumber'] = $request->get('week' ,date('W'));
- $weekDates = [
- 'mon' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber']),
- 'tue' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 2),
- 'wed' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 3),
- 'thu' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 4),
- 'fri' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 5),
- 'sat' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 6),
- 'sun' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 7),
- ];
- $this->data['weekDates'] = $weekDates;
- $maxInstallDays = Order::query()->max('install_days');
- $from = date('Y-m-d', strtotime($weekDates['mon']) - $maxInstallDays * 86400);
- $orders = Order::query()
- ->whereNotNull('installation_date')
- ->whereNotNull('brigadier_id')
- ->whereBetween('installation_date', [$from , $weekDates['sun'] ])
- ->where('order_status_id', 5)
- ->orderBy('installation_date')
- ->orderBy('brigadier_id')
- ->get();
- $schedules = [];
- foreach ($weekDates as $wd)
- $schedules[$wd] = null;
- foreach ($orders as $order) {
- for ($iDays = 1; $iDays < $order->install_days + 1; $iDays++) {
- $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($order->installation_date)));
- if(in_array($instDate, $weekDates)) {
- $schedules[$instDate][] = $order;
- }
- }
- }
- $this->data['schedules'] = $schedules;
- return view('schedule.index', $this->data);
- }
- }
|