{% block stylesheets %}
<link href="{{ asset('plugins/select2/css/select2.min.css') }}" rel="stylesheet" />
<style>
fieldset
{
border: 1px solid #bbbbbb !important;
margin: 0;
min-width: 0;
padding: 10px;
position: relative;
border-radius:4px;
background-color:#f5f5f5;
}
legend
{
font-size: 15px;
font-weight: bold;
margin-bottom: 0;
width: 35%;
border: 1px solid #bbbbbb;
border-radius: 4px;
padding: 5px 5px 5px 10px;
background-color: #cecece;
}
label {
font-size: 14px;
color: #5C5A5A;
}
.select2-selection.is-invalid {
border-color: #dc3545 !important;
}
.select2-selection.is-invalid:focus {
box-shadow: 0 0 0 0.2rem rgba(220,53,69,.25) !important;
}
.custom-invalid-message {
color: #dc3545; /* Rojo Bootstrap */
font-size: 0.875em;
margin-top: 5px;
}
</style>
{% endblock %}
{# Plantilla de Twig #}
{% form_theme form 'bootstrap_4_layout.html.twig' %}
<!-- Modal with form -->
<!-- div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true" -->
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content p-4">
<div class="modal-header">
<div class = 'tituloEquipo'><h5 class="modal-title" id="exampleModalLabel"><b>Modificación <small class="text-secondary"> de Equipo de cómputo <strong class="text-primary">#{{ equipo.idEqu }}</strong></small></b></h5></div>
<div class = 'tituloSolicitudes'></div>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="card-body">
<div class= 'infoEquipo'>
{{ form_start(form, {'attr': {'class': 'form-horizontal', 'id': 'form-editar-equipo'}}) }}
{# Datos del equipo #}
<fieldset>
<legend>Identificación del equipo</legend>
<div class="control-group">
<div class="row" >
<div class="col-lg">{{ form_row(form.marbete,{
'attr': {
'hidden': false,
}}) }}
</div>
<div class="col-lg">{{ form_row(form.idMarca) }}</div>
<div class="col-lg">{{ form_row(form.modelo) }}</div>
<div class="col-lg">{{ form_row(form.serie) }}</div>
</div>
<div class="row" disabled>
<div class="col-lg">{{ form_row(form.descripcion) }}</div>
</div>
</div>
<br>
</fieldset>
<br>
{# Hardware #}
<fieldset>
<legend>Hardware</legend>
<div class="row">
<div class="col-lg">{{ form_row(form.procesador) }}</div>
<div class="col-lg">{{ form_row(form.nucleos) }}</div>
<div class="col-lg">{{ form_row(form.cpuVelocidad) }}</div>
<div class="col-lg">{{ form_row(form.ram)}} </div>
</div>
<div class="row">
<div class="col-lg">{{ form_row(form.ip) }}</div>
<div class="col-lg">{{ form_row(form.mac) }}</div>
<div class="col-lg">{{ form_row(form.ssd) }}</div>
<div class="col-lg">{{ form_row(form.hhd) }}</div>
</div>
<div class = "row">
<div class="col-lg">{{ form_row(form.idMaterial) }}</div>
<div class="col-lg">{{ form_row(form.color) }}</div>
</div>
<div class="row" disabled>
<div class="col-lg">{{ form_row(form.allinone) }}</div>
<div class="col-lg">{{ form_row(form.actualizable) }}</div>
</div>
</fieldset>
<br>
{# Perifericos #}
<fieldset>
{# Monitor #}
<legend>Monitor</legend>
<div class="row">
<div class="col-lg">{{ form_row(form.monitorMarbete) }}</div>
<div class="col-lg">{{ form_row(form.monitorMarca) }}</div>
<div class="col-lg">{{ form_row(form.monitorModelo) }}</div>
</div>
<div class="row">
<div class="col-lg">{{ form_row(form.monitorSerie) }}</div>
<div class="col-lg">{{ form_row(form.monitorTipo) }}</div>
<div class="col-lg">{{ form_row(form.monitorPulgadas) }}</div>
</div>
</fieldset>
<br>
<fieldset>
{# Teclado #}
<legend>Teclado</legend>
<div class="row">
<div class="col-lg">{{ form_row(form.tecladoMarca) }}</div>
<div class="col-lg">{{ form_row(form.tecladoModelo) }}</div>
<div class="col-lg">{{ form_row(form.tecladoSerie) }}</div>
</div>
</fieldset>
<br>
<fieldset>
{# Mouse #}
<legend>Mouse</legend>
<div class="row">
<div class="col-lg">{{ form_row(form.mouseMarca) }}</div>
<div class="col-lg">{{ form_row(form.mouseModelo) }}</div>
<div class="col-lg">{{ form_row(form.mouseSerie) }}</div>
</div>
</fieldset>
<br>
{# Estatus y resguardo #}
<fieldset>
<legend>Estatus y resguardo</legend>
<div class="row">
<div class="col-lg">{{ form_row(form.estatus) }}</div>
<div class="col-lg">{{ form_row(form.uso) }}</div>
<div class="col-lg">{{ form_row(form.idUso) }}</div>
</div>
<div class="row">
<div class="col-lg">{{ form_row(form.funcion) }}</div>
<div class="col-lg">{{ form_row(form.funcionDescripcion) }}</div>
</div>
<div class="row">
<div class="col-lg">{{ form_row(form.usuario) }}</div>
{# <div class="col-lg">{{ form_row(form.emhv) }}</div> #}
<div class="col-lg">{{ form_row(form.ubicacion) }}</div>
{% if form.unidad is defined %}
<div class="col-lg">{{ form_row(form.unidad) }}</div>
{% endif %}
</div>
<div class= "row">
<div class="col-lg">{{ form_row(form.piso) }}</div>
<div class="col-lg">{{ form_row(form.seccionAula) }}</div>
<div class="col-lg">{{ form_row(form.numPuertaCubi) }}</div>
</div>
</fieldset>
<br>
<div class="row">
<div class="col text-center">
<button class="btn btn-outline-success" id="btn_equipo_guardar">{{ button_label|default('Guardar') }}</button>
</div>
<div class="col text-center">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal" aria-label="Close">
Cancelar
</button>
</div>
</div>
{{ form_end(form) }}
</div>
<div class="infoSolicitudes"></div>
<div class="btnCerrar"></div>
</div>
</div>
</div>
</div>
<!-- /div -->
{% block javascripts %}
<script src="{{ asset('plugins/jquery/jquery.min.js') }}"></script>
<script src="{{ asset('plugins/select2/js/select2.min.js') }}"></script>
<script>
$(document).ready(function () {
$('.search-marca').each(function(index, element) {
if (!$(element).is('[readonly]')) { // Only initialize if NOT readonly
$(element).select2({
placeholder: 'Seleccione una marca',
allowClear: true
});
} else {
let id = $(element).val();
let text = $(element).find('option:selected').text();
let option = new Option(text, id, true, true);
$(element).prop('readonly', 'readonly');
$(element).next('.select2').find('.select2-selection').addClass('select2-disabled');
$(element).append(option).trigger('change');
}
});
$('.search-material').select2({
placeholder: 'Seleccione un material',
allowClear: true
});
comportamientoCampos(document.getElementById('equipo_allinone').checked)
})
document.getElementById('equipo_allinone').addEventListener('click', function(event) {
comportamientoCampos(event.target.checked);
})
function editarInfoEquipoAjax(url){
let send = $("#btn_equipo_guardar");
$('#btn_equipo_guardar').on('click', function (e) {
let formData = new FormData(document.getElementById("form-editar-equipo"));
let dataObj = Object.fromEntries(formData.entries());
let form = document.getElementById("form-editar-equipo");
console.log(form);
let hasError = false;
let labels = document.querySelectorAll("label");
// Validar monitorMarca
let monitorMarca = $(`#${labels[25].getAttribute("for")}`);
if($(`#${labels[25].getAttribute("for")}`).val() === '' && document.getElementById('equipo_allinone').checked === false){
$(`#${labels[25].getAttribute("for")}`).addClass('is-invalid');
e.preventDefault();
let select = document.querySelector(`#${labels[25].getAttribute("for")}`);
// Obtener el contenedor select2 generado
let select2Container = select.nextElementSibling;
let selection = select2Container.querySelector('.select2-selection');
// Agregar clase de error
selection.classList.add('is-invalid');
let existingMessage = labels[25].querySelector('.custom-invalid-message');
if (!existingMessage) {
let message = document.createElement('span');
message.className = 'custom-invalid-message'; // clase para poder identificarlo y evitar duplicados
// Agregar el HTML interno
message.innerHTML = `
<span class="invalid-feedback d-block">
<span class="d-block">
<span class="form-error-icon badge badge-danger text-uppercase">Error</span>
<span class="form-error-message">El campo "Marca" no debe estar vacío.</span>
</span>
</span>
`;
labels[25].appendChild(message);
}
return false;
}
var html = "";
var btnCerrar = "";
var tituloE= "";
$.ajax({
type: "POST",
url: url,
data: formData, // Adjuntar los campos del formulario enviado.
dataType: "json",
cache: false,
contentType: false,
processData: false,
beforeSend: function () {
send.text("Actualizando "); // Para input de tipo button
send.append("<i class='fa fa-spinner fa-spin' style='font-size:16px'></i>");
send.prop("disabled", true);
},
success: function (data) {
let datos = data;
let row = $('#idEqu-' + datos.idEqu);
row.find('.marbete').html(datos.marbete);
row.find('.descripcion').html(datos.descripcion);
row.find('.marca').html(datos.marca);
row.find('.modelo').html(datos.modelo);
/*row.find('.serie').html(datos.serie);
row.find('.tipo').html(datos.tipo);
row.find('.uso').html(datos.uso);*/
//row.find('.uso').html(datos.unidad.getNombre);
//row.find('.activo').html(datos.estatus);
if (datos.estatus === "En operacion") {
row.find('.estatus').html('<div class="badge bg-gradient-green d-block" style="width: 8rem;">' + datos.estatus + '</div>');
}
if(datos.estatus === "Descompuesto") {
row.find('.estatus').html('<div class="badge bg-gradient-orange d-block" style="width: 8rem;">' + datos.estatus + '</div>');
}
if (datos.estatus === "Sin instalar") {
row.find('.estatus').html('<div class="badge bg-gradient-primary d-block" style="width: 8rem;">' + datos.estatus + '</div>');
}
if(datos.estatus === "En proceso de baja") {
row.find('.estatus').html('<div class="badge bg-gradient-yellow d-block" style="width: 8rem;">' + datos.estatus + '</div>');
}
if(datos.estatus === "Baja") {
row.find('.estatus').html('<div class="badge bg-gradient-danger d-block" style="width: 8rem;">' + datos.estatus + '</div>');
}
row.find('.emhv').html(datos.emhv);
row.find('.usuario').html(datos.usuario);
row.find('.ubicacion').html(datos.ubicacion);
if(datos.solicitudes.idSolicitud === 0){
$('#editar-equipo').removeClass('show');
$('#editar-equipo').fadeOut();
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
}else{
$('.infoEquipo').html('').fadeOut();
$('.tituloEquipo').html('').fadeOut();
tituloE = `<h5 class="modal-title" id="exampleModalLabel"><b>Modificación <small class="text-secondary">de Usuario a las solicitudes</small></b></h5>`;
html += `<p>Se a modificado el usuario de las siguientes solicitudes que pertenecen al marbete: <strong>${datos.marbete}</strong></p><br>
<table class="table table-hover">
<thead>
<tr><th>Número de solicitud</th><th>Estatus</th><th>Usuario anterior</th><th>Usuario nuevo</th></tr>
</thead>
<tbody>`;
for(let i = 0; i < datos.solicitudes.length; i++){
html += `
<tr><td>${datos.solicitudes[i].idSolicitud}</td>
<td>${datos.solicitudes[i].estatus}</td>
<td>${datos.solicitudes[i].usuAnterior}</td>
<td>${datos.solicitudes[i].usuNuevo}</td></tr>
`;
}
html += `</tbody>
</table>`;
btnCerrar = `
<div class="row">
<div class="col" style="text-align: right;">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal" aria-label="Close">
Cerrar
</button>
</div>
</div>
`;
$(".tituloSolicitudes").html(tituloE);
$(".infoSolicitudes").html(html);
$(".btnCerrar").html(btnCerrar);
}
},
error: function (data, text, error) {
let datos = data.responseJSON;
$("#editar-equipo").html(datos.form);
editarInfoEquipoAjax(url);
},
complete: function (data) {
// Se ejecuta al termino de la petición
}
});
return false; // Evitar ejecutar el submit del formulario.
});
}
function comportamientoCampos(status){
if(status) {
document.getElementById('equipo_monitorMarbete').readOnly = true;
document.getElementById('equipo_monitorMarca').disabled = true;
document.getElementById('equipo_monitorModelo').readOnly = true;
document.getElementById('equipo_monitorSerie').readOnly = true;
document.getElementById('equipo_monitorTipo').readOnly = true;
document.getElementById('equipo_monitorPulgadas').readOnly = true;
} else {
document.getElementById('equipo_monitorMarbete').readOnly = false;
document.getElementById('equipo_monitorMarca').disabled = false;
document.getElementById('equipo_monitorMarca').required = true;
document.getElementById('equipo_monitorModelo').readOnly = false;
document.getElementById('equipo_monitorSerie').readOnly = false;
document.getElementById('equipo_monitorTipo').readOnly = false;
document.getElementById('equipo_monitorPulgadas').readOnly = false;
}
}
function validacionCampo(id){
console.log(id);
}
</script>
{% endblock %}