789 lines
37 KiB
PHP
Executable File
789 lines
37 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Company;
|
|
use App\Models\EquipmentWorkHistory;
|
|
use App\Models\Plant;
|
|
use App\Models\Unit;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\CompanyProject;
|
|
use App\Models\ConstructionWorkstation;
|
|
use App\Models\ControlEquipmentWorkstation;
|
|
use App\Models\Equipment;
|
|
use App\Models\EquipmentComments;
|
|
use App\Models\EquipmentType;
|
|
|
|
|
|
use App\Models\ElementalTasks;
|
|
|
|
use Yajra\DataTables\Facades\DataTables;
|
|
|
|
class ExecutionProjectController extends Controller
|
|
{
|
|
public function getDataEquipmentClient(Request $request)
|
|
{
|
|
|
|
$clientId = $request->get('clientId');
|
|
|
|
// Recebe as plants com base no USer
|
|
$allPlantsClient = Plant::where('user_id', $clientId)->get();
|
|
|
|
// Extrai os plant_id da coleção $recevePlantClient
|
|
$plantsIds = $allPlantsClient->pluck('plant_id');
|
|
|
|
// Busca todas as fabricas referente a plantas recebidas, guardamos o id de cada fabrica em $unitsIds
|
|
$allUnitsClient = Unit::whereIn('plant_id', $plantsIds)->get();
|
|
$unitsIds = $allUnitsClient->pluck('unit_id');
|
|
|
|
$receiveAllPlants = $request->get('receiveAllPlants');
|
|
|
|
$receiveAllUnits = $request->get('receiveAllUnits');
|
|
|
|
$receiveEquipmentsType = $request->get('receiveEquipmentsType');
|
|
|
|
|
|
|
|
$query = Equipment::with('equipmentType', 'unit', 'equipmentWorkHistory', 'equipmentAssociationAmbit', 'ambitsEquipment')
|
|
->whereIn('unit_id', $unitsIds)
|
|
->select(['equipment_id', 'ispt_number', 'equipment_tag', 'unit_id', 'equipment_type_id']);
|
|
|
|
|
|
//Filtar equipamentos por uma instalacao especifica.
|
|
if ($receiveAllPlants && $receiveAllPlants !== '#') {
|
|
$query->whereHas('unit', function ($query) use ($receiveAllPlants) {
|
|
$query->where('plant_id', $receiveAllPlants);
|
|
});
|
|
}
|
|
|
|
if ($receiveAllUnits && $receiveAllUnits !== '#') {
|
|
$query->where('unit_id', $receiveAllUnits);
|
|
}
|
|
|
|
if ($receiveEquipmentsType && $receiveEquipmentsType !== '#') {
|
|
$query->where('equipment_type_id', $receiveEquipmentsType);
|
|
}
|
|
|
|
return DataTables::of($query)->make(true);
|
|
|
|
}
|
|
|
|
public function getDataEquipment(Request $request)
|
|
{
|
|
//Variaveis recebidos da Obra em Planeamento (Filtros)
|
|
$numberProject = $request->get('numberProject');
|
|
$receiveRespostUnitsSelect = $request->get('checkUnits');
|
|
|
|
// Tanto para em Planeamento como gestor de Ativos.
|
|
$receiveTypeValveSelected = $request->get('tipo_valvulasList');
|
|
|
|
|
|
// Variaveis recebidas da gestao de ativos (Filtros)
|
|
$receiveAllClients = $request->get('receiveAllClients');
|
|
$receiveAllPlants = $request->get('receiveAllPlants');
|
|
$receiveAllUnits = $request->get('receiveAllUnits');
|
|
$receiveEquipmentsType = $request->get('receiveEquipmentsType');
|
|
|
|
// Se receber o numero do projecto. /Se existir
|
|
if ($numberProject) {
|
|
|
|
// Query para DataTables do Planeamento
|
|
$query = Equipment::with('equipmentType', 'unit', 'equipmentWorkHistory')
|
|
->where('company_projects_id', $numberProject)
|
|
->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']);
|
|
|
|
if ($receiveRespostUnitsSelect && $receiveRespostUnitsSelect !== '#') {
|
|
$query->where('unit_id', $receiveRespostUnitsSelect);
|
|
}
|
|
|
|
if ($receiveTypeValveSelected && $receiveTypeValveSelected !== '#') {
|
|
$query->where('equipment_type_id', $receiveTypeValveSelected);
|
|
}
|
|
|
|
// Executa a consulta e obtém os resultados
|
|
$equipment = $query->get();
|
|
|
|
return DataTables::of($equipment)
|
|
->addColumn('ispt_number', function ($equipment) {
|
|
// Assumindo que você quer o 'ispt_number' do primeiro 'EquipmentWorkHistory' que corresponde ao 'company_projects_id'
|
|
$equipmentWorkHistory = $equipment->equipmentWorkHistory->first();
|
|
return $equipmentWorkHistory ? $equipmentWorkHistory->ispt_number : 'N/A';
|
|
})
|
|
|
|
->addColumn('unit_name', function ($equipment) {
|
|
// Retorna 'unit_name' do relacionamento 'unit'
|
|
return $equipment->unit ? $equipment->unit->unit_name : 'N/A';
|
|
})
|
|
->addColumn('equipment_type_name', function ($equipment) {
|
|
// Retorna 'equipment_type_name' do relacionamento 'equipmentType'
|
|
return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A';
|
|
})
|
|
|
|
->addColumn('ambit', function ($equipment) {
|
|
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
|
|
return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description;
|
|
})
|
|
|
|
->addColumn('action', function ($equipment) use ($numberProject) {
|
|
$dropdownHtml = '<div class="d-flex justify-content-center dropdown">
|
|
<button data-toggle="dropdown" aria-expanded="false" class="actions-btn btn btn-light circle">
|
|
<i class="fa fa-ellipsis-v"></i>
|
|
</button>
|
|
<div class="dropdown-menu dropdown-menu-light">';
|
|
|
|
// Adiciona a primeira ação (Detalhes do equipamento)
|
|
$detailsUrl = !is_null($numberProject) ? route('projectDetails_11', ['projectID' => $numberProject, 'equipmentID' => $equipment->equipment_id]) : route('articulated_22', ['equipmentID' => $equipment->equipment_id]);
|
|
$dropdownHtml .= '<a href="' . $detailsUrl . '" class="dropdown-item text-primary">
|
|
<i class="fa-solid fa-eye text-primary"></i>
|
|
Detalhes
|
|
</a>';
|
|
|
|
// Adiciona a ação para abrir a modal para Trocar de Ambito
|
|
$dropdownHtml .= '<button class="dropdown-item text-primary" data-toggle="modal" data-target="#modal-changeAmbitEquipment-' . $equipment->equipment_id . '">
|
|
<i class="fa-solid fa-pen text-primary"></i>
|
|
Trocar de Ambito
|
|
</button>';
|
|
|
|
// Adiciona a ação para abrir a modal para apagar
|
|
$dropdownHtml .= '<button class="dropdown-item text-primary" data-toggle="modal" data-target="#modal-confirmDeleteEquipmentInProject-' . $equipment->equipment_id . '">
|
|
<i class="fa-solid fa-trash text-primary"></i>
|
|
Apagar
|
|
</button>';
|
|
|
|
$dropdownHtml .= '</div></div>'; // Fecha as tags do dropdown
|
|
|
|
return $dropdownHtml;
|
|
})
|
|
->make(true);
|
|
} else {
|
|
|
|
|
|
// Query padrão que todas as dataTables recebem, a partir dele fazemos os filt
|
|
$query = Equipment::with('equipmentType', 'unit')
|
|
->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']);
|
|
|
|
//Tratamento para o portifólio do Cliente.
|
|
if ($request->get('clientId')) {
|
|
$company = $request->get('clientId');
|
|
$query->whereHas('unit.plant',function ($query) use ($company){
|
|
$query->where('company_id',$company);
|
|
});
|
|
}
|
|
|
|
|
|
//Filtar equipamentos por um cliente .
|
|
if ($receiveAllClients && $receiveAllClients !== '#') {
|
|
// Filtra os equipamentos cujas unidades estão associadas às plantas do usuário especificado
|
|
$query->whereHas('unit.plant', function ($query) use ($receiveAllClients) {
|
|
$query->where('company_id', $receiveAllClients);
|
|
});
|
|
}
|
|
//Filtar equipamentos por uma instalacao .
|
|
if ($receiveAllPlants && $receiveAllPlants !== '#') {
|
|
$query->whereHas('unit', function ($query) use ($receiveAllPlants) {
|
|
$query->where('plant_id', $receiveAllPlants);
|
|
});
|
|
}
|
|
//Filtrar por Uma fabrica
|
|
if ($receiveAllUnits && $receiveAllUnits !== '#') {
|
|
$query->where('unit_id', $receiveAllUnits);
|
|
}
|
|
//Filtrar por tipo de equipamento
|
|
if ($receiveEquipmentsType && $receiveEquipmentsType !== '#') {
|
|
$query->where('equipment_type_id', $receiveEquipmentsType);
|
|
}
|
|
|
|
|
|
// Executa a consulta e obtém os resultados
|
|
$equipment = $query->get();
|
|
|
|
return DataTables::of($equipment)
|
|
|
|
->addColumn('client_name', function ($equipment) {
|
|
return $equipment->unit->plant->company ? $equipment->unit->plant->company->company_name : 'N/A';
|
|
})
|
|
|
|
->addColumn('plant_name', function ($equipment) {
|
|
return $equipment->unit->plant ? $equipment->unit->plant->plant_name : 'N/A';
|
|
})
|
|
|
|
->addColumn('unit_name', function ($equipment) {
|
|
// Retorna 'unit_name' do relacionamento 'unit'
|
|
return $equipment->unit ? $equipment->unit->unit_name : 'N/A';
|
|
})
|
|
->addColumn('equipment_type_name', function ($equipment) {
|
|
// Retorna 'equipment_type_name' do relacionamento 'equipmentType'
|
|
return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A';
|
|
})
|
|
|
|
->addColumn('action', function ($equipment) use ($numberProject) {
|
|
$dropdownHtml = '<div class="d-flex justify-content-center dropdown">
|
|
<button data-toggle="dropdown" aria-expanded="false" class="actions-btn btn btn-light circle">
|
|
<i class="fa fa-ellipsis-v"></i>
|
|
</button>
|
|
<div class="dropdown-menu dropdown-menu-light">';
|
|
|
|
// Adiciona a primeira ação (Detalhes do equipamento)
|
|
$detailsUrl = route('articulated_22', ['equipmentID' => $equipment->equipment_id]);
|
|
$dropdownHtml .= '<a href="' . $detailsUrl . '" class="dropdown-item text-primary">
|
|
<i class="fa-solid fa-eye text-primary"></i>
|
|
Detalhes
|
|
</a>';
|
|
// Adiciona a ação para abrir a modal para apagar
|
|
$dropdownHtml .= '<button class="dropdown-item text-primary" data-toggle="modal" data-target="#modal-confirmDeleteEquipmentInProject-' . $equipment->equipment_id . '">
|
|
<i class="fa-solid fa-trash text-primary"></i>
|
|
Apagar
|
|
</button>';
|
|
|
|
// Adicionar outras ações aqui, como editar e deletar, conforme necessário
|
|
//Adicionar o "Apagar" e "Trocar de Ambito"
|
|
|
|
$dropdownHtml .= '</div></div>'; // Fecha as tags do dropdown
|
|
|
|
return $dropdownHtml;
|
|
})
|
|
|
|
->make(true);
|
|
}
|
|
}
|
|
|
|
public function getDetailsEquipmentQrcode(Request $request)
|
|
{
|
|
// Filtros de pesquisa
|
|
$equipmentTypeSelected = $request->get('equipmentTypeSelected');
|
|
$unitSelected = $request->get('unitSelected');
|
|
|
|
// Recebe o Id do projecto atual
|
|
$receiveNumberProject = $request->get('receiveNumberProject');
|
|
|
|
$initialQuery = Equipment::where('company_projects_id', $receiveNumberProject);
|
|
|
|
//Filtrar por tipo de equipamento
|
|
if ($equipmentTypeSelected && $equipmentTypeSelected !== '#') {
|
|
$initialQuery->where('equipment_type_id', $equipmentTypeSelected);
|
|
}
|
|
//Filtrar por Uma fabrica
|
|
if ($unitSelected && $unitSelected !== '#') {
|
|
$initialQuery->where('unit_id', $unitSelected);
|
|
}
|
|
|
|
$query = $initialQuery->get();
|
|
|
|
return DataTables::of($query)
|
|
|
|
->addColumn('equipment_type_name', function ($query) {
|
|
// Retorna 'equipment_type_name' do relacionamento 'equipmentType'
|
|
return $query->equipmentType ? $query->equipmentType->equipment_type_name : 'N/A';
|
|
})
|
|
->addColumn('unit_name', function ($query) {
|
|
// Retorna 'unit_name' do relacionamento 'unit'
|
|
return $query->unit ? $query->unit->unit_name : 'N/A';
|
|
})
|
|
->addColumn('ambit_name', function ($query) {
|
|
$firstEquipmentWorkHistory = $query->equipmentWorkHistory->first();
|
|
return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description;
|
|
})
|
|
|
|
->addColumn('action', function ($equipment) use ($receiveNumberProject) {
|
|
$pdfUrl = route('showDetailsEquipmentForQrCode', ['equipmentId' => $equipment->equipment_id, 'projectId' => $receiveNumberProject]);
|
|
|
|
// Retorna apenas a ação para visualizar o PDF
|
|
$dropdownHtml = ' <a href="' . $pdfUrl . '" class="dropdown-item text-primary">
|
|
<i class="fa-solid fa-file-pdf"></i>
|
|
Visualizar PDF
|
|
</a>';
|
|
return $dropdownHtml;
|
|
})
|
|
->make(true);
|
|
}
|
|
|
|
public function getDataEquipment1(Request $request)
|
|
{
|
|
// pode receber um request ou nao, depende de onde for chamado. (Tabela de equipamentos associada a uma Obra)
|
|
$numberProject = $request->get('numberProject');
|
|
|
|
// pode receber um request ou nao, depende de onde for chamado. (Utilizadores 'Cliente')
|
|
$clientId = $request->get('clientId');
|
|
|
|
$checkUnits = $request->get('checkUnits');
|
|
$tipo_valvulasList = $request->get('tipo_valvulasList');
|
|
|
|
$receiveAllClients = $request->get('receiveAllClients');
|
|
|
|
$receiveAllPlants = $request->get('receiveAllPlants');
|
|
$receiveAllUnits = $request->get('receiveAllUnits');
|
|
|
|
$receiveEquipmentsType = $request->get('receiveEquipmentsType');
|
|
|
|
|
|
if ($clientId) {
|
|
// Recebe as plants com base no USer
|
|
$allPlantsClient = Plant::where('user_id', $clientId)->get();
|
|
|
|
// Extrai os plant_id da coleção $recevePlantClient
|
|
$plantsIds = $allPlantsClient->pluck('plant_id');
|
|
|
|
// Busca todas as fabricas referente a plantas recebidas, guardamos o id de cada fabrica em $unitsIds
|
|
$allUnitsClient = Unit::whereIn('plant_id', $plantsIds)->get();
|
|
$unitsIds = $allUnitsClient->pluck('unit_id');
|
|
|
|
$receiveAllPlants = $request->get('receiveAllPlants');
|
|
|
|
$receiveAllUnits = $request->get('receiveAllUnits');
|
|
|
|
$receiveEquipmentsType = $request->get('receiveEquipmentsType');
|
|
|
|
|
|
// $query = Equipment::with('equipmentType', 'unit')
|
|
// ->whereIn('unit_id', $unitsIds)
|
|
// ->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']);
|
|
$query = Equipment::with([
|
|
'equipmentType',
|
|
'unit',
|
|
'equipmentWorkHistory' => function ($query) use ($numberProject) {
|
|
$query->where('company_projects_id', $numberProject)->orderBy('created_at', 'desc');
|
|
}
|
|
])
|
|
->whereIn('unit_id', $unitsIds)
|
|
->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']);
|
|
|
|
} else {
|
|
// Query padrão que todas as dataTables recebem, a partir dele fazemos os filt
|
|
$query = Equipment::with('equipmentType', 'unit')
|
|
->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']);
|
|
}
|
|
|
|
// Consultas para a Criacao da Obra, Ambas vao ser diferentes, pois na creacao, recebes os equipamentos por obra, porem no portifolio vamos buscar todos.
|
|
if ($numberProject) {
|
|
$query->where('company_projects_id', $numberProject);
|
|
|
|
if ($checkUnits && $checkUnits !== '#') {
|
|
$query->where('unit_id', $checkUnits);
|
|
}
|
|
|
|
if ($tipo_valvulasList && $tipo_valvulasList !== '#') {
|
|
$query->where('equipment_type_id', $tipo_valvulasList);
|
|
}
|
|
}
|
|
|
|
// Consultas para utilizadores do perfil Cliente
|
|
if ($clientId) {
|
|
|
|
}
|
|
|
|
//Filtar equipamentos por um cliente especifico.
|
|
if ($receiveAllClients && $receiveAllClients !== '#') {
|
|
// Filtra os equipamentos cujas unidades estão associadas às plantas do usuário especificado
|
|
$query->whereHas('unit.plant', function ($query) use ($receiveAllClients) {
|
|
$query->where('user_id', $receiveAllClients);
|
|
});
|
|
}
|
|
|
|
//Filtar equipamentos por uma instalacao especifica.
|
|
if ($receiveAllPlants && $receiveAllPlants !== '#') {
|
|
$query->whereHas('unit', function ($query) use ($receiveAllPlants) {
|
|
$query->where('plant_id', $receiveAllPlants);
|
|
});
|
|
}
|
|
|
|
if ($receiveAllUnits && $receiveAllUnits !== '#') {
|
|
$query->where('unit_id', $receiveAllUnits);
|
|
}
|
|
if ($receiveEquipmentsType && $receiveEquipmentsType !== '#') {
|
|
$query->where('equipment_type_id', $receiveEquipmentsType);
|
|
}
|
|
|
|
// Executa a consulta e obtém os resultados
|
|
// $equipment = $query->get();
|
|
|
|
return DataTables::of($query)
|
|
|
|
->addColumn('ispt_number', function ($equipment) {
|
|
// Assumindo que você quer o 'ispt_number' do primeiro 'EquipmentWorkHistory' que corresponde ao 'company_projects_id'
|
|
$equipmentWorkHistory = $equipment->equipmentWorkHistory->first();
|
|
return $equipmentWorkHistory ? $equipmentWorkHistory->ispt_number : 'N/A';
|
|
})
|
|
|
|
->addColumn('unit_name', function ($equipment) {
|
|
// Retorna 'unit_name' do relacionamento 'unit'
|
|
return $equipment->unit ? $equipment->unit->unit_name : 'N/A';
|
|
})
|
|
->addColumn('equipment_type_name', function ($equipment) {
|
|
// Retorna 'equipment_type_name' do relacionamento 'equipmentType'
|
|
return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A';
|
|
})
|
|
|
|
->addColumn('ambit', function ($equipment) {
|
|
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
|
|
return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description;
|
|
})
|
|
|
|
|
|
->addColumn('action', function ($equipment) use ($numberProject) {
|
|
$dropdownHtml = '<div class="d-flex justify-content-center dropdown">
|
|
<button data-toggle="dropdown" aria-expanded="false" class="actions-btn btn btn-light circle">
|
|
<i class="fa fa-ellipsis-v"></i>
|
|
</button>
|
|
<div class="dropdown-menu dropdown-menu-light">';
|
|
|
|
// Adiciona a primeira ação (Detalhes do equipamento)
|
|
$detailsUrl = !is_null($numberProject) ? route('projectDetails_11', ['projectID' => $numberProject, 'equipmentID' => $equipment->equipment_id]) : route('articulated_22', ['equipmentID' => $equipment->equipment_id]);
|
|
$dropdownHtml .= '<a href="' . $detailsUrl . '" class="dropdown-item text-primary">
|
|
<i class="fa-solid fa-eye text-primary"></i>
|
|
Detalhes
|
|
</a>';
|
|
|
|
// Adiciona a ação para abrir a modal para Trocar de Ambito
|
|
$dropdownHtml .= '<button class="dropdown-item text-primary" data-toggle="modal" data-target="#modal-changeAmbitEquipment-' . $equipment->equipment_id . '">
|
|
<i class="fa-solid fa-pen text-primary"></i>
|
|
Trocar de Ambito
|
|
</button>';
|
|
|
|
// Adiciona a ação para abrir a modal para apagar
|
|
$dropdownHtml .= '<button class="dropdown-item text-primary" data-toggle="modal" data-target="#modal-confirmDeleteEquipmentInProject-' . $equipment->equipment_id . '">
|
|
<i class="fa-solid fa-trash text-primary"></i>
|
|
Apagar
|
|
</button>';
|
|
|
|
|
|
// Adicionar outras ações aqui, como editar e deletar, conforme necessário
|
|
//Adicionar o "Apagar" e "Trocar de Ambito"
|
|
|
|
$dropdownHtml .= '</div></div>'; // Fecha as tags do dropdown
|
|
|
|
return $dropdownHtml;
|
|
})
|
|
|
|
|
|
->editColumn('unit_id', function ($equipment) {
|
|
// Isto irá substituir 'unit_id' pelo 'unit_name' associado
|
|
return $equipment->unit->unit_name ?? 'N/A';
|
|
})
|
|
->editColumn('equipment_type_id', function ($equipment) {
|
|
// Isto irá substituir 'equipment_type_id' pelo 'equipment_type_name' associado
|
|
return $equipment->equipmentType->equipment_type_name ?? 'N/A';
|
|
})
|
|
->rawColumns(['action'])
|
|
|
|
->make(true);
|
|
}
|
|
|
|
|
|
public function enterWorkstation()
|
|
{
|
|
return view('workstations/index');
|
|
}
|
|
|
|
// public function receiveExecutionProject($ProjectId)
|
|
// {
|
|
// $DatasProject = CompanyProject::find($ProjectId);
|
|
// $equipmentsTypes = EquipmentType::all();
|
|
|
|
// $receivePlant = Plant::where('plant_id', $DatasProject->plant_id)->first();
|
|
// $receiveCompany = Company::where('company_id', $receivePlant->company_id)->first();
|
|
|
|
// // Busca na model User
|
|
// $filteredUsers = User::where('type_users', 5)
|
|
// ->whereRaw("SUBSTRING_INDEX(user_name, '-', -1) = ?", [$DatasProject->company_projects_id])
|
|
// ->whereRaw("SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', 1), '-', 1) = ?", [$DatasProject->project_company_name])
|
|
// ->get();
|
|
|
|
// // Adicionando a nova coluna realPassword
|
|
// $filteredUsers->map(function ($user) {
|
|
// $user->realPassword = explode('@', $user->email)[0];
|
|
// return $user;
|
|
// });
|
|
|
|
// $receiveDetailsWs = ConstructionWorkstation::where('name_workstations',$filteredUsers->user_name)->get();
|
|
|
|
// //Deve buscar o nome do posto de trabalho tambem.
|
|
// // Retornando a view com os dados necessários
|
|
// return view('projectsClients/executionProjectNew', [
|
|
// 'DatasProject' => $DatasProject,
|
|
// 'equipmentsTypes' => $equipmentsTypes,
|
|
// 'receiveCompany' => $receiveCompany,
|
|
// 'filteredUsers' => $filteredUsers
|
|
// ]);
|
|
// }
|
|
|
|
public function receiveExecutionProject($ProjectId)
|
|
{
|
|
$DatasProject = CompanyProject::find($ProjectId);
|
|
$equipmentsTypes = EquipmentType::all();
|
|
|
|
$receivePlant = Plant::where('plant_id', $DatasProject->plant_id)->first();
|
|
$receiveCompany = Company::where('company_id', $receivePlant->company_id)->first();
|
|
|
|
// Busca na model User
|
|
$filteredUsers = User::where('type_users', 5)
|
|
->whereRaw("SUBSTRING_INDEX(user_name, '-', -1) = ?", [$DatasProject->company_projects_id])
|
|
->whereRaw("SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', 1), '-', 1) = ?", [$DatasProject->project_company_name])
|
|
->get();
|
|
|
|
// Adicionando a nova coluna realPassword
|
|
$filteredUsers->map(function ($user) {
|
|
$user->realPassword = explode('@', $user->email)[0];
|
|
return $user;
|
|
});
|
|
|
|
// Busca todos os workstations relevantes
|
|
$allWorkstations = ConstructionWorkstation::whereIn('name_workstations', $filteredUsers->pluck('user_name'))->get()->keyBy('name_workstations');
|
|
|
|
// Adicionando a nomenclatura de workstation aos usuários filtrados
|
|
$filteredUsers->map(function ($user) use ($allWorkstations) {
|
|
if (isset ($allWorkstations[$user->user_name])) {
|
|
$user->nomenclature_workstation = $allWorkstations[$user->user_name]->nomenclature_workstation;
|
|
}
|
|
return $user;
|
|
});
|
|
|
|
//Recebe todos os equipamentos apenas para verificar quantos ainda faltam para terminar a Obra.
|
|
$receiveAllEquipments = Equipment::where('company_projects_id', $DatasProject->company_projects_id)->get();
|
|
|
|
$allEquipmentsFullyCompleted = $receiveAllEquipments->every(function ($equipment) {
|
|
// Verifica se todos os registros dos Equipamntos têm equipment_status_project igual a 2 (TRUE /FALSE)
|
|
return $equipment->equipmentWorkHistory->every(function ($workHistory) {
|
|
return $workHistory->equipment_status_project == 2;
|
|
});
|
|
});
|
|
|
|
|
|
// $allEquipmentsFullyCompleted será true se todos os equipamentos tiverem todos seus históricos com status 2
|
|
//Deve verificar se todos os equipamentos ja foram concluidos e se for o caso, deve alterar para Obra concluido, autorizar os relatorios e dessasociar todos os equipamento da Obra atual.
|
|
if ($allEquipmentsFullyCompleted) {
|
|
|
|
$DatasProject->order_project = 4;
|
|
$DatasProject->end_date = now();
|
|
$DatasProject->save();
|
|
|
|
// Desassocia todos os equipamentos do projeto
|
|
Equipment::where('company_projects_id', $DatasProject->company_projects_id)
|
|
->update(['company_projects_id' => null]);
|
|
|
|
return redirect()->route('home');
|
|
|
|
} else {
|
|
//Caso nem todos os equipamento tenham-se concluidos, deve voltar a pagina de Execussao normalmente
|
|
// Retornando a view com os dados necessários
|
|
|
|
return view('projectsClients/executionProjectNew', [
|
|
'DatasProject' => $DatasProject,
|
|
'equipmentsTypes' => $equipmentsTypes,
|
|
'receiveCompany' => $receiveCompany,
|
|
'filteredUsers' => $filteredUsers
|
|
]);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public function changeFromExecutionToPlanning($projectID)
|
|
{
|
|
$receiveCompanyProject = CompanyProject::where('company_projects_id', $projectID)->first();
|
|
|
|
if ($receiveCompanyProject) {
|
|
$receiveCompanyProject->order_project = 1; // Supondo que 1 seja 'Planeamento'
|
|
$receiveCompanyProject->save();
|
|
return redirect()->route('articulated_2', ['projectID' => $receiveCompanyProject->company_projects_id])
|
|
->with('success', 'O projeto foi alterado para Planeamento.');
|
|
} else {
|
|
return back()->with('error', 'Projeto não encontrado.');
|
|
}
|
|
}
|
|
|
|
|
|
public function receiveWorkstationExecutionProject($receiveNumberProject)
|
|
{
|
|
$model = ConstructionWorkstation::where('company_projects_id', $receiveNumberProject)->with('workstationsAssociationTasks');
|
|
|
|
return DataTables::of($model)
|
|
->addColumn('workstations_Association_Tasks', function ($row) {
|
|
return $row->workstationsAssociationTasks->map(function ($task) {
|
|
return $task->elementalTask->elemental_tasks_code;
|
|
})->implode('-');
|
|
})
|
|
|
|
->toJson();
|
|
}
|
|
|
|
public function receiveEquipmentIdForShowModal($EquipmentID)
|
|
{
|
|
// Recebe e encontra os dados do Equipamento indicada na Tabela.
|
|
$equipment = Equipment::find($EquipmentID);
|
|
|
|
// Recebe todas as tarefas e devolve em um Array
|
|
$task_codes = $equipment->orderEquipmentTasks->map(function ($task) {
|
|
return $task->elementalTask->elemental_tasks_code;
|
|
})->toArray();
|
|
|
|
$receveControlEquipment = ControlEquipmentWorkstation::where('equipment_id', $EquipmentID)->get();
|
|
|
|
$receiveCommentsEquipment = EquipmentComments::where('equipment_id', $EquipmentID)->get();
|
|
|
|
// return view('projectsClients/executionProject',['receveControlEquipment'=>$receveControlEquipment]);
|
|
return response()->json(['task_codes' => $task_codes, 'receveControlEquipment' => $receveControlEquipment, 'receiveCommentsEquipment' => $receiveCommentsEquipment]);
|
|
}
|
|
|
|
public function showQrcodesInProject($projectNumber)
|
|
{
|
|
|
|
$numberProject = CompanyProject::find($projectNumber);
|
|
|
|
$equipmentsTypes = EquipmentType::all();
|
|
|
|
$plant = Plant::where('plant_id', $numberProject->plant_id)->first();
|
|
|
|
$unitsProject = Unit::where('plant_id', $plant->plant_id)->get();
|
|
|
|
// Carrega todos os equipamentos para um dado projeto
|
|
$equipmentsProjects = Equipment::where('company_projects_id', $projectNumber)->get();
|
|
|
|
return view('projectsClients/showQrcodesInProject')
|
|
->with('numberProject', $numberProject)
|
|
->with('unitsProject', $unitsProject)
|
|
->with('equipmentsTypes', $equipmentsTypes)
|
|
->with('equipmentsProjects', $equipmentsProjects);
|
|
}
|
|
|
|
|
|
|
|
// public function receiveDetailsEquipmentsProject(Request $request)
|
|
// {
|
|
// $numberProject = $request->input('receiveNumberProject');
|
|
// $tableType = $request->input('tableType'); // Captura o tipo de tabela
|
|
|
|
// // Para
|
|
// if ($tableType == 'pending') {
|
|
|
|
// $initialQuery = Equipment::where('company_projects_id', $numberProject);
|
|
|
|
// } else {
|
|
// // Lógica para a tabela 'normal'
|
|
// $initialQuery = Equipment::where('company_projects_id', $numberProject);
|
|
// }
|
|
|
|
// $query = $initialQuery->get(); // Certifique-se de usar get() para retornar uma coleção
|
|
|
|
// return DataTables::of($query)
|
|
// ->addColumn('equipment_type_name', function ($query) {
|
|
// // Retorna 'equipment_type_name' do relacionamento 'equipmentType'
|
|
// return $query->equipmentType ? $query->equipmentType->equipment_type_name : 'N/A';
|
|
// })
|
|
// ->addColumn('unit_name', function ($query) {
|
|
// // Retorna 'unit_name' do relacionamento 'unit'
|
|
// return $query->unit ? $query->unit->unit_name : 'N/A';
|
|
// })
|
|
// ->addColumn('ambit_name', function ($query) {
|
|
// $firstEquipmentWorkHistory = $query->equipmentWorkHistory->first();
|
|
// return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description;
|
|
// })
|
|
// ->make(true);
|
|
// }
|
|
|
|
public function receiveDetailsEquipmentsProject(Request $request)
|
|
{
|
|
$numberProject = $request->input('receiveNumberProject');
|
|
$tableType = $request->input('tableType'); // Captura o tipo de tabela
|
|
|
|
// Ajusta a query inicial dependendo se estamos buscando equipamentos pendentes ou normais.
|
|
$initialQuery = Equipment::where('company_projects_id', $numberProject)
|
|
->whereHas('equipmentWorkHistory', function ($query) use ($tableType) {
|
|
//Para a tabela com status = pending' deve ir equipamentos com status = 1 pois estao pendentes para Aprovar
|
|
// Para os restantes equipamentos vao para a tabela que lista os equipamentos da Obra,porem apenas os equipmentos com status = 0
|
|
//Equipamentos concluidos e aprovados,vao ter o status = 2 e servir apenas para visualizar
|
|
|
|
// $status = $tableType === 'pending' ? 1 : 0;
|
|
// $query->where('equipment_status_project', $status);
|
|
|
|
// Definir o status com base no tipo de tabela
|
|
if ($tableType === 'pending') {
|
|
$status = 1; // Equipamentos pendentes para aprovação
|
|
} else if ($tableType === 'completed') {
|
|
$status = 2; // Equipamentos concluídos e aprovados
|
|
} else {
|
|
$status = 0; // Outros equipamentos em andamento (normal)
|
|
}
|
|
$query->where('equipment_status_project', $status);
|
|
});
|
|
|
|
$query = $initialQuery->get(); // Obtém a coleção de equipamentos com base nos critérios
|
|
|
|
return DataTables::of($query)
|
|
->addColumn('equipment_type_name', function ($equipment) {
|
|
// Retorna 'equipment_type_name' do relacionamento 'equipmentType'
|
|
return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A';
|
|
})
|
|
->addColumn('unit_name', function ($equipment) {
|
|
// Retorna 'unit_name' do relacionamento 'unit'
|
|
return $equipment->unit ? $equipment->unit->unit_name : 'N/A';
|
|
})
|
|
->addColumn('ambit_name', function ($equipment) {
|
|
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
|
|
return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description : 'N/A';
|
|
})
|
|
|
|
//Vai ser 2 tipos de action, para as tabelas.
|
|
// ->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) {
|
|
// $equipmentStatus = $tableType === 'pending' ? 1 : 0;
|
|
// $actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['equipmentStatus' => $equipmentStatus, 'projectID' => $numberProject, 'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
// return $actionBtn;
|
|
->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) {
|
|
$equipmentStatus = ($tableType === 'pending' ? 1 : ($tableType === 'completed' ? 2 : 0));
|
|
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['equipmentStatus' => $equipmentStatus, 'projectID' => $numberProject, 'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
return $actionBtn;
|
|
})
|
|
|
|
->make(true);
|
|
}
|
|
|
|
|
|
|
|
|
|
// public function receiveEquipmentsExecutionProject($receiveNumberProject)
|
|
// {
|
|
// // Recebe os dados vindos da funcao 'data' criada na view
|
|
// $equipment_type_id = request('equipment_type_id');
|
|
// $ambits_id = request('ambits_id');
|
|
|
|
// //Recebe sempre apenas os equipamentos relacionados a obra
|
|
// $model = Equipment::where('company_projects_id', $receiveNumberProject);
|
|
|
|
// // 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 Âmbito (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);
|
|
// }
|
|
// }
|
|
|
|
// return DataTables::of($model)
|
|
// ->addColumn('equipment_type', function ($row) {
|
|
// return $row->equipmentType->equipment_type_name;
|
|
// })
|
|
// ->addColumn('Ambits', function ($row) {
|
|
// return $row->equipmentAssociationAmbit->ambitsEquipment->ambits_description;
|
|
// })
|
|
// ->addColumn('order_tasks', function ($row) {
|
|
// return $row->orderEquipmentTasks->map(function ($task) {
|
|
// return $task->elementalTask->elemental_tasks_code;
|
|
// })->implode('-');
|
|
// })
|
|
// ->addColumn('current_task', function ($row) {
|
|
// return $row->controlEquipmentWorkstation->map(function ($task) {
|
|
// return $task->elementalTask->elemental_tasks_code;
|
|
// })->implode('-');
|
|
// })
|
|
// ->toJson();
|
|
// }
|
|
}
|