updating the visualization and creation of qrcodes by type of equipment, creation of a qrcode visualization modal with livewire component
This commit is contained in:
parent
f9c6cec070
commit
2ddc55eeed
|
|
@ -27,6 +27,8 @@
|
|||
use App\Models\FurtherTasks;
|
||||
use App\Models\WorkstationsAssociationTasks;
|
||||
use App\Models\TasksAssociationAmbits;
|
||||
use App\Models\QrcodesAssociatedEquipment;
|
||||
|
||||
use LengthException;
|
||||
|
||||
// use DataTables;
|
||||
|
|
@ -189,7 +191,6 @@ function () use ($writer) {
|
|||
return $response;
|
||||
}
|
||||
|
||||
|
||||
public function finishCreatingProject($numberProject)
|
||||
{
|
||||
// recebe atraves de sessao toda a vez quem entra no componente 'SelectElementalTasksInWonkstation' para selecionar as tarefas de cada Workstation
|
||||
|
|
@ -1000,11 +1001,50 @@ public function processStep2(Request $request)
|
|||
|
||||
public function showStep3($company_projects_id)
|
||||
{
|
||||
//Sempre que entrar na view ja verifica se existe 'Workstations' preparadas para esta obra.
|
||||
$listWorkstations = ConstructionWorkstation::where('company_projects_id', $company_projects_id)->get();
|
||||
$equipments = Equipment::where('company_projects_id', $company_projects_id)
|
||||
->get();
|
||||
|
||||
foreach ($equipments as $equipment) {
|
||||
$tags = [];
|
||||
if ($equipment->equipment_type_id == 3) {
|
||||
$tags = ['@Corpo', '@Flange', '@Obturador'];
|
||||
} elseif ($equipment->equipment_type_id == 1) {
|
||||
$tags = ['@Corpo', '@Flange'];
|
||||
}
|
||||
|
||||
foreach ($tags as $tag) {
|
||||
$associatedEquipment = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)
|
||||
->where('component_tag', 'LIKE', '%' . $tag)
|
||||
->first();
|
||||
|
||||
if ($associatedEquipment) {
|
||||
// Atualizar a coluna component_tag para ser igual à equipment_tag, mantendo a parte após o "@"
|
||||
$newComponentTag = $equipment->equipment_tag . $tag;
|
||||
$associatedEquipment->component_tag = $newComponentTag;
|
||||
$associatedEquipment->save();
|
||||
} else {
|
||||
// Criar uma nova entrada
|
||||
QrcodesAssociatedEquipment::create([
|
||||
'equipment_id' => $equipment->equipment_id,
|
||||
'component_tag' => $equipment->equipment_tag . $tag
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Verificar se há algum equipment_id em QrcodesAssociatedEquipment que não existe mais em Equipment e, se sim, excluí-lo.
|
||||
$allEquipmentIds = Equipment::where('company_projects_id', $company_projects_id)->pluck('equipment_id')->toArray();
|
||||
$orphanedEntries = QrcodesAssociatedEquipment::whereNotIn('equipment_id', $allEquipmentIds)->get();
|
||||
|
||||
foreach ($orphanedEntries as $orphanedEntry) {
|
||||
$orphanedEntry->delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Sempre que entrar na view ja verifica se existe 'Workstations' preparadas para esta obra.
|
||||
$listWorkstations = ConstructionWorkstation::where('company_projects_id', $company_projects_id)->get();
|
||||
|
||||
$futherTasks = FurtherTasks::where('company_projects_id', $company_projects_id)
|
||||
->get();
|
||||
|
||||
|
|
|
|||
68
app/Livewire/ManagementDashboard/WorkManagement.php
Normal file
68
app/Livewire/ManagementDashboard/WorkManagement.php
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
namespace App\Livewire\ManagementDashboard;
|
||||
|
||||
use Livewire\Component;
|
||||
|
||||
use App\Models\Equipment;
|
||||
use App\Models\ControlEquipmentWorkstation;
|
||||
use App\Models\OrderEquipmentTasks;
|
||||
|
||||
|
||||
class WorkManagement extends Component
|
||||
{
|
||||
public $totalEquipments;
|
||||
public $type1Count;
|
||||
public $type2Count;
|
||||
public $type3Count;
|
||||
|
||||
public function mount()
|
||||
{
|
||||
$this->refreshData();
|
||||
}
|
||||
|
||||
public function refreshData()
|
||||
|
||||
{
|
||||
$this->totalEquipments = Equipment::count();
|
||||
|
||||
// Inicializar type3Count como 0
|
||||
$this->type3Count = 0;
|
||||
|
||||
// Obter todos os equipamentos
|
||||
$equipments = Equipment::all();
|
||||
|
||||
foreach ($equipments as $equipment) {
|
||||
|
||||
// conta quantos dados existem na model OrderEquipmentTasks, referente ao equipamento indicado
|
||||
$tasksCount = OrderEquipmentTasks::where('equipment_id', $equipment->equipment_id)->count();
|
||||
// Verifica quantos dados tem ao mesmo equipamento
|
||||
$controlCount = ControlEquipmentWorkstation::where('equipment_id', $equipment->equipment_id)->count();
|
||||
|
||||
if ($controlCount >= $tasksCount) {
|
||||
$isValid = ControlEquipmentWorkstation::where('equipment_id', $equipment->equipment_id)
|
||||
->whereNotNull('entry_date')
|
||||
->whereNotNull('departure_date')
|
||||
->count() >= $tasksCount;
|
||||
|
||||
if ($isValid) {
|
||||
$this->type3Count++;
|
||||
$type3EquipmentIds[] = $equipment->equipment_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Atualizar type2Count
|
||||
$this->type2Count = Equipment::whereIn('equipment_id', ControlEquipmentWorkstation::select('equipment_id'))
|
||||
->whereNotIn('equipment_id', $type3EquipmentIds)
|
||||
->count();
|
||||
|
||||
// Contar equipamentos que NÃO estão em ControlEquipmentWorkstation
|
||||
$this->type1Count = Equipment::whereNotIn('equipment_id', ControlEquipmentWorkstation::select('equipment_id'))->count();
|
||||
|
||||
}
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.management-dashboard.work-management');
|
||||
}
|
||||
}
|
||||
|
|
@ -5,19 +5,33 @@
|
|||
use Livewire\Component;
|
||||
|
||||
use App\Models\Equipment;
|
||||
use App\Models\QrcodesAssociatedEquipment;
|
||||
|
||||
class ShowQrcodeAndDetallsEquipment extends Component
|
||||
{
|
||||
public $equipment;
|
||||
|
||||
public function mount($equipment){
|
||||
public function mount($equipment)
|
||||
{
|
||||
$this->equipment = $equipment;
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
// $this->equipment = Equipment::find($this->equipment->id);
|
||||
return view('livewire.preparadas.show-qrcode-and-detalls-equipment');
|
||||
}
|
||||
|
||||
// $this->equipment = Equipment::find($this->equipment->id);
|
||||
// return view('livewire.preparadas.show-qrcode-and-detalls-equipment');
|
||||
|
||||
// $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $this->equipment->equipment_id)->get();
|
||||
// return view('livewire.preparadas.show-qrcode-and-detalls-equipment', ['associatedEquipments' => $associatedEquipments]);
|
||||
|
||||
$associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $this->equipment->equipment_id)->get();
|
||||
|
||||
$associatedArray = [];
|
||||
foreach ($associatedEquipments as $associatedEquipment) {
|
||||
$associatedArray[$associatedEquipment->id] = $associatedEquipment->component_tag;
|
||||
}
|
||||
|
||||
return view('livewire.preparadas.show-qrcode-and-detalls-equipment', ['associatedArray' => $associatedArray,'associatedEquipments' => $associatedEquipments]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,5 +63,8 @@ public function hasInspectionYes()
|
|||
return $this->orderEquipmentTasks()->where('inspection', 'Sim')->exists();
|
||||
}
|
||||
|
||||
public function QrcodesAssociatedEquipment(){
|
||||
return $this->hasMany(QrcodesAssociatedEquipment::class,'equipment_id','equipment_id');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
26
app/Models/QrcodesAssociatedEquipment.php
Normal file
26
app/Models/QrcodesAssociatedEquipment.php
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class QrcodesAssociatedEquipment extends Model
|
||||
{
|
||||
protected $fillable = ['equipment_id', 'component_tag'];
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
|
||||
protected $table = 'qrcodes_associated_equipment';
|
||||
|
||||
protected $primaryKey = 'id';
|
||||
|
||||
use HasFactory;
|
||||
|
||||
public function equipment()
|
||||
{
|
||||
return $this->belongsTo(Equipment::class, 'equipment_id', 'equipment_id');
|
||||
}
|
||||
|
||||
}
|
||||
78
public/assets/dist/css/adminlte.css
vendored
78
public/assets/dist/css/adminlte.css
vendored
|
|
@ -83,10 +83,13 @@ @font-face {
|
|||
/* Estilo para dimencionar o cartao do qrcode */
|
||||
.modal-content-center {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
/* Isso garante que os cartões sejam exibidos em uma linha horizontal */
|
||||
flex-wrap: wrap;
|
||||
/* Isso permite que os cartões se envolvam para a próxima linha se não houver espaço suficiente */
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
/* Isso garante que o container ocupe toda a altura da modal */
|
||||
}
|
||||
|
||||
.card-to-print {
|
||||
|
|
@ -97,6 +100,8 @@ .card-to-print {
|
|||
border: 1px solid #09255C;
|
||||
box-sizing: border-box;
|
||||
transform-origin: top left;
|
||||
margin: 10px;
|
||||
/* Isso adiciona uma margem ao redor de cada cartão */
|
||||
}
|
||||
|
||||
.custom-row {
|
||||
|
|
@ -114,7 +119,6 @@ .custom-row {
|
|||
/* Remove a margem negativa padrão da classe row do Bootstrap */
|
||||
}
|
||||
|
||||
|
||||
.top {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
|
@ -154,15 +158,69 @@ .custom-rowAll {
|
|||
/* Estilos para impressão */
|
||||
@media print {
|
||||
|
||||
body * {
|
||||
visibility: hidden;
|
||||
}
|
||||
/* body,
|
||||
html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
} */
|
||||
|
||||
body * {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/* .modal,
|
||||
.modal * {
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
||||
.modal-content-center,
|
||||
.modal-content-center * {
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
||||
.card-to-print,
|
||||
.card-to-print * {
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
||||
.modal-content-center {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.card-to-print {
|
||||
display: inline-block;
|
||||
margin-right: 2mm;
|
||||
margin-bottom: 3mm;
|
||||
} */
|
||||
|
||||
/* Mostra apenas o conteúdo da div .modal-content-center dentro de modais que têm um ID que começa com 'yourModalId-' */
|
||||
[id^="yourModalId-"] .modal-content-center,
|
||||
[id^="yourModalId-"] .modal-content-center .card-to-print,
|
||||
[id^="yourModalId-"] .modal-content-center .card-to-print * {
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
||||
[id^="yourModalId-"] .modal-content-center {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[id^="yourModalId-"] .modal-content-center .card-to-print {
|
||||
display: inline-block;
|
||||
margin-right: 2mm;
|
||||
margin-bottom: 3mm;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.print-container,
|
||||
.print-container * {
|
||||
visibility: visible !important;
|
||||
|
|
@ -180,7 +238,13 @@ @media print {
|
|||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.card-to-print,
|
||||
/* .card-to-print {
|
||||
display: inline-block;
|
||||
margin-right: 2mm;
|
||||
margin-bottom: 3mm;
|
||||
} */
|
||||
|
||||
/* .card-to-print,
|
||||
.card-to-print * {
|
||||
visibility: visible;
|
||||
}
|
||||
|
|
@ -189,7 +253,7 @@ @media print {
|
|||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
|
||||
|
||||
<div>
|
||||
<h1>Total de Equipamentos: {{ $totalEquipments }}</h1>
|
||||
<canvas id="myPieChart" width="400" height="400"></canvas>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Obtenha o contexto do elemento canvas
|
||||
var ctx = document.getElementById('myPieChart').getContext('2d');
|
||||
|
||||
// Dados do componente Livewire
|
||||
var type1Count = {{ $type1Count }};
|
||||
var type2Count = {{ $type2Count }};
|
||||
var type3Count = {{ $type3Count }};
|
||||
|
||||
// Crie um novo gráfico circular
|
||||
var myPieChart = new Chart(ctx, {
|
||||
type: 'doughnut',
|
||||
data: {
|
||||
labels: ['Nao Iniciados', 'Em progresso', 'Finalizadas'],
|
||||
datasets: [{
|
||||
data: [type1Count, type2Count, type3Count], // Dados do componente Livewire
|
||||
backgroundColor: [
|
||||
'rgba(255, 99, 132, 0.5)',
|
||||
'rgba(54, 162, 235, 0.5)',
|
||||
'rgba(255, 206, 86, 0.5)'
|
||||
],
|
||||
borderColor: [
|
||||
'rgba(255, 99, 132, 1)',
|
||||
'rgba(54, 162, 235, 1)',
|
||||
'rgba(255, 206, 86, 1)'
|
||||
],
|
||||
borderWidth: 1
|
||||
}]
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{{-- <script src="{{ asset('assets/dist/js/qrcode.js') }}"></script> --}}
|
||||
<script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>
|
||||
|
||||
<div>
|
||||
<td><a href="#" data-toggle="modal" data-target="#yourModalId-{{ $equipment->equipment_id }}"
|
||||
|
|
@ -7,8 +7,10 @@
|
|||
</a>
|
||||
</td>
|
||||
|
||||
<div class="modal fade" id="yourModalId-{{ $equipment->equipment_id }}" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
{{-- <div class="modal fade" id="yourModalId-{{ $equipment->equipment_id }}" tabindex="-1" role="dialog" data-equipment-id="{{ $equipment->equipment_id }}"> --}}
|
||||
<div class="modal fade" id="yourModalId-{{ $equipment->equipment_id }}" tabindex="-1" role="dialog"
|
||||
data-equipment-id="{{ $equipment->equipment_id }}">
|
||||
<div class="modal-dialog modal-lg">
|
||||
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
|
|
@ -19,61 +21,87 @@
|
|||
<div class="modal-body">
|
||||
{{-- ID do Equipamento: <span>{{ $equipment->equipment_id }}</span> --}}
|
||||
<input hidden type="text" id="valor" value="{{ $equipment->equipment_tag }}">
|
||||
<div class="modal-content-center">
|
||||
<div class="card-to-print">
|
||||
<div class="top">
|
||||
</div>
|
||||
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center"
|
||||
style="display: flex; align-items: center; justify-content: center; background-color: #09255C; position: relative;">
|
||||
<div id="circulo"
|
||||
style="position: absolute; left: 10px; top: 50%; transform: translateY(-50%);">
|
||||
</div>
|
||||
<img style="width:50px;"
|
||||
src="{{ asset('img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg') }}"
|
||||
alt="imagem nao encontrada">
|
||||
<div style="line-height: 2.5; color: white;">ISPT 4.0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-row" style="margin-top: 10px;">
|
||||
|
||||
<div class="col-sm qrcode-output" style="padding-left: 13px;"
|
||||
data-equipment-id="{{ $equipment->equipment_id }}">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center">
|
||||
<div style="margin-bottom: 13px;font-size: 1.1rem;color: #00B0EA"><b>TAG</b>
|
||||
{{ $equipment->equipment_tag }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center">
|
||||
<h6 style="line-height: 2.5;margin-block-end: 0;color: #00B0EA;">
|
||||
{{ $equipment->equipmentType->equipment_type_name }}</h6>
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<h6 style="line-height: 2.5;margin-block-end: 0; color: #00B0EA;">
|
||||
{{ $equipment->unit->unit_name }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-row" style="margin-top: 23px;">
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 35px;" src="{{ asset('img/ispt/4.0/galpLogo1.png') }}"
|
||||
alt="Imagem nao encontrada galp ">
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 30px;" src="{{ asset('img/ispt/4.0/isptLogoVertical.png') }}"
|
||||
alt="Imagem nao contrada Ispt">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{-- Para guardar id sem mostrar no HTML --}}
|
||||
<div id="associatedData" style="display: none;"
|
||||
data-associated="{{ json_encode($associatedArray) }}">
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modal-content-center">
|
||||
@foreach ($associatedEquipments as $associatedEquipment)
|
||||
|
||||
<div class="card-to-print">
|
||||
<div class="top">
|
||||
</div>
|
||||
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center"
|
||||
style="display: flex; align-items: center; justify-content: center; background-color: #09255C; position: relative;">
|
||||
<div id="circulo"
|
||||
style="position: absolute; left: 10px; top: 50%; transform: translateY(-50%);">
|
||||
</div>
|
||||
<img style="width:50px;"
|
||||
src="{{ asset('img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg') }}"
|
||||
alt="imagem nao encontrada">
|
||||
<div style="line-height: 2.5; color: white;">ISPT 4.0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-row" style="margin-top: 10px;">
|
||||
|
||||
<div class="col-sm qrcode-output" style="padding-left: 13px;"
|
||||
data-equipment-id="{{ $associatedEquipment->id }}"
|
||||
data-component-tag="{{ $associatedEquipment->component_tag }}">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center">
|
||||
<div style="margin-bottom: 13px;font-size: 1.1rem;color: #00B0EA"><b>TAG</b>
|
||||
{{ $equipment->equipment_tag }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Serve para receber o conteudo que tem apos a @ --}}
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center">
|
||||
<div style="font-size: 1.1rem;color: #00B0EA">
|
||||
{{ explode('@', $associatedEquipment->component_tag)[1] }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-row">
|
||||
<div class="col-sm text-center">
|
||||
<h6 style="line-height: 2.5;margin-block-end: 0;color: #00B0EA;">
|
||||
{{ $equipment->equipmentType->equipment_type_name }}</h6>
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<h6 style="line-height: 2.5;margin-block-end: 0; color: #00B0EA;">
|
||||
{{ $equipment->unit->unit_name }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-row" style="margin-top: 10px;">
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 25px;" src="{{ asset('img/ispt/4.0/galpLogo1.png') }}"
|
||||
alt="Imagem nao encontrada galp ">
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 20px;"
|
||||
src="{{ asset('img/ispt/4.0/isptLogoVertical.png') }}"
|
||||
alt="Imagem nao contrada Ispt">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<br>
|
||||
<div class="text-center">
|
||||
<button class="btn btn-outline-secondary " onclick="printCard()">Imprimir Cartão</button>
|
||||
|
|
@ -88,3 +116,46 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#yourModalId-{{ $equipment->equipment_id }}').on('shown.bs.modal', function() {
|
||||
|
||||
// Limpar QR codes antigos
|
||||
$('.qrcode-output').empty();
|
||||
|
||||
// Para cada associatedEquipmentId na modal
|
||||
$('.qrcode-output', this).each(function() {
|
||||
var associatedEquipmentId = $(this).data('equipment-id');
|
||||
var componentTag = $(this).data('component-tag');
|
||||
|
||||
console.log("associatedEquipmentId:",
|
||||
associatedEquipmentId); // Log para verificar
|
||||
console.log("componentTag:", componentTag); // Log para verificar
|
||||
|
||||
// Se o componentTag existir, crie o QR code
|
||||
if (componentTag) {
|
||||
new QRCode(this, {
|
||||
text: componentTag,
|
||||
width: 140,
|
||||
height: 140,
|
||||
colorDark: '#09255C',
|
||||
colorLight: "white",
|
||||
correctLevel: QRCode.CorrectLevel.H
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function printEquipments() {
|
||||
// Acione a impressão
|
||||
window.print();
|
||||
}
|
||||
|
||||
function printCard() {
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1774,6 +1774,9 @@ class="form-control card_inputs"
|
|||
<input type="checkbox" name="">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td>TE11</td>
|
||||
<td>Inspeção Final</td>
|
||||
|
|
@ -2924,6 +2927,24 @@ class="form-control card_inputs"
|
|||
<input type="checkbox" name="">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>TE10.1</td>
|
||||
<td>Confirmação de ligação</td>
|
||||
{{-- Apenas para ver se recebe um on ou off, o hidden serve para devolver valor se o checkbox não estiver a 'checked' --}}
|
||||
<td class="text-center">
|
||||
<input type="hidden"
|
||||
name="ordemTasks[24]"
|
||||
value="off">
|
||||
<input type="checkbox"
|
||||
name="ordemTasks[24]" value="on"
|
||||
{{ old('ordemTasks[24]') == 'on' ? 'checked' : '' }}>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<input type="checkbox" name="">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>TE11</td>
|
||||
<td>Inspeção Final</td>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1>{{ $numberProject->company_project_description }}</h1>
|
||||
<input type="hidden" value="{{$numberProject->company_projects_id}}" id="receiveNumberProject">
|
||||
<input type="hidden" value="{{ $numberProject->company_projects_id }}" id="receiveNumberProject">
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
|
|
@ -24,70 +24,65 @@
|
|||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
{{-- Foreach para criar varios qrcodes para os equipamentos --}}
|
||||
{{-- @foreach ($equipmentsProjects as $equipment)
|
||||
<div class="print-container">
|
||||
<div class="card-to-printAll">
|
||||
|
||||
@foreach ($equipmentsProjects as $equipment)
|
||||
<div class="print-container">
|
||||
<div class="card-to-printAll">
|
||||
|
||||
<div class="custom-rowAll">
|
||||
<div class="col-sm text-center"
|
||||
style="display: flex; align-items: center; justify-content: center; background-color: #09255C; position: relative;">
|
||||
<div id="circulo"
|
||||
style="position: absolute; left: 10px; top: 50%; transform: translateY(-50%);">
|
||||
</div>
|
||||
<img style="width:50px;"
|
||||
src="{{ asset('img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg') }}"
|
||||
alt="imagem nao encontrada">
|
||||
<div style="line-height: 2.5; color: white;">
|
||||
ISPT 4.0</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-rowAll" style="margin-top: 10px;">
|
||||
<div class="col-sm qrcode-output" style="padding-left: 13px;"
|
||||
data-equipment-id="{{ $equipment->equipment_id }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-rowAll">
|
||||
<div class="col-sm text-center">
|
||||
<div
|
||||
style="margin-bottom: 13px;font-size: 1.1rem;color: #00B0EA">
|
||||
<b>TAG</b>
|
||||
{{ $equipment->equipment_tag }}
|
||||
<div class="custom-rowAll">
|
||||
<div class="col-sm text-center"
|
||||
style="display: flex; align-items: center; justify-content: center; background-color: #09255C; position: relative;">
|
||||
<div id="circulo"
|
||||
style="position: absolute; left: 10px; top: 50%; transform: translateY(-50%);">
|
||||
</div>
|
||||
<img style="width:50px;"
|
||||
src="{{ asset('img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg') }}"
|
||||
alt="imagem nao encontrada">
|
||||
<div style="line-height: 2.5; color: white;">
|
||||
ISPT 4.0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-rowAll">
|
||||
<div class="col-sm text-center">
|
||||
<h6
|
||||
style="line-height: 2.5;margin-block-end: 0;color: #00B0EA;">
|
||||
{{ $equipment->equipmentType->equipment_type_name }}
|
||||
</h6>
|
||||
<div class="custom-rowAll" style="margin-top: 10px;">
|
||||
<div class="col-sm qrcode-output" style="padding-left: 13px;"
|
||||
data-equipment-id="{{ $equipment->equipment_id }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<h6
|
||||
style="line-height: 2.5;margin-block-end: 0; color: #00B0EA;">
|
||||
{{ $equipment->unit->unit_name }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-rowAll" style="margin-top: 23px;">
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 35px;"
|
||||
src="{{ asset('img/ispt/4.0/galpLogo1.png') }}"
|
||||
alt="Imagem nao encontrada galp ">
|
||||
<div class="custom-rowAll">
|
||||
<div class="col-sm text-center">
|
||||
<div style="margin-bottom: 13px;font-size: 1.1rem;color: #00B0EA">
|
||||
<b>TAG</b>
|
||||
{{ $equipment->equipment_tag }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 30px;"
|
||||
src="{{ asset('img/ispt/4.0/isptLogoVertical.png') }}"
|
||||
alt="Imagem nao contrada Ispt">
|
||||
|
||||
<div class="custom-rowAll">
|
||||
<div class="col-sm text-center">
|
||||
<h6 style="line-height: 2.5;margin-block-end: 0;color: #00B0EA;">
|
||||
{{ $equipment->equipmentType->equipment_type_name }}
|
||||
</h6>
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<h6 style="line-height: 2.5;margin-block-end: 0; color: #00B0EA;">
|
||||
{{ $equipment->unit->unit_name }}</h6>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="custom-rowAll" style="margin-top: 23px;">
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 35px;" src="{{ asset('img/ispt/4.0/galpLogo1.png') }}"
|
||||
alt="Imagem nao encontrada galp ">
|
||||
</div>
|
||||
<div class="col-sm text-center">
|
||||
<img style="width: 30px;" src="{{ asset('img/ispt/4.0/isptLogoVertical.png') }}"
|
||||
alt="Imagem nao contrada Ispt">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@endforeach --}}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center">
|
||||
|
|
@ -122,14 +117,7 @@ class="btn btn-block bg-gradient-primary btn-lg">Articulado</a>
|
|||
|
||||
<div class="card-body p-0">
|
||||
{{-- Nao tem motivos para funcionar nestas sutiacao, MAS FUNCIONA SEM ELE NAO APARECE OS QRCODES !!!! --}}
|
||||
<script>
|
||||
// Gere os QR Codes automaticamente assim que a página é carregada
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
@foreach ($equipmentsProjects as $equipment)
|
||||
createQrCode('{{ $equipment->equipment_id }}');
|
||||
@endforeach
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<table class="table table-striped text-center">
|
||||
<tbody>
|
||||
|
|
@ -327,18 +315,10 @@ class="btn btn-secondary"
|
|||
@endforeach
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Botão para acionar a impressão -->
|
||||
{{-- <button onclick="printEquipments()">Imprimir Equipamentos</button> --}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>
|
||||
{{-- <script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>
|
||||
<script>
|
||||
function createQrCode(equipmentId) {
|
||||
var userInput = document.querySelector('.valor-input[data-equipment-id="' + equipmentId + '"]').value;
|
||||
|
|
@ -361,6 +341,15 @@ function createQrCode(equipmentId) {
|
|||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Gere os QR Codes automaticamente assim que a página é carregada
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
@foreach ($equipmentsProjects as $equipment)
|
||||
createQrCode('{{ $equipment->equipment_id }}');
|
||||
@endforeach
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function printEquipments() {
|
||||
// Acione a impressão
|
||||
|
|
@ -370,7 +359,10 @@ function printEquipments() {
|
|||
function printCard() {
|
||||
window.print();
|
||||
}
|
||||
</script>
|
||||
</script> --}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
|
|
@ -382,10 +374,12 @@ function printCard() {
|
|||
</div>
|
||||
<!-- /.card-body -->
|
||||
<div class="card-footer">
|
||||
<div class="float-left">
|
||||
<button class="btn btn-outline-secondary " onclick="printCard()">Imprimir Códigos QR</button>
|
||||
{{-- Botao para criar os Multiplos Qrcodes nas Folhas --}}
|
||||
{{-- <div class="float-left">
|
||||
<button class="btn btn-outline-secondary " onclick="printCard()">Imprimir Códigos
|
||||
QR</button>
|
||||
|
||||
</div>
|
||||
</div> --}}
|
||||
<div class="float-right">
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal"
|
||||
data-target="#ModalTransferForArticulated">
|
||||
|
|
@ -412,8 +406,8 @@ function printCard() {
|
|||
|
||||
<div class="card-tools">
|
||||
<!-- <button type="button" class="btn btn-tool" data-card-widget="collapse">
|
||||
<i class="fas fa-plus"></i>
|
||||
</button> -->
|
||||
<i class="fas fa-plus"></i>
|
||||
</button> -->
|
||||
</div>
|
||||
<!-- /.card-tools -->
|
||||
</div>
|
||||
|
|
@ -659,7 +653,7 @@ class="checkboxChoseTasksOficesCV"
|
|||
</div>
|
||||
</div>
|
||||
<!-- /.modal-content --
|
||||
/.modal-dialog -->
|
||||
/.modal-dialog -->
|
||||
</div>
|
||||
<!-- /.modal remover-->
|
||||
|
||||
|
|
@ -761,30 +755,30 @@ class="checkboxChoseTasksOficesCV"
|
|||
|
||||
<script type="Text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#TablePreparedProjectWorkstation').DataTable({
|
||||
autoWidth: false,
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: {
|
||||
url: '/api/receiveWorkstationProject/' + $('#receiveNumberProject').val()
|
||||
},
|
||||
columns: [{
|
||||
data: 'name_workstations',
|
||||
name: 'name_workstations'
|
||||
$('#TablePreparedProjectWorkstation').DataTable({
|
||||
autoWidth: false,
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: {
|
||||
url: '/api/receiveWorkstationProject/' + $('#receiveNumberProject').val()
|
||||
},
|
||||
{
|
||||
data: 'nomenclature_workstation',
|
||||
name: 'nomenclature_workstation'
|
||||
},
|
||||
{
|
||||
data: 'workstations_Association_Tasks',
|
||||
name: 'workstations_Association_Tasks'
|
||||
}
|
||||
]
|
||||
})
|
||||
})
|
||||
columns: [{
|
||||
data: 'name_workstations',
|
||||
name: 'name_workstations'
|
||||
},
|
||||
{
|
||||
data: 'nomenclature_workstation',
|
||||
name: 'nomenclature_workstation'
|
||||
},
|
||||
{
|
||||
data: 'workstations_Association_Tasks',
|
||||
name: 'workstations_Association_Tasks'
|
||||
}
|
||||
]
|
||||
})
|
||||
})
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
{{-- Script para funcionar com dataTables yajra, futura implementacao com livewire --}}
|
||||
{{-- <script>
|
||||
|
|
|
|||
|
|
@ -274,6 +274,9 @@
|
|||
{{-- <script src="{{ asset('assets/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script> --}}
|
||||
|
||||
|
||||
|
||||
@livewire('management-dashboard.work-management')
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
|||
124
routes/web.php
124
routes/web.php
|
|
@ -30,7 +30,11 @@
|
|||
use App\Http\Controllers\WorkstationsJobsController;
|
||||
|
||||
|
||||
Route::post('/register', [CustomRegistrationController::class, 'store'])->name('register');
|
||||
|
||||
|
||||
route::get('testt', function () {
|
||||
return view('test');
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
|
@ -38,27 +42,8 @@
|
|||
|
||||
|
||||
|
||||
Route::get('/CreateUsers', [Pending_UserController::class, 'ListPendingUsers'])->name('CreateUsers');
|
||||
Route::get('/CreateUsers/{id}', [Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser');
|
||||
Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser');
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| CRUD -Instalation
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register web routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider and all of them will
|
||||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
Route::get('manageAssets', [ProjectoDatacontroller::class, 'ManageAssets'])->name('manageAssets');
|
||||
|
||||
// Mostrar Instalação click
|
||||
Route::get('units/{id}', [ProjectoDatacontroller::class, 'showUnit'])->name('showUnit');
|
||||
|
||||
Route::get('/', [ProjectoDatacontroller::class, ('HomePage')])->name('home');
|
||||
|
||||
|
||||
Route::get('user-data', [PreparedProjectController::class, 'getData1'])->name('getData');
|
||||
|
|
@ -108,12 +93,12 @@
|
|||
|
|
||||
*/
|
||||
// Route::middleware(['auth', 'verified', 'checksuperadmin', 'checkAdmin'])->group(function () {
|
||||
// Profile page
|
||||
Route::get('usersProfiles/{id}', [userController::class, 'UserProfile'])->name('usersProfiles');
|
||||
// Profile page
|
||||
Route::get('usersProfiles/{id}', [userController::class, 'UserProfile'])->name('usersProfiles');
|
||||
|
||||
|
||||
Route::post('enviar-formulario', [FormController::class, 'enviarEmail'])->name('enviar.formulario');
|
||||
/*
|
||||
Route::post('enviar-formulario', [FormController::class, 'enviarEmail'])->name('enviar.formulario');
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| CRUD - users
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -121,7 +106,7 @@
|
|||
| Definition routes to implement the CRUD model
|
||||
|
|
||||
*/
|
||||
/*
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create Users with Super Admin, Admin
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -130,26 +115,46 @@
|
|||
|however the Admin will not have access to the data of the SupersAdmins only.
|
||||
|
|
||||
*/
|
||||
Route::controller(userController::class)
|
||||
->group(function () {
|
||||
Route::controller(userController::class)
|
||||
->group(function () {
|
||||
|
||||
Route::get('users/listUsers', 'listUsers')->name('users.list');
|
||||
Route::get('users/listCompanies', 'listCompanies')->name('users.company');
|
||||
Route::get('users/{id}', 'show')->name('users.Show');
|
||||
Route::get('users/{id}/edit', 'edit')->name('users.edit');
|
||||
Route::put('users/{user}', 'update')->name('users.update');
|
||||
Route::delete('users/{user}', 'destroy')->name('users.destroy');
|
||||
Route::put('editProfile/{id}', 'EditProfile')->name('editProfile');
|
||||
});
|
||||
Route::get('users/listUsers', 'listUsers')->name('users.list');
|
||||
Route::get('users/listCompanies', 'listCompanies')->name('users.company');
|
||||
Route::get('users/{id}', 'show')->name('users.Show');
|
||||
Route::get('users/{id}/edit', 'edit')->name('users.edit');
|
||||
Route::put('users/{user}', 'update')->name('users.update');
|
||||
Route::delete('users/{user}', 'destroy')->name('users.destroy');
|
||||
Route::put('editProfile/{id}', 'EditProfile')->name('editProfile');
|
||||
});
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create Projects with Super Admin and Admin
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
|Crud model for the application's projects, where both their creation and the indication of project statuses are handled.
|
||||
|
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create Users with Super Admin
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register web routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider and all of them will
|
||||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
Route::middleware(['auth', 'checkUserType'])->group(function () {
|
||||
|
||||
// Rotas protegidas que exigem verificação de e-mail
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create Projects with Super Admin and Admin
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
|Crud model for the application's projects, where both their creation and the indication of project statuses are handled.
|
||||
|
|
||||
*/
|
||||
Route::controller(CreateProjectController::class)
|
||||
->group(function () {
|
||||
// indication of progress bar to projects that are in 'Planning'
|
||||
|
|
@ -158,8 +163,8 @@
|
|||
Route::get('test3/{id}', 'showStep3')->name('test3');
|
||||
|
||||
// Para adicionar uma tarefa Complementar
|
||||
Route::post('addFurtherTasks','addFurtherTasks')->name('addFurtherTasks');
|
||||
Route::post('deleteFurtherTasks','deleteFurtherTasks')->name('deleteFurtherTasks');
|
||||
Route::post('addFurtherTasks', 'addFurtherTasks')->name('addFurtherTasks');
|
||||
Route::post('deleteFurtherTasks', 'deleteFurtherTasks')->name('deleteFurtherTasks');
|
||||
|
||||
Route::get('createProject', 'createProjectForStep1')->name('createProject');
|
||||
|
||||
|
|
@ -185,18 +190,27 @@
|
|||
Route::post('create-equipament-project', 'createEquipamentProject')->name('createEquipamentProject');
|
||||
Route::get('equipments/{id}/attributes', 'getAttributes');
|
||||
});
|
||||
// });
|
||||
|
||||
|
||||
Route::get('/CreateUsers', [Pending_UserController::class, 'ListPendingUsers'])->name('CreateUsers');
|
||||
Route::get('/CreateUsers/{id}', [Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser');
|
||||
Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser');
|
||||
|
||||
|
||||
Route::post('/register', [CustomRegistrationController::class, 'store'])->name('register');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Route::get('formulario', function () {
|
||||
return view('email/FormAdmin');
|
||||
})->name('formulario');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Create Users with Super Admin
|
||||
| CRUD -Instalation
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register web routes for your application. These
|
||||
|
|
@ -204,14 +218,17 @@
|
|||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
Route::get('manageAssets', [ProjectoDatacontroller::class, 'ManageAssets'])->name('manageAssets');
|
||||
|
||||
// Mostrar Instalação click
|
||||
Route::get('units/{id}', [ProjectoDatacontroller::class, 'showUnit'])->name('showUnit');
|
||||
|
||||
Route::middleware(['auth', 'checkUserType'])->group(function () {
|
||||
// Rotas protegidas que exigem verificação de e-mail
|
||||
Route::get('/', [ProjectoDatacontroller::class, ('HomePage')])->name('home');
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Template Excel
|
||||
|
|
@ -222,6 +239,9 @@
|
|||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
Route::get('formulario', function () {
|
||||
return view('email/FormAdmin');
|
||||
})->name('formulario');
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user