diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 82a9323d..88a74d21 100644 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -22,6 +22,7 @@ use App\Models\OrderEquipmentTasks; use App\Models\FurtherTasks; use App\Models\WorkstationsAssociationTasks; +use App\Models\TasksAssociationAmbits; // use DataTables; @@ -29,10 +30,11 @@ class CreateProjectController extends Controller { - public function finishCreatingProject($numberProject){ - + public function finishCreatingProject($numberProject) + { + $project = CompanyProject::find($numberProject); - $project->order_project = 2 ; + $project->order_project = 2; $project->save(); return redirect()->route('home'); @@ -153,65 +155,60 @@ public function EditEquipmentsProjects(Request $request) } } - $executionOrder = 1; // Inicia a contagem da ordem de execução - // foreach ($request->input('ordemTasks') as $key => $value) { - // // Procura o registro relevante em OrderEquipmentTasks - // $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) - // ->where('elemental_tasks_id', $key) - // ->first(); + // Se nao selecionar nenhuma tarefas ele devolve um erro , pois e necessario pelo menos uma + if (!in_array('on', $request->input('ordemTasks'))) { + return redirect()->back()->with('danger', 'É necessário selecionar pelo menos uma tarefa, Para o Equipamento : '.$equipment->equipment_tag ); + } + $executionOrder = 1; + + foreach ($request->input('ordemTasks') as $key => $value) { + $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + ->where('elemental_tasks_id', $key) + ->first(); + // dd($orderEquipmentTask); - // // Se o valor é 'on' - // if ($value === "on") { - // // Se o registro não existir, cria um novo - // if (!$orderEquipmentTask) { - // $orderEquipmentTask = new OrderEquipmentTasks(); - // $orderEquipmentTask->equipment_id = $request->equipmentId; - // $orderEquipmentTask->elemental_tasks_id = $key; - // } - // // Atualiza a ordem de execução independentemente do registro ser novo ou não - // $orderEquipmentTask->execution_order = $executionOrder; - // $orderEquipmentTask->save(); - - // // Incrementa a ordem de execução para o próximo 'on' - // $executionOrder++; - // } - // // Se o valor é 'off' e o registro existir, o deleta - // elseif ($value === "off" && $orderEquipmentTask) { - // $orderEquipmentTask->delete(); - // } - // } - - // Atualiza a ordem de execução dos restantes 'on' após as remoções + if ($value == "on") { + if (!$orderEquipmentTask) { + $orderEquipmentTask = new OrderEquipmentTasks(); + $orderEquipmentTask->equipment_id = $request->equipmentId; + $orderEquipmentTask->elemental_tasks_id = $key; + } + $orderEquipmentTask->execution_order = $executionOrder; + $orderEquipmentTask->save(); + + $executionOrder++; + } elseif ($value == "off" && $orderEquipmentTask) { + $orderEquipmentTask->delete(); + } + } + + $executionOrder = 1; // Reinicia a contagem de ordem de execução $remainingOrderEquipmentTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) - ->where('execution_order', '>=', $executionOrder) ->orderBy('execution_order', 'asc') ->get(); - + foreach ($remainingOrderEquipmentTasks as $orderEquipmentTask) { $orderEquipmentTask->execution_order = $executionOrder; $orderEquipmentTask->save(); $executionOrder++; } - - // Obtém todas as tarefas na ordem correta + $orderTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) ->orderBy('execution_order', 'asc') ->get(); - - // Cria uma matriz associativa para armazenar o elemental_tasks_id e o execution_order + $taskExecutionOrders = []; foreach ($orderTasks as $task) { $taskExecutionOrders[$task->elemental_tasks_id] = $task->execution_order; } - - // Retorna uma resposta return redirect()->route('test2', ['id' => $request->numberProject]) ->with('success', 'Equipamento ' . $equipment->equipment_tag . ' Editado com Sucesso!!!') ->with('taskExecutionOrders', $taskExecutionOrders); } + public function showJson($id) { $attributes = SpecificAttributesEquipmentType::where('equipment_id', $id)->get(); @@ -259,7 +256,6 @@ public function createWorkStations(Request $request) } - // Funcao apenas para retornar os dados necessarios para a view criar uma Obra. public function createProjectForStep1() { @@ -272,7 +268,12 @@ public function createProjectForStep1() //Devolve para a primeira para na descricao do projecto apenas user com ID 3, quer dizer que apenas as "empresas" public function showStep1($company_projects_id) { - $projects = CompanyProject::find($company_projects_id); + // $projects = CompanyProject::find($company_projects_id); + + $projects = CompanyProject::with('user')->find($company_projects_id); + // dd($projects->user); + + $companies = User::where('type_users', 3)->get(); return view('projectsClients/projectDetails_1', ['step' => 1], ['companies' => $companies]) @@ -331,6 +332,7 @@ public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) public function processStep1(Request $request) { + dd($request); // Validação... $installationId = $request->input('installation_id'); @@ -356,7 +358,12 @@ public function processStep1(Request $request) $project->project_company_number = $request->input('project_company_number'); $project->project_ispt_responsible = $request->input('responsible_project_ispt'); $project->project_company_responsible = $request->input('responsible_project_company'); - $project->date_started = $request->input('date_started'); + + // Verifica se e igual a nulo , se for usa a data ja existente + if ($request->date_started === null) { + $project->date_started = $request->input('date_started_present'); + } else + $project->date_started = $request->input('date_started'); $project->plant_id = $installationId; @@ -527,6 +534,22 @@ public function createEquipmentManual(Request $request) $AssociationEquipmentAmbit->save(); + $execution_order = 1; + + //Recebe a tabela com as associoacoes entre Ambitos e tarefas Elementares + $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id); + + foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { + $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; + $JoinsEquipmentsWithTasks->equipment_id = $equipmentID; + $JoinsEquipmentsWithTasks->execution_order = $execution_order++; + $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; + $JoinsEquipmentsWithTasks->further_tasks_id = null; + $JoinsEquipmentsWithTasks->inspection = 'Nao'; + $JoinsEquipmentsWithTasks->save(); + } + + // O $request->numberProject e sempre necessario retornar para indicar a obra que se esta modificando... return redirect()->route('test2', ['id' => $request->numberProject]) ->with('success', 'Equipamento criado com sucesso') @@ -714,12 +737,12 @@ public function showStep3($company_projects_id) public function workstationsAssociationTasks(Request $request) { $workStation = ConstructionWorkstation::where('id_workstations', $request->idWorkStation)->first(); - + if ($workStation) { $workStation->nomenclature_workstation = $request->nameWorkstation; $workStation->save(); } - // então, iteramos sobre as três listas de tarefas e as associamos à estação de trabalho + // então, iteramos sobre as três listas de tarefas e as associamos à estação de trabalho $taskTypes = ['generalTasks', 'PsvTasks', 'CvTasks']; foreach ($taskTypes as $taskType) { @@ -734,7 +757,7 @@ public function workstationsAssociationTasks(Request $request) } } // Redirecionar de volta com uma mensagem de sucesso - return back()->with('success', 'Posto de trabalho : '.$workStation->name_workstations.' atualizado com sucesso!'); + return back()->with('success', 'Posto de trabalho : ' . $workStation->name_workstations . ' atualizado com sucesso!'); } public function processStep3(Request $request) diff --git a/app/Http/Controllers/Pending_UserController.php b/app/Http/Controllers/Pending_UserController.php index 5033cee3..6fad7c41 100644 --- a/app/Http/Controllers/Pending_UserController.php +++ b/app/Http/Controllers/Pending_UserController.php @@ -29,11 +29,11 @@ public function ShowFormUser($id){ public function store(Request $request){ - + $request->validate([ 'name' => 'required', 'lastName' => 'required', - 'pending_email' => 'required|email|unique:pending_users,pending_email|unique:users,email', + 'pending_email' => 'required|email|unique:pending_users,pending_user_email|unique:users,email', 'pending_phone' => 'required', 'pending_nif' => 'required', 'pending_password' => 'required|min:8|confirmed', @@ -41,18 +41,25 @@ public function store(Request $request){ $joinName = $request->get('name') . ' ' . $request->get('lastName'); - $pendingUser = new PendingUser([ - 'pending_name' => $joinName, - 'pending_email' => $request->get('pending_email'), - 'pending_phone' => $request->get('pending_phone'), - 'pending_nif' => $request->get('pending_nif'), - 'pending_password' => Hash::make($request->get('pending_password')), - ]); + // $pendingUser = new PendingUser([ + // 'pending_user_name' => $joinName, + // 'pending_user_email' => $request->get('pending_email'), + // 'pending_user_phone' => $request->get('pending_phone'), + // 'pending_user_nif' => $request->get('pending_nif'), + // 'pending_user_password' => Hash::make($request->get('pending_password')), + // ]); + + $pendingUser = new PendingUser(); + $pendingUser->pending_user_name = $joinName; + $pendingUser->pending_user_email = $request->get('pending_email'); + $pendingUser->pending_user_phone = $request->get('pending_phone'); + $pendingUser->pending_user_nif = $request->get('pending_nif'); + $pendingUser->pending_user_password = Hash::make($request->get('pending_password')); $pendingUser->save(); // Enviar email de notificação para todos os Super_Administrador - $superAdmins = User::where('user_type', 'Super_Administrador')->get(); + $superAdmins = User::where('type_users', 'Super_Administrador')->get(); $newUserNotification = new NewUserNotification(); foreach ($superAdmins as $superAdmin) { diff --git a/app/Http/Controllers/PreparedProjectController.php b/app/Http/Controllers/PreparedProjectController.php new file mode 100644 index 00000000..5a084411 --- /dev/null +++ b/app/Http/Controllers/PreparedProjectController.php @@ -0,0 +1,118 @@ +where('company_projects_id', $ProjectId); + $equipmentsTypes = EquipmentType::all(); + + //Retorna todas as Fabricas Unit, com base na instalacao + $checkUnits = DB::table('units') + ->join('plants', 'units.plant_id', '=', 'plants.plant_id') + ->join('company_projects', 'plants.plant_id', '=', 'company_projects.plant_id') + ->select('units.*') + ->where('company_projects.company_projects_id', '=', $numberProject->company_projects_id) + ->get(); + + return view('projectsClients/preparedProject') + ->with('equipmentsProjects', $equipmentsProjects) + ->with('equipmentsTypes', $equipmentsTypes) + ->with('units', $checkUnits) + ->with('numberProject', $numberProject); + } + + public function getAmbits($equipmentType) + { + $ambits = DB::table('ambits_equipments') + ->select('ambits_equipments.*') + ->where('ambits_equipments.equipment_type_id', $equipmentType) + ->get(); + return response()->json($ambits); + } + + public function editProjectForArticulated(Request $request) + { + + $numberProject = CompanyProject::find($request->ProjectId); + + $numberProject->order_project = 1; + $numberProject->save(); + + return redirect()->route('home'); + } + + public function getData1() + { + + $equipment_type_id = request('equipment_type_id'); + $unit_id = request('unit_id'); + $ambits_id = request('ambits_id'); + + // Equipment::all()->where('company_projects_id', $ProjectId); + + // Caso 'equipment_type_id' seja '#', mostra todos os equipamentos + if ($equipment_type_id == '#') { + $model = Equipment::query()->with(['equipmentType', 'unit', 'equipmentAssociationAmbit.ambitsEquipment']); + } + // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e ambito (caso 'ambits_id' não seja '#') + else { + $equipment_type_id = intval($equipment_type_id); + $model = Equipment::where('equipments.equipment_type_id', $equipment_type_id) + ->join('equipment_association_ambits', 'equipments.equipment_id', '=', 'equipment_association_ambits.equipment_id') + ->with(['equipmentType', 'unit', 'equipmentAssociationAmbit.ambitsEquipment']); + + if ($ambits_id != '#') { + $ambits_id = intval($ambits_id); + $model->where('equipment_association_ambits.ambits_id', $ambits_id); + } + } + if(request()->has('inspec') && request('inspec') != '#') { + $inspectionFilter = request('inspec') === 'Sim'; + $model->whereHas('orderEquipmentTasks', function ($query) use ($inspectionFilter) { + $query->where('inspection', $inspectionFilter ? 'Sim' : 'Nao'); + }); + } + + + // Aplica o filtro de 'unit_id', se aplicável + if ($unit_id != '#') { + $unit_id = intval($unit_id); + $model->where('equipments.unit_id', $unit_id); + } + + // Gera a tabela de dados + return DataTables::of($model) + ->addColumn('equipment_type', function ($row) { + return $row->equipmentType->equipment_type_name; + }) + ->addColumn('Unit', function ($row) { + return $row->unit->unit_name; + }) + ->addColumn('Ambits', function ($row) { + return $row->equipmentAssociationAmbit->ambitsEquipment->ambits_description; + }) + ->addColumn('Inspec', function ($row) { + return $row->hasInspectionYes() ? 'Sim' : 'Nao'; + }) + ->toJson(); + } +} diff --git a/app/Http/Controllers/userController.php b/app/Http/Controllers/userController.php index be32244c..ffcdaae5 100644 --- a/app/Http/Controllers/userController.php +++ b/app/Http/Controllers/userController.php @@ -105,7 +105,7 @@ public function update(Request $request, User $user) { $request->validate([ 'name' => 'required', - 'email' => 'required|email|unique:users,email,' . $user->id, + 'email' => 'required|email|unique:users,email,' . $user->user_id, 'password' => 'nullable|min:8|confirmed', 'user_type' => 'required', 'user_phone' => 'required', diff --git a/app/Models/CompanyProject.php b/app/Models/CompanyProject.php index 43d09b60..713cedc1 100644 --- a/app/Models/CompanyProject.php +++ b/app/Models/CompanyProject.php @@ -13,4 +13,13 @@ class CompanyProject extends Model protected $primaryKey = 'company_projects_id'; public $timestamps = false; + + public function plants(){ + + return $this->hasMany(Plant::class,'plant_id', 'plant_id'); + } + + public function user(){ + return $this->hasOneThrough(User::class, Plant::class, 'plant_id', 'user_id'); + } } diff --git a/app/Models/Equipment.php b/app/Models/Equipment.php index 627f96e8..9540d9ac 100644 --- a/app/Models/Equipment.php +++ b/app/Models/Equipment.php @@ -30,11 +30,6 @@ public function equipmentType() return $this->belongsTo(EquipmentType::class, 'equipment_type_id', 'equipment_type_id'); } - // public function specificAttributes() - // { - // return $this->hasMany(SpecificAttributesEquipmentType::class, 'equipment_id', 'equipment_id'); - // } - public function specificAttributes() { return $this->hasMany(SpecificAttributesEquipmentType::class, 'equipment_id', 'equipment_id') @@ -44,6 +39,17 @@ public function specificAttributes() public function equipmentAssociationAmbit() { - return $this->hasMany(EquipmentAssociationAmbit::class, 'equipment_id', 'equipment_id'); + //Antiga hasMany , apenas colocado hasOne para funcionar o datatables + return $this->hasOne(EquipmentAssociationAmbit::class, 'equipment_id', 'equipment_id'); + } + + public function orderEquipmentTasks() + { + return $this->hasMany(OrderEquipmentTasks::class, 'equipment_id', 'equipment_id'); + } + + public function hasInspectionYes() + { + return $this->orderEquipmentTasks()->where('inspection', 'Sim')->exists(); } } diff --git a/app/Models/OrderEquipmentTasks.php b/app/Models/OrderEquipmentTasks.php index 58e38153..fcd786f8 100644 --- a/app/Models/OrderEquipmentTasks.php +++ b/app/Models/OrderEquipmentTasks.php @@ -11,4 +11,9 @@ class OrderEquipmentTasks extends Model public $timestamps = false; protected $table = 'ordered_equipment_tasks'; + + public function equipment() + { + return $this->belongsTo(Equipment::class, 'equipment_id', 'equipment_id'); + } } diff --git a/app/Models/TasksAssociationAmbits.php b/app/Models/TasksAssociationAmbits.php new file mode 100644 index 00000000..fec53bef --- /dev/null +++ b/app/Models/TasksAssociationAmbits.php @@ -0,0 +1,13 @@ +