From 54e8824ca7d3532d288bbc60183332175febe6b4 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sun, 18 Jul 2021 03:39:39 -0600 Subject: [PATCH 01/38] add landing page --- src/main/webapp/app/home/home.component.html | 273 ++++++++++++++++++ src/main/webapp/app/home/home.component.scss | 241 ++++++++++++++++ src/main/webapp/app/home/home.component.ts | 3 +- src/main/webapp/app/home/home.module.ts | 3 +- .../app/layouts/footer/footer.component.html | 4 + .../content/img_datasurvey/banner-home.jpg | Bin 0 -> 68444 bytes 6 files changed, 522 insertions(+), 2 deletions(-) create mode 100644 src/main/webapp/content/img_datasurvey/banner-home.jpg diff --git a/src/main/webapp/app/home/home.component.html b/src/main/webapp/app/home/home.component.html index 80b9fdf..5a1c998 100644 --- a/src/main/webapp/app/home/home.component.html +++ b/src/main/webapp/app/home/home.component.html @@ -76,3 +76,276 @@

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

We are a branding and design studio

+

+ We are a group of creatives and developers who design, build, and optimize brands and digital experiences. +

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

Design

+

We start by creating a set of brand guidelines and standards

+
+
+
+

Develop

+

Our award winning development team creates personalized digital experiences

+
+
+
+

Deliver

+

Our products are created on time, and to your exact specifications

+
+
+
+
+ + + + +
+
+ +
+
diff --git a/src/main/webapp/app/home/home.component.scss b/src/main/webapp/app/home/home.component.scss index c731f12..dd30232 100644 --- a/src/main/webapp/app/home/home.component.scss +++ b/src/main/webapp/app/home/home.component.scss @@ -10,6 +10,201 @@ Main page styles background-size: contain; } +.bg-img-cover { + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} + +.overlay { + position: relative; +} +.overlay:before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #000; + opacity: 0.5; +} + +.overlay-10:before { + opacity: 0.1; +} + +.overlay-20:before { + opacity: 0.2; +} + +.overlay-30:before { + opacity: 0.3; +} + +.overlay-40:before { + opacity: 0.4; +} + +.overlay-50:before { + opacity: 0.5; +} + +.overlay-60:before { + opacity: 0.6; +} + +.overlay-70:before { + opacity: 0.7; +} + +.overlay-80:before { + opacity: 0.8; +} + +.overlay-90:before { + opacity: 0.9; +} + +.fixed-top, +.page-header-ui.navbar-fixed .navbar { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.text-white-75, +.page-header-ui-dark .page-header-ui-text a { + color: rgba(255, 255, 255, 0.75) !important; +} +.page-header-ui { + position: relative; + padding-top: 8rem; + padding-bottom: 8rem; +} +.page-header-ui .page-header-ui-content .page-header-ui-title { + font-size: 2.5rem; +} +.page-header-ui .page-header-ui-content .page-header-ui-text { + font-size: 1.15rem; +} +.page-header-ui .page-header-ui-content .page-header-ui-text.small { + font-size: 0.9rem; +} + +.page-header-ui-dark { + color: #fff; + background-color: #212832; +} + +.svg-border-rounded svg { + position: absolute; + bottom: 0; + left: 0; + height: 1rem; + width: 100%; +} +@media (min-width: 576px) { + .svg-border-rounded svg { + height: 1.5rem; + } +} +@media (min-width: 768px) { + .svg-border-rounded svg { + height: 2rem; + } +} +@media (min-width: 992px) { + .svg-border-rounded svg { + height: 2.5rem; + } +} +@media (min-width: 1200px) { + .svg-border-rounded svg { + height: 3rem; + } +} + +/** + Cards +**/ +.lift { + box-shadow: 0 0.15rem 1.75rem 0 rgba(33, 40, 50, 0.15); + transition: transform 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +.lift:hover { + transform: translateY(-0.3333333333rem); + box-shadow: 0 0.5rem 2rem 0 rgba(33, 40, 50, 0.25); +} +.lift:active { + transform: none; + box-shadow: 0 0.15rem 1.75rem 0 rgba(33, 40, 50, 0.15); +} + +.lift-sm { + box-shadow: 0 0.125rem 0.25rem 0 rgba(33, 40, 50, 0.2); +} +.lift-sm:hover { + transform: translateY(-0.1666666667rem); + box-shadow: 0 0.25rem 1rem 0 rgba(33, 40, 50, 0.25); +} +.lift-sm:active { + transform: none; + box-shadow: 0 0.125rem 0.25rem 0 rgba(33, 40, 50, 0.2); +} + +.card.lift { + text-decoration: none; + color: inherit; +} + +.card-flag { + position: absolute; + font-size: 0.7rem; + padding: 0.3rem 0.5rem; + line-height: 1; +} + +.card-flag-dark { + background-color: rgba(33, 40, 50, 0.7); + color: #fff; +} + +.card-flag-light { + background-color: rgba(255, 255, 255, 0.7); + color: #69707a; +} + +.card-flag-lg { + font-size: 0.9rem; + padding: 0.5rem 0.65rem; +} + +.card-flag-top-right { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + top: 0.5rem; + right: 0; +} + +.card-flag-top-left { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + top: 0.5rem; + left: 0; +} + +.border-cyan { + border-color: #00cfd5 !important; +} + +.py-10 { + padding-top: 6rem !important; + padding-bottom: 6rem !important; +} + /* wait autoprefixer update to allow simple generation of high pixel density media query */ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-moz-min-device-pixel-ratio: 2), @@ -21,3 +216,49 @@ Main page styles background-size: contain; } } + +.icon-stack { + display: inline-flex; + justify-content: center; + align-items: center; + border-radius: 100%; + height: 2.5rem; + width: 2.5rem; + font-size: 1rem; + background-color: #f2f6fc; + flex-shrink: 0; +} +.icon-stack svg { + height: 1rem; + width: 1rem; +} + +.icon-stack-sm { + height: 2rem; + width: 2rem; +} + +.icon-stack-lg { + height: 4rem; + width: 4rem; + font-size: 1.5rem; +} +.icon-stack-lg svg { + height: 1.5rem; + width: 1.5rem; +} + +.icon-stack-xl { + height: 5rem; + width: 5rem; + font-size: 1.75rem; +} +.icon-stack-xl svg { + height: 1.75rem; + width: 1.75rem; +} + +.bg-gradient-primary-to-secondary { + background-color: #1c44b2 !important; + background-image: linear-gradient(135deg, #1c44b2 0%, #00b88d 100%) !important; +} diff --git a/src/main/webapp/app/home/home.component.ts b/src/main/webapp/app/home/home.component.ts index 9010227..75056d2 100644 --- a/src/main/webapp/app/home/home.component.ts +++ b/src/main/webapp/app/home/home.component.ts @@ -2,6 +2,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { Router } from '@angular/router'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { AccountService } from 'app/core/auth/account.service'; import { Account } from 'app/core/auth/account.model'; @@ -16,7 +17,7 @@ export class HomeComponent implements OnInit, OnDestroy { private readonly destroy$ = new Subject(); - constructor(private accountService: AccountService, private router: Router) {} + constructor(private accountService: AccountService, private router: Router, protected modalService: NgbModal) {} ngOnInit(): void { this.accountService diff --git a/src/main/webapp/app/home/home.module.ts b/src/main/webapp/app/home/home.module.ts index 758f5c4..18179b9 100644 --- a/src/main/webapp/app/home/home.module.ts +++ b/src/main/webapp/app/home/home.module.ts @@ -4,9 +4,10 @@ import { RouterModule } from '@angular/router'; import { SharedModule } from 'app/shared/shared.module'; import { HOME_ROUTE } from './home.route'; import { HomeComponent } from './home.component'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; @NgModule({ - imports: [SharedModule, RouterModule.forChild([HOME_ROUTE])], + imports: [SharedModule, RouterModule.forChild([HOME_ROUTE]), FontAwesomeModule], declarations: [HomeComponent], }) export class HomeModule {} diff --git a/src/main/webapp/app/layouts/footer/footer.component.html b/src/main/webapp/app/layouts/footer/footer.component.html index 30aca31..9709bf7 100644 --- a/src/main/webapp/app/layouts/footer/footer.component.html +++ b/src/main/webapp/app/layouts/footer/footer.component.html @@ -1,3 +1,7 @@ diff --git a/src/main/webapp/content/img_datasurvey/banner-home.jpg b/src/main/webapp/content/img_datasurvey/banner-home.jpg new file mode 100644 index 0000000000000000000000000000000000000000..423721ac58b87f2417766e5a4e69301cae3e815a GIT binary patch literal 68444 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 Date: Sun, 18 Jul 2021 14:21:45 -0600 Subject: [PATCH 02/38] Add survey questions with their options respectively --- .../datasurvey/web/rest/EncuestaResource.java | 76 ++++- .../encuesta/service/encuesta.service.ts | 12 + .../update/encuesta-update.component.html | 115 +++++++- .../update/encuesta-update.component.ts | 279 +++++++++++------- .../paper-dashboard/_datasurvey-form.scss | 2 + 5 files changed, 363 insertions(+), 121 deletions(-) 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/encuesta/service/encuesta.service.ts b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts index ef95403..bb1d3a4 100644 --- a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts +++ b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts @@ -45,6 +45,18 @@ export class EncuestaService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + findQuestions(id: number): Observable { + return this.http + .get(`${this.resourceUrl}/preguntas/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + + findQuestionsOptions(id: number): Observable { + return this.http + .get(`${this.resourceUrl}/preguntas-opciones/${id}`, { observe: 'response' }) + .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); + } + query(req?: any): Observable { const options = createRequestOption(req); return this.http 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..30ec5b8 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,115 @@ -
+
+

+ {{ encuesta!.nombre }} + +
+ + + +
+

+ + + + + +
+ No se encontraron preguntas +
+ +
+
+
+ {{ ePregunta.nombre }} | + {{ ePregunta.tipo }} | + {{ ePregunta.opcional }} + + + + +
+ --------- {{ ePreguntaOpcion2.nombre }} +
+
+
+
+ +
+
+ +
+
+ + 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..115c995 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 @@ -15,6 +15,11 @@ 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'; + @Component({ selector: 'jhi-encuesta-update', templateUrl: './encuesta-update.component.html', @@ -41,147 +46,193 @@ export class EncuestaUpdateComponent implements OnInit { usuarioExtra: [], }); + ePreguntas?: any[]; + ePreguntasOpciones?: any[]; + encuesta: Encuesta | null = null; + + isLoading = false; + constructor( protected encuestaService: EncuestaService, protected categoriaService: CategoriaService, protected usuarioExtraService: UsuarioExtraService, protected activatedRoute: ActivatedRoute, - protected fb: FormBuilder + protected fb: FormBuilder, + protected modalService: NgbModal ) {} + 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(); }); } - 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 { + trackId(index: number, item: IEPreguntaCerrada): 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, + 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(); + } }); - - 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)); + // previousState(): void { + // window.history.back(); + // } - 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)); - } + // 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)); + // } + // } - 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, - }; - } + // 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/content/scss/paper-dashboard/_datasurvey-form.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-form.scss index bbfb5d4..33e0a35 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; } } From 8e22d769f6ddd64244708631f5548361b9752b48 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Tue, 20 Jul 2021 21:52:42 -0600 Subject: [PATCH 03/38] add filtro de encuesta por nombre --- .../encuesta/list/encuesta.component.html | 352 ++++++++++-------- .../encuesta/list/encuesta.component.ts | 7 +- 2 files changed, 196 insertions(+), 163 deletions(-) diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html index f0545aa..cc4710b 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html @@ -34,173 +34,201 @@
No encuestas found
+
+
+
+
+ +
+
- -
- -
-
    -
    -
  • - +
  • +
    +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
    +
    +
  • + +
  • +
    +
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+   {{ encuesta.nombre | titlecase }} - Crear +
+
+   {{ encuesta.nombre | titlecase }} +
+
+   {{ + encuesta.fechaCreacion | formatShortDatetime | titlecase + }} +
+
+ {{ encuesta.descripcion | titlecase }} +
+
+ {{ encuesta.categoria?.nombre | lowercase }} +
+
+ +
+
+ +
- -
-
-   {{ encuesta.nombre | titlecase }} -
-
-   {{ encuesta.nombre | titlecase }} -
-
-   {{ - encuesta.fechaCreacion | formatShortDatetime | titlecase - }} -
-
- {{ encuesta.descripcion | titlecase }} -
-
- {{ encuesta.categoria?.nombre | lowercase }} -
-
- -
-
- -
diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts b/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts index 6fccf6b..0089a1b 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts @@ -66,6 +66,8 @@ export class EncuestaComponent implements OnInit, AfterViewInit { categoriasSharedCollection: ICategoria[] = []; usuarioExtrasSharedCollection: IUsuarioExtra[] = []; + public searchEncuesta: string; + editForm = this.fb.group({ id: [], nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], @@ -93,7 +95,9 @@ export class EncuestaComponent implements OnInit, AfterViewInit { protected fb: FormBuilder, protected accountService: AccountService, protected router: Router - ) {} + ) { + this.searchEncuesta = ''; + } resetForm(): void { this.editForm.reset(); @@ -115,6 +119,7 @@ export class EncuestaComponent implements OnInit, AfterViewInit { } ngOnInit(): void { + this.searchEncuesta = ''; document.body.addEventListener('click', e => { document.getElementById('contextmenu')!.classList.add('ds-contextmenu--closed'); document.getElementById('contextmenu')!.classList.remove('ds-contextmenu--open'); From 9fd9e22739f270c428cca62f4037358ef18b334b Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Wed, 21 Jul 2021 22:30:54 -0600 Subject: [PATCH 04/38] add filter by acceso y estado --- .../encuesta/list/encuesta.component.html | 42 +++++++++++++++++-- .../encuesta/list/encuesta.component.ts | 10 +++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html index cc4710b..266ead0 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html @@ -35,10 +35,41 @@ No encuestas found
-
+
-
- +
+
+ +
+
+
+ +
+
+
+ +
+
@@ -90,7 +121,10 @@
{ document.getElementById('contextmenu')!.classList.add('ds-contextmenu--closed'); document.getElementById('contextmenu')!.classList.remove('ds-contextmenu--open'); From 28aec2e60d5c24b74a0f1cc6c1d3b6199e62819a Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Thu, 22 Jul 2021 00:28:08 -0600 Subject: [PATCH 05/38] Fix survey list share button pointer event --- .../webapp/content/scss/paper-dashboard/_datasurvey-list.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 { From 9f4f87ef41aec58620c26ea438ca7037c691225f Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Thu, 22 Jul 2021 02:49:12 -0600 Subject: [PATCH 06/38] add Eliminar encuesta --- .../encuesta-delete-dialog.component.html | 10 ++-- .../encuesta-delete-dialog.component.ts | 6 ++- .../encuesta/list/encuesta.component.html | 7 ++- .../encuesta/list/encuesta.component.ts | 49 +++++++++++++++++++ .../encuesta/service/encuesta.service.ts | 9 ++++ src/main/webapp/i18n/es/global.json | 2 +- 6 files changed, 73 insertions(+), 10 deletions(-) diff --git a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html index dfe7349..9ac420d 100644 --- a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html +++ b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.html @@ -1,6 +1,6 @@ -
+ @@ -14,11 +14,11 @@
diff --git a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts index 573c319..fde9fc7 100644 --- a/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts +++ b/src/main/webapp/app/entities/encuesta/delete/encuesta-delete-dialog.component.ts @@ -3,6 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { IEncuesta } from '../encuesta.model'; import { EncuestaService } from '../service/encuesta.service'; +import { EstadoEncuesta } from 'app/entities/enumerations/estado-encuesta.model'; @Component({ templateUrl: './encuesta-delete-dialog.component.html', @@ -16,8 +17,9 @@ export class EncuestaDeleteDialogComponent { this.activeModal.dismiss(); } - confirmDelete(id: number): void { - this.encuestaService.delete(id).subscribe(() => { + confirmDelete(encuest: IEncuesta): void { + encuest.estado = EstadoEncuesta.DELETED; + this.encuestaService.deleteEncuesta(encuest).subscribe(() => { this.activeModal.close('deleted'); }); } diff --git a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html index f0545aa..e970119 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html @@ -71,7 +71,9 @@
  • - +
  • @@ -82,6 +84,7 @@ *ngFor="let encuesta of encuestas; trackBy: trackId" (dblclick)="openSurvey($event)" (click)="selectSurvey($event)" + [hidden]="encuesta.estado == 'DELETED'" [attr.data-id]="encuesta.id" >
    @@ -194,7 +197,7 @@ Edit - +
    +
    + + Añadir pregunta +
    -
    +
    @@ -130,6 +154,73 @@ + + + + + + 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 1e4f140..147e59f 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 @@ -214,6 +214,15 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { } } + 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(); 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 index f3b3d56..be641b9 100644 --- a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey-update.scss +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey-update.scss @@ -34,6 +34,11 @@ background-color: #e73636; color: #fff; } + + &--small { + font-size: 0.8rem; + padding: 0.6rem; + } } } From 6595d3257bb54e18b4938a0d84dfe6d195ccc25d Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Fri, 23 Jul 2021 01:27:49 -0600 Subject: [PATCH 13/38] Fix add new question option text typo --- .../entities/encuesta/update/encuesta-update.component.html | 2 +- .../content/scss/paper-dashboard/_datasurvey-modal.scss | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) 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 d3bce47..bf9a28e 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 @@ -89,7 +89,7 @@ [attr.data-id]="ePregunta.id" [attr.data-type]="ePregunta.tipo" > - Añadir pregunta + Añadir opción
    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 { From 00b4046ba156f899a8eb374664e5ee343b468a60 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Fri, 23 Jul 2021 02:05:55 -0600 Subject: [PATCH 14/38] Add filtrar usuario --- .../list/usuario-extra.component.html | 37 ++++++++++++++++++- .../list/usuario-extra.component.ts | 9 ++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html b/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html index a4ce1c6..777a369 100644 --- a/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html +++ b/src/main/webapp/app/entities/usuario-extra/list/usuario-extra.component.html @@ -19,6 +19,35 @@
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    + @@ -32,7 +61,13 @@ - +