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/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/ts.corals.io/corals-api/Corals/modules/Timesheet/Services/ProjectEntriesService.php
<?php

namespace Corals\Modules\Timesheet\Services;


use Carbon\Carbon;
use Corals\Foundation\Services\BaseServiceClass;
use Corals\Modules\Timesheet\Facades\Timesheet;
use Corals\Modules\Timesheet\Jobs\NotifyExceededBudget;
use Corals\Modules\Timesheet\Models\Entry;
use Corals\Modules\Timesheet\Models\Project;
use Corals\Settings\Facades\Settings;
use Corals\User\Models\User;
use Illuminate\Http\Request;

class ProjectEntriesService extends BaseServiceClass
{
    protected $activity = null;

    /**
     * @param $request
     * @param $additionalData
     */
    public function preStoreUpdate($request, &$additionalData)
    {
        if (!$request->get('minutes')) {
            $additionalData['minutes'] = 0;
        }

        if (!$request->get('hours')) {
            $additionalData['hours'] = 0;
        }
    }

    /**
     * @param $request
     * @param $additionalData
     */
    public function preStore($request, &$additionalData)
    {
        $project = $request->route('project');
        $additionalData['project_id'] = $project->id;

        $this->storeUpdateBillableTime($request, $additionalData);
    }

    /**
     * @param $request
     * @param $additionalData
     */
    public function preUpdate(Request $request, &$additionalData)
    {
        if (Timesheet::isTimesheetAdministration()) {
            $this->storeUpdateBillableTime($request, $additionalData);
        } else {
            $request->offsetUnset('evaluation_hours');
            $request->offsetUnset('evaluation_minutes');
        }
    }

    public function postStoreUpdate($request, &$additionalData)
    {
        $projectToTracking = Project::findOrFail($this->model->project_id);
        dispatch(new NotifyExceededBudget($projectToTracking));
    }

    /**
     * @param $request
     * @param $additionalData
     */
    protected function storeUpdateBillableTime($request, &$additionalData)
    {
        $evaluationHours = $request->get('evaluation_hours');
        $evaluationMinutes = $request->get('evaluation_minutes');

        if (!$evaluationHours && !$evaluationMinutes) {
//            $project = $request->route('project');
//
//            if ($project->billable) {
//                $activity = Activity::query()->findOrFail($request->get('activity_id'));
//
//                $this->activity = $activity;
//
//                if ($activity->billable) {
            $additionalData['evaluation_minutes'] = $request->get('minutes');
            $additionalData['evaluation_hours'] = $request->get('hours');
//                }
//            }
        } else {
            $additionalData['evaluation_minutes'] = $request->get('evaluation_minutes');
            $additionalData['evaluation_hours'] = $request->get('evaluation_hours');
        }
    }

    /**
     * @param Project $project
     * @return array
     */
    public function getProjectLabels(Project $project)
    {
        return $project->labels()
            ->selectRaw("name as label, id as value")
            ->get()
            ->toArray();
    }

    /**
     * @param $request
     * @return void
     */
    public function storeWithMultipleEntries($request)
    {
        $commonData = $request->except('user_id', 'spent_from', 'spent_to', 'multiple_entries', 'spent_at', 'tags',
            'all_member_users');

        $commonData['properties'] = json_encode(['multiple_entries_code' => now()->format('YmdHis')]);
        $commonData['has_reviewed'] = 1;

        $this->preStoreUpdate($request, $commonData);
        $this->storeUpdateBillableTime($request, $commonData);

        if ($request->get('all_member_users')) {
            $users = User::query()
                ->where('status', 'active')
                ->where('employee_type', '=', 'full_time')
                ->whereHas('roles', function ($roles) {
                    $roles->where('roles.name', 'member');
                })->pluck('id')->toArray();
        } else {
            $users = $request->get('user_id');
        }

        $entries = [];

        $spentFrom = Carbon::parse($request->get('spent_from'));

        $working_days = Settings::get('working_days');

        $spentTo = Carbon::parse($request->get('spent_to'));

        while ($spentFrom->lte($spentTo)) {
            if (in_array($spentFrom->shortDayName, $working_days)) {
                $entries[] = array_merge($commonData, [
                    'spent_at' => $spentFrom->toDateString()
                ]);
            }
            $spentFrom->addDay();
        }

        foreach ($users as $user_id) {
            $entries = array_map(function ($entry) use ($user_id) {
                $entry['user_id'] = $user_id;
                return $entry;
            }, $entries);

            foreach ($entries as $entry) {
                Entry::query()->create($entry);
            }
        }
    }
}

Spamworldpro Mini