Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/ts.corals.io/corals-api/Corals/modules/Timesheet/Reports/LimitedActivitiesReport.php
<?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)
        ];
    }
}

Spamworldpro Mini