groupBy('item')->get(); return $this->successResponse([ 'items' => $items, 'data' => $data, ]); } public function provinceActivityPerSubItem(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $provinceRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' sub_item AS t, COUNT(*) AS c, CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, province_id AS p') ->where('item', '=', $item) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->where('status', '=', 1) ->groupBy('province_id', 'sub_item') ->get(); $countryRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' sub_item AS t, COUNT(*) AS c, CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, -1 AS p') ->where('item', '=', $item) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->where('status', '=', 1) ->groupBy('sub_item') ->get(); $infoItems = InfoItem::query()->where('item', '=', $item)->get()->keyBy('sub_item'); $provinceRoadItemsPerSubItem->each(function ($value) use ($infoItems) { if (isset($infoItems[$value->t])) { $value->u = $infoItems[$value->t]->sub_item_unit; } }); return $this->successResponse([ 'provincesData' => $provinceRoadItemsPerSubItem, 'countryData' => $countryRoadItemsPerSubItem, 'items' => $infoItems ]); } public function cityActivityPerSubItem(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $province = $request->province_id; $cityRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' sub_item AS t, COUNT(*) AS c, CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, province_id AS p, edarat_id AS ci ') ->where('item', '=', $item) ->where('province_id', '=', $province) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->where('status', '=', 1) ->groupBy('edarat_id', 'sub_item') ->get(); $items = InfoItem::query()->where('item', $item)->get()->keyBy('sub_item'); $cityRoadItemsPerSubItem->each(function ($value) use ($items) { if (isset($items[$value->t])) { $value->u = $items[$value->t]->sub_item_unit; } }); return $this->successResponse([ 'citiesData' => $cityRoadItemsPerSubItem, 'items' => $items ]); } public function provinceActivityPerItem(Request $request): JsonResponse { if (auth()->check()) { auth()->user()->addActivityComplete(1033); } $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $user = auth()->user(); $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']); $provinceId = $isSpecialUser ? null : $user->province_id; $roadItemsProjectsQuery = RoadItemsProject::query() ->selectRaw('COUNT(*) AS s, province_id AS p, item AS i') ->where('status', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->when(!$isSpecialUser, function ($query) use ($provinceId) { $query->where('province_id', $provinceId); }) ->groupBy('province_id', 'item'); $roadItemsProjectsSummaryQuery = RoadItemsProject::query() ->selectRaw('COUNT(*) AS s, -1 AS p, item AS i') ->where('status', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->when(!$isSpecialUser, function ($query) use ($provinceId) { $query->where('province_id', $provinceId); }) ->groupBy('item'); $data = $roadItemsProjectsQuery ->unionAll($roadItemsProjectsSummaryQuery) ->get(); $provinces = Province::all(['id', 'name']); return $this->successResponse([ 'activities' => $data, 'provinces' => $provinces, ]); } public function cityActivityPerItem(Request $request): JsonResponse { $provinceId = $request->province_id; $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $roadItemsProjectsQuery = RoadItemsProject::query() ->selectRaw(' COUNT(*) AS s, edarat_id AS c, item AS i') ->where('status', '=', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->where('province_id', $provinceId) ->groupBy('item', 'edarat_id'); $roadItemsProjectsSummaryQuery = RoadItemsProject::query() ->selectRaw(' COUNT(*) AS s, -1 AS c, item AS i') ->where('status', '=', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->where('province_id', $provinceId) ->groupBy('item'); $data = $roadItemsProjectsQuery ->unionAll($roadItemsProjectsSummaryQuery) ->get(); $edarateShahri = EdarateShahri::all(['id', 'name'])->where('province_id', $provinceId); return $this->successResponse([ 'activities' => $data, 'edaratShahri' => $edarateShahri, ]); } public function map(Request $request): JsonResponse { $provinceId = $request->province_id; $cityId = $request->city_id; $subId = $request->sub_id; $item = $request->item; $dateFrom = $request->date_from ? $request->date_from . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); $data = RoadItemsProject::query() ->where('is_new', '=', 1) ->when($provinceId, fn($query) => $query->where('province_id', '=', $provinceId)) ->when($cityId, fn($query) => $query->where('city_id', '=', $cityId)) ->when($subId, fn($query) => $query->where('sub_items', 'like', '%' . $subId . '%')) ->when($item, fn($query) => $query->where('item', '=', $item)) ->when(!is_null($request->status), fn($query) => $query->where('status', '=', $request->status)) ->whereBetween('activity_date', [$dateFrom, $dateTo]) ->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id') ->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status') ->get(); return $this->successResponse($data); } }