![]() 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/ |
<?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); } } } }