ScheduleController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Helpers\DateHelper;
  4. use App\Http\Requests\CreateScheduleFromOrderRequest;
  5. use App\Models\Order;
  6. use App\Models\Schedule;
  7. use Illuminate\Http\Request;
  8. class ScheduleController extends Controller
  9. {
  10. protected array $data = [
  11. 'active' => 'schedule',
  12. 'title' => 'График монтажей',
  13. 'id' => 'schedule',
  14. ];
  15. public function index(Request $request)
  16. {
  17. $this->data['weekNumber'] = $request->get('week' ,date('W'));
  18. $weekDates = [
  19. 'mon' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber']),
  20. 'tue' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 2),
  21. 'wed' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 3),
  22. 'thu' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 4),
  23. 'fri' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 5),
  24. 'sat' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 6),
  25. 'sun' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 7),
  26. ];
  27. $this->data['weekDates'] = $weekDates;
  28. $schedules = [];
  29. foreach ($weekDates as $date) {
  30. $schedules[$date] = null;
  31. }
  32. $result = Schedule::query()
  33. ->whereBetween('installation_date', [$weekDates['mon'], $weekDates['sun']])
  34. ->get();
  35. foreach ($result as $schedule) {
  36. $schedules[$schedule->installation_date][] = $schedule;
  37. }
  38. $this->data['schedules'] = $schedules;
  39. return view('schedule.index', $this->data);
  40. }
  41. public function createFromOrder(CreateScheduleFromOrderRequest $request)
  42. {
  43. $validated = $request->validated();
  44. // delete all auto schedules for this order
  45. Schedule::query()
  46. ->where('order_id', $validated['order_id'])
  47. ->where('manual', false)
  48. ->delete();
  49. // create all records in schedule
  50. $order = Order::query()
  51. ->where('id', $validated['order_id'])
  52. ->first();
  53. for ($iDays = 1; $iDays < $order->install_days + 1; $iDays++) {
  54. $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($order->installation_date)));
  55. Schedule::query()
  56. ->create([
  57. 'order_id' => $validated['order_id'],
  58. 'installation_date' => $instDate,
  59. 'manual' => false,
  60. 'district_id' => $order->district_id,
  61. 'area_id' => $order->area_id,
  62. 'object_address' => $order->object_address,
  63. 'object_type_id' => $order->object_type_id,
  64. 'mafs' => $order->productsWithCount,
  65. 'mafs_count' => $order->products_sku()->count(),
  66. 'brigadier_id' => $order->brigadier_id,
  67. 'comment' => $validated['comment'],
  68. ]);
  69. }
  70. return redirect()->route('schedule.index');
  71. }
  72. }