Skip to content
Snippets Groups Projects
Commit 6ab4452a authored by josborg's avatar josborg
Browse files

Refactorizacion

parent 3b456c17
No related branches found
No related tags found
No related merge requests found
......@@ -26,8 +26,9 @@
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
"src/assets",
"src/favicon.ico"
],
"styles": [
"src/styles.css"
......@@ -93,8 +94,8 @@
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
"src/assets",
"src/favicon.ico"
],
"styles": [
"src/styles.css"
......
......@@ -49,17 +49,23 @@
<div class="row mt-2">
<div class="col-sm">
<h1>Tus respuestas</h1>
<div *ngFor="let solucion of miSolucion; let i = index">
<div class="shadow-lg p-3 mb-1 bg-white rounded">
<div class="col">Pregunta: {{solucion.pregunta}}</div>
<div class="col">Respuesta: {{solucion.opcion}}</div>
<div class="col">Correcta: {{solucion.correct}}</div>
<div>Pregunta: {{solucion.pregunta}}</div>
<div>Respuesta: {{solucion.opcion}}</div>
<div *ngIf="encuesta.status.toString() == 'FINALIZADA'; else elseBlock"><!--[(ngModel)]="a"-->
<div *ngIf="solucion.correct; else elseBlock">
<div>Correcta: Sí</div>
</div>
<ng-template #elseBlock>
<div>Correcta: No</div>
</ng-template>
</div>
<ng-template #elseBlock>
<div>Correcta: ¿?</div>
</ng-template>
</div>
</div>
</div>
</div>
</div>
......@@ -33,6 +33,7 @@ export class EstadisticasComponent implements OnInit {
ranking: any;
userId:string = "";
name:string = "";
map = new Map();
......@@ -59,6 +60,10 @@ export class EstadisticasComponent implements OnInit {
if(aux != null){
this.userId = aux;
}
var aux = localStorage.getItem('userName')
if(aux != null){
this.name = aux;
}
}
initMap(){
......@@ -72,7 +77,7 @@ export class EstadisticasComponent implements OnInit {
}
generateRanking(){
if(this.encuesta.status.toString() == "FINALIZADA"){ //OJOOOO
if(this.encuesta.status.toString() == "FINALIZADA"){
this.soluciones.forEach(solucion => {
var corrects = solucion.respuestas.filter(r => r.correct)
......@@ -86,22 +91,22 @@ export class EstadisticasComponent implements OnInit {
}
}
this.miSolucion = []
this.soluciones.sort((a, b) => <number>a.diff - <number>b.diff);
this.soluciones.forEach(solucion => {
if(solucion.userId == this.userId){
if(solucion.name == this.name){
solucion.respuestas.forEach(respuesta => {
var pregunta = this.encuesta.preguntas.find(p=>p.id == respuesta.idPregunta)
var opcion;
if(pregunta != undefined){
opcion = pregunta.opciones.find(o=>o.id == respuesta.idOpcion)
this.miSolucion.push({pregunta: pregunta.name, opcion: opcion?.name, correct: opcion?.correct})
this.miSolucion.push({pregunta: pregunta.name, opcion: opcion?.name, correct: respuesta.correct})
}
});
}
});
}
compare(a:any, b:any){
......
<!--<div class="container">
<nav class="navbar navbar-expand-lg navbar-light bg-light px-5">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="['/client/admin']">Administracion</a>
</li>
<li class="nav-item">
<a class="nav-link" (click)="navProf()">Perfil profesor</a>
</li>
<li class="nav-item">
<a class="nav-link" (click)="navUsr()">Perfil usuario</a>
</li>
<li class="nav-item">
<a class="nav-link" [routerLink]="['/client/auth']">Autenticar</a>
</li>
</ul>
</div>
</nav>
</div>
<div class="col-auto">
<button class="btn btn-primary mb-2 btn-block" (click)="navProf()"><h3>Perfil profesor</h3></button>
</div>
<div class="col-auto">
<button class="btn btn-primary mb-2 btn-block" (click)="navUsr()"><h3>Perfil usuario</h3></button>
</div> fixed-top
-->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark" id="mainNav">
<div class="container px-4">
<a class="navbar-brand" href="client">Encuestas</a>
<a class="navbar-brand" href="client">GPbot</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" [routerLink]="['/client/admin']">Administracion</a>
<a class="nav-link" [routerLink]="['/client/admin']">Administración</a>
</li>
<li class="nav-item">
<a class="nav-link" (click)="navProf()">Perfil profesor</a>
......
......@@ -3,7 +3,7 @@
<div class="col-lg-7 mx-auto">
<div class="bg-white rounded-lg shadow-sm p-5">
<div class="container py-5">
<div class="row row mb-4">
<div class="row row mb-4 overflow-auto">
<fieldset class="form-group row mt-2">
<label class="control-label">Asignatura</label>
<select class="form-control" name="miselectAsignatura" [(ngModel)]="asignatura" (click)="asignaturaFilter(asignatura)">
......@@ -66,28 +66,47 @@
</div>
</div>
</div>
<div class="row">
<h1>Informe</h1>
<p>nEncuestas: {{nEncuestas}}</p>
<p>nEncuestasContestadas: {{nEncuestasContestadas}}</p>
<p>nEncuestasContestadasFinalizadas: {{nEncuestasContestadasFinalizadas}}</p>
<p>nPreguntasContestadas: {{nPreguntasContestadas}}</p>
<p>nPreguntasContestadasAcertadas: {{nPreguntasContestadasAcertadas}}</p>
<div class="row overflow-auto mt-2">
<h1>Informe general</h1>
<p>Número de encuestas: {{nEncuestas}}</p>
<p>Número de encuestas contestadas: {{nEncuestasContestadas}}</p>
<p *ngIf="operacion == 'usuarios'">Número de encuestas contestadas y finalizadas: {{nEncuestasContestadasFinalizadas}}</p>
<p>Número de preguntas contestadas: {{nPreguntasContestadas}}</p>
<p>Número de preguntas contestadas acertadas: {{nPreguntasContestadasAcertadas}}</p>
</div>
<table class="table table-borderless">
<div class="row overflow-auto mt-2">
<table class="table table-borderless table-hover">
<thead>
<tr>
<th scope="col">user.name</th>
<th scope="col">user.nTop1</th>
<th scope="col">user.bestRank</th>
<th scope="col">Nickname</th>
<th scope="col">Número de aciertos</th>
<th scope="col">Número de preguntas</th>
<th scope="col">Número de encuestas</th>
<th scope="col">Número de encuestas correctas</th>
<th scope="col">Número de nTop1</th>
<th scope="col">Mejor posición de ranking</th>
<th scope="col">Posición media de ranking</th>
<th scope="col">Tiempo de respuesta medio</th>
<th scope="col">Tiempo de respuesta medio desde apertura</th>
<th scope="col">Tasa de aciertos de preguntas</th>
<th scope="col">Tasa de aciertos de encuestas</th>
<th scope="col">Filtrar</th>
</tr>
</thead>
<tbody *ngFor="let user of users; let i = index">
<tr>
<tr (click)="selecionarUser(i)">
<td>{{user.name}}</td>
<td>{{user.nAciertos}}</td>
<td>{{user.nPreguntas}}</td>
<td>{{user.nEncuestas}}</td>
<td>{{user.nEncuestas100Correctas}}</td>
<td>{{user.nTop1}}</td>
<td>{{user.bestRank}}</td>
<td>{{user.avgRank}}</td>
<td>{{user.avgTimeRespuesta}}</td>
<td>{{user.avgTimeApertura}}</td>
<td>{{user.preguntasAcertadasRate}}</td>
<td>{{user.encuestasAcertadasRate}}</td>
<td>
<button class="btn btn-primary w-100 btn-block"
(click)="selecionarUser(i)">Filtrar</button>
......@@ -95,18 +114,20 @@
</tr>
</tbody>
</table>
</div>
<div class="row overflow-auto mt-2">
<table class="table table-borderless">
<thead>
<tr>
<th scope="col">user.name</th>
<th scope="col">user.idEncuesta</th>
<th scope="col">user.nAciertos</th>
<th scope="col">user.nPreguntas</th>
<th scope="col">user.diff</th>
<th scope="col">user.fin</th>
<th scope="col">user.valid</th>
<th scope="col">user.ranking</th>
<th scope="col">Nickname</th>
<th scope="col">Id de encuesta</th>
<th scope="col">Número de aciertos</th>
<th scope="col">Numero de preguntas</th>
<th scope="col">Tiempo de respuesta</th>
<th scope="col">Tiempo de respuesta desde apertura</th>
<th scope="col">Timestamp de envio de respuesta</th>
<th scope="col">Respuesta valida</th>
<th scope="col">Posicion del el ranking</th>
</tr>
</thead>
<tbody *ngFor="let user of aciertosPorEncuestaFilter; let i = index">
......@@ -116,6 +137,7 @@
<td>{{user.nAciertos}}</td>
<td>{{user.nPreguntas}}</td>
<td>{{user.diff}}</td>
<td>{{user.diffApertura}}</td>
<td>{{user.fin}}</td>
<td>{{user.valid}}</td>
<td>{{user.ranking}}</td>
......@@ -123,6 +145,7 @@
</tbody>
</table>
</div>
</div>
<!--
<table class="table table-borderless">
......
......@@ -157,7 +157,7 @@ export class PerfilComponent implements OnInit {
var corrects = solucion.respuestas.filter(r => r.correct)
this.nPreguntasContestadasAcertadas = this.nPreguntasContestadasAcertadas + corrects.length;
this.aciertosPorEncuesta.push({name:solucion.name, userId: solucion.userId, idEncuesta: encuesta.id,
nAciertos: corrects.length, nPreguntas: encuesta.preguntas.length, diff: solucion.diff,fin: solucion.fin, valid: solucion.valid, ranking: 0})
nAciertos: corrects.length, nPreguntas: encuesta.preguntas.length, diff: solucion.diff / 1000, diffApertura: (solucion.fin - encuesta.createdAt)/ 1000, fin: solucion.fin, valid: solucion.valid, ranking: 0})
});
}
}
......@@ -188,13 +188,37 @@ export class PerfilComponent implements OnInit {
}
this.users = []
users.forEach(element => {
var user = this.aciertosPorEncuesta.filter(a => a.userId == element.userId);
var user = this.aciertosPorEncuesta.filter(a => a.name == element.name);
console.log(user)
var nPreguntas = 0;
var nEncuestas = 0;
var nAciertos = 0;
var nEncuestas100Correctas = 0;
var avgRank = 0;
var avgTimeRespuesta = 0;
var avgTimeApertura = 0;
user.forEach(e => {
nPreguntas += e.nPreguntas;
nEncuestas += 1;
nAciertos += e.nAciertos;
if(e.nAciertos == e.nPreguntas){
nEncuestas100Correctas += 1;
}
avgRank += e.ranking;
avgTimeRespuesta += e.diff;
avgTimeApertura += e.diffApertura;
})
avgRank = avgRank / nEncuestas;
avgTimeRespuesta = avgTimeRespuesta / nEncuestas;
avgTimeApertura = avgTimeApertura / nEncuestas;
var nTop1 = user.filter(u => u.ranking == 1).length;
var bestRank = 1;
if(nTop1 == 0 && user.length > 0){
bestRank = user.sort((a, b) => a.ranking - b.ranking)[0].ranking;
}
this.users.push({userId: element.userId, name: element.name, nTop1: nTop1, bestRank: bestRank})
this.users.push({userId: element.userId, name: element.name, nAciertos: nAciertos, nPreguntas: nPreguntas ,nEncuestas: nEncuestas, nEncuestas100Correctas: nEncuestas100Correctas, nTop1: nTop1, bestRank: bestRank,
avgRank: avgRank, avgTimeRespuesta: avgTimeRespuesta, avgTimeApertura: avgTimeApertura, preguntasAcertadasRate: nAciertos / nPreguntas, encuestasAcertadasRate: nEncuestas100Correctas / nEncuestas})
});
/*
if(this.operacion == "usuarios"){
......
......@@ -3,9 +3,9 @@
<!-- For demo purpose -->
<div class="row mb-4">
<div class="col-lg-8 mx-auto text-center">
<h1 class="display-4">Bot Encuestas</h1>
<h1 class="display-4">GPbot</h1>
<p class="lead mb-0">Responde a las preguntas lo más rápido posible</p>
<p class="lead">Tu puntación puede ser pública o anonónima, tu eliges</p>
<p class="lead">Tu respuesta puede ser pública o anonónima, tu eliges</p>
</div>
</div>
<!-- End -->
......@@ -44,8 +44,7 @@
</div>
</div>
</div>
<div *ngIf="this.timeLeft == 0 && !enviado">
<div class="row" *ngIf="this.timeLeft == 0 && !enviado">
<div *ngIf="siguiente; else elseBlock"><!--[(ngModel)]="a"-->
<!--<input type="checkbox" id="anonomino" [(ngModel)]="a" [value]="solucion.anonymous" name="anonomino">
<label for="anonomino">Envio anónimo</label>-->
......@@ -61,20 +60,15 @@
</div>
<div class="col">
<button type="button" class="btn btn-primary" (click)="enviarAnonimo()" [disabled]="!encuestaForm.form.valid">
Enviar Anonomino
Enviar anónimo
</button>
</div>
</ng-template>
</div>
</div>
</div>
<div class="col-sm"></div>
<!--
<div class="col-sm">
<input type="checkbox" id="anonomino" name="anonomino">
<label for="anonomino">Envio anónimo</label>
</div>
-->
<div class="col-sm"></div>
</div>
</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment