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:: 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) ->where('equipment_status_project', 2) ->where('equipment_work_historys.company_projects_id', $projectId) ->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) ->where('equipment_status_project', 2) ->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'); // Converter de string para Array $AmbitsIdArray = explode(",", $AmbitsIdString); //Busca todos os Ambitos relativos aos ids enviados por request $query = AmbitsEquipment::whereIn('ambits_id', $AmbitsIdArray) ->select(['ambits_id', 'ambits_description']); return Datatables::of($query) //MESMO que supostamente sao equipamentos ja libedos, faz sentido indica equipamentos que ja foram libedos pelo Admin ->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') // Filtra apenas os registros onde equipment_status_project é igual a 2 ->where('equipment_work_historys.equipment_status_project', 2) ->where('equipment_work_historys.company_projects_id', $projectId) // Depois, juntar-se com equipments ->join('equipments','equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') //filtrar pela company_projects_id ->count(); // Retorna a contagem de equipamentos que atendem às condições }) ->addColumn('action', function ($dataAmbitProject) use ($projectId) { $actionBtn = ''; return $actionBtn; }) ->make(true); } public function showReportingEquipmentProject($dataEquipment) { dd($dataEquipment); // return view('showReportingEquipmentProject'); } public function getDataEquipmentsOfProject(Request $request) { $projectId = $request->get('projectId'); $initialQuery = Equipment:: whereHas('equipmentWorkHistory', function ($query) use ($projectId) { //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. $query ->where('equipment_status_project', 2) ->where('company_projects_id',$projectId); }); $dataEquipentProject = $initialQuery->get(); return Datatables::of($dataEquipentProject) ->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_name', function ($equipment) { $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description : 'N/A'; }) ->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId $actionBtn = ''; return $actionBtn; }) ->make(true); // // Retornar a resposta para o DataTables // return Datatables::of($dataEquipentProject) // // ->addColumn('action', function ($dataEquipment) { // // $actionBtn = ''; // // return $actionBtn; // // }) // ->addColumn('action', function ($dataEquipment) { // $actionBtn = ''; // return $actionBtn; // }) // ->make(true); } public function showDataDetailsProjectClient($projectID) { // Recebe os detalhes do Projecto. $receiveDataProject = CompanyProject::where('company_projects_id', $projectID)->first(); $receivePlant = Plant::where('plant_id', $receiveDataProject->plant_id)->first(); $receiveDetailsCompany = Company::where('company_id', $receivePlant->company_id)->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('receiveDetailsCompany', '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('company_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 = ''; return $actionBtn; }) ->make(true); } // public function getDataProjects(Request $request) // { // $receiveAllClients = $request->get('receiveAllClients'); // $receiveAllPlants = $request->get('receiveAllPlants'); // $projectOrder = $request->get('projectOrder'); // $query = CompanyProject::with(['plant.user']) // Garante que ambas as relações sejam carregadas // ->where('order_project', $projectOrder) // ->select(['company_projects.*']); // Seleciona todos os campos de CompanyProject, ajuste conforme necessário // return DataTables::of($query) // ->addColumn('plant_id', function ($item) { // // Acessando plant_name diretamente através da relação 'plant' // return $item->plant ? $item->plant->plant_name : 'N/A'; // }) // ->addColumn('client', function ($item) { // // Acessando user_name através das relações encadeadas 'plant' seguido por 'user' // return $item->plant && $item->plant->user ? $item->plant->user->user_name : 'N/A'; // }) // ->addColumn('action', function ($projectClient) { // $actionBtn = ''; // return $actionBtn; // }) // ->make(true); // } public function getDataProjects(Request $request) { $receiveAllClients = $request->get('receiveAllClients'); $receiveAllPlants = $request->get('receiveAllPlants'); $projectOrder = $request->get('projectOrder'); $query = CompanyProject::with(['plant.company']) // Carrega as relações plant e user ->where('order_project', $projectOrder) ->whereHas('plant', function ($query) use ($receiveAllPlants, $receiveAllClients) { if ($receiveAllPlants !== '#') { $query->where('plant_id', $receiveAllPlants); } if ($receiveAllClients !== '#') { // Filtra por user_id dentro da relação plant->user $query->whereHas('company', function ($query) use ($receiveAllClients) { $query->where('company_id', $receiveAllClients); }); } }) ->select(['company_projects.*']); // Ajuste conforme necessário para os campos específicos que deseja selecionar return DataTables::of($query) ->addColumn('plant_id', function ($item) { return $item->plant ? $item->plant->plant_name : 'N/A'; }) ->addColumn('client', function ($item) { return $item->plant && $item->plant->company ? $item->plant->company->company_name : 'N/A'; }) ->addColumn('action', function ($projectClient) use ($projectOrder) { $routeName = 'articulated_2'; if ($projectOrder == 2) { $routeName = 'preparedProject'; } elseif ($projectOrder == 3) { $routeName = 'ExecutionProject'; } $actionBtn = ''; return $actionBtn; }) ->make(true); // preparedProject //ExecutionProject } public function receiveProjectsClient() { $client = Auth::user()->user_id; $recebeCompanyID = AssociationCompanyUser::where('user_id', $client)->first(); $recevePlantClient = Plant::where('company_id', $recebeCompanyID->company_id)->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; $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'); // 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) { //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 $allPlantsClient = Plant::where('company_id', $companyDetails->company_id)->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); } }