![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/ts.corals.io/corals-api/Corals/modules/Timesheet/Reports/ |
<?php namespace Corals\Modules\Timesheet\Reports; use Corals\Modules\Timesheet\Models\Entry; use Corals\Settings\Facades\Settings; use Corals\User\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; class LimitedActivitiesReport { public function getLimitedActivityDataForUser(Request $request): array { $user_id = $request->user_id; if (Str::contains($user_id, ',')) { return []; } $year = $request->year; $activity_id = $request->activity_id; $working_hours = Settings::get('total_working_hours_per_day'); if (is_null($user_id)) { $user = \user(); } else { $user = User::findOrFail($user_id); } if ($user->employee_type != 'full_time') { return []; } if (is_null($year)) { $year = Carbon::now()->format('Y'); } if (is_null($user->position)) { return []; } $requestedYear = Carbon::createFromFormat("Y", $year); $user_start = Carbon::parse($user->start_date); if (!$user->start_date || $requestedYear->lt($user_start->copy()->startOfYear())) { return []; } if ($requestedYear->isSameYear($user_start) && $requestedYear->isCurrentYear()) { $number_of_days = $user_start->diffInDays(now()->toDate()); $number_of_days_per_year = $number_of_days / $requestedYear->daysInYear; } elseif ($requestedYear->isCurrentYear()) { $number_of_days_per_year = now()->dayOfYear / now()->daysInYear; } elseif ($requestedYear->isSameYear($user_start)) { $number_of_days = $user_start->diffInDays($requestedYear->copy()->endOfYear()); $number_of_days_per_year = $number_of_days / $requestedYear->daysInYear; } else { $number_of_days_per_year = 1; } $limited_activities = []; $headers = [ 'activity' => '', 'yearly_limit' => 'Yearly Limit', 'current_limit' => 'Current Limit', 'taken_days' => 'Taken', 'remaining_days' => 'Remaining' ]; $timeSheetEntries = Entry::query()->whereColumn('timesheet_entries.activity_id', 'timesheet_activities.id') ->whereYear('timesheet_entries.spent_at', '=', $year) ->where('timesheet_entries.user_id', '=', $user->id) ->selectRaw("((SUM(ifNull(timesheet_entries.hours*60,0)) + SUM(ifNull(timesheet_entries.minutes,0)))/60)/$working_hours as days_from_entries"); $limited_activities_for_user = DB::table('timesheet_activities') ->when($activity_id, function ($activityQuery, $activity_id) { $activityQuery->where('timesheet_activities.id', '=', $activity_id); }) ->where('timesheet_activities.is_limited', '=', '1') ->select([ "timesheet_activities.id", "timesheet_activities.title", DB::raw("JSON_UNQUOTE(JSON_EXTRACT(timesheet_activities.properties,'$.$user->position')) as position_limit") ]) ->selectSub($timeSheetEntries, 'days_from_entries') ->groupBy('timesheet_activities.id'); foreach ($limited_activities_for_user->get() as $activity) { $limited_activities[$activity->id]['title'] = $activity->title; $limited_activities[$activity->id]['yearly_limit'] = $activity->position_limit; $limited_activities[$activity->id]['current_limit'] = $number_of_days_per_year * $activity->position_limit; $limited_activities[$activity->id]['taken_days'] = $activity->days_from_entries; $limited_activities[$activity->id]['remaining_days'] = $limited_activities[$activity->id]['current_limit'] - $activity->days_from_entries; } return [ 'limited_activities_headers' => $headers, 'limited_activities' => roundResults($limited_activities) ]; } }