![]() 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/dceprojects.corals.io/Corals/modules/ProjectPlan/Classes/ |
<?php namespace Corals\Modules\ProjectPlan\Classes; use Corals\Modules\ProjectPlan\Models\Meal; use Corals\Modules\ProjectPlan\Models\Project; use Corals\Modules\ProjectPlan\Models\ProjectCrew; use Corals\Modules\ProjectPlan\Services\ProjectService; class ProjectManager { protected ProjectService $projectService; public function __construct(ProjectService $projectService) { $this->projectService = $projectService; } public function getScheduleDataForEdit(Project $project) { $schedules = []; $indexDays = 0; foreach ($project->schedules as $schedule) { if (!in_array($schedule->type, ['pull_sheet', 'preparation', 'load_in', 'load_out'])) { $indexDays++; $scheduleType = 'day_' . $indexDays; } else { $scheduleType = $schedule->type; }; $schedules[$scheduleType] = [ 'id' => $schedule->id, 'type' => $schedule->type, 'date' => $schedule->date, 'date_formatted' => $schedule->date_formatted, 'starts_at' => $schedule->starts_at, 'starts_at_formatted' => $schedule->starts_at_formatted, 'ends_at' => $schedule->ends_at, 'ends_at_formatted' => $schedule->ends_at_formatted, 'notes' => $schedule->notes, 'expected_ot' => $schedule->expected_ot, 'with_meals' => $schedule->meals()->exists(), ]; } return $schedules; } public function getMealDataForEdit(Project $project) { $meals = []; foreach ($project->schedules as $schedule) { foreach ($schedule->meals as $meal) { /** * @var Meal $meal */ $meals[$meal->meal][$schedule->type] = [ 'meal_time' => $meal->meal_time, 'meal_time_formatted' => $meal->meal_time_formatted, 'source' => $meal->source, 'schedule_type' => $schedule->type, 'type' => $meal->type, 'type_time' => $meal->type_time, 'type_time_formatted' => $meal->type_time_formatted, 'type_location' => $meal->type_location, 'what_is_ordered' => $meal->what_is_ordered, 'who_will_pickup' => $meal->who_will_pickup, 'total_number_to_feed' => $meal->total_number_to_feed, 'cost_per_person' => $meal->cost_per_person, 'total' => round($meal->total_number_to_feed * $meal->cost_per_person, 2), ]; } } return $meals; } public function getProjectCrew(Project $project) { $position_crew = $this->getCrewDataForEdit($project); $positionsCode = $project->getProperty('required_positions', []); return $this->projectService->getFormattedCrewAndPositions($positionsCode, $position_crew); } public function getCrewDataForEdit(Project $project) { $position_crew = []; $crewIndex = 0; foreach ($project->crews as $crew) { $prevPositionCode = $crew->pivot->position_code; if (!isset($prevPositionCode) || $crew->pivot->position_code !== $prevPositionCode) { $crewIndex = 0; } $crewIndex++; $projectCrewObject = ProjectCrew::find($crew->pivot->id); if (user()->cannot('view', $projectCrewObject)) { continue; } $crewActions = $projectCrewObject->getActions(true, 'components.item_actions'); $position_crew[$crew->pivot->position_code][$crewIndex][$crew->pivot->user_id] = [ 'projectCrew' => $projectCrewObject, 'actions' => $crewActions, 'position_code' => $crew->pivot->position_code, 'rate' => $crew->pivot->rate, 'starts_date' => $crew->pivot->starts_date, 'ends_date' => $crew->pivot->ends_date, 'expected_regular_hours' => $crew->pivot->expected_regular_hours, 'expected_overtime_hours' => $crew->pivot->expected_overTime_hours, 'total_cost' => $crew->pivot->total_cost, 'properties' => json_decode($crew->pivot->properties ?? "", true), ]; } return $position_crew; } public function getProjectVendor(Project $project) { $vendor_data = $this->getVendorDataToEdit($project); $vendorsCode = $project->getProperty('required_vendors', []); return $this->projectService->getFormattedVndorsAndTypes($vendorsCode, $vendor_data); } public function getVendorDataToEdit(Project $project) { $vendors = []; foreach ($project->vendors as $vendor) { if (!isset($vendors[$vendor->pivot->type])) { $vendors[$vendor->pivot->type] = []; } $vendors[$vendor->pivot->type][] = [ 'vendor_id' => $vendor->pivot->vendor_id, 'vendor' => $vendor, 'properties' => json_decode($vendor->pivot->properties, true) ]; } return $vendors; } public function getTravelDataToEdit(Project $project) { $travelData = []; foreach ($project->hotels as $hotel) { $travelData['lodging'][] = [ 'hotel_id' => $hotel->pivot->hotel_id, 'hotel' => $hotel, 'properties' => json_decode($hotel->pivot->properties, true) ]; } foreach ($project->airfares ?? [] as $airfare) { $travelData['airfare'][] = [ 'airfare_code' => $airfare->pivot->airfare_code, 'airfare_label' => $airfare->label, 'properties' => json_decode($airfare->pivot->properties, true) ]; } return $travelData; } public function getProjectTravel(Project $project) { $travel_data = $this->getTravelDataToEdit($project); $travelsCode = $project->getProperty('required_travels', []); return $this->projectService->getFormattedTravelsAndTypes($travelsCode, $travel_data); } }