diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 53b6fcb1..2a0b3e45 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -227,7 +227,7 @@ public function addFurtherTasks(Request $request) $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $request->equipmentID) ->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->first(); - + // *Para Criar uma nova Tarefa complementar deve ser a soma dos dados das 2 tabelas para dar o numero da proxima tarefa e assim o numero da TC // Obtenha a contagem de registros nas tabelas ElementalTasks e FurtherTasks @@ -537,28 +537,31 @@ public function removeProjectEquipment(Request $request) return back()->with('success', 'Equipamento retirado da obra !'); } - public function EditEquipment (Request $request) + public function EditEquipment(Request $request) { - dd($request); // Localiza o equipment pelo numberProject - $equipment = Equipment::find($request->equipmentId); + $dataEquipment = Equipment::where('equipment_tag', $request->tag)->first(); + + $receiveEquipmentWorkHistori = EquipmentWorkHistory::where('equipment_id', $dataEquipment->equipment_id) + ->where('company_projects_id', $dataEquipment->company_projects_id) + ->first(); // Atualiza os campos - $equipment->equipment_tag = $request->tag; - $equipment->equipment_description = $request->equipmentDescription; - $equipment->equipment_serial_number = $request->serialNumberEquipment; - $equipment->equipment_brand = $request->equipmentBrand; - $equipment->equipment_model = $request->equipmentModel; + $dataEquipment->equipment_tag = $request->tag; + $dataEquipment->equipment_description = $request->equipmentDescription; + $dataEquipment->equipment_serial_number = $request->serialNumberEquipment; + $dataEquipment->equipment_brand = $request->equipmentBrand; + $dataEquipment->equipment_model = $request->equipmentModel; - $equipment->save(); + $dataEquipment->save(); if ($request->input('attributes')) { foreach ($request->input('attributes') as $key => $value) { // Verifica se o valor é null e a chave é um número (correspondendo aos general_attributes_equipment_id) if ($value == null && is_numeric($key)) { // Procura o registro relevante em SpecificAttributesEquipmentType - $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $request->equipmentId) + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $dataEquipment->equipment_id) ->where('general_attributes_equipment_id', $key) ->first(); @@ -571,7 +574,7 @@ public function EditEquipment (Request $request) elseif ($value !== null && is_numeric($key)) { // Procura o registro relevante em SpecificAttributesEquipmentType - $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $request->equipmentId) + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $dataEquipment->equipment_id) ->where('general_attributes_equipment_id', $key) ->first(); @@ -584,8 +587,8 @@ public function EditEquipment (Request $request) else { // Cria um novo registro em SpecificAttributesEquipmentType $specificAttributes = new SpecificAttributesEquipmentType(); - $specificAttributes->equipment_id = $request->equipmentId; - $specificAttributes->equipment_type_id = $equipment->equipment_type_id; + $specificAttributes->equipment_id = $dataEquipment->equipment_id; + $specificAttributes->equipment_type_id = $dataEquipment->equipment_type_id; $specificAttributes->general_attributes_equipment_id = $key; $specificAttributes->specific_attributes_value = $value; $specificAttributes->save(); @@ -595,57 +598,67 @@ public function EditEquipment (Request $request) } + // dd($request); // Se não selecionar nenhuma tarefas ele devolve um erro , pois e necessario pelo menos uma - if (!in_array('on', $request->input('ordemTasks'))) { - return redirect()->back()->with('danger', 'É necessário selecionar pelo menos uma tarefa, Para o Equipamento : ' . $equipment->equipment_tag); - } - $executionOrder = 1; + // if (!in_array('on', $request->input('ordemTasks'))) { + // return redirect()->back()->with('danger', 'É necessário selecionar pelo menos uma tarefa, Para o Equipamento : ' . $equipment->equipment_tag); + // } + // $executionOrder = 1; - foreach ($request->input('ordemTasks') as $key => $value) { - $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) - ->where('elemental_tasks_id', $key) - ->first(); + + // foreach ($request->input('ordemTasks') as $key => $value) { + // $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + // ->where('elemental_tasks_id', $key) + // ->first(); - if ($value == "on") { - if (!$orderEquipmentTask) { - $orderEquipmentTask = new OrderEquipmentTasks(); - $orderEquipmentTask->equipment_id = $request->equipmentId; - $orderEquipmentTask->elemental_tasks_id = $key; - } - $orderEquipmentTask->execution_order = $executionOrder; - $orderEquipmentTask->save(); + // if ($value == "on") { + // if (!$orderEquipmentTask) { + // if ($receiveEquipmentWorkHistori && $receiveEquipmentWorkHistori <> null) { + // $orderEquipmentTask = new OrderEquipmentTasks(); + // $orderEquipmentTask->equipment_id = $request->equipmentId; + // $orderEquipmentTask->elemental_tasks_id = $key; + // } - $executionOrder++; - } elseif ($value == "off" && $orderEquipmentTask) { - $orderEquipmentTask->delete(); - } - } + // } + // //Nal precisa mais indicar a ordem das tarefas pois ela agora nao vao ser feitas por ordem necessariamente + // $orderEquipmentTask->execution_order = null; + // $orderEquipmentTask->save(); + + // $executionOrder++; + // } elseif ($value == "off" && $orderEquipmentTask) { + // $orderEquipmentTask->delete(); + // } + // } - $executionOrder = 1; // Reinicia a contagem de ordem de execução - $remainingOrderEquipmentTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) - ->orderBy('execution_order', 'asc') - ->get(); + // // $executionOrder = 1; // Reinicia a contagem de ordem de execução + // $remainingOrderEquipmentTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + // ->orderBy('execution_order', 'asc') + // ->get(); - foreach ($remainingOrderEquipmentTasks as $orderEquipmentTask) { - $orderEquipmentTask->execution_order = $executionOrder; - $orderEquipmentTask->save(); - $executionOrder++; - } + // foreach ($remainingOrderEquipmentTasks as $orderEquipmentTask) { + // $orderEquipmentTask->execution_order = null; + // $orderEquipmentTask->save(); + // $executionOrder++; + // } - $orderTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) - ->orderBy('execution_order', 'asc') - ->get(); + // $orderTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + // ->orderBy('execution_order', 'asc') + // ->get(); - $taskExecutionOrders = []; - foreach ($orderTasks as $task) { - $taskExecutionOrders[$task->elemental_tasks_id] = $task->execution_order; - } + // $taskExecutionOrders = []; + // foreach ($orderTasks as $task) { + // $taskExecutionOrders[$task->elemental_tasks_id] = $task->execution_order; + // } // Retorna uma resposta - return redirect()->route('articulated_2', ['id' => $request->numberProject]) - ->with('success', 'Equipamento ' . $equipment->equipment_tag . ' Editado com Sucesso!!!') - ->with('taskExecutionOrders', $taskExecutionOrders); + // return redirect()->route('articulated_2', ['id' => $request->numberProject]) + // ->with('success', 'Equipamento ' . $dataEquipment->equipment_tag . ' Editado com Sucesso!!!'); + // ->with('taskExecutionOrders', $taskExecutionOrders); + + // return back()->with('success', 'Ação concluída com sucesso!') + return back(); + } public function showJson($id) diff --git a/app/Http/Controllers/PreparedProjectController.php b/app/Http/Controllers/PreparedProjectController.php index ef8acedd..d5ed39d9 100755 --- a/app/Http/Controllers/PreparedProjectController.php +++ b/app/Http/Controllers/PreparedProjectController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Models\EquipmentWorkHistory; +use App\Models\QrcodesAssociatedEquipment; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -19,48 +21,170 @@ use Mpdf\Mpdf; +use Endroid\QrCode\QrCode; +use Endroid\QrCode\Writer\PngWriter; + class PreparedProjectController extends Controller { - // public function showDetailsEquipmentForQrCode($equipmentId,$projectId){ - // // dd($equipmentId); - // $detailsEquipment = Equipment::find($equipmentId); + // public function showAllEquipmentsInProjectForQrCode($projectId) + // { + // $equipments = Equipment::where('company_projects_id', $projectId)->get(); // $userLogoPath = Auth::user()->user_logo ? asset('user_logos/' . Auth::user()->user_logo) : asset('user_logos/logoISPT4.0.jpg'); - // // dd($detailsEquipment); - // $pdf = PDF::loadView('projectsClients.showDetailsEquipmentForQrCodePdf',[ - // 'detailsEquipment' => $detailsEquipment, - // 'userLogoPath' => $userLogoPath - // ])->setPaper('a4'); - - // return $pdf->stream('teste.pdf'); + // $equipmentData = []; + // foreach ($equipments as $equipment) { + + // // Gera o QR Code para cada equipamento + // $qrCode = new QrCode($equipment->equipment_tag); + // $writer = new PngWriter(); + // $qrCodeImage = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString()); + + // // Busca equipamentos associados para cada equipamento + // $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)->get(); + // $associatedArray = []; + // foreach ($associatedEquipments as $associatedEquipment) { + // $associatedArray[$associatedEquipment->id] = $associatedEquipment->component_tag; + // } + + // // Adiciona os dados necessários para cada equipamento em um array + // $equipmentData[] = [ + // 'detailsEquipment' => $equipment, + // 'userLogoPath' => $userLogoPath, + // 'qrCodeImage' => $qrCodeImage, + // 'associatedArray' => $associatedArray + // ]; + // } + + // // Passa todos os dados dos equipamentos para a view + // $html = view('projectsClients.showAllEquipmentsForQrCodePdf', [ + // 'equipmentData' => $equipmentData, + // 'userLogoPath' => $userLogoPath, + // ])->render(); + + // // Define a orientação da folha como horizontal (Landscape) + // $mpdf = new \Mpdf\Mpdf([ + // 'mode' => 'utf-8', + // 'format' => 'A4-L' // Define o formato como A4 e orientação como Landscape (horizontal) + // ]); + // $mpdf->WriteHTML($html); + // $mpdf->Output('equipamentos_projeto_' . $projectId . '.pdf', 'I'); // } + public function showAllEquipmentsInProjectForQrCode($projectId) + { + $equipments = Equipment::where('company_projects_id', $projectId)->get(); + $userLogoPath = Auth::user()->user_logo ? asset('user_logos/' . Auth::user()->user_logo) : asset('user_logos/logoISPT4.0.jpg'); + + $equipmentData = []; + foreach ($equipments as $equipment) { + $qrCode = new QrCode($equipment->equipment_tag); + $writer = new PngWriter(); + $qrCodeImage = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString()); + + $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)->get(); + $associatedArray = []; + foreach ($associatedEquipments as $associatedEquipment) { + $associatedArray[$associatedEquipment->id] = $associatedEquipment->component_tag; + } + + $equipmentData[] = [ + 'equipment' => $equipment, + 'qrCodeImage' => $qrCodeImage, + 'associatedArray' => $associatedArray + ]; + } + + // dd($equipmentData); + + $html = view('projectsClients.showAllEquipmentsInProjectQrCodePdf', [ + 'equipmentData' => $equipmentData, + 'userLogoPath' => $userLogoPath + ])->render(); + + $mpdf = new \Mpdf\Mpdf([ + 'mode' => 'utf-8', + 'format' => 'A4' + ]); + $mpdf->WriteHTML($html); + $mpdf->Output('equipamentos_projeto_' . $projectId . '.pdf', 'I'); + } + + public function showDetailsEquipmentForQrCode($equipmentId, $projectId) { $detailsEquipment = Equipment::find($equipmentId); - // Determina o caminho do logo do usuário ou um padrão. - $userLogoPath = Auth::user()->user_logo ? asset('user_logos/' . Auth::user()->user_logo) : asset('user_logos/logoISPT4.0.jpg'); + + // Gera o QR Code + $qrCode = new QrCode($detailsEquipment->equipment_tag); + $writer = new PngWriter(); + + // Converte o QR Code para base64 para incorporar na página + $qrCodeImage = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString()); + + // $userLogoPath = Auth::user()->user_logo ? asset('user_logos/' . Auth::user()->user_logo) : asset('user_logos/logoISPT4.0.jpg'); + + $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $detailsEquipment->equipment_id)->get(); + + $associatedArray = []; + foreach ($associatedEquipments as $associatedEquipment) { + $associatedArray[$associatedEquipment->id] = $associatedEquipment->component_tag; + } + $html = view('projectsClients.showDetailsEquipmentForQrCodePdf', [ 'detailsEquipment' => $detailsEquipment, - 'userLogoPath' => $userLogoPath])->render(); - // Cria uma instância do mPDF - $mpdf = new Mpdf(); - // Escreve o HTML para o mPDF + // 'userLogoPath' => $userLogoPath, + 'qrCodeImage' => $qrCodeImage, + 'associatedArray' => $associatedArray + ])->render(); + + // Define a orientação da folha como horizontal (Landscape) + $mpdf = new \Mpdf\Mpdf([ + 'mode' => 'utf-8', + 'format' => 'A4' // Define o formato como A4 e orientação como Landscape (horizontal) + ]); $mpdf->WriteHTML($html); - // Gera o PDF no navegador $mpdf->Output('nome_do_arquivo.pdf', 'I'); } + public function PreparedProject($ProjectId) { $numberProject = CompanyProject::find($ProjectId); - $equipmentsProjects = Equipment::all()->where('company_projects_id', $ProjectId); - $equipmentsTypes = EquipmentType::all(); + // Carrega todos os equipamentos para um dado projeto + $equipmentsProjects = Equipment::where('company_projects_id', $ProjectId)->get(); + + // Carrega as relações aninhadas + $equipmentsProjects->load('equipmentWorkHistory.equipmentAssociationAmbit.ambitsEquipment'); + + // Adiciona o 'ambits_description' a cada equipamento + foreach ($equipmentsProjects as $equipment) { + // Obtém o primeiro EquipmentWorkHistory (se existir) + $equipmentWorkHistory = $equipment->equipmentWorkHistory->first(); + + // Se existe um EquipmentWorkHistory, tenta obter o 'ambits_description' + if ($equipmentWorkHistory) { + // Tenta obter o EquipmentAssociationAmbit e o AmbitsEquipment relacionados + $equipmentAssociationAmbit = $equipmentWorkHistory->equipmentAssociationAmbit; + if ($equipmentAssociationAmbit) { + $ambitsEquipment = $equipmentAssociationAmbit->ambitsEquipment; + if ($ambitsEquipment) { + // Se existir um AmbitsEquipment, define o 'ambits_description' + $equipment->ambits_description = $ambitsEquipment->ambits_description; + } + } + } + + // Se alguma das relações não existir, define 'ambits_description' como null + if (!isset($equipment->ambits_description)) { + $equipment->ambits_description = null; + } + } + //Retorna todas as Fabricas Unit, com base na Instalação $checkUnits = DB::table('units') ->join('plants', 'units.plant_id', '=', 'plants.plant_id') @@ -71,7 +195,6 @@ public function PreparedProject($ProjectId) // dd($equipmentsProjects); return view('projectsClients/preparedProject') - // ->with('equipmentsProjects', $equipmentsProjects) ->with('equipmentsTypes', $equipmentsTypes) ->with('units', $checkUnits) ->with('numberProject', $numberProject) diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php index f6ebcb7b..1ee186d2 100755 --- a/app/Http/Controllers/ProjectoDatacontroller.php +++ b/app/Http/Controllers/ProjectoDatacontroller.php @@ -290,24 +290,39 @@ public function projectDetails_11($projectID, $equipmentID) $dataEquipment = Equipment::find($equipmentID); - $detailsEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id',$dataEquipment->equipment_id)->first(); + $detailsEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $dataEquipment->equipment_id)->first(); $receiveEquipmentWorkHistorys = EquipmentWorkHistory::where('equipment_id', $equipmentID) ->where('company_projects_id', $projectID) ->first(); $attributes = SpecificAttributesEquipmentType::where('equipment_id', $equipmentID)->get(); // recebe todos os atributos espesificos do equipamento - $OrdemTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)->get(); // Todas as tarefas que o equipamento vai realizar : - $OrdemTasksIds = $OrdemTasks->pluck('elemental_tasks_id')->all(); // Array de IDs + $DetailsTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)->get(); // Todas as tarefas que o equipamento vai realizar : + // $OrdemTasks = $DetailsTasks->pluck('elemental_tasks_id')->all(); // Array de IDs + $OrdemTasks = $DetailsTasks->pluck('execution_order', 'elemental_tasks_id')->all(); + // Ajuste para definir 'on' para cada tarefa + $OrdemTasks = $DetailsTasks->mapWithKeys(function ($task) { + return [$task->elemental_tasks_id => 'on']; + })->all(); - return view('projectsClients.articulated_2_ShowEquipment', compact('dataEquipment', 'OrdemTasks', 'OrdemTasksIds','detailsEquipmentWorkHistory')); - } + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $dataEquipment->equipment_id)->get(); + $specificAttributesArray = []; + + foreach ($specificAttributes as $attribute) { + $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; + } + // dd($OrdemTasks); + + return view('projectsClients.articulated_2_ShowEquipment', compact('dataEquipment', 'OrdemTasks', 'DetailsTasks', 'detailsEquipmentWorkHistory','specificAttributesArray')); + } //Funcao que recebe a Acoes do dataTables do portifolio. public function articulated_22($equipmentID) { + //Nao esta recebendo os selects + // $dataEquipment = Equipment::find($equipmentID); // $detailsEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id',$equipmentID)->first(); @@ -336,7 +351,15 @@ public function articulated_22($equipmentID) } } - return view('projectsClients.testRoute', compact('dataEquipment', 'receiveAlldetailsEquipmentWorkHistory')); + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $dataEquipment->equipment_id)->get(); + + $specificAttributesArray = []; + + foreach ($specificAttributes as $attribute) { + $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; + } + + return view('projectsClients.testRoute', compact('dataEquipment', 'receiveAlldetailsEquipmentWorkHistory','specificAttributesArray')); } diff --git a/composer.json b/composer.json index b0bc0201..f0ccd2dd 100755 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "require": { "php": "^8.1", "barryvdh/laravel-dompdf": "^2.0", + "endroid/qr-code": "^5.0", "guzzlehttp/guzzle": "^7.5", "laravel/fortify": "^1.17", "laravel/framework": "^10.8", diff --git a/composer.lock b/composer.lock index ceefe5f5..7da93749 100755 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "64083e5824273dda380cfc7b6f6c0897", + "content-hash": "c3621371ed5b5bd7d608e988583189cb", "packages": [ { "name": "bacon/bacon-qr-code", @@ -675,6 +675,81 @@ ], "time": "2023-01-14T14:17:03+00:00" }, + { + "name": "endroid/qr-code", + "version": "5.0.4", + "source": { + "type": "git", + "url": "https://github.com/endroid/qr-code.git", + "reference": "0efd071a3640af323e23c94122fe92cfd5199833" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/0efd071a3640af323e23c94122fe92cfd5199833", + "reference": "0efd071a3640af323e23c94122fe92cfd5199833", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^2.0.5", + "php": "^8.1" + }, + "conflict": { + "khanamiryan/qrcode-detector-decoder": "^1.0.6" + }, + "require-dev": { + "endroid/quality": "dev-main", + "ext-gd": "*", + "khanamiryan/qrcode-detector-decoder": "^1.0.4||^2.0.2", + "setasign/fpdf": "^1.8.2" + }, + "suggest": { + "ext-gd": "Enables you to write PNG images", + "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", + "roave/security-advisories": "Makes sure package versions with known security issues are not installed", + "setasign/fpdf": "Enables you to use the PDF writer" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Endroid\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeroen van den Enden", + "email": "info@endroid.nl" + } + ], + "description": "Endroid QR Code", + "homepage": "https://github.com/endroid/qr-code", + "keywords": [ + "code", + "endroid", + "php", + "qr", + "qrcode" + ], + "support": { + "issues": "https://github.com/endroid/qr-code/issues", + "source": "https://github.com/endroid/qr-code/tree/5.0.4" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2023-12-24T13:47:07+00:00" + }, { "name": "ezyang/htmlpurifier", "version": "v4.16.0", diff --git a/public/user_logos/1707839809.jpg b/public/user_logos/1707839809.jpg new file mode 100644 index 00000000..ce91928d Binary files /dev/null and b/public/user_logos/1707839809.jpg differ diff --git a/resources/views/email/email.blade.php b/resources/views/email/email.blade.php index f263751d..b26296a8 100755 --- a/resources/views/email/email.blade.php +++ b/resources/views/email/email.blade.php @@ -5,6 +5,13 @@
Agradecemos a sua atenção e ficamos ao dispor para qualquer esclarecimento.
Com os melhores cumprimentos,
Ispt4.0
-
+
+
+ {{--
--}}