From 54e8824ca7d3532d288bbc60183332175febe6b4 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sun, 18 Jul 2021 03:39:39 -0600 Subject: [PATCH 01/95] 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/95] 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/95] 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/95] 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/95] 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 b04c75edd2ed338a9088dd92d56e2ecb2e436572 Mon Sep 17 00:00:00 2001 From: Paola Date: Thu, 22 Jul 2021 01:51:08 -0600 Subject: [PATCH 06/95] envio de correos en cambio de estado usuario --- .../org/datasurvey/service/MailService.java | 13 + .../web/rest/UsuarioExtraResource.java | 39 ++- src/main/resources/i18n/messages.properties | 12 + .../resources/i18n/messages_es.properties | 12 + .../templates/mail/creationEmail.html | 2 +- .../mail/reactivatedAccountEmail.html | 322 ++++++++++++++++++ .../templates/mail/suspendedAccountEmail.html | 319 +++++++++++++++++ ...usuario-extra-delete-dialog.component.html | 2 +- .../usuario-extra-delete-dialog.component.ts | 10 +- .../service/usuario-extra.service.ts | 8 + 10 files changed, 734 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/templates/mail/reactivatedAccountEmail.html create mode 100644 src/main/resources/templates/mail/suspendedAccountEmail.html diff --git a/src/main/java/org/datasurvey/service/MailService.java b/src/main/java/org/datasurvey/service/MailService.java index c40c4fe..cf8f62b 100644 --- a/src/main/java/org/datasurvey/service/MailService.java +++ b/src/main/java/org/datasurvey/service/MailService.java @@ -5,6 +5,7 @@ import java.util.Locale; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.datasurvey.domain.User; +import org.datasurvey.domain.UsuarioExtra; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.MessageSource; @@ -115,4 +116,16 @@ public class MailService { log.debug("Sending password restored email to '{}'", user.getEmail()); sendEmailFromTemplate(user, "mail/passwordRestoredEmail", "email.restored.title"); } + + @Async + public void sendSuspendedAccountMail(UsuarioExtra user) { + log.debug("Sending suspended account mail to '{}'", user.getUser().getEmail()); + sendEmailFromTemplate(user.getUser(), "mail/suspendedAccountEmail", "email.suspended.title"); + } + + @Async + public void sendActivatedAccountMail(UsuarioExtra user) { + log.debug("Sending reactivated account mail to '{}'", user.getUser().getEmail()); + sendEmailFromTemplate(user.getUser(), "mail/reactivatedAccountEmail", "email.reactivation.title"); + } } diff --git a/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java b/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java index 9914108..c5d5c35 100644 --- a/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java +++ b/src/main/java/org/datasurvey/web/rest/UsuarioExtraResource.java @@ -9,6 +9,7 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; import org.datasurvey.domain.UsuarioExtra; import org.datasurvey.repository.UsuarioExtraRepository; +import org.datasurvey.service.MailService; import org.datasurvey.service.UsuarioExtraQueryService; import org.datasurvey.service.UsuarioExtraService; import org.datasurvey.service.criteria.UsuarioExtraCriteria; @@ -41,14 +42,18 @@ public class UsuarioExtraResource { private final UsuarioExtraQueryService usuarioExtraQueryService; + private final MailService mailService; + public UsuarioExtraResource( UsuarioExtraService usuarioExtraService, UsuarioExtraRepository usuarioExtraRepository, - UsuarioExtraQueryService usuarioExtraQueryService + UsuarioExtraQueryService usuarioExtraQueryService, + MailService mailService ) { this.usuarioExtraService = usuarioExtraService; this.usuarioExtraRepository = usuarioExtraRepository; this.usuarioExtraQueryService = usuarioExtraQueryService; + this.mailService = mailService; } /** @@ -99,6 +104,38 @@ public class UsuarioExtraResource { } UsuarioExtra result = usuarioExtraService.save(usuarioExtra); + + return ResponseEntity + .ok() + .headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, usuarioExtra.getId().toString())) + .body(result); + } + + @PutMapping("/usuario-extras-estado/{id}") + public ResponseEntity updateUsuarioExtraEstado( + @PathVariable(value = "id", required = false) final Long id, + @Valid @RequestBody UsuarioExtra usuarioExtra + ) throws URISyntaxException { + log.debug("REST request to update UsuarioExtra : {}, {}", id, usuarioExtra); + if (usuarioExtra.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + if (!Objects.equals(id, usuarioExtra.getId())) { + throw new BadRequestAlertException("Invalid ID", ENTITY_NAME, "idinvalid"); + } + + if (!usuarioExtraRepository.existsById(id)) { + throw new BadRequestAlertException("Entity not found", ENTITY_NAME, "idnotfound"); + } + + UsuarioExtra result = usuarioExtraService.save(usuarioExtra); + + if (usuarioExtra.getEstado().name().equals("SUSPENDED")) { + mailService.sendSuspendedAccountMail(usuarioExtra); //se manda el correo de la suspecion + } else { + mailService.sendActivatedAccountMail(usuarioExtra); //se manda el correo de reactivacion + } + return ResponseEntity .ok() .headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, usuarioExtra.getId().toString())) diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 52b6575..7ff70ce 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -27,3 +27,15 @@ email.restored.text1=Your DataSurvey password has been successfully reset.. email.restored.text2=Regards, email.restored.text3=If you did not make this change, please notify the following email immediately: email.restored.email=datasurvey@gmail.com + +#reactivar la cuenta +email.reactivation.title=Your account has been reactivated +email.reactivation.greeting=Hello, {0}! +email.reactivation.text1=Your account has been reactivated. Please click on the link so you can keep enjoying DataSurvey: +email.reactivation.text2=Regards, + +#suspended accounr +email.suspended.title=Your account has been suspended +email.suspended.greeting=Dear {0} +email.suspended.text1=Su cuenta en DatSurvey se encuentra temporalmente suspendida. Si cree que es un error por favor haga clic en el siguiente enlace para enviar una solicitud para reactivar su cuenta: +email.suspended.text2=Saludos, diff --git a/src/main/resources/i18n/messages_es.properties b/src/main/resources/i18n/messages_es.properties index 77121fd..a9bc280 100644 --- a/src/main/resources/i18n/messages_es.properties +++ b/src/main/resources/i18n/messages_es.properties @@ -28,3 +28,15 @@ email.restored.text2=Saludos, email.restored.text3=Si usted no realizó este cambio, favor notifique inmediatamente al siguiente correo: email.restored.email=datasurvey@gmail.com +#reactivate account +email.reactivation.title=Su cuenta ha sido reactivada +email.reactivation.greeting=¡Hola, {0}! +email.reactivation.text1=Su cuenta en DataSurvey ha sido reactivada. Por favor haga clic en el siguiente enlace para iniciar sesión y disfrutar de DataSurvey: +email.reactivation.text2=Saludos, + + +#suspended accounr +email.suspended.title=Su cuenta ha sido suspendida +email.suspended.greeting=Querido {0} +email.suspended.text1=Lamentamos informarle que su cuenta en DatSurvey se encuentra temporalmente suspendida. Si cree que es un error por favor haga clic en el siguiente enlace para enviar una solicitud para reactivar su cuenta: +email.suspended.text2=Saludos, diff --git a/src/main/resources/templates/mail/creationEmail.html b/src/main/resources/templates/mail/creationEmail.html index 68b86f5..e46861a 100644 --- a/src/main/resources/templates/mail/creationEmail.html +++ b/src/main/resources/templates/mail/creationEmail.html @@ -264,7 +264,7 @@ th:with="url=(@{|${baseUrl}/account/reset/finish?key=${user.resetKey}|})" th:href="${url}" class="btn btn-primary" - >Iniciar sesiónIniciar Sesión

diff --git a/src/main/resources/templates/mail/reactivatedAccountEmail.html b/src/main/resources/templates/mail/reactivatedAccountEmail.html new file mode 100644 index 0000000..8226a4d --- /dev/null +++ b/src/main/resources/templates/mail/reactivatedAccountEmail.html @@ -0,0 +1,322 @@ + + + + + + + + + + + JHipster activation + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + diff --git a/src/main/resources/templates/mail/suspendedAccountEmail.html b/src/main/resources/templates/mail/suspendedAccountEmail.html new file mode 100644 index 0000000..5cc146b --- /dev/null +++ b/src/main/resources/templates/mail/suspendedAccountEmail.html @@ -0,0 +1,319 @@ + + + + + + + + + + + JHipster activation + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + diff --git a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html index 805ea79..3d4ac3c 100644 --- a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html +++ b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html @@ -1,4 +1,4 @@ -
+ 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 - +
    + +
    +
    +
    +
    +

    Encuesta

    +
    +
    +
    + +
    +
    +
    +
    +
    +

    {{ encuesta.nombre }}

    +
    +
    +
    +
    +
    + No se encontraron preguntas +
    + +
    +
    +
    + {{ ePregunta.nombre }} | + {{ ePregunta.tipo }} | + {{ ePregunta.opcional }} + + + + +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    Fecha Creacion
    +
    + {{ encuesta.fechaCreacion | formatMediumDatetime }} +
    +
    Fecha Publicacion
    +
    + {{ encuesta.fechaPublicacion | formatMediumDatetime }} +
    +
    Fecha Finalizar
    +
    + {{ encuesta.fechaFinalizar | formatMediumDatetime }} +
    +
    Fecha Finalizada
    +
    + {{ encuesta.fechaFinalizada | formatMediumDatetime }} +
    +
    +
    +
    +
    diff --git a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.ts b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.ts index f04d377..e7b714f 100644 --- a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.ts +++ b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.ts @@ -1,23 +1,108 @@ import { Component, OnInit } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; +import { EstadoEncuesta } from 'app/entities/enumerations/estado-encuesta.model'; -import { IEncuesta } from '../encuesta.model'; +import { Observable } from 'rxjs'; +import { finalize, map } from 'rxjs/operators'; + +import * as dayjs from 'dayjs'; +import { DATE_TIME_FORMAT } from 'app/config/input.constants'; + +import { IEncuesta, Encuesta } from '../encuesta.model'; +import { EncuestaService } from '../service/encuesta.service'; +import { ICategoria } from 'app/entities/categoria/categoria.model'; +import { CategoriaService } from 'app/entities/categoria/service/categoria.service'; +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-detail', templateUrl: './encuesta-detail.component.html', }) export class EncuestaDetailComponent implements OnInit { - encuesta: IEncuesta | null = null; + categoriasSharedCollection: ICategoria[] = []; + usuarioExtrasSharedCollection: IUsuarioExtra[] = []; - constructor(protected activatedRoute: ActivatedRoute) {} + encuesta: IEncuesta | null = null; + isLoading = false; + + ePreguntas?: any[]; + ePreguntasOpciones?: any[]; + + constructor( + protected activatedRoute: ActivatedRoute, + protected encuestaService: EncuestaService, + protected categoriaService: CategoriaService, + protected usuarioExtraService: UsuarioExtraService, + protected fb: FormBuilder, + protected modalService: NgbModal + ) {} ngOnInit(): void { this.activatedRoute.data.subscribe(({ encuesta }) => { - this.encuesta = encuesta; + if (encuesta) { + this.encuesta = encuesta; + this.loadAll(); + } else { + this.previousState(); + } }); } + trackId(index: number, item: IEPreguntaCerrada): number { + return item.id!; + } + + getEncuesta(id: number) { + return this.encuestaService.findEncuesta(id); + } + + loadAll(): void { + this.isLoading = true; + + this.encuestaService + .findQuestions(this.encuesta?.id!) + .pipe( + finalize(() => + this.encuestaService.findQuestionsOptions(this.encuesta?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.ePreguntasOpciones = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ) + ) + ) + .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; + } + ); + } + previousState(): void { window.history.back(); } 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 01aef26..f7bd41e 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.html +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.html @@ -59,7 +59,7 @@
  • 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 9300138..0dfca97 100644 --- a/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts +++ b/src/main/webapp/app/entities/encuesta/list/encuesta.component.ts @@ -63,7 +63,7 @@ export class EncuestaComponent implements OnInit, AfterViewInit { isLoading = false; isSaving = false; - selectedIdSurvey: number = 0; + selectedSurvey: number = 0; categoriasSharedCollection: ICategoria[] = []; usuarioExtrasSharedCollection: IUsuarioExtra[] = []; @@ -323,7 +323,7 @@ export class EncuestaComponent implements OnInit, AfterViewInit { } openPreview() { - const surveyId = this.selectedIdSurvey; + const surveyId = this.selectedSurvey; this.router.navigate(['/encuesta', surveyId, 'preview']); } @@ -347,7 +347,7 @@ export class EncuestaComponent implements OnInit, AfterViewInit { document.getElementById('contextmenu-edit--separator')!.style.display = 'block'; document.getElementById('contextmenu-delete--separator')!.style.display = 'block'; document.getElementById('contextmenu-edit')!.style.display = 'block'; - document.getElementById('contextmenu-duplicate')!.style.display = 'block'; + document.getElementById('contextmenu-preview')!.style.display = 'block'; document.getElementById('contextmenu-rename')!.style.display = 'block'; document.getElementById('contextmenu-share')!.style.display = 'block'; @@ -357,7 +357,8 @@ export class EncuestaComponent implements OnInit, AfterViewInit { } else if ((event.target as HTMLElement).classList.contains('ds-list--entity')) { event.target.classList.add('active'); document.getElementById('contextmenu-create--separator')!.style.display = 'none'; - this.selectedIdSurvey = Number(event.target.dataset.id); + + this.selectedSurvey = Number(event.target.dataset.id); } document.getElementById('contextmenu')!.style.top = event.layerY + 'px'; diff --git a/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts b/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts index ebb2c3f..df9a23d 100644 --- a/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts +++ b/src/main/webapp/app/entities/encuesta/route/encuesta-routing.module.ts @@ -14,7 +14,7 @@ const encuestaRoute: Routes = [ canActivate: [UserRouteAccessService], }, { - path: ':id/view', + path: ':id/preview', component: EncuestaDetailComponent, resolve: { encuesta: EncuestaRoutingResolveService, @@ -30,7 +30,7 @@ const encuestaRoute: Routes = [ canActivate: [UserRouteAccessService], }, { - path: ':id/preview', + path: ':id/edit', component: EncuestaUpdateComponent, resolve: { encuesta: EncuestaRoutingResolveService, 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..8517aee 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,22 @@ export class EncuestaService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + findEncuesta(id: number): Observable { + return this.http.get(`${this.resourceUrl}/${id}`); + } + + 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/content/scss/paper-dashboard.scss b/src/main/webapp/content/scss/paper-dashboard.scss index 3eab78d..8f83aad 100644 --- a/src/main/webapp/content/scss/paper-dashboard.scss +++ b/src/main/webapp/content/scss/paper-dashboard.scss @@ -98,3 +98,4 @@ @import 'paper-dashboard/datasurvey-list'; @import 'paper-dashboard/datasurvey-table'; @import 'paper-dashboard/datasurvey-contextmenu'; +@import 'paper-dashboard/datasurvey-survey'; From 24eaed7fbcbdb97bcdb468a1e86b37db9e54d9b2 Mon Sep 17 00:00:00 2001 From: Paola Date: Fri, 23 Jul 2021 01:00:32 -0600 Subject: [PATCH 16/95] areglo de mensajes en correos --- src/main/resources/i18n/messages_es.properties | 4 ++-- .../delete/usuario-extra-delete-dialog.component.html | 10 ++++------ .../usuario-extra/list/usuario-extra.component.html | 2 +- src/main/webapp/i18n/es/global.json | 3 ++- src/main/webapp/i18n/es/usuarioExtra.json | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/resources/i18n/messages_es.properties b/src/main/resources/i18n/messages_es.properties index a9bc280..4406c99 100644 --- a/src/main/resources/i18n/messages_es.properties +++ b/src/main/resources/i18n/messages_es.properties @@ -37,6 +37,6 @@ email.reactivation.text2=Saludos, #suspended accounr email.suspended.title=Su cuenta ha sido suspendida -email.suspended.greeting=Querido {0} -email.suspended.text1=Lamentamos informarle que su cuenta en DatSurvey se encuentra temporalmente suspendida. Si cree que es un error por favor haga clic en el siguiente enlace para enviar una solicitud para reactivar su cuenta: +email.suspended.greeting=Estimado {0} +email.suspended.text1=Lamentamos informarle que su cuenta en DatSurvey se encuentra temporalmente suspendida. Si cree que es un error por favor responda a este correo email.suspended.text2=Saludos, diff --git a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html index 3d4ac3c..01730ae 100644 --- a/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html +++ b/src/main/webapp/app/entities/usuario-extra/delete/usuario-extra-delete-dialog.component.html @@ -1,6 +1,6 @@ @@ -11,10 +11,8 @@

    - Are you sure you want to delete this Usuario Extra? -

    + [translateValues]="{ nombre: usuarioExtra.user.email }" + >

    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..563384a 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 @@ -66,7 +66,7 @@    diff --git a/src/main/webapp/i18n/es/global.json b/src/main/webapp/i18n/es/global.json index 0da30ff..b058b9e 100644 --- a/src/main/webapp/i18n/es/global.json +++ b/src/main/webapp/i18n/es/global.json @@ -136,7 +136,8 @@ "value": "Valor" }, "delete": { - "title": "Confirmar operación de borrado" + "title": "Confirmar operación de borrado", + "status": "Confirmar cambio de estado" }, "validation": { "required": "Este campo es obligatorio.", diff --git a/src/main/webapp/i18n/es/usuarioExtra.json b/src/main/webapp/i18n/es/usuarioExtra.json index 40c7603..e4bfd5d 100644 --- a/src/main/webapp/i18n/es/usuarioExtra.json +++ b/src/main/webapp/i18n/es/usuarioExtra.json @@ -12,7 +12,7 @@ "updated": "El usuario con el identificador {{ param }} ha sido actualizado", "deleted": "El usuario con el identificador {{ param }} ha sido eliminado", "delete": { - "question": "¿Seguro que quiere eliminar el usuario {{ id }}?" + "question": "¿Seguro que quiere modificar el estado del usuario '{{ nombre }}' ?" }, "detail": { "title": "Usuario" From aeb5538a4a0780a057ca8b498ed9cb00e1a41126 Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Fri, 23 Jul 2021 01:00:40 -0600 Subject: [PATCH 17/95] Add modal for question option creation --- .../rest/EPreguntaCerradaOpcionResource.java | 11 +- .../e-pregunta-cerrada-opcion.service.ts | 4 +- .../update/encuesta-update.component.html | 97 ++++++++++++++- .../update/encuesta-update.component.ts | 112 ++++++++++++++++-- .../_datasurvey-survey-update.scss | 58 ++++++++- 5 files changed, 258 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java b/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java index 08dd3c7..07e194d 100644 --- a/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java +++ b/src/main/java/org/datasurvey/web/rest/EPreguntaCerradaOpcionResource.java @@ -8,6 +8,7 @@ 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; @@ -59,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"); @@ -202,7 +208,6 @@ public class EPreguntaCerradaOpcionResource { public ResponseEntity deleteManyEPreguntaCerradaOpcion(@Valid @RequestBody int[] ids) { for (int id : ids) { ePreguntaCerradaOpcionService.delete((long) id); - System.out.println(id); } return ResponseEntity .noContent() 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 019d0b6..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 { 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 247b0eb..1b596a8 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 @@ -47,21 +47,45 @@ [attr.data-type]="ePregunta.tipo" > +
    + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + Pregunta de respuesta abierta +
    - +
    +
    + + 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 19/95] 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 20/95] 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 @@ - +