Add create survey from template

This commit is contained in:
Pablo Bonilla 2021-08-02 14:20:16 -06:00
parent e3852a7c72
commit 1d06b6d84a
No known key found for this signature in database
GPG Key ID: 46877262B8DE47E2
6 changed files with 135 additions and 7 deletions

View File

@ -11,10 +11,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import org.datasurvey.domain.EPreguntaAbierta; import org.datasurvey.domain.*;
import org.datasurvey.domain.EPreguntaCerrada;
import org.datasurvey.domain.EPreguntaCerradaOpcion;
import org.datasurvey.domain.Encuesta;
import org.datasurvey.domain.enumeration.AccesoEncuesta; import org.datasurvey.domain.enumeration.AccesoEncuesta;
import org.datasurvey.repository.EncuestaRepository; import org.datasurvey.repository.EncuestaRepository;
import org.datasurvey.service.*; import org.datasurvey.service.*;
@ -59,6 +56,14 @@ public class EncuestaResource {
private final EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService; private final EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService;
private final PlantillaService plantillaService;
private final PPreguntaCerradaService pPreguntaCerradaService;
private final PPreguntaAbiertaService pPreguntaAbiertaService;
private final PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService;
public EncuestaResource( public EncuestaResource(
EncuestaService encuestaService, EncuestaService encuestaService,
EncuestaRepository encuestaRepository, EncuestaRepository encuestaRepository,
@ -66,7 +71,11 @@ public class EncuestaResource {
MailService mailService, MailService mailService,
EPreguntaCerradaService ePreguntaCerradaService, EPreguntaCerradaService ePreguntaCerradaService,
EPreguntaAbiertaService ePreguntaAbiertaService, EPreguntaAbiertaService ePreguntaAbiertaService,
EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService,
PlantillaService plantillaService,
PPreguntaCerradaService pPreguntaCerradaService,
PPreguntaAbiertaService pPreguntaAbiertaService,
PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService
) { ) {
this.encuestaService = encuestaService; this.encuestaService = encuestaService;
this.encuestaRepository = encuestaRepository; this.encuestaRepository = encuestaRepository;
@ -75,6 +84,10 @@ public class EncuestaResource {
this.ePreguntaCerradaService = ePreguntaCerradaService; this.ePreguntaCerradaService = ePreguntaCerradaService;
this.ePreguntaAbiertaService = ePreguntaAbiertaService; this.ePreguntaAbiertaService = ePreguntaAbiertaService;
this.ePreguntaCerradaOpcionService = ePreguntaCerradaOpcionService; this.ePreguntaCerradaOpcionService = ePreguntaCerradaOpcionService;
this.plantillaService = plantillaService;
this.pPreguntaCerradaService = pPreguntaCerradaService;
this.pPreguntaAbiertaService = pPreguntaAbiertaService;
this.pPreguntaCerradaOpcionService = pPreguntaCerradaOpcionService;
} }
/** /**
@ -97,6 +110,78 @@ public class EncuestaResource {
.body(result); .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. * {@code PUT /encuestas/:id} : Updates an existing encuesta.
* *

View File

@ -317,7 +317,11 @@ export class EncuestaComponent implements OnInit, AfterViewInit {
if (encuesta.id !== undefined) { if (encuesta.id !== undefined) {
this.subscribeToSaveResponse(this.encuestaService.update(encuesta)); this.subscribeToSaveResponse(this.encuestaService.update(encuesta));
} else { } else {
this.subscribeToSaveResponse(this.encuestaService.create(encuesta)); // TMP CREATE SURVEY FROM TEMPLATE
const templateId: Number = 20;
// this.subscribeToSaveResponse(this.encuestaService.create(encuesta));
this.subscribeToSaveResponse(this.encuestaService.createFromTemplate(encuesta, templateId));
} }
} }

View File

@ -26,6 +26,13 @@ export class EncuestaService {
.pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); .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 para publicar
update(encuesta: IEncuesta): Observable<EntityResponseType> { update(encuesta: IEncuesta): Observable<EntityResponseType> {
const copy = this.convertDateFromClient(encuesta); const copy = this.convertDateFromClient(encuesta);

View File

@ -102,3 +102,4 @@
@import 'paper-dashboard/datasurvey-home'; @import 'paper-dashboard/datasurvey-home';
@import 'paper-dashboard/datasurvey-filter'; @import 'paper-dashboard/datasurvey-filter';
@import 'paper-dashboard/datasurvey-survey'; @import 'paper-dashboard/datasurvey-survey';
@import 'paper-dashboard/datasurvey-switch';

View File

@ -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;
}
}
}

View File

@ -34,7 +34,8 @@
"ePreguntaAbierta": "Pregunta Abierta", "ePreguntaAbierta": "Pregunta Abierta",
"ePreguntaCerrada": "Pregunta Cerrada", "ePreguntaCerrada": "Pregunta Cerrada",
"categoria": "Categoría", "categoria": "Categoría",
"usuarioExtra": "Correo Usuario" "usuarioExtra": "Correo Usuario",
"plantilla": "Plantilla"
} }
} }
} }