diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 9dfd9d8b..7823dd46 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -41,27 +41,8 @@ public function changeAmbitEquipment(Request $request) { $receiveAmbitEquipmentId = $request->receveAmbit; - $equipmentId = $request->equipmentID; - // $receiveEquipment = Equipment::where('equipment_id', $equipmentId)->first(); - - // $receiveEquipmentWorkHistorys = EquipmentWorkHistory::where('equipment_id',$receiveEquipment->equipment_id) - // ->where('company_projects_id', $receiveEquipment->company_projects_id ) - // ->first(); - - // $receiveDataEquipmentAssociationAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id',$receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)->first(); - - // if($receiveDataEquipmentAssociationAmbit->ambits_id == $receiveAmbitEquipmentId){ - - // return back()->with('danger', 'Ambito selecionado, igual ao anterior!'); - // } else { - // $receiveDataEquipmentAssociationAmbit->ambits_id = $receiveAmbitEquipmentId; - // $receiveDataEquipmentAssociationAmbit->save(); - - - // } - $receiveEquipment = Equipment::where('equipment_id', $equipmentId)->first(); $receiveEquipmentWorkHistorys = EquipmentWorkHistory::where('equipment_id', $receiveEquipment->equipment_id) @@ -257,16 +238,65 @@ public function addFurtherTasks(Request $request) public function receiveEquipmentToAssociateTasks(Request $request) { - // dd($request); + $receiveIsptNumber = 0; + + // Obter o maior ispt_number da tabela EquipmentWorkHistory que corresponde aos valores em Equipment + $highestIsptNumber = EquipmentWorkHistory::select('equipment_work_historys.ispt_number') + ->join('equipments', function ($join) { + $join->on('equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') + ->on('equipments.company_projects_id', '=', 'equipment_work_historys.company_projects_id'); + }) + ->orderBy('equipment_work_historys.ispt_number', 'desc') + ->first(); + + // Se existir, ele busca o maior número e acrescenta mais um para adicionar um novo equipamento. + if ($highestIsptNumber) { + + $receiveIsptNumber = $highestIsptNumber->ispt_number + 1; + } else { + // Se não houver registros, comece com 1 + $receiveIsptNumber = 1; + } + + $execution_order = 1; foreach ($request->equipment as $equipment) { $equipmentModel = Equipment::where('equipment_id', $equipment['equipment_id'])->first(); + //Atualiza a tabela equipment para associar o equipamento a uma Obra. if ($equipmentModel) { $equipmentModel->company_projects_id = $request->receiveNumberProject; $equipmentModel->save(); + + // Ja associado, criar dados nos Historico para depois ser possivel de acessar. + $createEquipmentWorkHistory = new EquipmentWorkHistory; + $createEquipmentWorkHistory->equipment_id = $equipment['equipment_id']; + $createEquipmentWorkHistory->ispt_number = $receiveIsptNumber++; + $createEquipmentWorkHistory->company_projects_id = $request->receiveNumberProject; + $createEquipmentWorkHistory->save(); + + //Criar associacao do equipamento ao Âmbito + $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; + $AssociationEquipmentAmbit->equipment_type_id = $equipment['equipment_type_id']; + $AssociationEquipmentAmbit->ambits_id = $equipment['ambit_id']; + $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $createEquipmentWorkHistory->equipmentWorkHistorys_id; + $AssociationEquipmentAmbit->save(); + + //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares + $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id); + + foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { + $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; + $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $createEquipmentWorkHistory->equipmentWorkHistorys_id; + $JoinsEquipmentsWithTasks->execution_order = $execution_order++; + $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; + $JoinsEquipmentsWithTasks->further_tasks_id = null; + $JoinsEquipmentsWithTasks->inspection = 2; + $JoinsEquipmentsWithTasks->save(); + } } } + return redirect()->back()->with('success', 'Equipametos associados a Obra com Sucesso !'); } diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php index be455019..83f0f517 100755 --- a/app/Http/Controllers/ProjectoDatacontroller.php +++ b/app/Http/Controllers/ProjectoDatacontroller.php @@ -93,7 +93,6 @@ public function test11($projectID, $equipmentID) public function test22($equipmentID) { - $dataEquipment = Equipment::find($equipmentID); $attributes = SpecificAttributesEquipmentType::where('equipment_id', $equipmentID)->get(); // recebe todos os atributos espesificos do equipamento diff --git a/app/Http/Controllers/WorkstationsJobsController.php b/app/Http/Controllers/WorkstationsJobsController.php index ca98b50c..7b20a207 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\EquipmentWorkHistory; use App\Models\OrderEquipmentTasks; use App\Models\workstationsTaskAnswers; @@ -16,12 +17,27 @@ class WorkstationsJobsController extends Controller { - public function receiveAnswersEquipment(Request $request) + public function receiveAnswersEquipment(Request $request, $control_equipment_workstation_id) { - //Deve recber o id da control atual. - // Primeiro ele deve criar a associação entre id atual do control + perguntas e respostas + // dd($request); + //No request recebemos ID(NUmero da tarela elementar) , esta variavel vai receber este ID apos selerar o id da string + $elementalTaskID = 0; + + // Deve receber o id da control atual. + $requestData = $request->all(); + + foreach ($requestData as $key => $value) { + // Verifica se a chave começa com 'ID' + if (preg_match('/ID(\d+)/', $key, $matches)) { + // $matches[1] conterá o número após 'ID' + $elementalTaskID = intval($matches[1]); + break; // Sai do loop após encontrar o primeiro match + } + } + + //Ele deve criar a associação entre id atual do control + perguntas e respostas $receiveAnswersElementalTasks = new workstationsTaskAnswers; - $receiveAnswersElementalTasks->control_equipment_workstation_id = $request->controlEquipmentID; + $receiveAnswersElementalTasks->control_equipment_workstation_id = $control_equipment_workstation_id; // Inicializando o array que vai armazenar os objetos JSON $answersArray = []; // Array para armazenar as respostas @@ -59,7 +75,8 @@ public function receiveAnswersEquipment(Request $request) $receiveAnswersElementalTasks->answer_json = $jsonString; // Busca a Ws com base no id recebido da tabela Control. - $recebeDataControlWs = ControlEquipmentWorkstation::find($request->controlEquipmentID); + $recebeDataControlWs = ControlEquipmentWorkstation::find($control_equipment_workstation_id); + $recebeDataControlWs->elemental_tasks_id = $elementalTaskID; $recebeDataControlWs->departure_date = now(); $requestData = $request->all(); @@ -80,16 +97,16 @@ public function receiveAnswersEquipment(Request $request) $receiveAnswersElementalTasks->save(); // Agora que guardamos os dados anteriores, vamos criar a nova linha na tabela Control Equipment ID para que o equipamento continue - $newControlEquipment = new ControlEquipmentWorkstation; - $newControlEquipment->equipment_id = $recebeDataControlWs->equipment_id; - $newControlEquipment->id_workstations = $recebeDataControlWs->id_workstations; - $newControlEquipment->entry_date = now(); - $newControlEquipment->save(); + // $newControlEquipment = new ControlEquipmentWorkstation; + // $newControlEquipment->equipmentWorkHistorys_id = $recebeDataControlWs->equipmentWorkHistorys_id; + // $newControlEquipment->id_workstations = $recebeDataControlWs->id_workstations; + // $newControlEquipment->entry_date = now(); + // $newControlEquipment->save(); // Vamos buscar os dados da tarefa elementar comcluida para mandar uma mensagem ao Front e indicar que esta completada - $receiveDataElementalTask = ElementalTasks::find($recebeDataControlWs->elemental_tasks_id,'elemental_tasks_id')->first(); + $receiveDataElementalTask = ElementalTasks::find($recebeDataControlWs->elemental_tasks_id, 'elemental_tasks_id')->first(); - return back()->with('success', 'Tarefa :: '.$receiveDataElementalTask->elemental_tasks_code.'-'.$receiveDataElementalTask->elemental_tasks_code.' Concluída com sucesso!'); + return back()->with('success', 'Tarefa :: ' . $receiveDataElementalTask->elemental_tasks_code . '-' . $receiveDataElementalTask->elemental_tasks_code . ' Concluída com sucesso!'); // return route('getEquipmentData', $recebeDataControlWs->equipment_id); @@ -100,36 +117,18 @@ public function getEquipmentData($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 $receiveDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first(); // Recebe os dados do Equipamento $receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first(); - // Recebe todas as tarefas elementares do equipamento. - $recebeTasksForEquipment = OrderEquipmentTasks::where('equipment_id', $equipment_id)->get(); - - // Primeira coisa, deve verificar se existe dados deste equipamento e se suas coluna elemental_tasks_id e departure_date estao diferentes de null - // Se estiver diferente de null quer dizer que todas as tarefas anteriores deste equipamento ja foram realizadas e se ele ainda aparece na tabela de equipamentos por fazer que dizer que ele ainda nao terminou todas as suas tarefas. - $existingControlEquipment = ControlEquipmentWorkstation::where('equipment_id', $receiveDataEquipment->equipment_id) - ->whereNull('elemental_tasks_id') - ->whereNull('departure_date') + // Recebe o id do Historico do equipamento, em sua obra atual + $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id) + ->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->first(); - - $receiveDataControlEquipment = $existingControlEquipment; - - // Ele realmente cria dados, porem toda a vez que da reload ele continua a criar. - // Ao entrar na tela do equipamento deve criar dados, para ele nao poder ser buscado por nenhuma outra WS. - if (!$existingControlEquipment) { - $createControlEquipment = new ControlEquipmentWorkstation; - $createControlEquipment->equipment_id = $receiveDataEquipment->equipment_id; - $createControlEquipment->id_workstations = $receiveDataWs->id_workstations; - $createControlEquipment->entry_date = now(); - $createControlEquipment->save(); - - $receiveDataControlEquipment = $createControlEquipment; - } - - + // Recebe todas as tarefas elementares do equipamento. + $recebeTasksForEquipment = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->get(); //Busca as tarefas que podem ser feitas pela WS Atual a partir do Email $userTasks = DB::table('users as u') ->join('construction_workstations as cw', 'u.user_name', '=', 'cw.name_workstations') @@ -139,6 +138,7 @@ public function getEquipmentData($equipment_id) ->groupBy('cw.id_workstations', 'cw.name_workstations') ->get(); + // Primeiro, obtenha todos os IDs de tarefas elementares e outras tarefas de $userTasks $userTasksIds = $userTasks->pluck('all_tasks')->map(function ($tasks) { // Transforma a string 'all_tasks' em um array e remove espaços em branco @@ -156,28 +156,33 @@ public function getEquipmentData($equipment_id) 1 => $commonIds->all(), ]; - // IDs que estão em $recebeTasksForEquipment mas não em $userTasks + // IDs que estão em $recebeTasksForEquipment mas não em $userTasks ou seja sao os ids que a Ws nao pode executar estas tarefas. $uniqueEquipmentTasksIds = $equipmentTasksIds->diff($userTasksIds); - // Adicione esses IDs únicos ao array $divisionElementalTasks na chave [2] $divisionElementalTasks[2] = $uniqueEquipmentTasksIds->all(); + // Ao selecionar um equipamento cria na ControlEquipmentWorkstation dados sobre o mesmo indicando quando entrou. + $newDataControlEquipment = new ControlEquipmentWorkstation; + + $newDataControlEquipment->equipmentWorkHistorys_id = $receiveEquipmentWorkHistory->equipmentWorkHistorys_id; + $newDataControlEquipment->id_workstations = $receiveDataWs->id_workstations; + $newDataControlEquipment->entry_date = now(); + $newDataControlEquipment->save(); // Primeiro, obtenha o registro de ControlEquipmentWorkstation que não deve ter 'elemental_tasks_id' e 'departure_date' como null - $completedTasks = ControlEquipmentWorkstation::where('equipment_id', $equipment_id) + $completedTasks = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) ->whereNotNull('elemental_tasks_id') ->whereNotNull('departure_date') ->pluck('elemental_tasks_id')->toArray(); // Supondo que você quer apenas os IDs das tarefas - // Agora, verifique se algum desses IDs está em $divisionElementalTasks[1] e mova para $divisionElementalTasks[3] + //Agora, verifique se algum desses IDs está em $divisionElementalTasks[1] e mova para $divisionElementalTasks[3] + //O id que for movido para o [3] sua inica condicao sera quando o 'entry_date' e 'departure_date' forem diferentes de null, assim indica ser uma tarefa Finalizada. foreach ($completedTasks as $completedTaskId) { if (in_array($completedTaskId, $divisionElementalTasks[1])) { // Encontre a chave do valor correspondente em [1] $key = array_search($completedTaskId, $divisionElementalTasks[1]); - // Mova a tarefa de [1] para [3] $divisionElementalTasks[3][$key] = $completedTaskId; - // Remova a tarefa de [1] unset($divisionElementalTasks[1][$key]); } @@ -187,61 +192,112 @@ public function getEquipmentData($equipment_id) // Verifica se o id da tarefa está no array de tarefas que podem ser feitas if (in_array($task->elemental_tasks_id, $divisionElementalTasks[1])) { $task->cardType = 'card-primary'; + $task->cardTypeStyle = 'blue'; // Define o estilo de cor + } // Verifica se o id da tarefa está no array de tarefas que não podem ser feitas elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[2])) { - $task->cardType = 'card-warning'; + $task->cardType = 'card-primary'; + $task->cardTypeStyle = 'gray'; // Define o estilo de cor + // $task->InputInCardOnlyReadOrNot = 'readonly'; + // Consulta ControlEquipmentWorkstation para verificar as condições especificadas + $controlEquipment = ControlEquipmentWorkstation::where('elemental_tasks_id', $task->elemental_tasks_id) + ->whereNotNull('entry_date') + ->whereNotNull('departure_date') + ->first(); + + if ($controlEquipment) { + // Se encontrar, atribuir control_equipment_workstation_id + $task->control_equipment_workstation_id = $controlEquipment->control_equipment_workstation_id; + + //buscar dados na model workstationsTaskAnswers + $workstationTaskAnswer = WorkstationsTaskAnswers::where('control_equipment_workstation_id', $task->control_equipment_workstation_id) + ->first(); + + if ($workstationTaskAnswer) { + // Decodifica o JSON para um array + $answersArray = json_decode($workstationTaskAnswer->answer_json, true); + + // Cria um array associativo onde as chaves são as perguntas e os valores são as respostas + $formattedAnswers = []; + foreach ($answersArray as $item) { + $formattedAnswers[$item['question']] = $item['value']; + } + + // Atribui o array formatado ao task + $task->formatted_answers = $formattedAnswers; + } + + } + } + // Verifica se o id da tarefa está no array de tarefas já feitas elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[3])) { $task->cardType = 'card-info'; - } - // Se não estiver em nenhum dos arrays, define um tipo padrão (opcional) - else { - $task->cardType = 'card-warning'; // ou qualquer outra classe que você queira usar como padrão - } + $task->cardTypeStyle = 'green'; // Define o estilo de cor + // Consulta ControlEquipmentWorkstation para verificar as condições especificadas + $controlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $task->equipmentWorkHistorys_id) + ->where('elemental_tasks_id', $task->elemental_tasks_id) + ->whereNotNull('entry_date') + ->whereNotNull('departure_date') + ->first(); + + if ($controlEquipment) { + // Se encontrar, atribuir control_equipment_workstation_id + $task->control_equipment_workstation_id = $controlEquipment->control_equipment_workstation_id; + + //buscar dados na model workstationsTaskAnswers + $workstationTaskAnswer = WorkstationsTaskAnswers::where('control_equipment_workstation_id', $task->control_equipment_workstation_id) + ->first(); + + if ($workstationTaskAnswer) { + // Decodifica o JSON para um array + $answersArray = json_decode($workstationTaskAnswer->answer_json, true); + + // Cria um array associativo onde as chaves são as perguntas e os valores são as respostas + $formattedAnswers = []; + foreach ($answersArray as $item) { + $formattedAnswers[$item['question']] = $item['value']; + } + + // Atribui o array formatado ao task + $task->formatted_answers = $formattedAnswers; + } + + } + } return $task; }); - // dd($divisionElementalTasks); - + // dd($recebeTasksForEquipment); return view('workstations.workstations', [ + // Deve receber o atual COntrol ID ? tudo a vez que atualizar atualiza ?? + 'dataControlEquipment' => $newDataControlEquipment, 'receiveDataEquipment' => $receiveDataEquipment, - 'receiveDataControlEquipment' => $receiveDataControlEquipment, - 'recebeTasksForEquipment' => $recebeTasksForEquipment, 'divisionElementalTasks' => $divisionElementalTasks, ]); - - - // Busca os Equipamento com base nas tarefas que a Ws atual pode fazer. - // Nao sei de ainda va ser usado apos a atualizacao. - // $equipmentTasks = DB::table('users as u') - // ->join('construction_workstations as cw', 'u.user_name', '=', 'cw.name_workstations') - // ->join('workstations_association_tasks as wat', 'cw.id_workstations', '=', 'wat.id_workstations') - // ->join('equipments as e', 'wat.company_projects_id', '=', 'e.company_projects_id') - // ->join('ordered_equipment_tasks as oet', 'e.equipment_id', '=', 'oet.equipment_id') - // ->where('u.email', $userEmail->email) - // ->select('e.equipment_id', 'e.equipment_tag', DB::raw('GROUP_CONCAT(DISTINCT COALESCE(oet.elemental_tasks_id, oet.further_tasks_id) ORDER BY oet.execution_order) AS equipment_all_tasks')) - // ->groupBy('e.equipment_id', 'e.equipment_tag') - // ->orderBy('e.equipment_id', 'ASC') - // ->get(); - // Convertendo as tarefas do usuário(WS) em um array - // $tasksArray = explode(',', $userTasks->pluck('all_tasks')->first()); } public function cancelElementalTaskForEquipment($equipmentID) { - //Nesta funcao se o utilizador da Ws apenas o botao de cancelar na view principal,o equipamento deve se desvincular na Ws atual e poder ser selecionado por outra. + //Nesta funcao se o utilizador da Ws utilizar o botao cancelar na view principal,o equipamento deve se desvincular na Ws atual e poder ser selecionado por outra. + // Assim sendo mais pratico excluindo o ultimo dado desta Ws da tabela control_equipment_workstation, quando seu 'elemental_tasks_id' e 'departure_date' forem 'Null' $receiveDataEquipment = Equipment::where('equipment_id', $equipmentID)->first(); - $existingControlEquipment = ControlEquipmentWorkstation::where('equipment_id', $receiveDataEquipment->equipment_id) + // Recebe o id do Historico do equipamento, em sua obra atual + $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id) + ->where('company_projects_id', $receiveDataEquipment->company_projects_id) + ->first(); + + $existingControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) ->whereNull('elemental_tasks_id') ->whereNull('departure_date') - ->first(); - $existingControlEquipment->delete(); + ->delete(); + return redirect(route('enterWorkstation')); } } diff --git a/app/Http/ViewComposers/WorkstationComposer.php b/app/Http/ViewComposers/WorkstationComposer.php index 3f10a6df..55267d6a 100755 --- a/app/Http/ViewComposers/WorkstationComposer.php +++ b/app/Http/ViewComposers/WorkstationComposer.php @@ -2,6 +2,11 @@ namespace App\Http\ViewComposers; +use App\Models\ConstructionWorkstation; +use App\Models\ControlEquipmentWorkstation; +use App\Models\Equipment; +use App\Models\EquipmentWorkHistory; +use App\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; @@ -12,376 +17,29 @@ class WorkstationComposer public function compose(View $view) { $userEmail = Auth::user()->email; + $receiveDataEmail = User::where('email', $userEmail)->first(); - $equipmentsTodo = DB::select(" - WITH equipments_multiple_rows AS ( - SELECT - e.equipment_id, - e.equipment_tag, - COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks - FROM - users u - JOIN - construction_workstations cw ON u.user_name = cw.name_workstations - JOIN - workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations - JOIN - equipments e ON wat.company_projects_id = e.company_projects_id - JOIN - ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id - WHERE - u.email = :email1 - AND - oet.execution_order = 1 - GROUP BY - e.equipment_id, - e.equipment_tag - ), - - workstations_multiple_rows AS ( - SELECT - cw.id_workstations, - cw.name_workstations, - COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks - FROM - users u - JOIN - construction_workstations cw ON u.user_name = cw.name_workstations - JOIN - workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations - WHERE - u.email = :email2 - ), - - workstations_control_all_tasks AS ( - SELECT - cew.control_equipment_workstation_id, - cew.equipment_id, - CASE - WHEN cew.id_workstations IS NULL THEN NULL - WHEN cew.id_workstations IN ( - SELECT wat.id_workstations - FROM workstations_association_tasks wat - JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id - JOIN users u ON u.user_name = cw.name_workstations - WHERE u.email = :email3 - ) THEN cew.id_workstations - ELSE NULL - END AS control_id_workstations, - COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks, - cew.equipment_comments_id, - cew.entry_date, - cew.departure_date - FROM - control_equipment_workstation cew - WHERE - cew.id_workstations IS NULL - OR cew.id_workstations IN ( - SELECT wat.id_workstations - FROM workstations_association_tasks wat - JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id - JOIN users u ON u.user_name = cw.name_workstations - WHERE u.email = :email4 - ) - ) - - SELECT - emr.equipment_id, - emr.equipment_tag - FROM - equipments_multiple_rows emr - WHERE - ( - emr.equipment_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows) - AND NOT EXISTS ( - SELECT 1 - FROM workstations_control_all_tasks wc - WHERE wc.equipment_id = emr.equipment_id - AND wc.control_id_workstations IN (SELECT id_workstations FROM workstations_multiple_rows) - ) - ) - OR - ( - emr.equipment_id IN ( - SELECT equipment_id - FROM workstations_control_all_tasks - WHERE control_id_workstations IS NULL - AND entry_date IS NULL - AND departure_date IS NULL - AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows) - ) - AND NOT EXISTS ( - SELECT 1 - FROM workstations_control_all_tasks wc - WHERE wc.equipment_id = emr.equipment_id - AND wc.control_id_workstations IS NOT NULL - GROUP BY wc.equipment_id - HAVING COUNT(DISTINCT wc.control_id_workstations) > 20 - ) - ) - GROUP BY - emr.equipment_id, - emr.equipment_tag - ORDER BY - emr.equipment_id ASC; - ", [ - 'email1' => $userEmail, - 'email2' => $userEmail, - 'email3' => $userEmail, - 'email4' => $userEmail - ]); + $receiveDataWs = ConstructionWorkstation::where('name_workstations', $receiveDataEmail->user_name)->first(); + $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) + ->whereHas('equipmentWorkHistory', function ($query) use ($receiveDataWs) { + $query->where('company_projects_id', $receiveDataWs->company_projects_id); + }) + ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) { + $query->whereNull('elemental_tasks_id') + ->whereNull('departure_date'); + }) + ->get(); - $equipmentsReturned = DB::select(" - WITH equipments_multiple_rows AS ( - SELECT - e.equipment_id, - e.equipment_tag, - COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks - FROM - users u - JOIN - construction_workstations cw ON u.user_name = cw.name_workstations - JOIN - workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations - JOIN - equipments e ON wat.company_projects_id = e.company_projects_id - JOIN - ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id - WHERE - u.email = :email1 - AND - oet.execution_order = 1 - GROUP BY - e.equipment_id, - e.equipment_tag - ), - - - - workstations_multiple_rows AS ( - SELECT - cw.id_workstations, - cw.name_workstations, - COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks - FROM - users u - JOIN - construction_workstations cw ON u.user_name = cw.name_workstations - JOIN - workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations - WHERE - u.email = :email2 - ), - - - - workstations_control_all_tasks AS ( - SELECT - cew.control_equipment_workstation_id, - cew.equipment_id, - CASE - WHEN cew.id_workstations IS NULL THEN NULL - WHEN cew.id_workstations IN ( - SELECT wat.id_workstations - FROM workstations_association_tasks wat - JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id - JOIN users u ON u.user_name = cw.name_workstations - WHERE u.email = :email3 - ) THEN cew.id_workstations - ELSE NULL - END AS control_id_workstations, - COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks, - cew.equipment_comments_id, - cew.entry_date, - cew.departure_date - FROM - control_equipment_workstation cew - WHERE - cew.id_workstations IS NULL - OR cew.id_workstations IN ( - SELECT wat.id_workstations - FROM workstations_association_tasks wat - JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id - JOIN users u ON u.user_name = cw.name_workstations - WHERE u.email = :email4 - ) - ) - - - - SELECT - emr.equipment_id, - emr.equipment_tag - FROM - equipments_multiple_rows emr - WHERE - emr.equipment_id IN ( - SELECT equipment_id - FROM workstations_control_all_tasks - WHERE control_id_workstations IS NULL - AND entry_date IS NULL - AND departure_date IS NULL - AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows) - AND EXISTS ( - SELECT 1 - FROM workstations_control_all_tasks wc - WHERE wc.equipment_id = emr.equipment_id - AND wc.control_id_workstations IS NOT NULL - GROUP BY wc.equipment_id - HAVING COUNT(DISTINCT wc.control_id_workstations) >= 20 - - ) - ) - GROUP BY - emr.equipment_id, - emr.equipment_tag - ORDER BY - emr.equipment_id ASC; - - ", [ - - 'email1' => $userEmail, - 'email2' => $userEmail, - 'email3' => $userEmail, - 'email4' => $userEmail - - ]); - - - $equipmentsDone = DB::select(" - WITH equipments_multiple_rows AS ( - SELECT - e.equipment_id, - e.equipment_tag, - COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks - FROM - users u - JOIN - construction_workstations cw ON u.user_name = cw.name_workstations - JOIN - workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations - JOIN - equipments e ON wat.company_projects_id = e.company_projects_id - JOIN - ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id - WHERE - u.email = :email1 - AND - oet.execution_order = 1 - GROUP BY - e.equipment_id, - e.equipment_tag - ), - - workstations_multiple_rows AS ( - SELECT - cw.id_workstations, - cw.name_workstations, - COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks - FROM - users u - JOIN - construction_workstations cw ON u.user_name = cw.name_workstations - JOIN - workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations - WHERE - u.email = :email2 - ), - - workstations_control_all_tasks AS ( - SELECT - cew.control_equipment_workstation_id, - cew.equipment_id, - CASE - WHEN cew.id_workstations IS NULL THEN NULL - WHEN cew.id_workstations IN ( - SELECT wat.id_workstations - FROM workstations_association_tasks wat - JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id - JOIN users u ON u.user_name = cw.name_workstations - WHERE u.email = :email3 - ) THEN cew.id_workstations - ELSE NULL - END AS control_id_workstations, - COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks, - cew.equipment_comments_id, - cew.entry_date, - cew.departure_date - FROM - control_equipment_workstation cew - WHERE - cew.id_workstations IS NULL - OR cew.id_workstations IN ( - SELECT wat.id_workstations - FROM workstations_association_tasks wat - JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id - JOIN users u ON u.user_name = cw.name_workstations - WHERE u.email = :email4 - ) - ) - - SELECT - emr.equipment_id, - emr.equipment_tag - FROM - equipments_multiple_rows emr - WHERE - EXISTS ( - SELECT 1 - FROM workstations_control_all_tasks wc - JOIN workstations_multiple_rows wmr ON wc.control_id_workstations = wmr.id_workstations - WHERE wc.equipment_id = emr.equipment_id - AND wc.control_workstation_all_tasks = wmr.all_tasks - AND wc.entry_date IS NOT NULL - AND wc.departure_date IS NOT NULL - AND wc.control_id_workstations IS NOT NULL - ) - AND NOT EXISTS ( - SELECT 1 - FROM workstations_control_all_tasks wc - WHERE wc.equipment_id = emr.equipment_id - AND wc.control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows) - AND wc.control_id_workstations IS NULL - ) - GROUP BY - emr.equipment_id, - emr.equipment_tag - ORDER BY - emr.equipment_id ASC; - ", [ - 'email1' => $userEmail, - 'email2' => $userEmail, - 'email3' => $userEmail, - 'email4' => $userEmail - ]); - - $workstationNameQuery = DB::select(" - SELECT construction_workstations.nomenclature_workstation - FROM construction_workstations - JOIN users - WHERE construction_workstations.name_workstations = users.user_name - AND users.email = :email; - ", ['email' => $userEmail]); - - $workstationName = $workstationNameQuery[0]->nomenclature_workstation; - - - //Counting of equipments - $equipmentsTodoCount = count($equipmentsTodo); - $equipmentsDoneCount = count($equipmentsDone); - $equipmentsReturnedCount = count($equipmentsReturned); - + $receiceCountAllEquipmentOfProject = count($receiveAllEquipmentOfProject); //Returning values of the queries to workstations layout $view->with([ - 'equipmentsTodo' => $equipmentsTodo, - 'equipmentsTodoCount' => $equipmentsTodoCount, - 'equipmentsDone' => $equipmentsDone, - 'equipmentsDoneCount' => $equipmentsDoneCount, - 'equipmentsReturned' => $equipmentsReturned, - 'equipmentsReturnedCount' => $equipmentsReturnedCount, - 'workstationName' => $workstationName + 'receiveAllEquipmentOfProject' => $receiveAllEquipmentOfProject, + 'receiceCountAllEquipmentOfProject' => $receiceCountAllEquipmentOfProject, + 'receiveDataWs' => $receiveDataWs, ]); + + } } diff --git a/app/Models/ControlEquipmentWorkstation.php b/app/Models/ControlEquipmentWorkstation.php index 6ff4d16c..a2c1000e 100755 --- a/app/Models/ControlEquipmentWorkstation.php +++ b/app/Models/ControlEquipmentWorkstation.php @@ -22,6 +22,10 @@ public function equipment() return $this->belongsTo(Equipment::class, 'equipment_id', 'equipment_id'); } + public function equipmentWorkHistory(){ + return $this->belongsTo(EquipmentWorkHistory::class,'equipmentWorkHistorys_id','equipmentWorkHistorys_id'); + } + public function elementalTask() { return $this->belongsTo(ElementalTasks::class,'elemental_tasks_id','elemental_tasks_id'); @@ -33,4 +37,5 @@ public function furtherTasks() } + } diff --git a/app/Models/Equipment.php b/app/Models/Equipment.php index 40cf0414..58e1f99f 100755 --- a/app/Models/Equipment.php +++ b/app/Models/Equipment.php @@ -67,9 +67,6 @@ public function hasInspectionYes() return $this->orderEquipmentTasks()->where('inspection', 'Sim')->exists(); } - - - public function EquipmentWorkHistory(){ return $this->hasMany(EquipmentWorkHistory::class, 'equipment_id','equipment_id'); } diff --git a/app/Models/EquipmentWorkHistory.php b/app/Models/EquipmentWorkHistory.php index 27f8dcc0..20ec2c56 100644 --- a/app/Models/EquipmentWorkHistory.php +++ b/app/Models/EquipmentWorkHistory.php @@ -23,4 +23,10 @@ public function companyProject() { return $this->belongsTo(Equipment::class, 'company_projects_id', 'company_projects_id'); } + + public function controlEquipmentWorkstation() + { + return $this->hasMany(ControlEquipmentWorkstation::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); + } + } diff --git a/resources/views/Templates/templateWorkstations.blade.php b/resources/views/Templates/templateWorkstations.blade.php index 79bb9515..ba6ab09d 100755 --- a/resources/views/Templates/templateWorkstations.blade.php +++ b/resources/views/Templates/templateWorkstations.blade.php @@ -59,19 +59,13 @@
- {{ $equipmentsDoneCount }} válvulas concluídas + {{-- {{ $equipmentsDoneCount }} --}} + válvulas concluídas
diff --git a/resources/views/projectsClients/createProject.blade.php b/resources/views/projectsClients/createProject.blade.php index 88838baf..a8c18d45 100755 --- a/resources/views/projectsClients/createProject.blade.php +++ b/resources/views/projectsClients/createProject.blade.php @@ -135,11 +135,6 @@