|
|
@@ -3,16 +3,17 @@
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
use App\Helpers\DateHelper;
|
|
|
+use App\Http\Requests\CreateScheduleFromOrderRequest;
|
|
|
use App\Models\Order;
|
|
|
-use App\Models\OrderStatus;
|
|
|
+use App\Models\Schedule;
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
|
class ScheduleController extends Controller
|
|
|
{
|
|
|
protected array $data = [
|
|
|
- 'active' => 'reports',
|
|
|
- 'title' => 'Отчёты',
|
|
|
- 'id' => 'reports',
|
|
|
+ 'active' => 'schedule',
|
|
|
+ 'title' => 'График монтажей',
|
|
|
+ 'id' => 'schedule',
|
|
|
];
|
|
|
|
|
|
public function index(Request $request)
|
|
|
@@ -29,32 +30,55 @@ class ScheduleController extends Controller
|
|
|
];
|
|
|
$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;
|
|
|
- }
|
|
|
- }
|
|
|
+ foreach ($weekDates as $date) {
|
|
|
+ $schedules[$date] = null;
|
|
|
+ }
|
|
|
+ $result = Schedule::query()
|
|
|
+ ->whereBetween('installation_date', [$weekDates['mon'], $weekDates['sun']])
|
|
|
+ ->get();
|
|
|
+ foreach ($result as $schedule) {
|
|
|
+ $schedules[$schedule->installation_date][] = $schedule;
|
|
|
}
|
|
|
-
|
|
|
|
|
|
$this->data['schedules'] = $schedules;
|
|
|
return view('schedule.index', $this->data);
|
|
|
}
|
|
|
+
|
|
|
+ public function createFromOrder(CreateScheduleFromOrderRequest $request)
|
|
|
+ {
|
|
|
+ $validated = $request->validated();
|
|
|
+ // delete all auto schedules for this order
|
|
|
+ Schedule::query()
|
|
|
+ ->where('order_id', $validated['order_id'])
|
|
|
+ ->where('manual', false)
|
|
|
+ ->delete();
|
|
|
+
|
|
|
+ // create all records in schedule
|
|
|
+ $order = Order::query()
|
|
|
+ ->where('id', $validated['order_id'])
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ for ($iDays = 1; $iDays < $order->install_days + 1; $iDays++) {
|
|
|
+ $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($order->installation_date)));
|
|
|
+ Schedule::query()
|
|
|
+ ->create([
|
|
|
+ 'order_id' => $validated['order_id'],
|
|
|
+ 'installation_date' => $instDate,
|
|
|
+ 'manual' => false,
|
|
|
+ 'district_id' => $order->district_id,
|
|
|
+ 'area_id' => $order->area_id,
|
|
|
+ 'object_address' => $order->object_address,
|
|
|
+ 'object_type_id' => $order->object_type_id,
|
|
|
+ 'mafs' => $order->productsWithCount,
|
|
|
+ 'mafs_count' => $order->products_sku()->count(),
|
|
|
+ 'brigadier_id' => $order->brigadier_id,
|
|
|
+ 'comment' => $validated['comment'],
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ return redirect()->route('schedule.index');
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|