diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php
index 56ab7c52..30eb1b15 100644
--- a/app/Http/Controllers/ClientController.php
+++ b/app/Http/Controllers/ClientController.php
@@ -419,11 +419,8 @@ public function getDataProjects(Request $request)
public function receiveProjectsClient()
{
$client = Auth::user()->user_id;
- // DD($client);
$recebeCompanyID = AssociationCompanyUser::where('user_id', $client)->first();
-
-
$recevePlantClient = Plant::where('company_id', $recebeCompanyID->company_id)->get();
// Extrai os plant_id da coleção $recevePlantClient
@@ -439,7 +436,11 @@ public function receiveManageAssetsClient()
{
$client = Auth::user()->user_id;
- $allPlantsClient = Plant::where('user_id', $client)->get();
+ $recebeCompanyID = AssociationCompanyUser::where('user_id', $client)->first();
+
+ $client = $recebeCompanyID->company_id;
+
+ $allPlantsClient = Plant::where('company_id', $client)->get();
// Extrai os plant_id da coleção $recevePlantClient
$plantsIds = $allPlantsClient->pluck('plant_id');
@@ -460,12 +461,19 @@ public function receiveManageAssetsClient()
public function reportingDataClient($clientID = null)
{
-
+ //Deve separar bem, entre receber o cliente pelo perfil de Admin e entrar como cliente.
// Se clientID não foi passado, usamos o ID do usuário autenticado
if (is_null($clientID)) {
$clientID = Auth::user()->user_id;
+ $recebeAssociationCompany = AssociationCompanyUser::where('user_id', $clientID)->first();
+
+ $receiveCompany = Company::where('company_id',$recebeAssociationCompany->company_id)->first();
+
+ $clientID = $recebeAssociationCompany->company_id;
+
}
+
$companyDetails = Company::where('company_id', $clientID)->first();
// Busca todas as Instalacoes com base no id do CLIENTE
diff --git a/app/Http/Controllers/ExecutionProjectController.php b/app/Http/Controllers/ExecutionProjectController.php
index 06c9a87d..e5691f0d 100755
--- a/app/Http/Controllers/ExecutionProjectController.php
+++ b/app/Http/Controllers/ExecutionProjectController.php
@@ -78,6 +78,7 @@ public function getDataEquipment(Request $request)
// 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');
@@ -157,10 +158,20 @@ public function getDataEquipment(Request $request)
->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
@@ -537,11 +548,13 @@ public function receiveExecutionProject($ProjectId)
});
});
+
// $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
@@ -553,6 +566,7 @@ public function receiveExecutionProject($ProjectId)
} 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,
@@ -677,8 +691,19 @@ public function receiveDetailsEquipmentsProject(Request $request)
->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, nao vao entrar em nenhuma das 2 listas ate agora.
- $status = $tableType === 'pending' ? 1 : 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);
});
@@ -699,8 +724,12 @@ public function receiveDetailsEquipmentsProject(Request $request)
})
//Vai ser 2 tipos de action, para as tabelas.
+ // ->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) {
+ // $equipmentStatus = $tableType === 'pending' ? 1 : 0;
+ // $actionBtn = '';
+ // return $actionBtn;
->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) {
- $equipmentStatus = $tableType === 'pending' ? 1 : 0;
+ $equipmentStatus = ($tableType === 'pending' ? 1 : ($tableType === 'completed' ? 2 : 0));
$actionBtn = '';
return $actionBtn;
})
diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php
index cbc226d9..ef06d94e 100755
--- a/app/Http/Controllers/ProjectoDatacontroller.php
+++ b/app/Http/Controllers/ProjectoDatacontroller.php
@@ -154,19 +154,29 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
$detailsProject->user_id = $detailsCliente->user_id;
- $detalsEquipmentWorkProject = EquipmentWorkHistory::where('equipment_id', $equipmentID)
+ $detailsEquipmentWorkProject = EquipmentWorkHistory::where('equipment_id', $equipmentID)
->where('company_projects_id', $projectID)->first();
+ $receiveComments = EquipmentComment::with(['user'])
+ ->where('equipmentWorkHistorys_id', $detailsEquipmentWorkProject->equipmentWorkHistorys_id)
+ ->where('company_projects_id', $detailsProject->company_projects_id)
+ ->get()
+ ->transform(function ($comment) {
+ // Adiciona uma nova propriedade ao objeto de comentário
+ $comment->type_users = $comment->user->type_users;
+ return $comment;
+ });
+
$detalsEquipment = Equipment::where('equipment_id', $equipmentID)->first();
//recebe todos os dados referentes ao equipamento
// OBS : Porem deveria confirma se a tarefa foi mesmo concluida.
- // $receiveAllTasksHistiory = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
+ // $receiveAllTasksHistiory = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $detailsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
- $receiveAllTasksEquipmentInHistory = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
+ $receiveAllTasksEquipmentInHistory = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detailsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
- $receiveAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)->first();
+ $receiveAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $detailsEquipmentWorkProject->equipmentWorkHistorys_id)->first();
// $tasksAssociatedWithAmbit = TasksAssociationAmbits::where('ambits_equipment_id', $receiveAmbit->ambits_id)->get();
$tasksAssociatedWithAmbit = TasksAssociationAmbits::with('elementalTask')
@@ -183,14 +193,13 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
}
}
$receiveAllTasksHistiory = ControlEquipmentWorkstation::with('workstationsTaskAnswers')
- ->where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)
+ ->where('equipmentWorkHistorys_id', $detailsEquipmentWorkProject->equipmentWorkHistorys_id)
->whereNotNull('entry_date') // Verifica se 'entry_date' não é null
->whereNotNull('departure_date') // Verifica se 'departure_date' não é null
->has('workstationsTaskAnswers') // Garante que haja pelo menos uma 'workstationsTaskAnswers' relacionada
+ ->orderBy('elemental_tasks_id', 'asc')
->get();
- // dd($receiveAllTasksHistiory);
-
foreach ($receiveAllTasksHistiory as $taskHistory) {
$taskHistory->cardTypeStyle = 'gray'; // Adiciona o campo 'cardTypeStyle'
@@ -245,7 +254,6 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
}
}
-
// Nao esta a receber itens
// dd($allWorkstationsTaskAnswers);
@@ -255,7 +263,7 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
// dd($receiveAmbit);
- return view('projectsClients.showAmbitDetailProjectHistory', compact('equipmentStatus', 'detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment'));
+ return view('projectsClients.showAmbitDetailProjectHistory', compact('receiveComments', 'equipmentStatus', 'detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment','detailsEquipmentWorkProject'));
}
@@ -416,42 +424,6 @@ public function projectDetails_11($projectID, $equipmentID)
->get()
->keyBy('elemental_tasks_id'); // Keying by elemental_tasks_id para fácil acesso
-
- // $filteredTasks = $filteredTasks->map(function ($task) use ($elementalTasksDetails) {
- // // Verifica se o detalhe da tarefa elemental existe na coleção $elementalTasksDetails, com base no elemental_tasks_id
- // if (isset ($elementalTasksDetails[$task->elemental_tasks_id])) {
- // $elementalTaskDetail = $elementalTasksDetails[$task->elemental_tasks_id];
-
- // // Adiciona novos atributos ao item da coleção $task com os detalhes da tarefa elemental
- // $task->elemental_tasks_code = $elementalTaskDetail->elemental_tasks_code;
- // $task->elemental_tasks_description = $elementalTaskDetail->elemental_tasks_description;
- // $task->further_tasks_description = $elementalTaskDetail->further_tasks_description; // Ajuste este campo conforme sua existência e necessidade
- // }
-
- // // Retorna o item modificado para a nova coleção
- // return $task;
- // });
-
- // $filteredTasks = $filteredTasks->map(function ($task) use ($DetailsTasks) {
- // // Calcula o execution_order da tarefa anterior
- // $executionOrderBefore = $task->execution_order - 1;
-
- // // Busca a tarefa anterior com base no execution_order calculado
- // $taskBefore = $DetailsTasks->first(function ($item) use ($executionOrderBefore) {
- // return $item->execution_order == $executionOrderBefore;
- // });
-
- // // Se encontrou a tarefa anterior, adiciona seu elemental_tasks_id ao item atual
- // if ($taskBefore) {
- // $task->taskIDBeforeExecutionOrder = $taskBefore->elemental_tasks_id;
- // } else {
- // // Se não encontrar a tarefa anterior, pode definir como null ou outro valor padrão
- // $task->taskIDBeforeExecutionOrder = null;
- // }
-
- // return $task;
- // });
-
$filteredTasks = $filteredTasks->map(function ($task) use ($elementalTasksDetails, $DetailsTasks) {
// Primeiro bloco: Adiciona detalhes da tarefa elemental
if (isset ($elementalTasksDetails[$task->elemental_tasks_id])) {
@@ -507,7 +479,9 @@ public function projectDetails_11($projectID, $equipmentID)
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
}
- return view('projectsClients.articulated_2_ShowEquipment', compact('detailsProject', 'dataEquipment', 'filteredTasks', 'OrdemTasks', 'DetailsTasks', 'detailsEquipmentWorkHistory', 'specificAttributesArray'));
+
+
+ return view('projectsClients.articulated_2_ShowEquipment', compact('receiveComments', 'detailsProject', 'dataEquipment', 'filteredTasks', 'OrdemTasks', 'DetailsTasks', 'detailsEquipmentWorkHistory', 'specificAttributesArray'));
}
//Funcao que recebe a Acoes do dataTables do portifolio.
@@ -753,21 +727,36 @@ public function changeEquipmentStatusOnProject(Request $request)
if ($request->choiseAdminForEquipment == 'approve') {
//Se for aprovado, libera o equipamento para relatorio.
- $detailsEquipmentWorkHistory->equipment_status_project = 2 ;
+ $detailsEquipmentWorkHistory->equipment_status_project = 2;
$detailsEquipmentWorkHistory->save();
- }
+ }
//Sempre vai criar o comentario, a diferenca a se o equipamento tem status : 2 o comanterio vai para o relatorio,se nao vai para os comentarios da Ws.
- $createCommet= new EquipmentComment;
+ $createCommet = new EquipmentComment;
$createCommet->equipmentWorkHistorys_id = $detailsEquipmentWorkHistory->equipmentWorkHistorys_id;
$createCommet->user_id = $receivedetailsUser->user_id;
$createCommet->company_projects_id = $detailsEquipmentWorkHistory->company_projects_id;
$createCommet->creation_date = now();
- $createCommet->comment =$request->comment;
+ $createCommet->comment = $request->comment;
$createCommet->save();
return redirect()->route('ExecutionProject', ['projectID' => $request->projectID])
- ->with('success', 'Equipamento aprovado, liberado para relatório.');
+ ->with('success', 'Equipamento aprovado, liberado para relatório.');
}
+
+ public function createComment(Request $request){
+
+ auth()->user();
+ $newComment = new EquipmentComment;
+ $newComment->company_projects_id = $request->projectID;
+ $newComment->equipmentWorkHistorys_id = $request->equipmentID;
+ $newComment->user_id = auth()->user()->user_id;
+ $newComment->creation_date = now();
+ $newComment->comment = $request->comment;
+ $newComment->save();
+
+ return back();
+ }
+
}
diff --git a/app/Http/Controllers/WorkstationsJobsController.php b/app/Http/Controllers/WorkstationsJobsController.php
index f59ddc0f..2d3d6b5c 100755
--- a/app/Http/Controllers/WorkstationsJobsController.php
+++ b/app/Http/Controllers/WorkstationsJobsController.php
@@ -6,6 +6,7 @@
use App\Models\ControlEquipmentWorkstation;
use App\Models\ElementalTasks;
use App\Models\Equipment;
+use App\Models\EquipmentComment;
use App\Models\EquipmentWorkHistory;
use App\Models\OrderEquipmentTasks;
use App\Models\workstationsTaskAnswers;
@@ -262,7 +263,6 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor
// Ao selecionar o equipamento para se inicializar a tarefa deve mostrar os dados relacionados.
public function getEquipmentData($equipment_id, $component_tag)
{
- // dd($equipment_id);
//vai receber o email atual, no caso o da workstation que se encontra
$userEmail = Auth::user();
// Busca os dados da Ws com base no Login
@@ -307,7 +307,6 @@ public function getEquipmentData($equipment_id, $component_tag)
->orderBy('execution_order', 'asc')
->get();
- // dd($recebeTasksForEquipment);
//Busca as tarefas que podem ser feitas pela WS Atual a partir do Email
$userTasks = DB::table('users as u')
@@ -366,6 +365,7 @@ public function getEquipmentData($equipment_id, $component_tag)
$query = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereNull('departure_date')
+ ->orderByDesc('departure_date') // Ordena por departure_date de forma decrescente
->where('status', 0)
->whereNull('id_workstations')
->whereNull('elemental_tasks_id');
@@ -373,7 +373,6 @@ public function getEquipmentData($equipment_id, $component_tag)
if ($query->first()) {
$existingDataControlEquipment = $query->first();
-
}
}
// Verifica se um registro foi encontrado e atualiza conforme necessário
@@ -438,12 +437,14 @@ public function getEquipmentData($equipment_id, $component_tag)
elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[2])) {
$task->cardType = 'card-primary';
$task->cardTypeStyle = 'gray'; // Define o estilo de cor
+
// Consulta ControlEquipmentWorkstation para verificar as condições especificadas
$controlEquipment = ControlEquipmentWorkstation::where('elemental_tasks_id', $task->elemental_tasks_id)
->whereNotNull('entry_date')
->whereNotNull('departure_date')
+ ->orderByDesc('departure_date') // Ordena por departure_date de forma decrescente
->first();
-
+
if ($controlEquipment) {
// Se encontrar, atribuir control_equipment_workstation_id
$task->control_equipment_workstation_id = $controlEquipment->control_equipment_workstation_id;
@@ -480,6 +481,7 @@ public function getEquipmentData($equipment_id, $component_tag)
->where('elemental_tasks_id', $task->elemental_tasks_id)
->whereNotNull('entry_date')
->whereNotNull('departure_date')
+ ->orderByDesc('departure_date') // Ordena por departure_date de forma decrescente
->first();
if ($controlEquipment) {
@@ -526,10 +528,22 @@ public function getEquipmentData($equipment_id, $component_tag)
$recebeTasksForEquipment = $recebeTasksForEquipment->sortBy('execution_order');
}
- // dd($recebeTasksForEquipment);
+ $receiveComments = EquipmentComment::with(['user'])
+ ->where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
+ ->where('company_projects_id', $receiveDataEquipment->company_projects_id)
+ ->get()
+ ->transform(function ($comment) {
+ // Adiciona uma nova propriedade ao objeto de comentário
+ $comment->type_users = $comment->user->type_users;
+ return $comment;
+ });
+
+ // dd($recebeTasksForEquipment);
+
return view('workstations.workstations', [
// Deve receber o atual COntrol ID ? tudo a vez que atualizar ??
+ 'receiveComments' => $receiveComments,
'dataControlEquipment' => $receiveDataControlEquipment,
'receiveDataEquipment' => $receiveDataEquipment,
'recebeTasksForEquipment' => $recebeTasksForEquipment,
diff --git a/app/Http/ViewComposers/WorkstationComposer copy.php b/app/Http/ViewComposers/WorkstationComposer copy.php
index ebb1344e..b2bcbb96 100755
--- a/app/Http/ViewComposers/WorkstationComposer copy.php
+++ b/app/Http/ViewComposers/WorkstationComposer copy.php
@@ -194,8 +194,6 @@ public function compose(View $view)
return $equipment;
});
- dd($receiveAllEquipmentOfProject);
-
$completedEquipments = collect(); // Coleção para armazenar equipamentos concluídos
// Inicializa um array para armazenar o status de cada equipamento
diff --git a/app/Livewire/Execução/EquipmentsDashboard.php b/app/Livewire/Execução/EquipmentsDashboard.php
index e7e6f193..5890fbaa 100755
--- a/app/Livewire/Execução/EquipmentsDashboard.php
+++ b/app/Livewire/Execução/EquipmentsDashboard.php
@@ -95,7 +95,7 @@ public function refreshDataEquipments($datasProject)
$totalEquipments = EquipmentWorkHistory::where('company_projects_id', $datasProject->company_projects_id)->get();
- // $detalsEquipmentWorkProject = EquipmentWorkHistory::where('equipment_id', $equipmentID)
+ // $detailsEquipmentWorkProject = EquipmentWorkHistory::where('equipment_id', $equipmentID)
// ->where('company_projects_id', $projectID)->first();
// Busca o valor total de todos os equipamentos encontrados
diff --git a/app/Livewire/Execução/TasksDashboard.php b/app/Livewire/Execução/TasksDashboard.php
index 8ff7122b..cbd422c6 100755
--- a/app/Livewire/Execução/TasksDashboard.php
+++ b/app/Livewire/Execução/TasksDashboard.php
@@ -113,7 +113,6 @@ public function mount($datasProject)
return $group->unique('equipmentWorkHistorys_id')->count();
});
-
$newArray = [];
foreach ($tasksCount as $taskId => $count) {
diff --git a/app/Models/AssociationCompanyUser.php b/app/Models/AssociationCompanyUser.php
index b0637d63..49411be8 100644
--- a/app/Models/AssociationCompanyUser.php
+++ b/app/Models/AssociationCompanyUser.php
@@ -15,4 +15,6 @@ class AssociationCompanyUser extends Model
protected $fillable = ['association_company_user_id', 'company_id', 'user_id'];
+
+
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 99033bf4..d342e981 100755
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -13,7 +13,7 @@
class User extends Authenticatable
-// implements MustVerifyEmail
+ // implements MustVerifyEmail
{
use HasApiTokens, HasFactory, Notifiable;
@@ -26,8 +26,8 @@ class User extends Authenticatable
*
* @var array
*/
-
- protected $fillable = ['user_id','user_name', 'email', 'password', 'user_phone', 'user_nif', 'type_users'];
+
+ protected $fillable = ['user_id', 'user_name', 'email', 'password', 'user_phone', 'user_nif', 'type_users'];
/**
@@ -53,16 +53,24 @@ class User extends Authenticatable
// return $this->belongsTo(TypeUser::class, 'type_users', 'type_user_id');
// }
- public function userType() {
+ public function userType()
+ {
return $this->belongsTo(TypeUser::class, 'type_users', 'type_user_id');
}
- public function plants(){
- return $this->hasMany(Plant::class,'user_id', 'user_id');
+ public function plants()
+ {
+ return $this->hasMany(Plant::class, 'user_id', 'user_id');
}
-
+
public function companies()
{
return $this->belongsToMany(Company::class, 'association_company_user', 'user_id', 'company_id');
}
+
+ public function comments()
+ {
+ return $this->hasMany(EquipmentComment::class, 'user_id');
+ }
+
}
diff --git a/resources/views/Admin/DataManagement/manageassets.blade.php b/resources/views/Admin/DataManagement/manageassets.blade.php
index cbc5919f..09be2448 100755
--- a/resources/views/Admin/DataManagement/manageassets.blade.php
+++ b/resources/views/Admin/DataManagement/manageassets.blade.php
@@ -23,7 +23,6 @@