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/dceprojects.corals.io/Corals/modules/ProjectPlan/Classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/dceprojects.corals.io/Corals/modules/ProjectPlan/Classes/ProjectManager.php
<?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);
    }
}

Spamworldpro Mini