ScheduleController.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Helpers\DateHelper;
  4. use App\Models\Order;
  5. use App\Models\OrderStatus;
  6. use Illuminate\Http\Request;
  7. class ScheduleController extends Controller
  8. {
  9. protected array $data = [
  10. 'active' => 'reports',
  11. 'title' => 'Отчёты',
  12. 'id' => 'reports',
  13. ];
  14. public function index(Request $request)
  15. {
  16. $this->data['weekNumber'] = $request->get('week' ,date('W'));
  17. $weekDates = [
  18. 'mon' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber']),
  19. 'tue' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 2),
  20. 'wed' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 3),
  21. 'thu' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 4),
  22. 'fri' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 5),
  23. 'sat' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 6),
  24. 'sun' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 7),
  25. ];
  26. $this->data['weekDates'] = $weekDates;
  27. $maxInstallDays = Order::query()->max('install_days');
  28. $from = date('Y-m-d', strtotime($weekDates['mon']) - $maxInstallDays * 86400);
  29. $orders = Order::query()
  30. ->whereNotNull('installation_date')
  31. ->whereNotNull('brigadier_id')
  32. ->whereBetween('installation_date', [$from , $weekDates['sun'] ])
  33. ->where('order_status_id', 5)
  34. ->orderBy('installation_date')
  35. ->orderBy('brigadier_id')
  36. ->get();
  37. $schedules = [];
  38. foreach ($weekDates as $wd)
  39. $schedules[$wd] = null;
  40. foreach ($orders as $order) {
  41. for ($iDays = 1; $iDays < $order->install_days + 1; $iDays++) {
  42. $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($order->installation_date)));
  43. if(in_array($instDate, $weekDates)) {
  44. $schedules[$instDate][] = $order;
  45. }
  46. }
  47. }
  48. $this->data['schedules'] = $schedules;
  49. return view('schedule.index', $this->data);
  50. }
  51. }