ispt4.0_laravel/app/Http/Controllers/WorkstationsJobsController.php

400 lines
19 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\ConstructionWorkstation;
use App\Models\ControlEquipmentWorkstation;
use App\Models\ElementalTasks;
use App\Models\Equipment;
use App\Models\workstationsTaskAnswers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class WorkstationsJobsController extends Controller
{
public function receiveAnswersEquipment(Request $request)
{
// Primeiro ele deve criar a associação entre id atual do control + perguntas e respostas
$receiveAnswersElementalTasks = new workstationsTaskAnswers;
$receiveAnswersElementalTasks->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;
}
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
// 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]);
//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
]);
}
}