ScheduleController.php 4.4 KB

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