'reports', 'title' => 'Отчёты', 'id' => 'reports', ]; public function index() { $mountStatuses = [5, 7, 8, 9, 10]; $doneStatuses = [9, 10]; $objectTypes = ObjectType::query()->get()->pluck('name', 'id')->toArray(); $this->data['objectTypes'] = $objectTypes; $user_ids = Order::query()->distinct()->get('user_id')->pluck('user_id')->toArray(); $managers = User::query()->whereIn('id', $user_ids)->get()->pluck('name', 'id')->toArray(); $this->data['managers'] = $managers; // всего заказов, выполнено заказов $this->data['totalOrders'] = Order::all()->count(); $this->data['doneOrders'] = Order::query()->whereIn('order_status_id', $doneStatuses)->count(); $this->data['mountOrders'] = Order::query()->whereIn('order_status_id', $mountStatuses)->count(); // всего маф / завершено маф / установлено маф $this->data['totalMafs'] = ProductSKU::all()->count(); $this->data['doneMafs'] = ProductSKU::query()-> whereHas('order', function ($query) use ($doneStatuses) { $query->whereIn('order_status_id', $doneStatuses); })->count(); $this->data['mountMafs'] = ProductSKU::query()-> whereHas('order', function ($query) use ($mountStatuses){ $query->whereIn('order_status_id', $mountStatuses); })->count(); // общая сумма $this->data['totalSum'] = Price::format( ProductSKU::query()-> whereHas('order', function ($query) use ($mountStatuses) { $query->whereIn('order_status_id', $mountStatuses); }) ->withSum('product', 'total_price') ->get() ->sum('product_sum_total_price') ); // done by managers foreach ($managers as $userId => $userName) { $this->data['totalOrderManager'] = Order::where('user_id', $userId)->count(); $this->data['totalMafsManager'][$userId] = ProductSKU::query()-> whereHas('order', function ($query) use ($userId) { $query->where('user_id', '=', $userId); })->count(); $this->data['doneOrdersManager'][$userId] = Order::query() ->where('user_id', '=', $userId) ->whereIn('order_status_id', $doneStatuses) ->count(); $this->data['doneMafsManager'][$userId] = ProductSKU::query()-> whereHas('order', function ($query) use ($userId, $doneStatuses) { $query->where('user_id', '=', $userId) ->whereIn('order_status_id', $doneStatuses); })->count(); $this->data['notDoneOrdersManager'][$userId] = Order::query() ->where('user_id', '=', $userId) ->whereNotIn('order_status_id', $doneStatuses) ->count(); $this->data['notDoneMafsManager'][$userId] = ProductSKU::query()-> whereHas('order', function ($query) use ($userId, $doneStatuses) { $query->where('user_id', '=', $userId) ->whereNotIn('order_status_id', $doneStatuses); })->count(); } // total mount by types foreach ($objectTypes as $objectTypeId => $objectType) { // total by types $this->data['totalOrdersType'][$objectTypeId] = Order::where('object_type_id', '=', $objectTypeId)->count(); $this->data['totalMafsType'][$objectTypeId] = ProductSKU::query()-> whereHas('order', function ($query) use ($objectTypeId) { $query->where('object_type_id', '=', $objectTypeId); })->count(); // со статусами: в монтаже, готова к сдаче, не сдана замечания, сдана замечания, сдана - зеленый цвет $this->data['mountOrdersType'][$objectTypeId] = Order::query() ->where('object_type_id', '=', $objectTypeId) ->whereIn('order_status_id', $mountStatuses) ->count(); $this->data['mountMafsType'][$objectTypeId] = ProductSKU::query()-> whereHas('order', function ($query) use ($objectTypeId, $mountStatuses) { $query->where('object_type_id', '=', $objectTypeId) ->whereIn('order_status_id', $mountStatuses); })->count(); // остальные - не готовы $this->data['notMountOrdersType'][$objectTypeId] = Order::query() ->where('object_type_id', '=', $objectTypeId) ->whereNotIn('order_status_id', $mountStatuses) ->count(); $this->data['notMountMafsType'][$objectTypeId] = ProductSKU::query()-> whereHas('order', function ($query) use ($objectTypeId, $mountStatuses) { $query->where('object_type_id', '=', $objectTypeId) ->whereNotIn('order_status_id', $mountStatuses); })->count(); } return view('reports.index', $this->data); } }