436 lines
22 KiB
PHP
436 lines
22 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\AmbitsEquipment;
|
|
use App\Models\Equipment;
|
|
use App\Models\EquipmentAssociationAmbit;
|
|
use App\Models\EquipmentWorkHistory;
|
|
use App\Models\GeneralAttributesEquipment;
|
|
use App\Models\SpecificAttributesEquipmentType;
|
|
use App\Models\Unit;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
use App\Models\CompanyProject;
|
|
use App\Models\EquipmentType;
|
|
use App\Models\Plant;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
use Yajra\DataTables\Facades\DataTables;
|
|
|
|
use PDF;
|
|
|
|
class ClientController extends Controller
|
|
{
|
|
|
|
public function showReportingForAmbitsProject($ambitId, $projectId)
|
|
{
|
|
$dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first();
|
|
// $receiveDataEquipments = Equipment::where('company_projects_id', $projectId)->get();
|
|
|
|
return view('userClient.showReportingAllEquipmentsForAmbitProject', compact('ambitId', 'projectId', 'dataAmbit'));
|
|
|
|
}
|
|
public function getEquipmentsOfAmbit(Request $request)
|
|
{
|
|
|
|
$projectId = $request->get('projectId');
|
|
$ambitId = $request->get('ambitId');
|
|
|
|
//Recebe os dados do Ambito
|
|
$dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first();
|
|
|
|
$receiveDataEquipments = Equipment::where('equipments.company_projects_id', $projectId)
|
|
->join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id')
|
|
->select('equipment_work_historys.equipmentWorkHistorys_id', 'equipment_work_historys.ispt_number') // Adicionei 'equipment_work_historys.ispt_number' aqui
|
|
->pluck('equipmentWorkHistorys_id');
|
|
|
|
$filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id)
|
|
->whereIn('equipmentWorkHistorys_id', $receiveDataEquipments)
|
|
->get();
|
|
|
|
$equipmentWorkHistoryIds = $filteredAssociations->pluck('equipmentWorkHistorys_id');
|
|
|
|
$query = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)
|
|
->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id')
|
|
->select([
|
|
'equipments.*',
|
|
'equipment_work_historys.ispt_number as ispt_number',
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 9), 'n/a') as dn"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 10), 'n/a') as dim"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 11), 'n/a') as pid"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 13), 'n/a') as isolation"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 15), 'n/a') as crane"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 23), 'n/a') as scaffold"),
|
|
])
|
|
->get();
|
|
|
|
return DataTables::of($query)
|
|
// Adicione aqui qualquer manipulação de dados ou colunas adicionais que você precise
|
|
->make(true);
|
|
}
|
|
|
|
|
|
public function showReportingForAmbitsProjectPdf($ambitId, $projectId)
|
|
{
|
|
// Obter o caminho da imagem do usuário ou uma imagem padrão
|
|
|
|
// Primeiro precisa identificar se quem esta a visualizar o relatorio e o Admin ou o Cliente
|
|
$userLogoPath = Auth::user()->user_logo ? public_path('user_logos/' . Auth::user()->user_logo) : public_path('user_logos/logoISPT4.0.jpg');
|
|
|
|
// Pega a data e hora atual
|
|
$dataAtual = Carbon::now();
|
|
|
|
// Se quiser formatar a data, pode fazer assim:
|
|
$dataFormatada = $dataAtual->format('Y-m-d H:i:s');
|
|
|
|
$dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first();
|
|
|
|
$receiveDataEquipments = Equipment::where('equipments.company_projects_id', $projectId) // Adicionado 'equipments.' para remover a ambiguidade
|
|
->join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id')
|
|
->select('equipment_work_historys.equipmentWorkHistorys_id', 'equipments.*') // Pegando o ID da tabela equipment_work_historys e todos os campos da tabela equipments
|
|
->get();
|
|
|
|
$filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id)
|
|
->whereIn('equipmentWorkHistorys_id', $receiveDataEquipments->pluck('equipmentWorkHistorys_id')) // Usando equipmentWorkHistorys_id em vez de equipment_id
|
|
->get();
|
|
|
|
$equipmentWorkHistoryIds = $filteredAssociations->pluck('equipmentWorkHistorys_id');
|
|
|
|
// Agora, em vez de buscar diretamente em Equipment, vamos pegar os detalhes via EquipmentWorkHistory
|
|
$equipmentDetails = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)
|
|
->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id')
|
|
->select([
|
|
'equipments.*',
|
|
'equipment_work_historys.*',
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 10), 'n/a') as dim"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 9), 'n/a') as dn"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 11), 'n/a') as pid"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 23), 'n/a') as scaffold"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 13), 'n/a') as isolation"),
|
|
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 15), 'n/a') as crane"),
|
|
])
|
|
->get();
|
|
|
|
|
|
$detalsProject = CompanyProject::where('company_projects_id', $projectId)->first();
|
|
|
|
|
|
$pdf = PDF::loadView('userClient.pdfReportings.equipmentsForAmbitPdf', [
|
|
'equipmentDetails' => $equipmentDetails,
|
|
'userLogoPath' => $userLogoPath,
|
|
'dataAmbit' => $dataAmbit,
|
|
'projectId' => $projectId,
|
|
'detalsProject' => $detalsProject,
|
|
'dataFormatada' => $dataFormatada
|
|
])->setPaper('a4', 'landscape');
|
|
return $pdf->stream('relatorio_teste.pdf');
|
|
|
|
// return view('userClient.pdfReportings.showReportingAllEquipmentsForAmbitProject', [
|
|
// 'userLogoPath' => $userLogoPath,
|
|
// 'dataAmbit' => $dataAmbit,
|
|
// 'projectId' => $projectId
|
|
// ]);
|
|
}
|
|
|
|
public function getDataAllEquipmentsForAmbitOfProject(Request $request)
|
|
{
|
|
$projectId = $request->get('projectId');
|
|
$dataAmbit = $request->get('dataAmbit');
|
|
|
|
// // Construa a consulta para buscar os equipamentos associados ao âmbito e projeto especificados
|
|
// $query = Equipment::whereHas('ambits', function ($q) use ($dataAmbit) {
|
|
// $q->where('id', $dataAmbit); // Aqui, 'id' deve ser o campo que identifica unicamente um âmbito na tabela de âmbitos
|
|
// })->whereHas('projects', function ($q) use ($projectId) {
|
|
// $q->where('id', $projectId); // Aqui, 'id' deve ser o campo que identifica unicamente um projeto na tabela de projetos
|
|
// });
|
|
|
|
// // Utilize o Yajra DataTables para formatar a resposta
|
|
// return DataTables::of($query)
|
|
// // Adicione aqui qualquer coluna ou manipulação de dados adicionais que você precise
|
|
// ->make(true);
|
|
|
|
// Primeiro, vamos filtrar os equipamentos que pertencem ao projeto especificado.
|
|
$equipmentsOfProject = Equipment::where('company_projects_id', $projectId)->pluck('equipment_id');
|
|
|
|
// Em seguida, vamos filtrar esses equipamentos para obter apenas aqueles associados ao âmbito especificado.
|
|
$equipmentsQuery = Equipment::whereIn('equipment_id', $equipmentsOfProject)
|
|
->whereHas('equipmentAssociationAmbit', function ($q) use ($dataAmbit) {
|
|
$q->where('ambits_id', $dataAmbit);
|
|
})
|
|
->select(['equipment_id', 'ispt_number', 'unit_id', 'equipment_tag']); // Selecionar apenas as colunas necessárias
|
|
|
|
// Utilize o Yajra DataTables para formatar a resposta
|
|
return DataTables::of($equipmentsQuery)
|
|
// Adicione aqui qualquer manipulação de dados ou colunas adicionais que você precise
|
|
->make(true);
|
|
}
|
|
|
|
public function getDataAmbitsOfProject(Request $request)
|
|
{
|
|
// Recebe o id do Projecto atual
|
|
$projectId = $request->get('projectId');
|
|
|
|
// Recebe os IDS passados de todos os âmbitos do projeto atual
|
|
$AmbitsIdString = $request->get('AmbitsIdString');
|
|
$AmbitsIdArray = explode(",", $AmbitsIdString); // Converter de string para Array
|
|
|
|
$query = AmbitsEquipment::whereIn('ambits_id', $AmbitsIdArray)
|
|
->select(['ambits_id', 'ambits_description']);
|
|
|
|
return Datatables::of($query)
|
|
->addColumn('amountEquipment', function ($ambitsEquipment) use ($projectId) {
|
|
// Contar quantos equipamentos estão associados a este âmbito para o projeto específico
|
|
return EquipmentAssociationAmbit::where('ambits_id', $ambitsEquipment->ambits_id)
|
|
// Primeiro, juntar-se com equipment_work_historys
|
|
->join('equipment_work_historys', 'equipment_association_ambits.equipmentWorkHistorys_id', '=', 'equipment_work_historys.equipmentWorkHistorys_id')
|
|
// Depois, juntar-se com equipments
|
|
->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id')
|
|
// Agora, podemos filtrar pela company_projects_id
|
|
->where('equipments.company_projects_id', $projectId)
|
|
->count();
|
|
})
|
|
->addColumn('action', function ($dataAmbitProject) use ($projectId) {
|
|
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showReportingForAmbitsProject', ['ambitId' => $dataAmbitProject->ambits_id, 'projectId' => $projectId]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
return $actionBtn;
|
|
})
|
|
->make(true);
|
|
|
|
}
|
|
|
|
|
|
public function showReportingEquipmentProject($dataEquipment)
|
|
{
|
|
|
|
dd($dataEquipment);
|
|
// return view('showReportingEquipmentProject');
|
|
}
|
|
|
|
public function getDataEquipmentsOfProject(Request $request)
|
|
{
|
|
$projectId = $request->get('projectId');
|
|
|
|
$query = Equipment::join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id')
|
|
// Juntar-se com equipment_association_ambits usando equipment_work_historys
|
|
->join('equipment_association_ambits', 'equipment_work_historys.equipmentWorkHistorys_id', '=', 'equipment_association_ambits.equipmentWorkHistorys_id')
|
|
// Juntar-se com ambits_equipments
|
|
->join('ambits_equipments', 'equipment_association_ambits.ambits_id', '=', 'ambits_equipments.ambits_id')
|
|
// Filtrar por company_projects_id
|
|
->where('equipments.company_projects_id', $projectId)
|
|
// Selecionar os campos desejados
|
|
->select([
|
|
'equipments.equipment_id',
|
|
'equipments.unit_id',
|
|
'equipments.equipment_tag',
|
|
'equipments.equipment_type_id',
|
|
'ambits_equipments.ambits_description as ambits_description'
|
|
]);
|
|
|
|
$dataEquipentProject = $query->get();
|
|
|
|
|
|
// // Retornar a resposta para o DataTables
|
|
// return Datatables::of($dataEquipentProject)
|
|
|
|
// // ->addColumn('action', function ($dataEquipment) {
|
|
// // $actionBtn = '<a title="Detalhes do equipamento" href="' . route('showReportingEquipmentProject', ['dataEquipment' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
// // return $actionBtn;
|
|
// // })
|
|
// ->addColumn('action', function ($dataEquipment) {
|
|
// $actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['projectID' => $projectId,'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
// return $actionBtn;
|
|
// })
|
|
|
|
// ->make(true);
|
|
|
|
return Datatables::of($dataEquipentProject)
|
|
->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId
|
|
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['projectID' => $projectId, 'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
return $actionBtn;
|
|
})
|
|
->make(true);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
public function showDataDetailsProjectClient($projectID)
|
|
{
|
|
|
|
// Recebe os detalhes do Projecto.
|
|
$receiveDataProject = CompanyProject::where('company_projects_id', $projectID)->first();
|
|
// Recebe todas as Fabricas relacionadas a intalacao do Projecto recebido.
|
|
$receiveUnitsOfProject = Unit::where('plant_id', $receiveDataProject->plant_id)->get();
|
|
//Recebe todos os tipos de equipamentos
|
|
$receiveAllTypeEquipments = EquipmentType::all();
|
|
|
|
$receiveAllEquipmentsOfProject = EquipmentWorkHistory::where('company_projects_id', $projectID)->get();
|
|
|
|
// Obtendo todos os IDs de equipmentWorkHistorys
|
|
$equipmentWorkHistoryIds = $receiveAllEquipmentsOfProject->pluck('equipmentWorkHistorys_id');
|
|
|
|
// para a variavel obter o valor esperado precisamos separar os id como na varaivel acima, ele nao funciona diretamente com a variavel receiveAllEquipmentsOfProject, pois e uma colecao !!
|
|
$receiveEquipmentAssociatedAmbit = EquipmentAssociationAmbit::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)->get();
|
|
|
|
// Recebe os todos os ambitos do projecto
|
|
$AmbitsId = $receiveEquipmentAssociatedAmbit->pluck('ambits_id')->unique()->toArray();
|
|
// Vamos passar os ids dos Ambitos para a view, para envialos para a Tabela Yajra. e carregar com base nos Ambitos
|
|
$AmbitsIdString = implode(",", $AmbitsId);
|
|
// Recebe os dados de cada Ambito
|
|
$receiveDataAmbitsProject = AmbitsEquipment::whereIn('ambits_id', $AmbitsId)->get();
|
|
|
|
return view('userClient.showDataDetailsProjectClient', compact('receiveDataProject', 'receiveUnitsOfProject', 'receiveAllTypeEquipments', 'receiveDataAmbitsProject', 'AmbitsIdString'));
|
|
}
|
|
|
|
|
|
public function getDataProjectsClient(Request $request)
|
|
{
|
|
|
|
// Filtros ...
|
|
$allPlantsClient = $request->get('allPlantsClient');
|
|
$receiveAllPlants = $request->get('receiveAllPlants');
|
|
$receiveAllUnits = $request->get('receiveAllUnits');
|
|
$receiveEquipmentsType = $request->get('receiveEquipmentsType');
|
|
|
|
$clientID = $request->get('clientID');
|
|
|
|
//Criar Filtros para Atualizar os dados com base neles.
|
|
|
|
$allPlantsClient = Plant::where('user_id', $clientID)->pluck('plant_id')->toArray();
|
|
|
|
$query = CompanyProject::with('plant') // Assegure-se de que a relação está correta.
|
|
->whereIn('plant_id', $allPlantsClient)
|
|
->whereNotNull('end_date')
|
|
->select(['company_projects_id', 'plant_id', 'project_company_number', 'company_project_description', 'project_company_responsible', 'date_started', 'end_date']);
|
|
|
|
$dataProjectsClient = $query->get();
|
|
|
|
return Datatables::of($dataProjectsClient)
|
|
->addColumn('plant_name', function ($item) { // Ajuste na função anônima
|
|
return $item->plant ? $item->plant->plant_name : 'N/A'; // Acessando plant_name
|
|
})
|
|
->addColumn('action', function ($projectClient) {
|
|
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showDataDetailsProjectClient', ['projectID' => $projectClient->company_projects_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
|
|
return $actionBtn;
|
|
})
|
|
|
|
->make(true);
|
|
|
|
}
|
|
|
|
public function receiveProjectsClient()
|
|
{
|
|
$client = Auth::user()->user_id;
|
|
|
|
$recevePlantClient = Plant::where('user_id', $client)->get();
|
|
|
|
// Extrai os plant_id da coleção $recevePlantClient
|
|
$plantsIds = $recevePlantClient->pluck('plant_id');
|
|
|
|
// Busca todos os CompanyProject que têm um plant_id dentro da lista $plantIds
|
|
$allProjectsClient = CompanyProject::whereIn('plant_id', $plantsIds)->get();
|
|
|
|
return view('userClient.dashboardClient', compact('allProjectsClient'));
|
|
}
|
|
|
|
public function receiveManageAssetsClient()
|
|
{
|
|
$client = Auth::user()->user_id;
|
|
|
|
$allPlantsClient = Plant::where('user_id', $client)->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');
|
|
|
|
// Recebemos todos os equipamentos do cliente logado.
|
|
$allEquipmentsClient = Equipment::whereIn('unit_id', $unitsIds)->get();
|
|
|
|
// Recebe todos os tipos de equipamento
|
|
$allEquipmentType = EquipmentType::all();
|
|
|
|
return view('userClient.manageAssetsClient', compact('client', 'allPlantsClient', 'allUnitsClient', 'allEquipmentType', 'allEquipmentsClient'));
|
|
|
|
}
|
|
|
|
public function reportingDataClient($clientID = null)
|
|
{
|
|
|
|
// Se clientID não foi passado, usamos o ID do usuário autenticado
|
|
if (is_null($clientID)) {
|
|
$clientID = Auth::user()->user_id;
|
|
}
|
|
|
|
// Busca todas as Instalacoes com base no id do CLIENTE
|
|
$allPlantsClient = Plant::where('user_id', $clientID)->get();
|
|
|
|
// Extrai os plant_id da coleção $recevePlantClient
|
|
$plantsIds = $allPlantsClient->pluck('plant_id');
|
|
|
|
$allProjectsClient = CompanyProject::whereIn('plant_id', $plantsIds)->get();
|
|
|
|
// Obtém todos os anos distintos da coluna 'date_started'
|
|
$yearsProjects = CompanyProject::selectRaw('YEAR(date_started) as year')
|
|
->distinct()
|
|
->orderBy('year', 'desc')
|
|
->pluck('year');
|
|
|
|
return view('userClient.reportingDataClient', compact('clientID', 'allPlantsClient', 'yearsProjects'));
|
|
|
|
}
|
|
|
|
|
|
public function receiveMonths($yearsProjects)
|
|
{
|
|
// Obtenha todos os meses distintos da coluna 'date_started' para o ano especificado
|
|
$monthsData = CompanyProject::selectRaw('MONTH(date_started) as month')
|
|
->whereYear('date_started', $yearsProjects)
|
|
->distinct()
|
|
->orderBy('month', 'asc')
|
|
->get();
|
|
|
|
// Formatar os dados para enviar como JSON
|
|
$formattedData = $monthsData->map(function ($item) {
|
|
$monthName = date("F", mktime(0, 0, 0, $item->month, 1)); // Converta o número do mês para o nome do mês
|
|
return [
|
|
'id' => $item->month, // Você pode optar por enviar o número do mês
|
|
'name' => $monthName // ou o nome do mês, dependendo do que a sua aplicação necessita
|
|
];
|
|
});
|
|
|
|
// Retorna os dados em formato JSON
|
|
return response()->json($formattedData);
|
|
}
|
|
|
|
|
|
public function receiveDays($yearProjects, $monthsProjects)
|
|
{
|
|
|
|
// Obtenha todos os dias distintos para o mês e ano especificados
|
|
$daysData = CompanyProject::selectRaw('DAY(date_started) as day')
|
|
->whereYear('date_started', $yearProjects)
|
|
->whereMonth('date_started', $monthsProjects)
|
|
->distinct()
|
|
->orderBy('day', 'asc')
|
|
->get();
|
|
|
|
|
|
// Formatar os dados para enviar como JSON
|
|
$formattedData = $daysData->map(function ($item) {
|
|
return [
|
|
'id' => $item->day, // O número do dia
|
|
'name' => $item->day // O nome do dia, que neste caso é apenas o número
|
|
];
|
|
});
|
|
|
|
// Retorna os dados em formato JSON
|
|
return response()->json($formattedData);
|
|
}
|
|
}
|