Sindbad~EG File Manager

Current Path : /var/www/html/logros.sumar.com.py/resources/views/admin/formulario/
Upload File :
Current File : /var/www/html/logros.sumar.com.py/resources/views/admin/formulario/create.blade.php

@extends('adminlte::page')

@section('title', $asignacion->evaluacion)

@section('content_header')
    <h1 style="color: #1177d1;">{{ $asignacion->evaluacion }}</h1>
    <p style="color: #6c757d;"><b>¡Hola!, tu calificación sincera contribuye a mejorar el desempeño de: </b>{{ $asignacion->evaluado }}</p><hr>
    <p><?= $asignacion->info ?></p>
@stop

@section('content')

	<style>
		fieldset {
		  border: 1px solid #1177d1;
		  border-radius: 10px;
		  padding: 10px;
		}
		legend {
		  padding: 10px;
		  width: 50%; 
		}
		/* Contenedor del switch */
		.toggle-container {
			background-color: #f8f9fa; /* Color claro de fondo */
			box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* Sombra sutil */
			border: 1px solid #ddd; /* Borde suave */
		}

		/* Espaciado entre los radios */
		.form-check-inline {
			margin: 0 10px;
		}

		/* Personalización de los radios */
		.styled-radio {
			accent-color: #007bff; /* Cambia el color del radio seleccionado */
			transform: scale(1.2); /* Agranda los radios */
			margin-right: 5px; /* Espaciado entre radio y texto */
		}

		/* Etiquetas de los radios */
		.form-check-label {
			font-weight: bold;
			font-size: 1rem; /* Tamaño más legible */
			color: #333; /* Color del texto */
			cursor: pointer; /* Cambia el cursor al pasar sobre el texto */
		}

		/* Hover para mejorar la accesibilidad */
		.form-check-label:hover {
			color: #007bff; /* Color al pasar el cursor */
		}
	</style>
	
	{!! Form::open(array('url'=>'/admin/evaluar/formulario','method'=>'POST','autocomplete'=>'off')) !!}
		{{Form::token()}}
		@foreach($competencias as $com)
			<div class="card" id="{{ $com->id }}">
				<div class="card-body">
					<fieldset>
			    		<legend style="color: #1177d1;">{{ $com->com_nom }}</legend>
			    		@if ($asignacion->estado == 1)
			    			@livewire('cargarinterrogantes', ['competenciaid' => $com->id,'asignacionid' => $asignacion->id,"tipo" => "mostrar","evaluado"=>$asignacion->evaluado_id])
			    		@endif

			    		@livewire('cargaformulario', ['competenciaid' => $com->id,"evaluador_id" => $asignacion->evaluador_id])

			    	</fieldset><br>
			    </div>
			</div>
		@endforeach
		<input type="hidden" name="asignacion_id" value="{{ $asignacion->id }}">
		<!--<div class="card">
			<div class="card-body" align="center">
				<table class="table">
					<thead class="thead-dark">
						<tr>
							<th>CALIFICACIÓN</th>
							<th>ESCALA</th>
							<th>INTERPRETACIÓN DE CALIFICACIONES Y RESULTADOS</th>
						</tr>
					</thead>
					<tbody>
						<tr>
							<td>DESTACADO</td>
							<td width="100px;">3,70 a 4,00</td>
							<td>El desempeño es de alta calidad y se logra con una base consistente.  Los resultados de su desempeño exceden claramente la mayor parte de los requerimientos de la posición.  La persona demuestra de manera regular logros significativos y supera lo razonable en las diferentes manifestaciones de su trabajo.</td>
						</tr>
						<tr>
							<td>SATISFACTORIO</td>
							<td width="100px;">2,70 a 3,69</td>
							<td>Obtiene los resultados esperados.  Este nivel debe ser aplicado a aquellos cuyo desempeño cumple con las exigencias del puesto, de acuerdo a lo esperado.  Es habitual en aquellas personas que tienen conocimientos, formación y experiencia apropiados para el puesto. Las personas en este nivel satisfacen los criterios de desempeño en el puesto por un trabajo competente y confiable.</td>
						</tr>
						<tr>
							<td>NECESITA MEJORAR</td>
							<td width="100px;">2,30 a 2,69</td>
							<td>Este nivel refleja un desempeño donde la persona no cumple de forma completa con los requerimientos del puesto, de acuerdo a lo esperado.  
La persona demuestra dificultad para lograr algunas o varias de las funciones y/o metas que se le plantean, por lo que necesita mayor seguimiento y orientación en las mismas.  </td>
						</tr>
						<tr>
							<td>NO CALIFICA</td>
							<td width="100px;">0 a 2,29</td>
							<td>Este nivel se aplica para aquellos cuyo trabajo en términos de calidad, cantidad y cumplimiento de objetivos, está claramente por debajo de las exigencias básicas de su puesto de trabajo.  </td>
						</tr>
					</tbody>
				</table> -->
				<br>
				<!-- Tablas -->
				@if($asignacion->informe == 0)
					<div id="generalTable">
						<table class="table table-striped">
							<tr scope="row">
								<td>Total de Puntos</td>
								<td id="total"></td>
							</tr>
							<tr scope="row">
								<td>Término Medio Obtenido</td>
								<td id="terminomedio"></td>
							</tr>
						</table>
					</div>
				@elseif ($asignacion->informe == 1)
				<div id="detailedTable">
					<table class="table table-striped">
						<thead>
							<tr>
								<th>Competencias requeridas</th>
								<th>Puntos Totales</th>
								<th>Puntos Alcanzados</th>
								<th>Porcentaje</th>
							</tr>
						</thead>
						<tbody>
							@foreach($competencialista as $com)
								<tr>
									<td>{{ $com->com_nom }}</td>
									<td id="maximo{{ $com->id }}"></td>
									<td id="celda{{ $com->id }}"></td>
									<td id="porcentaje_{{ $com->id }}"></td>
								</tr>
							@endforeach
							<tr class="fw-bold">
								<td><strong>Total General</strong></td>
								<td><strong><p id="total_totales"></p></strong></td>
								<td><strong><p id="puntos_totales"></p></strong></td>
								<td><strong><p id="porcentaje_total"></p></strong></td>
							</tr>
						</tbody>
					</table>
				</div>
				@endif
			</div>
		</div>
		<div class="card">
			<div class="card-body" align="center">
				<button class="btn btn-success" type="submit"><i class="far fa-save"></i> Guardar Cambios</button>
			</div>
		</div>
    {!!Form::close()!!}

@stop
@section('js')
	<script>
		$(document).ready(function(){
			$(".calcular").change(function(){
				var inputs = $(".calcular:checked");
				let contadorinput = 0;
				let contador = 0;
				for (let index = 0; index < inputs.length; index++) {
					contador+=parseInt(inputs[index].value);
					contadorinput+=1;
				}
				$("#total").text(contador); 
				let promedio = parseFloat(contador/contadorinput).toFixed(2);
				$("#terminomedio").text(promedio); 
				if(promedio <= 2.29){
					$("#interpretacion").text("NO CALIFICA"); 
				}else if(promedio <= 2.69){
					$("#interpretacion").text("NECESITA MEJORAR"); 
				}else if(promedio <= 3.69){
					$("#interpretacion").text("SATISFACTORIO"); 
				}else if(promedio <= 4){
					$("#interpretacion").text("DESTACADO"); 
				}
			});
		});
	</script>
	<script>
		function processValue(competenciaId) {
			// Find all radio inputs for this competencia
			const radioInputs = document.querySelectorAll(`input[data-competencia="${competenciaId}"]`);
			const targetCell = document.getElementById('celda' + competenciaId);
			const maxElement = document.getElementById('maximo' + competenciaId);
			const percentageElement = document.getElementById('porcentaje_' + competenciaId);

			// Calculate sum of selected values for this competencia
			let selectedSum = 0;
			let maxSum = 0;

			// Group radios by name to handle multiple groups
			const radioGroups = {};
			radioInputs.forEach(radio => {
				if (!radioGroups[radio.name]) {
					radioGroups[radio.name] = [];
				}
				radioGroups[radio.name].push(radio);
			});

			// Calculate sums for each group
			Object.values(radioGroups).forEach(group => {
				// Find selected value in this group
				const selectedRadio = group.find(radio => radio.checked);
				if (selectedRadio) {
					selectedSum += parseInt(selectedRadio.value) || 0;
				}

				// Find maximum value in this group
				const groupMax = Math.max(...group.map(radio => parseInt(radio.value) || 0));
				maxSum += groupMax;
			});

			// Update the cell with sum of selected values
			if (targetCell) {
				targetCell.textContent = selectedSum;
			}

			// Update the maximum element with sum of max values
			if (maxElement) {
				maxElement.textContent = maxSum;
			}

			// Calculate and update percentage
			if (percentageElement) {
				const percentage = maxSum > 0 ? Math.round((selectedSum / maxSum) * 100) : 0;
				percentageElement.textContent = percentage + '%';
			}

			// Update totals
			updateTotals();
			}

			function updateTotals() {
				let totalPoints = 0;
				let totalMaxPoints = 0;

				// Get all competencia rows (excluding the totals row)
				const rows = document.querySelectorAll('tbody tr:not(:last-child)');

				rows.forEach(row => {
					const maxCell = row.querySelector('td[id^="maximo"]');
					const valueCell = row.querySelector('td[id^="celda"]');

					const maxValue = maxCell ? parseInt(maxCell.textContent) || 0 : 0;
					const cellValue = valueCell ? parseInt(valueCell.textContent) || 0 : 0;

					totalMaxPoints += maxValue;
					totalPoints += cellValue;
				});

				// Update total_totales
				const totalTotalesElement = document.getElementById('total_totales');
				if (totalTotalesElement) {
					totalTotalesElement.textContent = totalMaxPoints;
				}

				// Update total points
				const puntosTotalesElement = document.getElementById('puntos_totales');
				if (puntosTotalesElement) {
					puntosTotalesElement.textContent = totalPoints;
				}

				// Update total percentage
				const porcentajeTotalElement = document.getElementById('porcentaje_total');
				if (porcentajeTotalElement) {
					const totalPercentage = totalMaxPoints > 0 ? Math.round((totalPoints / totalMaxPoints) * 100) : 0;
					porcentajeTotalElement.textContent = totalPercentage + '%';
				}
			}

			// Initialize empty cells with 0
			function initializeEmptyCells() {
				const cells = document.querySelectorAll('td[id^="maximo"], td[id^="celda"], td[id^="porcentaje_"]');
				cells.forEach(cell => {
					if (!cell.textContent.trim()) {
						cell.textContent = cell.id.includes('porcentaje') ? '0%' : '0';
					}
				});
			}

			// Set up event listeners
			document.addEventListener('DOMContentLoaded', function() {
			// Initialize empty cells
			initializeEmptyCells();

			// Use event delegation for radio buttons
			document.addEventListener('change', function(event) {
				if (event.target.classList.contains('calcular')) {
					const competenciaId = event.target.dataset.competencia;
					processValue(competenciaId);
				}
			});

			// Initialize totals
			updateTotals();
		});
	</script>
	
			
@stop

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists