Merge pull request #116 from Quantum-P3/feature/US-40
Add crear encuesta a partir de una plantilla
This commit is contained in:
commit
842fd46ff8
|
@ -11,10 +11,7 @@ import java.util.stream.Collectors;
|
|||
import java.util.stream.Stream;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import org.datasurvey.domain.EPreguntaAbierta;
|
||||
import org.datasurvey.domain.EPreguntaCerrada;
|
||||
import org.datasurvey.domain.EPreguntaCerradaOpcion;
|
||||
import org.datasurvey.domain.Encuesta;
|
||||
import org.datasurvey.domain.*;
|
||||
import org.datasurvey.domain.enumeration.AccesoEncuesta;
|
||||
import org.datasurvey.repository.EncuestaRepository;
|
||||
import org.datasurvey.service.*;
|
||||
|
@ -59,6 +56,14 @@ public class EncuestaResource {
|
|||
|
||||
private final EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService;
|
||||
|
||||
private final PlantillaService plantillaService;
|
||||
|
||||
private final PPreguntaCerradaService pPreguntaCerradaService;
|
||||
|
||||
private final PPreguntaAbiertaService pPreguntaAbiertaService;
|
||||
|
||||
private final PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService;
|
||||
|
||||
public EncuestaResource(
|
||||
EncuestaService encuestaService,
|
||||
EncuestaRepository encuestaRepository,
|
||||
|
@ -66,7 +71,11 @@ public class EncuestaResource {
|
|||
MailService mailService,
|
||||
EPreguntaCerradaService ePreguntaCerradaService,
|
||||
EPreguntaAbiertaService ePreguntaAbiertaService,
|
||||
EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService
|
||||
EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService,
|
||||
PlantillaService plantillaService,
|
||||
PPreguntaCerradaService pPreguntaCerradaService,
|
||||
PPreguntaAbiertaService pPreguntaAbiertaService,
|
||||
PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService
|
||||
) {
|
||||
this.encuestaService = encuestaService;
|
||||
this.encuestaRepository = encuestaRepository;
|
||||
|
@ -75,6 +84,10 @@ public class EncuestaResource {
|
|||
this.ePreguntaCerradaService = ePreguntaCerradaService;
|
||||
this.ePreguntaAbiertaService = ePreguntaAbiertaService;
|
||||
this.ePreguntaCerradaOpcionService = ePreguntaCerradaOpcionService;
|
||||
this.plantillaService = plantillaService;
|
||||
this.pPreguntaCerradaService = pPreguntaCerradaService;
|
||||
this.pPreguntaAbiertaService = pPreguntaAbiertaService;
|
||||
this.pPreguntaCerradaOpcionService = pPreguntaCerradaOpcionService;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -97,6 +110,78 @@ public class EncuestaResource {
|
|||
.body(result);
|
||||
}
|
||||
|
||||
@PostMapping("/encuestas/{plantillaId}")
|
||||
public ResponseEntity<Encuesta> createEncuestaFromTemplate(
|
||||
@Valid @RequestBody Encuesta encuesta,
|
||||
@PathVariable(value = "plantillaId", required = false) final Long plantillaId
|
||||
) throws URISyntaxException {
|
||||
log.debug("REST request to save Encuesta : {}", encuesta);
|
||||
if (encuesta.getId() != null) {
|
||||
throw new BadRequestAlertException("A new encuesta cannot already have an ID", ENTITY_NAME, "idexists");
|
||||
}
|
||||
|
||||
// Copy from survey template to survey
|
||||
Optional<Plantilla> plantilla = plantillaService.findOne(plantillaId);
|
||||
|
||||
if (plantilla.isPresent()) {
|
||||
encuesta.setNombre(plantilla.get().getNombre());
|
||||
encuesta.setDescripcion(plantilla.get().getDescripcion());
|
||||
encuesta.setCategoria(plantilla.get().getCategoria());
|
||||
|
||||
Encuesta encuestaCreated = encuestaService.save(encuesta);
|
||||
|
||||
// Preguntas cerradas
|
||||
List<PPreguntaCerrada> preguntasCerradas = pPreguntaCerradaService.findAll();
|
||||
for (PPreguntaCerrada pPreguntaCerrada : preguntasCerradas) {
|
||||
if (pPreguntaCerrada.getPlantilla().getId().equals(plantillaId)) {
|
||||
EPreguntaCerrada newEPreguntaCerrada = new EPreguntaCerrada();
|
||||
newEPreguntaCerrada.setNombre(pPreguntaCerrada.getNombre());
|
||||
newEPreguntaCerrada.setTipo(pPreguntaCerrada.getTipo());
|
||||
newEPreguntaCerrada.setOpcional(pPreguntaCerrada.getOpcional());
|
||||
newEPreguntaCerrada.setOrden(pPreguntaCerrada.getOrden());
|
||||
newEPreguntaCerrada.setEncuesta(encuestaCreated);
|
||||
|
||||
ePreguntaCerradaService.save(newEPreguntaCerrada);
|
||||
|
||||
// Opciones de preguntas cerradas
|
||||
List<PPreguntaCerradaOpcion> opciones = pPreguntaCerradaOpcionService.findAll();
|
||||
for (PPreguntaCerradaOpcion pPreguntaCerradaOpcion : opciones) {
|
||||
if (pPreguntaCerradaOpcion.getPPreguntaCerrada().getId().equals(pPreguntaCerrada.getId())) {
|
||||
EPreguntaCerradaOpcion newEPreguntaCerradaOpcion = new EPreguntaCerradaOpcion();
|
||||
newEPreguntaCerradaOpcion.setNombre(pPreguntaCerradaOpcion.getNombre());
|
||||
newEPreguntaCerradaOpcion.setOrden(pPreguntaCerradaOpcion.getOrden());
|
||||
newEPreguntaCerradaOpcion.setCantidad(0);
|
||||
newEPreguntaCerradaOpcion.setEPreguntaCerrada(newEPreguntaCerrada);
|
||||
|
||||
ePreguntaCerradaOpcionService.save(newEPreguntaCerradaOpcion);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Preguntas abiertas
|
||||
List<PPreguntaAbierta> preguntasAbiertas = pPreguntaAbiertaService.findAll();
|
||||
for (PPreguntaAbierta pPreguntaAbierta : preguntasAbiertas) {
|
||||
if (pPreguntaAbierta.getPlantilla().getId().equals(plantillaId)) {
|
||||
EPreguntaAbierta newEPreguntaAbierta = new EPreguntaAbierta();
|
||||
newEPreguntaAbierta.setNombre(pPreguntaAbierta.getNombre());
|
||||
newEPreguntaAbierta.setOpcional(pPreguntaAbierta.getOpcional());
|
||||
newEPreguntaAbierta.setOrden(pPreguntaAbierta.getOrden());
|
||||
newEPreguntaAbierta.setEncuesta(encuestaCreated);
|
||||
|
||||
ePreguntaAbiertaService.save(newEPreguntaAbierta);
|
||||
}
|
||||
}
|
||||
|
||||
return ResponseEntity
|
||||
.created(new URI("/api/encuestas/" + encuestaCreated.getId()))
|
||||
.headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, encuestaCreated.getId().toString()))
|
||||
.body(encuestaCreated);
|
||||
}
|
||||
|
||||
return ResponseEntity.ok().body(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@code PUT /encuestas/:id} : Updates an existing encuesta.
|
||||
*
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
<p class="ds-subtitle text-center">Inicie creando preguntas y opciones para su encuesta.</p>
|
||||
</ng-container>
|
||||
|
||||
<div class="ds-survey--question-wrapper card-encuesta lift" *ngFor="let ePregunta of ePreguntas; let i = index; trackBy: trackId">
|
||||
<div class="ds-survey--question-wrapper card-encuesta" *ngFor="let ePregunta of ePreguntas; let i = index; trackBy: trackId">
|
||||
<div
|
||||
[attr.data-index]="ePregunta.id"
|
||||
[attr.data-tipo]="ePregunta.tipo"
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
<form *ngIf="encuesta" name="deleteForm" (ngSubmit)="confirmFinalizar(encuesta!)">
|
||||
<div class="modal-header">
|
||||
<h4 class="ds-title--small" data-cy="encuestaDeleteDialogHeading">Finalizar encuesta</h4>
|
||||
</div>
|
||||
<div class="modal-header"></div>
|
||||
|
||||
<div class="modal-body">
|
||||
<p class="ds-title--small" data-cy="encuestaDeleteDialogHeading">Finalizar encuesta</p>
|
||||
<p class="ds-subtitle" id="jhi-delete-encuesta-heading">¿Está seguro de querer finalizar la encuesta?</p>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -40,10 +40,6 @@
|
|||
</button>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-warning" id="no-result" *ngIf="encuestas?.length === 0">
|
||||
<span jhiTranslate="dataSurveyApp.encuesta.home.notFound">No surveys found</span>
|
||||
</div>
|
||||
|
||||
<form class="ds-form">
|
||||
<div class="input-group">
|
||||
<div class="ds-filter">
|
||||
|
@ -83,8 +79,17 @@
|
|||
</div>
|
||||
</form>
|
||||
|
||||
<div class="ds-survey" id="entities" *ngIf="encuestas?.length === 0">
|
||||
<div class="ds-survey--all-question-wrapper">
|
||||
<ng-container class="">
|
||||
<p class="ds-title text-center">No posee encuestas</p>
|
||||
<p class="ds-subtitle text-center">Incie a explorar, colaborar y adquirir datos al crear encuestas mundialmente</p>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Lista de Encuestas del Usuario -->
|
||||
<div class="ds-list" (contextmenu)="openContextMenu($event)" *ngIf="!isAdmin()">
|
||||
<div class="ds-list" (contextmenu)="openContextMenu($event)" *ngIf="!isAdmin() && encuestas?.length !== 0">
|
||||
<!-- Context Menu -->
|
||||
<div class="ds-contextmenu ds-contextmenu--closed" id="contextmenu">
|
||||
<ul id="ds-context-menu__list">
|
||||
|
|
|
@ -26,6 +26,13 @@ export class EncuestaService {
|
|||
.pipe(map((res: EntityResponseType) => this.convertDateFromServer(res)));
|
||||
}
|
||||
|
||||
createFromTemplate(encuesta: IEncuesta, plantillaId: Number): Observable<EntityResponseType> {
|
||||
const copy = this.convertDateFromClient(encuesta);
|
||||
return this.http
|
||||
.post<IEncuesta>(`${this.resourceUrl}/${plantillaId}`, copy, { observe: 'response' })
|
||||
.pipe(map((res: EntityResponseType) => this.convertDateFromServer(res)));
|
||||
}
|
||||
|
||||
//update para publicar
|
||||
update(encuesta: IEncuesta): Observable<EntityResponseType> {
|
||||
const copy = this.convertDateFromClient(encuesta);
|
||||
|
|
|
@ -42,9 +42,6 @@
|
|||
</div>
|
||||
|
||||
<p class="ds-subtitle">Creada el día {{ encuesta!.fechaCreacion | formatShortDatetime | lowercase }}</p>
|
||||
<button type="button" class="ds-btn ds-btn--danger" (click)="finalizar()" *ngIf="encuesta!.estado === 'ACTIVE'">
|
||||
<fa-icon icon="sync" [icon]="faTimes"></fa-icon> <span>Finalizar</span>
|
||||
</button>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button type="button" class="ds-btn ds-btn--secondary" (click)="previousState()">
|
||||
|
@ -65,6 +62,10 @@
|
|||
>
|
||||
<fa-icon icon="sync" [icon]="faPlus"></fa-icon> <span>Crear pregunta</span>
|
||||
</button>
|
||||
|
||||
<button type="button" class="ds-btn ds-btn--danger" (click)="finalizar()" *ngIf="encuesta!.estado === 'ACTIVE'">
|
||||
<fa-icon icon="sync" [icon]="faTimes"></fa-icon> <span>Finalizar</span>
|
||||
</button>
|
||||
</div>
|
||||
</h2>
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<p class="ds-subtitle text-center">Inicie creando preguntas y opciones para su plantilla.</p>
|
||||
</ng-container>
|
||||
|
||||
<div class="ds-survey--question-wrapper card-plantilla lift" *ngFor="let pPregunta of pPreguntas; let i = index; trackBy: trackId">
|
||||
<div class="ds-survey--question-wrapper card-plantilla" *ngFor="let pPregunta of pPreguntas; let i = index; trackBy: trackId">
|
||||
<div
|
||||
[attr.data-index]="pPregunta.id"
|
||||
[attr.data-tipo]="pPregunta.tipo"
|
||||
|
|
|
@ -91,6 +91,15 @@
|
|||
<td>{{ plantilla.categoria?.nombre }}</td>
|
||||
<td class="text-right">
|
||||
<div class="btn-group">
|
||||
<button
|
||||
type="submit"
|
||||
[routerLink]="['/plantilla', plantilla.id, 'view']"
|
||||
class="ds-btn ds-btn--secondary btn-sm"
|
||||
data-cy="entityDetailsButton"
|
||||
>
|
||||
<fa-icon icon="eye"></fa-icon>
|
||||
<span class="d-none d-md-inline">Vista previa</span>
|
||||
</button>
|
||||
<button
|
||||
type="submit"
|
||||
[routerLink]="['/plantilla', plantilla.id, 'edit']"
|
||||
|
|
|
@ -33,8 +33,14 @@
|
|||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="alert alert-warning" id="no-result" *ngIf="usuarioEncuestas?.length === 0">
|
||||
<span jhiTranslate="dataSurveyApp.usuarioEncuesta.home.notFound">No usuarioEncuestas found</span>
|
||||
|
||||
<div class="ds-survey" id="entities" *ngIf="usuarioEncuestas?.length === 0">
|
||||
<div class="ds-survey--all-question-wrapper">
|
||||
<ng-container class="">
|
||||
<p class="ds-title text-center">No posee colaboraciones</p>
|
||||
<p class="ds-subtitle text-center">Inicie colaborando con otros usuarios mundialmente al recibir una invitación</p>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive" id="entities" *ngIf="usuarioEncuestas && usuarioEncuestas.length > 0">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div *ngIf="usuarioExtra">
|
||||
<h2 id="page-heading" data-cy="UsuarioEncuestaHeading">
|
||||
<span class="ds-title" jhiTranslate="dataSurveyApp.usuarioExtra.plantillas.title">Mis Plantillas </span>
|
||||
<p class="ds-subtitle">Hola</p>
|
||||
<p class="ds-subtitle">Cree encuestas a partir de las plantillas previamente compradas</p>
|
||||
|
||||
<div class="d-flex justify-content-end">
|
||||
<button class="ds-btn ds-btn--secondary mr-2" (click)="loadAll()" [disabled]="isLoading">
|
||||
|
@ -14,8 +14,16 @@
|
|||
|
||||
<jhi-alert></jhi-alert>
|
||||
|
||||
<div class="alert alert-warning" id="no-result" *ngIf="misPlantillas?.length === 0">
|
||||
<!-- <div class="alert alert-warning" id="no-result" *ngIf="misPlantillas?.length === 0">
|
||||
<span jhiTranslate="dataSurveyApp.usuarioExtra.plantillas.notFound">No usuarioEncuestas found</span>
|
||||
</div> -->
|
||||
<div class="ds-survey" id="entities" *ngIf="misPlantillas?.length === 0">
|
||||
<div class="ds-survey--all-question-wrapper">
|
||||
<ng-container class="">
|
||||
<p class="ds-title text-center">No posee plantillas</p>
|
||||
<p class="ds-subtitle text-center">Adquiera y compre diferentes plantillas disponibles en nuestra tienda</p>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive" id="entities" *ngIf="misPlantillas && misPlantillas.length > 0">
|
||||
|
@ -45,7 +53,12 @@
|
|||
<span class="d-none d-md-inline">Vista previa</span>
|
||||
</button>
|
||||
|
||||
<button type="submit" class="ds-btn ds-btn--primary btn-sm" data-cy="entityCreateButton">
|
||||
<button
|
||||
type="submit"
|
||||
class="ds-btn ds-btn--primary btn-sm"
|
||||
data-cy="entityCreateButton"
|
||||
(click)="crearEncuesta(miPlantilla.id)"
|
||||
>
|
||||
<span class="d-none d-md-inline" jhiTranslate="dataSurveyApp.usuarioExtra.plantillas.crearEncuesta">Crear Encuesta</span>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,12 @@ import { ActivatedRoute, Router } from '@angular/router';
|
|||
import { FormBuilder } from '@angular/forms';
|
||||
import { AccountService } from '../../../core/auth/account.service';
|
||||
import * as dayjs from 'dayjs';
|
||||
import { DATE_TIME_FORMAT } from 'app/config/input.constants';
|
||||
import { Account } from '../../../core/auth/account.model';
|
||||
import { IEncuesta, Encuesta } from './../../encuesta/encuesta.model';
|
||||
import { EncuestaService } from 'app/entities/encuesta/service/encuesta.service';
|
||||
import { AccesoEncuesta } from 'app/entities/enumerations/acceso-encuesta.model';
|
||||
import { EstadoEncuesta } from 'app/entities/enumerations/estado-encuesta.model';
|
||||
|
||||
@Component({
|
||||
selector: 'jhi-usuario-plantillas',
|
||||
|
@ -32,6 +37,7 @@ export class UsuarioPlantillasComponent implements OnInit {
|
|||
protected activatedRoute: ActivatedRoute,
|
||||
protected fb: FormBuilder,
|
||||
protected accountService: AccountService,
|
||||
protected encuestaService: EncuestaService,
|
||||
protected router: Router
|
||||
) {}
|
||||
|
||||
|
@ -65,4 +71,28 @@ export class UsuarioPlantillasComponent implements OnInit {
|
|||
trackId(index: number, item: IPlantilla): number {
|
||||
return item.id!;
|
||||
}
|
||||
|
||||
crearEncuesta(plantillaId: any): void {
|
||||
const now = dayjs();
|
||||
|
||||
const newSurvey = {
|
||||
...new Encuesta(),
|
||||
id: undefined,
|
||||
nombre: 'This is a survey',
|
||||
descripcion: 'This is a survey',
|
||||
fechaCreacion: dayjs(now, DATE_TIME_FORMAT),
|
||||
calificacion: 5,
|
||||
acceso: AccesoEncuesta.PUBLIC,
|
||||
contrasenna: undefined,
|
||||
estado: EstadoEncuesta.DRAFT,
|
||||
categoria: undefined,
|
||||
usuarioExtra: this.usuarioExtra,
|
||||
};
|
||||
|
||||
console.log(plantillaId, newSurvey);
|
||||
|
||||
this.encuestaService.createFromTemplate(newSurvey, plantillaId).subscribe(res => {
|
||||
this.router.navigate(['/encuesta']);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,3 +102,4 @@
|
|||
@import 'paper-dashboard/datasurvey-home';
|
||||
@import 'paper-dashboard/datasurvey-filter';
|
||||
@import 'paper-dashboard/datasurvey-survey';
|
||||
@import 'paper-dashboard/datasurvey-switch';
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
.ds-switch {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
& input {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
& label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 0.8rem;
|
||||
color: #757d94;
|
||||
margin: 0;
|
||||
|
||||
&::before {
|
||||
top: 2px !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&::after {
|
||||
top: 3.5px !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -35,6 +35,7 @@
|
|||
"ePreguntaCerrada": "Pregunta Cerrada",
|
||||
"categoria": "Categoría",
|
||||
"usuarioExtra": "Correo Usuario",
|
||||
"plantilla": "Plantilla",
|
||||
"password": {
|
||||
"title": "Contraseña Requerida",
|
||||
"text": "Esta encuesta es privada, por lo que debe ingresar la contraseña"
|
||||
|
|
Loading…
Reference in New Issue