diff --git a/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java b/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java index 61604a7..07e194d 100644 --- a/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java +++ b/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java @@ -2,11 +2,13 @@ package org.datasurvey.web.rest; import java.net.URI; import java.net.URISyntaxException; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import org.datasurvey.domain.EPreguntaCerrada; import org.datasurvey.domain.EPreguntaCerradaOpcion; import org.datasurvey.repository.EPreguntaCerradaOpcionRepository; import org.datasurvey.service.EPreguntaCerradaOpcionQueryService; @@ -58,10 +60,15 @@ public class EPreguntaCerradaOpcionResource { * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with body the new ePreguntaCerradaOpcion, or with status {@code 400 (Bad Request)} if the ePreguntaCerradaOpcion has already an ID. * @throws URISyntaxException if the Location URI syntax is incorrect. */ - @PostMapping("/e-pregunta-cerrada-opcions") + @PostMapping("/e-pregunta-cerrada-opcions/{id}") public ResponseEntity createEPreguntaCerradaOpcion( - @Valid @RequestBody EPreguntaCerradaOpcion ePreguntaCerradaOpcion + @Valid @RequestBody EPreguntaCerradaOpcion ePreguntaCerradaOpcion, + @PathVariable(value = "id", required = false) final Long id ) throws URISyntaxException { + EPreguntaCerrada ePreguntaCerrada = new EPreguntaCerrada(); + ePreguntaCerrada.setId(id); + ePreguntaCerradaOpcion.setEPreguntaCerrada(ePreguntaCerrada); + log.debug("REST request to save EPreguntaCerradaOpcion : {}", ePreguntaCerradaOpcion); if (ePreguntaCerradaOpcion.getId() != null) { throw new BadRequestAlertException("A new ePreguntaCerradaOpcion cannot already have an ID", ENTITY_NAME, "idexists"); @@ -76,7 +83,7 @@ public class EPreguntaCerradaOpcionResource { /** * {@code PUT /e-pregunta-cerrada-opcions/:id} : Updates an existing ePreguntaCerradaOpcion. * - * @param id the id of the ePreguntaCerradaOpcion to save. + * @param id the id of the ePreguntaCerradaOpcion to save. * @param ePreguntaCerradaOpcion the ePreguntaCerradaOpcion to update. * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated ePreguntaCerradaOpcion, * or with status {@code 400 (Bad Request)} if the ePreguntaCerradaOpcion is not valid, @@ -110,7 +117,7 @@ public class EPreguntaCerradaOpcionResource { /** * {@code PATCH /e-pregunta-cerrada-opcions/:id} : Partial updates given fields of an existing ePreguntaCerradaOpcion, field will ignore if it is null * - * @param id the id of the ePreguntaCerradaOpcion to save. + * @param id the id of the ePreguntaCerradaOpcion to save. * @param ePreguntaCerradaOpcion the ePreguntaCerradaOpcion to update. * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated ePreguntaCerradaOpcion, * or with status {@code 400 (Bad Request)} if the ePreguntaCerradaOpcion is not valid, @@ -196,4 +203,15 @@ public class EPreguntaCerradaOpcionResource { .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, id.toString())) .build(); } + + @PostMapping("/e-pregunta-cerrada-opcions/deleteMany") + public ResponseEntity deleteManyEPreguntaCerradaOpcion(@Valid @RequestBody int[] ids) { + for (int id : ids) { + ePreguntaCerradaOpcionService.delete((long) id); + } + return ResponseEntity + .noContent() + .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, Arrays.toString(ids))) + .build(); + } } diff --git a/src/main/java/org/datasurvey/web/rest/EncuestaResource.java b/src/main/java/org/datasurvey/web/rest/EncuestaResource.java index bcf74c8..2d79429 100644 --- a/src/main/java/org/datasurvey/web/rest/EncuestaResource.java +++ b/src/main/java/org/datasurvey/web/rest/EncuestaResource.java @@ -2,15 +2,20 @@ package org.datasurvey.web.rest; import java.net.URI; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; +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.repository.EncuestaRepository; -import org.datasurvey.service.EncuestaQueryService; -import org.datasurvey.service.EncuestaService; +import org.datasurvey.service.*; import org.datasurvey.service.criteria.EncuestaCriteria; import org.datasurvey.web.rest.errors.BadRequestAlertException; import org.slf4j.Logger; @@ -41,14 +46,26 @@ public class EncuestaResource { private final EncuestaQueryService encuestaQueryService; + private final EPreguntaCerradaService ePreguntaCerradaService; + + private final EPreguntaAbiertaService ePreguntaAbiertaService; + + private final EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService; + public EncuestaResource( EncuestaService encuestaService, EncuestaRepository encuestaRepository, - EncuestaQueryService encuestaQueryService + EncuestaQueryService encuestaQueryService, + EPreguntaCerradaService ePreguntaCerradaService, + EPreguntaAbiertaService ePreguntaAbiertaService, + EPreguntaCerradaOpcionService ePreguntaCerradaOpcionService ) { this.encuestaService = encuestaService; this.encuestaRepository = encuestaRepository; this.encuestaQueryService = encuestaQueryService; + this.ePreguntaCerradaService = ePreguntaCerradaService; + this.ePreguntaAbiertaService = ePreguntaAbiertaService; + this.ePreguntaCerradaOpcionService = ePreguntaCerradaOpcionService; } /** @@ -74,7 +91,7 @@ public class EncuestaResource { /** * {@code PUT /encuestas/:id} : Updates an existing encuesta. * - * @param id the id of the encuesta to save. + * @param id the id of the encuesta to save. * @param encuesta the encuesta to update. * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated encuesta, * or with status {@code 400 (Bad Request)} if the encuesta is not valid, @@ -108,7 +125,7 @@ public class EncuestaResource { /** * {@code PATCH /encuestas/:id} : Partial updates given fields of an existing encuesta, field will ignore if it is null * - * @param id the id of the encuesta to save. + * @param id the id of the encuesta to save. * @param encuesta the encuesta to update. * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated encuesta, * or with status {@code 400 (Bad Request)} if the encuesta is not valid, @@ -154,6 +171,55 @@ public class EncuestaResource { return ResponseEntity.ok().body(entityList); } + @GetMapping("/encuestas/preguntas/{id}") + public ResponseEntity> getPreguntasByIdEncuesta(@PathVariable Long id) { + List preguntasCerradas = ePreguntaCerradaService.findAll(); + List preguntasAbiertas = ePreguntaAbiertaService.findAll(); + List preguntas = Stream.concat(preguntasCerradas.stream(), preguntasAbiertas.stream()).collect(Collectors.toList()); + List preguntasFiltered = new ArrayList<>(); + + for (Object obj : preguntas) { + if (obj.getClass() == EPreguntaCerrada.class) { + if (((EPreguntaCerrada) obj).getEncuesta() != null) { + if (((EPreguntaCerrada) obj).getEncuesta().getId().equals(id)) { + preguntasFiltered.add(obj); + } + } + } else if (obj.getClass() == EPreguntaAbierta.class) { + if (((EPreguntaAbierta) obj).getEncuesta() != null) { + if (((EPreguntaAbierta) obj).getEncuesta().getId().equals(id)) { + preguntasFiltered.add(obj); + } + } + } + } + return ResponseEntity.ok().body(preguntasFiltered); + } + + @GetMapping("/encuestas/preguntas-opciones/{id}") + public ResponseEntity>> getPreguntaCerradaOpcionByIdEncuesta(@PathVariable Long id) { + List> res = new ArrayList<>(); + List preguntasCerradas = ePreguntaCerradaService.findAll(); + List preguntasCerradasFiltered = preguntasCerradas + .stream() + .filter(p -> Objects.nonNull(p.getEncuesta())) + .filter(p -> p.getEncuesta().getId().equals(id)) + .collect(Collectors.toList()); + List opciones = ePreguntaCerradaOpcionService.findAll(); + + for (EPreguntaCerrada ePreguntaCerrada : preguntasCerradasFiltered) { + long preguntaCerradaId = ePreguntaCerrada.getId(); + List opcionesFiltered = opciones + .stream() + .filter(o -> Objects.nonNull(o.getEPreguntaCerrada())) + .filter(o -> o.getEPreguntaCerrada().getId().equals(preguntaCerradaId)) + .collect(Collectors.toList()); + res.add(opcionesFiltered); + } + + return ResponseEntity.ok().body(res); + } + /** * {@code GET /encuestas/count} : count all the encuestas. * diff --git a/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts b/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts index a3daca3..0f02ff1 100644 --- a/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts +++ b/src/main/webapp/app/entities/e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service.ts @@ -16,8 +16,8 @@ export class EPreguntaCerradaOpcionService { constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} - create(ePreguntaCerradaOpcion: IEPreguntaCerradaOpcion): Observable { - return this.http.post(this.resourceUrl, ePreguntaCerradaOpcion, { observe: 'response' }); + create(ePreguntaCerradaOpcion: IEPreguntaCerradaOpcion, preguntaId?: number): Observable { + return this.http.post(`${this.resourceUrl}/${preguntaId}`, ePreguntaCerradaOpcion, { observe: 'response' }); } update(ePreguntaCerradaOpcion: IEPreguntaCerradaOpcion): Observable { @@ -49,6 +49,10 @@ export class EPreguntaCerradaOpcionService { return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); } + deleteMany(ids: number[]): Observable { + return this.http.post(`${this.resourceUrl}/deleteMany`, ids, { observe: 'response' }); + } + addEPreguntaCerradaOpcionToCollectionIfMissing( ePreguntaCerradaOpcionCollection: IEPreguntaCerradaOpcion[], ...ePreguntaCerradaOpcionsToCheck: (IEPreguntaCerradaOpcion | null | undefined)[] diff --git a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html index f097553..baf24cf 100644 --- a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html +++ b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html @@ -1,4 +1,332 @@ -
+
+

+

{{ encuesta!.nombre }}

+

Creada el día {{ encuesta!.fechaCreacion | formatShortDatetime | lowercase }}

+ +
+ + + + + + + + + +
+

+ + + + + +
+ No se encontraron preguntas +
+ +
+
+
+
+
+ {{ i + 1 }}. {{ ePregunta.nombre }} + +
+
+ Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + Pregunta de respuesta abierta +
+ + + + +
+ + + +
+
+
+
+
+ + Añadir opción +
+
+
+ +
+
+
+
+ + +
+
+ + + + + + + + + + + + diff --git a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts index 5ac48c3..11c479f 100644 --- a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts +++ b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts @@ -1,4 +1,8 @@ -import { Component, OnInit } from '@angular/core'; +import { EPreguntaCerrada } from './../../e-pregunta-cerrada/e-pregunta-cerrada.model'; +import { EPreguntaCerradaOpcion, IEPreguntaCerradaOpcion } from './../../e-pregunta-cerrada-opcion/e-pregunta-cerrada-opcion.model'; +import { EPreguntaAbiertaService } from './../../e-pregunta-abierta/service/e-pregunta-abierta.service'; +import { EPreguntaCerradaOpcionService } from './../../e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service'; +import { AfterViewChecked, Component, OnInit } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; @@ -15,82 +19,238 @@ import { CategoriaService } from 'app/entities/categoria/service/categoria.servi import { IUsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model'; import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { IEPreguntaCerrada } from 'app/entities/e-pregunta-cerrada/e-pregunta-cerrada.model'; +import { EPreguntaCerradaService } from 'app/entities/e-pregunta-cerrada/service/e-pregunta-cerrada.service'; +import { EPreguntaCerradaDeleteDialogComponent } from 'app/entities/e-pregunta-cerrada/delete/e-pregunta-cerrada-delete-dialog.component'; + +import { faTimes, faPlus } from '@fortawesome/free-solid-svg-icons'; +import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; + @Component({ selector: 'jhi-encuesta-update', templateUrl: './encuesta-update.component.html', }) -export class EncuestaUpdateComponent implements OnInit { +export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { + faTimes = faTimes; + faPlus = faPlus; + isSaving = false; + isSavingQuestion = false; categoriasSharedCollection: ICategoria[] = []; usuarioExtrasSharedCollection: IUsuarioExtra[] = []; + // editForm = this.fb.group({ + // id: [], + // nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], + // descripcion: [], + // fechaCreacion: [null, [Validators.required]], + // fechaPublicacion: [], + // fechaFinalizar: [], + // fechaFinalizada: [], + // calificacion: [null, [Validators.required]], + // acceso: [null, [Validators.required]], + // contrasenna: [], + // estado: [null, [Validators.required]], + // categoria: [], + // usuarioExtra: [], + // }); + editForm = this.fb.group({ id: [], - nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], - descripcion: [], - fechaCreacion: [null, [Validators.required]], - fechaPublicacion: [], - fechaFinalizar: [], - fechaFinalizada: [], - calificacion: [null, [Validators.required]], - acceso: [null, [Validators.required]], - contrasenna: [], - estado: [null, [Validators.required]], - categoria: [], - usuarioExtra: [], + nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(500)]], + // orden: [null, [Validators.required]], + // cantidad: [null, [Validators.required]], + // ePreguntaCerrada: [], }); + editFormQuestion = this.fb.group({ + id: [], + nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(500)]], + }); + + ePreguntas?: any[]; + ePreguntasOpciones?: any[]; + encuesta: Encuesta | null = null; + + isLoading = false; + + createAnother: Boolean = false; + createAnotherQuestion: Boolean = false; + selectedQuestionToCreateOption: IEPreguntaCerrada | null = null; + constructor( protected encuestaService: EncuestaService, protected categoriaService: CategoriaService, protected usuarioExtraService: UsuarioExtraService, protected activatedRoute: ActivatedRoute, - protected fb: FormBuilder + protected fb: FormBuilder, + protected modalService: NgbModal, + protected ePreguntaCerradaService: EPreguntaCerradaService, + protected ePreguntaCerradaOpcionService: EPreguntaCerradaOpcionService, + protected ePreguntaAbiertaService: EPreguntaAbiertaService ) {} + loadAll(): void { + this.isLoading = true; + + this.encuestaService.findQuestions(this.encuesta?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntas = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + + this.encuestaService.findQuestionsOptions(this.encuesta?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntasOpciones = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + } + ngOnInit(): void { this.activatedRoute.data.subscribe(({ encuesta }) => { - console.log(this.activatedRoute.data); - console.log(encuesta); - if (encuesta.id === undefined) { const today = dayjs().startOf('day'); encuesta.fechaCreacion = today; encuesta.fechaPublicacion = today; encuesta.fechaFinalizar = today; encuesta.fechaFinalizada = today; + } else { + this.encuesta = encuesta; + this.loadAll(); } - this.updateForm(encuesta); + // this.updateForm(encuesta); - this.loadRelationshipsOptions(); + // this.loadRelationshipsOptions(); }); } + ngAfterViewChecked(): void { + this.initListeners(); + } + + trackId(index: number, item: IEPreguntaCerrada): number { + return item.id!; + } + + delete(ePreguntaCerrada: IEPreguntaCerrada): void { + const modalRef = this.modalService.open(EPreguntaCerradaDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.ePreguntaCerrada = ePreguntaCerrada; + // unsubscribe not needed because closed completes on modal close + modalRef.closed.subscribe(reason => { + if (reason === 'deleted') { + this.loadAll(); + } + }); + } + + initListeners(): void { + const checkboxes = document.getElementsByClassName('ds-survey--checkbox'); + for (let i = 0; i < checkboxes.length; i++) { + checkboxes[i].addEventListener('click', e => { + if ((e.target as HTMLInputElement).checked) { + (e.target as HTMLElement).offsetParent!.classList.add('ds-survey--closed-option--active'); + } else { + (e.target as HTMLElement).offsetParent!.classList.remove('ds-survey--closed-option--active'); + } + }); + } + } + previousState(): void { window.history.back(); } - save(): void { - this.isSaving = true; - const encuesta = this.createFromForm(); - if (encuesta.id !== undefined) { - this.subscribeToSaveResponse(this.encuestaService.update(encuesta)); - } else { - this.subscribeToSaveResponse(this.encuestaService.create(encuesta)); + publishSurvey(): void {} + + finishSurvey(): void {} + + addOption(event: any): void {} + + resetForm(event: any): void { + this.editForm.reset(); + if (event !== null) { + const id = event.target.dataset.id; + this.ePreguntaCerradaService.find(id).subscribe(e => { + this.selectedQuestionToCreateOption = e.body; + }); } } - trackCategoriaById(index: number, item: ICategoria): number { + deleteQuestion(event: any) { + const id = event.target.dataset.id; + if (event.target.dataset.type) { + // Delete closed question + const questionElement = (event.target as HTMLElement).parentElement?.parentElement; + const optionIdsToDelete: number[] = []; + + // Get options IDs + questionElement?.childNodes.forEach((e, i) => { + if (e.nodeName !== 'DIV') return; + if (i === 0) return; + if ((e as HTMLElement).dataset.id === undefined) return; + if (!(e as HTMLElement).classList.contains('can-delete')) return; + let optionId = (e as HTMLElement).dataset.id; + optionIdsToDelete.push(+optionId!); + }); + + if (optionIdsToDelete.length === 0) { + this.ePreguntaCerradaService.delete(id).subscribe(e => { + this.loadAll(); + }); + } else { + // Delete question options + this.ePreguntaCerradaOpcionService.deleteMany(optionIdsToDelete).subscribe(e => { + // Delete question + this.ePreguntaCerradaService.delete(id).subscribe(e => { + this.loadAll(); + }); + }); + } + } else { + // Delete open question + this.ePreguntaAbiertaService.delete(id).subscribe(e => { + this.loadAll(); + }); + } + } + + deleteOption(event: any): void { + const id = event.target.dataset.optionid; + this.ePreguntaCerradaOpcionService.delete(id).subscribe(e => { + this.ePreguntas = []; + this.ePreguntasOpciones = []; + this.loadAll(); + }); + } + + save(): void { + this.isSaving = true; + const ePreguntaCerradaOpcion = this.createFromForm(); + if (ePreguntaCerradaOpcion.id !== undefined) { + this.subscribeToSaveResponse(this.ePreguntaCerradaOpcionService.update(ePreguntaCerradaOpcion)); + } else { + this.subscribeToSaveResponse( + this.ePreguntaCerradaOpcionService.create(ePreguntaCerradaOpcion, this.selectedQuestionToCreateOption?.id!) + ); + } + } + + trackEPreguntaCerradaById(index: number, item: IEPreguntaCerrada): number { return item.id!; } - trackUsuarioExtraById(index: number, item: IUsuarioExtra): number { - return item.id!; - } - - protected subscribeToSaveResponse(result: Observable>): void { + protected subscribeToSaveResponse(result: Observable>): void { result.pipe(finalize(() => this.onSaveFinalize())).subscribe( () => this.onSaveSuccess(), () => this.onSaveError() @@ -98,7 +258,14 @@ export class EncuestaUpdateComponent implements OnInit { } protected onSaveSuccess(): void { - this.previousState(); + // this.previousState(); + this.resetForm(null); + this.ePreguntas = []; + this.ePreguntasOpciones = []; + this.loadAll(); + if (!this.createAnother) { + $('#cancelBtn').click(); + } } protected onSaveError(): void { @@ -109,79 +276,191 @@ export class EncuestaUpdateComponent implements OnInit { this.isSaving = false; } - protected updateForm(encuesta: IEncuesta): void { - this.editForm.patchValue({ - id: encuesta.id, - nombre: encuesta.nombre, - descripcion: encuesta.descripcion, - fechaCreacion: encuesta.fechaCreacion ? encuesta.fechaCreacion.format(DATE_TIME_FORMAT) : null, - fechaPublicacion: encuesta.fechaPublicacion ? encuesta.fechaPublicacion.format(DATE_TIME_FORMAT) : null, - fechaFinalizar: encuesta.fechaFinalizar ? encuesta.fechaFinalizar.format(DATE_TIME_FORMAT) : null, - fechaFinalizada: encuesta.fechaFinalizada ? encuesta.fechaFinalizada.format(DATE_TIME_FORMAT) : null, - calificacion: encuesta.calificacion, - acceso: encuesta.acceso, - contrasenna: encuesta.contrasenna, - estado: encuesta.estado, - categoria: encuesta.categoria, - usuarioExtra: encuesta.usuarioExtra, - }); - - this.categoriasSharedCollection = this.categoriaService.addCategoriaToCollectionIfMissing( - this.categoriasSharedCollection, - encuesta.categoria - ); - this.usuarioExtrasSharedCollection = this.usuarioExtraService.addUsuarioExtraToCollectionIfMissing( - this.usuarioExtrasSharedCollection, - encuesta.usuarioExtra - ); - } - - protected loadRelationshipsOptions(): void { - this.categoriaService - .query() - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe( - map((categorias: ICategoria[]) => - this.categoriaService.addCategoriaToCollectionIfMissing(categorias, this.editForm.get('categoria')!.value) - ) - ) - .subscribe((categorias: ICategoria[]) => (this.categoriasSharedCollection = categorias)); - - this.usuarioExtraService - .query() - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe( - map((usuarioExtras: IUsuarioExtra[]) => - this.usuarioExtraService.addUsuarioExtraToCollectionIfMissing(usuarioExtras, this.editForm.get('usuarioExtra')!.value) - ) - ) - .subscribe((usuarioExtras: IUsuarioExtra[]) => (this.usuarioExtrasSharedCollection = usuarioExtras)); - } - - protected createFromForm(): IEncuesta { + protected createFromForm(): IEPreguntaCerradaOpcion { return { - ...new Encuesta(), - id: this.editForm.get(['id'])!.value, + // ...new EPreguntaCerradaOpcion(), + id: undefined, nombre: this.editForm.get(['nombre'])!.value, - descripcion: this.editForm.get(['descripcion'])!.value, - fechaCreacion: this.editForm.get(['fechaCreacion'])!.value - ? dayjs(this.editForm.get(['fechaCreacion'])!.value, DATE_TIME_FORMAT) - : undefined, - fechaPublicacion: this.editForm.get(['fechaPublicacion'])!.value - ? dayjs(this.editForm.get(['fechaPublicacion'])!.value, DATE_TIME_FORMAT) - : undefined, - fechaFinalizar: this.editForm.get(['fechaFinalizar'])!.value - ? dayjs(this.editForm.get(['fechaFinalizar'])!.value, DATE_TIME_FORMAT) - : undefined, - fechaFinalizada: this.editForm.get(['fechaFinalizada'])!.value - ? dayjs(this.editForm.get(['fechaFinalizada'])!.value, DATE_TIME_FORMAT) - : undefined, - calificacion: this.editForm.get(['calificacion'])!.value, - acceso: this.editForm.get(['acceso'])!.value, - contrasenna: this.editForm.get(['contrasenna'])!.value, - estado: this.editForm.get(['estado'])!.value, - categoria: this.editForm.get(['categoria'])!.value, - usuarioExtra: this.editForm.get(['usuarioExtra'])!.value, + orden: 10, + cantidad: 0, + ePreguntaCerrada: this.selectedQuestionToCreateOption, }; } + + createAnotherChange(event: any) { + this.createAnother = event.target.checked; + } + + createQuestion(): void { + const surveyId = this.encuesta?.id; + console.log(surveyId); + } + + protected createFromFormQuestion(): IEPreguntaCerrada { + return { + // ...new EPreguntaCerrada(), + id: undefined, + nombre: this.editFormQuestion.get(['nombre'])!.value, + tipo: PreguntaCerradaTipo.SINGLE, + opcional: false, + orden: 10, + encuesta: this.encuesta, + }; + } + + createAnotherQuestionChange(event: any) { + this.createAnotherQuestion = event.target.checked; + } + + saveQuestion(): void { + this.isSavingQuestion = true; + const ePreguntaCerrada = this.createFromFormQuestion(); + if (ePreguntaCerrada.id !== undefined) { + this.subscribeToSaveResponseQuestion(this.ePreguntaCerradaService.update(ePreguntaCerrada)); + } else { + this.subscribeToSaveResponseQuestion(this.ePreguntaCerradaService.create(ePreguntaCerrada)); + } + } + + protected subscribeToSaveResponseQuestion(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalizeQuestion())).subscribe( + () => this.onSaveSuccessQuestion(), + () => this.onSaveErrorQuestion() + ); + } + + protected onSaveSuccessQuestion(): void { + this.editFormQuestion.reset(); + this.ePreguntas = []; + this.ePreguntasOpciones = []; + this.loadAll(); + if (!this.createAnotherQuestion) { + $('#cancelBtnQuestion').click(); + } + } + + protected onSaveErrorQuestion(): void { + // Api for inheritance. + } + + protected onSaveFinalizeQuestion(): void { + this.isSavingQuestion = false; + } + + // previousState(): void { + // window.history.back(); + // } + + // save(): void { + // this.isSaving = true; + // const encuesta = this.createFromForm(); + // if (encuesta.id !== undefined) { + // this.subscribeToSaveResponse(this.encuestaService.update(encuesta)); + // } else { + // this.subscribeToSaveResponse(this.encuestaService.create(encuesta)); + // } + // } + + // trackCategoriaById(index: number, item: ICategoria): number { + // return item.id!; + // } + + // trackUsuarioExtraById(index: number, item: IUsuarioExtra): number { + // return item.id!; + // } + + // protected subscribeToSaveResponse(result: Observable>): void { + // result.pipe(finalize(() => this.onSaveFinalize())).subscribe( + // () => this.onSaveSuccess(), + // () => this.onSaveError() + // ); + // } + + // protected onSaveSuccess(): void { + // this.previousState(); + // } + + // protected onSaveError(): void { + // // Api for inheritance. + // } + + // protected onSaveFinalize(): void { + // this.isSaving = false; + // } + + // protected updateForm(encuesta: IEncuesta): void { + // this.editForm.patchValue({ + // id: encuesta.id, + // nombre: encuesta.nombre, + // descripcion: encuesta.descripcion, + // fechaCreacion: encuesta.fechaCreacion ? encuesta.fechaCreacion.format(DATE_TIME_FORMAT) : null, + // fechaPublicacion: encuesta.fechaPublicacion ? encuesta.fechaPublicacion.format(DATE_TIME_FORMAT) : null, + // fechaFinalizar: encuesta.fechaFinalizar ? encuesta.fechaFinalizar.format(DATE_TIME_FORMAT) : null, + // fechaFinalizada: encuesta.fechaFinalizada ? encuesta.fechaFinalizada.format(DATE_TIME_FORMAT) : null, + // calificacion: encuesta.calificacion, + // acceso: encuesta.acceso, + // contrasenna: encuesta.contrasenna, + // estado: encuesta.estado, + // categoria: encuesta.categoria, + // usuarioExtra: encuesta.usuarioExtra, + // }); + + // this.categoriasSharedCollection = this.categoriaService.addCategoriaToCollectionIfMissing( + // this.categoriasSharedCollection, + // encuesta.categoria + // ); + // this.usuarioExtrasSharedCollection = this.usuarioExtraService.addUsuarioExtraToCollectionIfMissing( + // this.usuarioExtrasSharedCollection, + // encuesta.usuarioExtra + // ); + // } + + // protected loadRelationshipsOptions(): void { + // this.categoriaService + // .query() + // .pipe(map((res: HttpResponse) => res.body ?? [])) + // .pipe( + // map((categorias: ICategoria[]) => + // this.categoriaService.addCategoriaToCollectionIfMissing(categorias, this.editForm.get('categoria')!.value) + // ) + // ) + // .subscribe((categorias: ICategoria[]) => (this.categoriasSharedCollection = categorias)); + + // this.usuarioExtraService + // .query() + // .pipe(map((res: HttpResponse) => res.body ?? [])) + // .pipe( + // map((usuarioExtras: IUsuarioExtra[]) => + // this.usuarioExtraService.addUsuarioExtraToCollectionIfMissing(usuarioExtras, this.editForm.get('usuarioExtra')!.value) + // ) + // ) + // .subscribe((usuarioExtras: IUsuarioExtra[]) => (this.usuarioExtrasSharedCollection = usuarioExtras)); + // } + + // protected createFromForm(): IEncuesta { + // return { + // ...new Encuesta(), + // id: this.editForm.get(['id'])!.value, + // nombre: this.editForm.get(['nombre'])!.value, + // descripcion: this.editForm.get(['descripcion'])!.value, + // fechaCreacion: this.editForm.get(['fechaCreacion'])!.value + // ? dayjs(this.editForm.get(['fechaCreacion'])!.value, DATE_TIME_FORMAT) + // : undefined, + // fechaPublicacion: this.editForm.get(['fechaPublicacion'])!.value + // ? dayjs(this.editForm.get(['fechaPublicacion'])!.value, DATE_TIME_FORMAT) + // : undefined, + // fechaFinalizar: this.editForm.get(['fechaFinalizar'])!.value + // ? dayjs(this.editForm.get(['fechaFinalizar'])!.value, DATE_TIME_FORMAT) + // : undefined, + // fechaFinalizada: this.editForm.get(['fechaFinalizada'])!.value + // ? dayjs(this.editForm.get(['fechaFinalizada'])!.value, DATE_TIME_FORMAT) + // : undefined, + // calificacion: this.editForm.get(['calificacion'])!.value, + // acceso: this.editForm.get(['acceso'])!.value, + // contrasenna: this.editForm.get(['contrasenna'])!.value, + // estado: this.editForm.get(['estado'])!.value, + // categoria: this.editForm.get(['categoria'])!.value, + // usuarioExtra: this.editForm.get(['usuarioExtra'])!.value, + // }; + // } } diff --git a/src/main/webapp/app/layouts/sidebar/sidebar.component.html b/src/main/webapp/app/layouts/sidebar/sidebar.component.html index 0c862fa..04fe706 100644 --- a/src/main/webapp/app/layouts/sidebar/sidebar.component.html +++ b/src/main/webapp/app/layouts/sidebar/sidebar.component.html @@ -1,7 +1,7 @@ @@ -103,7 +103,7 @@
  • -

    Cerrar Sesion

    +

    Cerrar Sesión

  • diff --git a/src/main/webapp/app/layouts/sidebar/sidebar.component.ts b/src/main/webapp/app/layouts/sidebar/sidebar.component.ts index 93e4ddb..7632d25 100644 --- a/src/main/webapp/app/layouts/sidebar/sidebar.component.ts +++ b/src/main/webapp/app/layouts/sidebar/sidebar.component.ts @@ -61,8 +61,11 @@ export class SidebarComponent { if (account !== null) { this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { this.usuarioExtra = usuarioExtra.body; - this.usuarioExtra!.nombre = - usuarioExtra.body!.nombre!.trim().split(' ')[0] + ' ' + usuarioExtra.body!.nombre!.trim().split(' ')[1]; + const fullName = this.usuarioExtra!.nombre; + const firstName = fullName?.split(' ')[0] === undefined ? '' : fullName?.split(' ')[0]; + const lastName = fullName?.split(' ')[1] === undefined ? '' : fullName?.split(' ')[1]; + + this.usuarioExtra!.nombre = `${firstName} ${lastName}`; }); } }); diff --git a/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black-PNG.png b/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black-PNG.png new file mode 100644 index 0000000..0452249 Binary files /dev/null and b/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black-PNG.png differ diff --git a/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black.svg b/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black.svg index 4ae0c82..293be43 100644 --- a/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black.svg +++ b/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-black.svg @@ -1 +1 @@ -Asset 5DATASURVEY \ No newline at end of file +Asset 5DATASURVEY \ No newline at end of file diff --git a/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-white-PNG.png b/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-white-PNG.png new file mode 100644 index 0000000..333b2f7 Binary files /dev/null and b/src/main/webapp/content/img_datasurvey/datasurvey-logo-text-white-PNG.png differ diff --git a/src/main/webapp/content/scss/paper-dashboard.scss b/src/main/webapp/content/scss/paper-dashboard.scss index 8f83aad..d9b2110 100644 --- a/src/main/webapp/content/scss/paper-dashboard.scss +++ b/src/main/webapp/content/scss/paper-dashboard.scss @@ -98,4 +98,5 @@ @import 'paper-dashboard/datasurvey-list'; @import 'paper-dashboard/datasurvey-table'; @import 'paper-dashboard/datasurvey-contextmenu'; +@import 'paper-dashboard/datasurvey-survey-update'; @import 'paper-dashboard/datasurvey-survey'; diff --git a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-buttons.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-buttons.scss index ccb1547..d0c0c24 100644 --- a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-buttons.scss +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-buttons.scss @@ -61,12 +61,21 @@ } .ds-btn--danger { - background-color: transparent; - color: #e73636; + background-color: #e73636; + color: #fff; &:hover { - background-color: #f7f9ff; - color: #d33232; + background-color: #d33232; + } + + &--light { + background-color: transparent; + color: #e73636; + + &:hover { + background-color: #f7f9ff; + color: #d33232; + } } } diff --git a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-form.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-form.scss index 5ffb44f..7f23355 100644 --- a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-form.scss +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-form.scss @@ -75,7 +75,9 @@ $form-background: #f1f5f9; } label { + font-size: 0.8rem; color: #757d94; + margin-bottom: 0.5rem; } } diff --git a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-list.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-list.scss index 7bd5f80..439dcfe 100644 --- a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-list.scss +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-list.scss @@ -32,7 +32,7 @@ margin: 1rem; word-wrap: break-word; - *:not(div) { + * { pointer-events: none; } @@ -78,6 +78,7 @@ width: 25px; height: 25px; color: #313747; + pointer-events: visible !important; } .entity-share:hover { diff --git a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-modal.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-modal.scss index f821633..4330bcd 100644 --- a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-modal.scss +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-modal.scss @@ -13,6 +13,12 @@ .modal-footer { border: none; padding: 2rem; + display: flex; + align-items: center; + + label { + margin: 0 0.2rem 0 0; + } } .modal-body { diff --git a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey-update.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey-update.scss new file mode 100644 index 0000000..2c9bfa6 --- /dev/null +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey-update.scss @@ -0,0 +1,164 @@ +.ds-survey { + display: flex; + + &--titulo { + display: flex; + justify-content: space-between; + align-items: center; + + &--name { + color: #1f3779; + } + + &--icon { + border-radius: 50%; + background-color: #f1f5f9; + cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + transition: background-color 0.2s ease-in-out; + font-size: 1rem; + padding: 0.8rem; + width: 25px; + height: 25px; + color: #1f3779; + pointer-events: visible !important; + transition: all 0.1s ease-in-out; + + * { + pointer-events: none; + } + + &:hover { + background-color: #e73636; + color: #fff; + } + + &--small { + font-size: 0.8rem; + padding: 0.3rem; + } + } + } + + &--all-question-wrapper { + display: flex; + flex-direction: column; + border: 2px dashed #f1f1f1; + border-radius: $border-radius-x-large; + padding: 2rem 5rem; + margin: 0 auto; + } + + &--question-wrapper { + margin: 0 auto; + } + + &--question { + display: flex; + flex-direction: column; + font-size: 1.2rem; + color: #15131d; + padding: 2rem; + border-bottom: 1px solid #e9e9e9; + } + + &--option { + display: flex; + align-items: center; + margin: 0.5rem 0; + border-radius: 5px; + font-weight: 500; + letter-spacing: 0.025rem; + color: #787878; + background-color: transparent; + position: relative; + top: 0; + transition: all 0.1s ease-in-out; + + &--base { + border: 1px solid #e6e6e6; + } + + &--add { + border: 2px dashed #9c9c9c; + transition: all 0.1s ease-in-out; + + &:hover { + border: 2px dashed #727272; + } + + &:hover .ds-survey--add-option { + color: #727272; + } + + &:hover .ds-survey--add-option--icon { + color: #727272; + } + } + } + + &--closed-option { + display: flex; + width: 25rem; + align-items: center; + font-size: 0.9rem; + color: #15131d; + padding: 1rem; + transition: all 0.1s ease-in-out; + cursor: pointer; + position: relative; + + label { + width: 100%; + margin: 0; + color: #1f3779; + } + } + + &--open-option { + display: flex; + align-items: center; + font-size: 0.9rem; + color: #15131d; + transition: all 0.1s ease-in-out; + position: relative; + + & textarea { + width: 25rem; + height: 20rem; + padding: 1rem 3rem; + color: #787878; + border: none; + resize: none; + + &:disabled { + background-color: transparent; + } + } + } + + &--add-option { + width: 100%; + color: #919191; + transition: all 0.1s ease-in-out; + pointer-events: none; + + &--icon { + margin: 0 1rem; + display: flex; + justify-content: center; + align-items: center; + width: 25px; + height: 25px; + color: #919191; + pointer-events: visible !important; + transition: all 0.1s ease-in-out; + + * { + pointer-events: none; + } + } + } +}