successResponse([ 'roadItem' => $this->roadItemNotifications(), 'safetyAndPrivacy' => $this->safetyAndPrivacyNotifications(), 'roadObserved' => $this->roadObservedNotifications(), 'mission' => $this->missionNotification(), ]); } /** * @throws Throwable */ private function roadItemNotifications(): JsonResponse|array { $user = auth()->user(); $road_items = [ 'total' => 0, ]; if ($user->hasPermissionTo('create-road-item')) { $road_items['operation_cnt'] = RoadItemsProject::query() ->where('is_new', '=', 1) ->where('user_id', '=', $user->id) ->where('status', '=', 2) ->count(); $road_items['total'] += $road_items['operation_cnt']; } if ($user->hasPermissionTo('supervise-road-item')) { $road_items['supervise_cnt'] = RoadItemsProject::query() ->where('is_new', '=', 1) ->where('status', '=', 0) ->count(); $road_items['total'] += $road_items['supervise_cnt']; } elseif ($user->hasPermissionTo('supervise-road-item-province')) { throw_if(is_null($user->province_id) || ! $user->province_id, new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); $road_items['supervise_cnt'] = RoadItemsProject::query() ->where('is_new', '=', 1) ->where('province_id', '=', $user->province_id) ->where('status', '=', 0) ->count(); $road_items['total'] += $road_items['supervise_cnt']; } elseif ($user->hasPermissionTo('supervise-road-item-by-edareostani')) { throw_if(is_null($user->edarate_ostani_id) || ! $user->edarate_ostani_id, new ProhibitedAction('اداره ای برای شما در سامانه ثبت نشده است!')); $confirmableItems = EdarateOstani::query()->where('id', '=', $user->edarate_ostani_id)->value('items_for_confirm'); $road_items['supervise_cnt'] = RoadItemsProject::query() ->where('is_new', '=', 1) ->where('province_id', '=', $user->province_id) ->whereIn('item', explode(',', $confirmableItems)) ->where('status', '=', 0) ->count(); $road_items['total'] += $road_items['supervise_cnt']; } return $road_items; } /** * @throws Throwable */ private function safetyAndPrivacyNotifications(): JsonResponse|array { $user = auth()->user(); $safety_and_privacy = []; if ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable')) { $safety_and_privacy['supervise_cnt'] = SafetyAndPrivacy::query() ->where('is_finished', '=', 1) ->where('status', '=', 0) ->count(); } elseif ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable-province')) { throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); $safety_and_privacy['supervise_cnt'] = SafetyAndPrivacy::query() ->where('province_id', '=', $user->province_id) ->where('is_finished', '=', 1) ->where('status', '=', 0) ->count(); } elseif ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable-edarate-shahri')) { throw_if(is_null($user->edarate_shahri_id), new ProhibitedAction('اداره ای برای شما در سامانه ثبت نشده است!')); $activity = SafetyAndPrivacy::query() ->where('edare_shahri_id', '=', $user->edarate_shahri_id) ->selectRaw('count(*) as cnt, step') ->where('is_finished', '=', 0) ->groupby('step') ->orderBy('step') ->get(); $step_one = $activity->where('step', '=', 1)->first(); $step_two = $activity->where('step', '=', 2)->first(); $safety_and_privacy['step_one'] = $step_one->cnt ?? 0; $safety_and_privacy['step_two'] = $step_two->cnt ?? 0; } return $safety_and_privacy; } /** * @throws Throwable */ private function roadObservedNotifications(): JsonResponse|array { $user = auth()->user(); $road_observations = [ 'total' => 0, 'operation_cnt' => 0, 'complaint_cnt' => 0, 'supervise_cnt' => 0, ]; if ($user->hasPermissionTo('show-fast-react')) { $road_observations['supervise_cnt'] = RoadObserved::query()->where([ ['rms_status', '<>', 0], ['status', '=', 0], ])->count(); $road_observations['complaint_cnt'] = RoadObserved::query()->where('rms_status', '=', 0) ->whereNotNull('edarate_shahri_id') ->count(); } elseif ($user->hasPermissionTo('show-fast-react-province')) { throw_if(is_null($user->province_id), new ProhibitedAction('استانی برای شما در سامانه ثبت نشده است!')); $road_observations['supervise_cnt'] = RoadObserved::query()->where([ ['rms_status', '<>', 0], ['status', '=', 0], ['province_id', '=', $user->province_id], ])->count(); $road_observations['complaint_cnt'] = RoadObserved::query()->where([ ['rms_status', '=', 0], ['province_id', '=', $user->province_id], ])->count(); } elseif ($user->hasPermissionTo('show-fast-react-edarate-shahri')) { throw_if(is_null($user->edarate_shahri_id), new ProhibitedAction('اداره ای برای شما در سامانه ثبت نشده است!')); $road_observations['operation_cnt'] = RoadObserved::query()->where([ ['rms_status', '<>', 0], ['status', '=', 2], ['edarate_shahri_id', '=', $user->edarate_shahri_id], ])->count(); $road_observations['complaint_cnt'] = RoadObserved::query()->where([ ['rms_status', '=', 0], ['edarate_shahri_id', '=', $user->edarate_shahri_id], ])->count(); } $road_observations['total'] += $road_observations['operation_cnt'] + $road_observations['complaint_cnt'] + $road_observations['supervise_cnt']; return $road_observations; } public function missionNotification(): array { $user = auth()->user(); $missions = [ 'request_portal' => Mission::query() ->where([ ['state_id', '=', MissionStates::REJECT_BY_TRANSPORTATION->value], ['user_id', '=', $user->id], ])->count(), 'transportation' => 0, 'control' => 0, ]; if ($user->hasPermissionTo('manage-transportation-unit-station')) { $missions['transportation'] = Mission::query()->where([ ['state_id', '=', MissionStates::REQUEST_CREATED->value], ['station_id', '=', $user->station_id], ])->count(); } if ($user->hasPermissionTo('manage-transportation-unit-country')) { $missions['transportation'] = Mission::query()->where([ ['state_id', '=', MissionStates::REQUEST_CREATED->value], ])->count(); } if ($user->hasPermissionTo('manage-transportation-unit-province')) { $missions['transportation'] = Mission::query()->where([ ['state_id', '=', MissionStates::REQUEST_CREATED->value], ['province_id', '=', $user->province_id], ])->count(); } if ($user->hasPermissionTo('manage-transportation-unit-city')) { $missions['transportation'] = Mission::query()->where([ ['state_id', '=', MissionStates::REQUEST_CREATED->value], ['city_id', '=', $user->city_id], ])->count(); } if ($user->hasPermissionTo('manage-control-unit-station')) { $missions['control'] = Mission::query() ->whereIn('state_id', [ MissionStates::PENDING_CONFIRMATION->value, MissionStates::START_MISSION->value, ]) ->where('station_id', $user->station_id) ->count(); } if ($user->hasPermissionTo('manage-control-unit-country')) { $missions['control'] = Mission::query() ->whereIn('state_id', [ MissionStates::PENDING_CONFIRMATION->value, MissionStates::START_MISSION->value, ])->count(); } if ($user->hasPermissionTo('manage-control-unit-province')) { $missions['control'] = Mission::query() ->whereIn('state_id', [ MissionStates::PENDING_CONFIRMATION->value, MissionStates::START_MISSION->value, ]) ->where('province_id', '=', $user->province_id) ->count(); } if ($user->hasPermissionTo('manage-control-unit-city')) { $missions['control'] = Mission::query() ->whereIn('state_id', [ MissionStates::PENDING_CONFIRMATION->value, MissionStates::START_MISSION->value, ]) ->where('city_id', '=', $user->city_id )->count(); } $missions['total'] = $missions['request_portal'] + $missions['transportation'] + $missions['control']; return $missions; } }