control_equipment_workstation_id = $request->control_equipment_workstationid; // Inicializando o array que vai armazenar os objetos JSON $answersArray = []; foreach ($request->all() as $key => $value) { // Ignorando a chave control_equipment_workstation_id if ($key !== 'control_equipment_workstation_id') { // Verificando se $key contém '-' if (strpos($key, '-') === false) { // Se não contiver, pular esta iteração continue; } // Dividindo a chave em duas partes: question e type list($question, $type) = explode('-', $key); // Adicionando um novo objeto JSON ao array $answersArray[] = [ 'type' => $type, 'value' => $value, 'question' => $question ]; } } // Convertendo o array em uma string JSON $jsonString = json_encode($answersArray); // Armazenando a string JSON no banco de dados $receiveAnswersElementalTasks->answer_json = $jsonString; // $receiveAnswersElementalTasks->save(); // update departure_date value $receiveDataControlWs = ControlEquipmentWorkstation::find($request->control_equipment_workstationid); //FINALIZOU A TAREFA ANTERIOR COM DEPARTURE //Busca o Email $userEmail = Auth::user()->email; //Busca o id Anterior $control_ew_id = $request->control_equipment_workstationid; // Busca a Ws com base no id recebido da tabela Control. $recebeDataControlId = ControlEquipmentWorkstation::find($request->control_equipment_workstationid); //Chama o procedimento $controlTasks = DB::select('CALL ManageNextTask(?, ?)', [$userEmail, $control_ew_id]); //Saving the values to a variable if (count($controlTasks) > 0) { $current_workstation = $controlTasks[0]->id_workstations; $next_workstation = $controlTasks[0]->next_workstation; $next_todo = $controlTasks[0]->next_todo; } else { //It should always exist, but you never know :) $next_todo = null; } //RECEBE OS VALORES DA PROXIMA WS E PROXIMA TAREFA // Recebe os dados de cada Tarefa Elementar. $receiveDataElementalTask = ElementalTasks::find($recebeDataControlId->elemental_tasks_id); $receiveDataEquipment = Equipment::find($recebeDataControlId->equipment_id); if ($next_todo < 25) { $elemental_tasks_id = $next_todo; $further_tasks_id = null; } else { $elemental_tasks_id = null; $further_tasks_id = $next_todo; } // dd($recebeDataControlId->id_workstations ); if ($request->stateEquipment == "cancel") { $deleteDataControlWhereRefreashPage = ControlEquipmentWorkstation::where('id_workstations', $receiveDataControlWs->id_workstations) ->where('equipment_id', $receiveDataEquipment->equipment_id) ->whereNotNull('entry_date') ->whereNull('departure_date') ->first(); if ($deleteDataControlWhereRefreashPage) { $deleteDataControlWhereRefreashPage->id_workstations = null; $deleteDataControlWhereRefreashPage->entry_date = null; $deleteDataControlWhereRefreashPage->departure_date = null; $deleteDataControlWhereRefreashPage->save(); } return redirect()->route('enterWorkstation'); } if ($request->stateEquipment == "finish") { $receiveDataControlWs->departure_date = now(); $receiveDataControlWs->save(); $nextEquipmentTaskStateEquipmentFinish = DB::select(" INSERT INTO control_equipment_workstation (equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date) VALUES (:equipment_id,NULL,:elemental_tasks_id,:further_tasks_id,NULL,NULL,NULL) ", [ 'equipment_id' => $receiveDataEquipment->equipment_id, 'elemental_tasks_id' => $elemental_tasks_id, 'further_tasks_id' => $further_tasks_id ]); return redirect()->route('enterWorkstation'); } if ($request->stateEquipment == 'next') { $receiveDataControlWs->departure_date = now(); $receiveDataControlWs->save(); // Para criar a divisao do equipamento em entre compo e Obturador if ($receiveDataControlWs->elemental_tasks_id == 5 && $receiveDataEquipment->equipment_type_id == 3) { $nextEquipmentTask1 = DB::select(" INSERT INTO control_equipment_workstation (equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date) VALUES (:equipment_id,NULL,8,:further_tasks_id,NULL,NULL,NULL) ", [ 'equipment_id' => $receiveDataEquipment->equipment_id, 'further_tasks_id' => $further_tasks_id ]); $nextEquipmentTask2 = DB::select(" INSERT INTO control_equipment_workstation (equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date) VALUES (:equipment_id,NULL,9,:further_tasks_id,NULL,NULL,NULL) ", [ 'equipment_id' => $receiveDataEquipment->equipment_id, 'further_tasks_id' => $further_tasks_id ]); // Equipamento separado em 2 corpo/ Obturador return redirect()->route('enterWorkstation'); } // Quando concluir as tarefas 8 e 9 if ($receiveDataEquipment->equipment_type_id == 3 && ($receiveDataControlWs->elemental_tasks_id == 8 || $receiveDataControlWs->elemental_tasks_id == 9)) { // dd('recebe if Quando concluir as tarefas 8 e 9 '); // Verifique se já existem registros na tabela control_equipment_workstation $existingRecords = DB::table('control_equipment_workstation') ->where('equipment_id', $receiveDataControlWs->equipment_id) ->whereIn('elemental_tasks_id', [8, 9]) ->whereNotNull('departure_date') ->get(); // Verifique se há pelo menos dois registros que atendem às condições if ($existingRecords->count() >= 2) { // Crie um novo registro com elemental_tasks_id igual a 10 $nextEquipmentTask3 = DB::table('control_equipment_workstation')->insertGetId([ 'equipment_id' => $receiveDataControlWs->equipment_id, 'id_workstations' => NULL, 'elemental_tasks_id' => 10, 'further_tasks_id' => $further_tasks_id, 'equipment_comments_id' => NULL, 'entry_date' => NULL, 'departure_date' => NULL, ]); } return redirect()->route('enterWorkstation'); } //Se a proxima WS for igual a atual deve criar dados para a ws if ($recebeDataControlId->id_workstations == $next_workstation) { $nextEquipmentTask = DB::select(" INSERT INTO control_equipment_workstation (equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date) VALUES (:equipment_id,:next_workstation,:elemental_tasks_id,:further_tasks_id,NULL,CURRENT_TIMESTAMP,NULL) ", [ 'equipment_id' => $receiveDataEquipment->equipment_id, 'next_workstation' => $next_workstation, 'elemental_tasks_id' => $elemental_tasks_id, 'further_tasks_id' => $further_tasks_id ]); $lastInsertedId = DB::getPdo()->lastInsertId(); $receiveDataNewElementalTask = ElementalTasks::find($elemental_tasks_id); return view('workstations.workstations', [ 'receiveDataElementalTask' => $receiveDataNewElementalTask, 'receiveDataEquipment' => $receiveDataEquipment, 'control_ew_id' => $lastInsertedId, 'task_todo' => $next_todo ]); // Se verificar que a proxima tarefa e Null ele deve apenas voltar ao start } else if ($next_workstation == null) { $nextEquipmentTask = DB::select(" INSERT INTO control_equipment_workstation (equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date) VALUES (:equipment_id,NULL,:elemental_tasks_id,:further_tasks_id,NULL,NULL,NULL) ", [ 'equipment_id' => $receiveDataEquipment->equipment_id, 'elemental_tasks_id' => $elemental_tasks_id, 'further_tasks_id' => $further_tasks_id ]); return redirect()->route('enterWorkstation'); } } } // Ao selecionar o equipamento para se inicializar a tarefa deve mostrar os dados relacionados. 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 $findDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first(); // Recebe os dados do Equipamento $receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first(); // Busca as tarefas do Equipamento a serem feitas $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(); //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') ->join('workstations_association_tasks as wat', 'cw.id_workstations', '=', 'wat.id_workstations') ->where('u.email', $userEmail->email) ->select('cw.id_workstations', 'cw.name_workstations', DB::raw('GROUP_CONCAT(COALESCE(wat.elemental_tasks_id, wat.further_tasks_id)) AS all_tasks')) ->groupBy('cw.id_workstations', 'cw.name_workstations') ->get(); // Convertendo as tarefas do usuário em um array $tasksArray = explode(',', $userTasks->pluck('all_tasks')->first()); $controlEquipmentWorkstation = ControlEquipmentWorkstation::where('equipment_id', $receiveDataEquipment->equipment_id) ->whereIn('elemental_tasks_id', $tasksArray) ->whereNull('id_workstations') ->whereNull('entry_date') ->whereNull('departure_date') ->first(); // Se encontrar um dado que satisfaca as verificacoes acima deve implementar a tarefa para esta WS. if ($controlEquipmentWorkstation) { $controlEquipmentWorkstation->id_workstations = $findDataWs->id_workstations; $controlEquipmentWorkstation->entry_date = now(); $controlEquipmentWorkstation->save(); $receiveDataElementalTask = ElementalTasks::find($controlEquipmentWorkstation->elemental_tasks_id); //Returning the values to a view "values" return view('workstations.workstations', [ 'receiveDataElementalTask' => $receiveDataElementalTask, 'receiveDataEquipment' => $receiveDataEquipment, 'control_ew_id' => $controlEquipmentWorkstation->control_equipment_workstation_id, 'task_todo' => $controlEquipmentWorkstation->elemental_tasks_id ]); } else //cria a nova linha $equipmentData = DB::select('CALL ManageEquipmentTasks(?, ?)', [$userEmail->email, $equipment_id]); // //Saving the values to a variable if (count($equipmentData) > 0) { $control_ew_id = $equipmentData[0]->control_ew_id; $task_todo = $equipmentData[0]->task_todo; } else { //It should always exist, but you never know :) $control_ew_id = null; $task_todo = null; } // Recebe os dados de cada Tarefa Elementar. $recebeDataControlId = ControlEquipmentWorkstation::find($control_ew_id); // Quando se da Refreash a pagina me devolve um erro de laravel pois o $recebeDataControlId e Null , pois claramente ja foi feita seus scripts e apos o refreash nao e feito denovo, sendo assim e melhor perder os dados criados e fazer novamente do que ter erros de lAravel :D if ($recebeDataControlId == NULL) { $deleteDataControlWhereRefreashPage = ControlEquipmentWorkstation::where('id_workstations', $findDataWs->id_workstations) ->where('equipment_id', $receiveDataEquipment->equipment_id) ->whereNotNull('entry_date') ->whereNull('departure_date') ->first(); // dd($deleteDataControlWhereRefreashPage); if ($deleteDataControlWhereRefreashPage) { $deleteDataControlWhereRefreashPage->id_workstations = null; $deleteDataControlWhereRefreashPage->entry_date = null; $deleteDataControlWhereRefreashPage->departure_date = null; $deleteDataControlWhereRefreashPage->save(); } return redirect()->route('enterWorkstation'); } else $receiveDataElementalTask = ElementalTasks::find($recebeDataControlId->elemental_tasks_id); //Deve recupar os dados da tarefa Atual quando receber o control_id //Returning the values to a view "values" return view('workstations.workstations', [ 'receiveDataElementalTask' => $receiveDataElementalTask, 'receiveDataEquipment' => $receiveDataEquipment, 'control_ew_id' => $control_ew_id, 'task_todo' => $task_todo ]); } }