From 3ce87a9c4cb8492aae04ccdb691cc1dedf808ab4 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Tue, 27 Jul 2021 00:09:01 -0600 Subject: [PATCH 01/26] add listar colaboraciones de un usuario --- .../detail/encuesta-detail.component.html | 4 +- .../app/entities/entity-routing.module.ts | 2 +- .../list/usuario-encuesta.component.html | 57 +++++++------------ .../list/usuario-encuesta.component.ts | 44 +++++++++++++- .../route/usuario-encuesta-routing.module.ts | 19 +++++++ src/main/webapp/i18n/es/usuarioEncuesta.json | 22 +++---- 6 files changed, 94 insertions(+), 54 deletions(-) diff --git a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html index 0b5bbed..afb9c2c 100644 --- a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html +++ b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html @@ -203,7 +203,7 @@ - {{ - encuesta.fechaPublicacion === undefined ? 'Sin publicar' : (encuesta.fechaFinalizada | formatShortDatetime | lowercase) + encuesta.fechaPublicacion === undefined ? 'Sin publicar' : (encuesta.fechaPublicacion | formatShortDatetime | lowercase) }} @@ -216,7 +216,7 @@ {{ encuesta.fechaFinalizar === undefined ? 'Sin fecha de finalización' - : (encuesta.fechaFinalizada | formatShortDatetime | lowercase) + : (encuesta.fechaFinalizar | formatShortDatetime | lowercase) }} diff --git a/src/main/webapp/app/entities/entity-routing.module.ts b/src/main/webapp/app/entities/entity-routing.module.ts index eb24fc4..f01eb05 100644 --- a/src/main/webapp/app/entities/entity-routing.module.ts +++ b/src/main/webapp/app/entities/entity-routing.module.ts @@ -42,7 +42,7 @@ import { RouterModule } from '@angular/router'; import('./e-pregunta-cerrada-opcion/e-pregunta-cerrada-opcion.module').then(m => m.EPreguntaCerradaOpcionModule), }, { - path: 'usuario-encuesta', + path: 'colaboraciones', data: { pageTitle: 'dataSurveyApp.usuarioEncuesta.home.title' }, loadChildren: () => import('./usuario-encuesta/usuario-encuesta.module').then(m => m.UsuarioEncuestaModule), }, diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html index 4dd1821..e4371a7 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html @@ -1,22 +1,12 @@

- Usuario Encuestas + Colaboraciones en Encuestas
- - -

@@ -32,56 +22,49 @@ - - - + + - - + diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.spec.ts b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.tempSpec.ts similarity index 100% rename from src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.spec.ts rename to src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.tempSpec.ts diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts index 7dddd89..29666ce 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts @@ -28,6 +28,8 @@ export class UsuarioEncuestaComponent implements OnInit { usuarioExtra: IUsuarioExtra | null = null; user: IUser | null = null; + public searchRol: string; + constructor( protected usuarioEncuestaService: UsuarioEncuestaService, protected modalService: NgbModal, @@ -35,7 +37,9 @@ export class UsuarioEncuestaComponent implements OnInit { protected activatedRoute: ActivatedRoute, protected accountService: AccountService, protected router: Router - ) {} + ) { + this.searchRol = ''; + } loadAll(): void { this.isLoading = true; @@ -56,6 +60,7 @@ export class UsuarioEncuestaComponent implements OnInit { } ngOnInit(): void { + this.searchRol = ''; this.accountService.getAuthenticationState().subscribe(account => { if (account !== null) { this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { From 8efb84461259a722d486c604e053f4f15c39a351 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Fri, 30 Jul 2021 00:21:31 -0600 Subject: [PATCH 03/26] add modificar rol de colaborador --- .../update/encuesta-update.component.html | 56 ++++++++++++++++++- .../update/encuesta-update.component.ts | 29 +++++++++- .../service/usuario-encuesta.service.ts | 6 +- 3 files changed, 87 insertions(+), 4 deletions(-) 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 24152b7..5bca925 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 @@ -18,7 +18,13 @@ -
+
+ + + + + + + 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 c44a07f..fea4457 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 @@ -36,6 +36,7 @@ import { Router } from '@angular/router'; import { UsuarioEncuestaService } from 'app/entities/usuario-encuesta/service/usuario-encuesta.service'; import { IUsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model'; +import { RolColaborador } from '../../enumerations/rol-colaborador.model'; @Component({ selector: 'jhi-encuesta-update', @@ -50,10 +51,12 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { isSaving = false; isSavingQuestion = false; - + isSavingCollab = false; + public rolSeleccionado: RolColaborador | undefined = undefined; categoriasSharedCollection: ICategoria[] = []; usuarioExtrasSharedCollection: IUsuarioExtra[] = []; usuariosColaboradores: IUsuarioEncuesta[] = []; + colaborador: IUsuarioEncuesta | null = null; // editForm = this.fb.group({ // id: [], @@ -87,6 +90,11 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { tipopregunta: ['CLOSED'], }); + editFormUpdateCollab = this.fb.group({ + id: [], + rol: [null, [Validators.required]], + }); + ePreguntas?: any[]; ePreguntasOpciones?: any[]; encuesta: Encuesta | null = null; @@ -548,4 +556,23 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { // usuarioExtra: this.editForm.get(['usuarioExtra'])!.value, // }; // } + + /* methods for colaborators*/ + + selectColaborator(c: IUsuarioEncuesta) { + this.colaborador = c; + this.rolSeleccionado = c.rol; + } + + openColaborator(event: any) {} + + saveCollab(): void { + this.isSavingCollab = true; + const collab = this.colaborador; + if (collab !== null) { + collab.rol = this.editFormUpdateCollab.get('rol')!.value; + collab.fechaAgregado = dayjs(this.colaborador?.fechaAgregado, DATE_TIME_FORMAT); + this.usuarioEncuestaService.update(collab); + } + } } diff --git a/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts index fc47e76..dd7aee7 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts @@ -27,8 +27,9 @@ export class UsuarioEncuestaService { update(usuarioEncuesta: IUsuarioEncuesta): Observable { const copy = this.convertDateFromClient(usuarioEncuesta); + const url = `${this.resourceUrl}/${getUsuarioEncuestaIdentifier(usuarioEncuesta) as number}`; return this.http - .put(`${this.resourceUrl}/${getUsuarioEncuestaIdentifier(usuarioEncuesta) as number}`, copy, { + .put(url, copy, { observe: 'response', }) .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); @@ -36,8 +37,9 @@ export class UsuarioEncuestaService { partialUpdate(usuarioEncuesta: IUsuarioEncuesta): Observable { const copy = this.convertDateFromClient(usuarioEncuesta); + const url = `${this.resourceUrl}/${getUsuarioEncuestaIdentifier(usuarioEncuesta) as number}`; return this.http - .patch(`${this.resourceUrl}/${getUsuarioEncuestaIdentifier(usuarioEncuesta) as number}`, copy, { + .patch(url, copy, { observe: 'response', }) .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); From c3b03ee3729d762204d94005de3a61bed32def36 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sat, 31 Jul 2021 01:25:10 -0600 Subject: [PATCH 04/26] fix update rol de colaboradores --- .../update/encuesta-update.component.html | 14 ++++-- .../update/encuesta-update.component.ts | 50 +++++++++++++++++-- 2 files changed, 55 insertions(+), 9 deletions(-) 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 f2ae82e..fd9ef4a 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 @@ -438,7 +438,7 @@ role="dialog" aria-labelledby="verColaboradoresTitle" aria-hidden="true" - *ngIf="colaborador" + *ngIf="colaborador && isAutor()" > 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 5e901b2..c6fe803 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 @@ -17,7 +17,7 @@ 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 { IUsuarioExtra, UsuarioExtra } 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'; @@ -37,6 +37,8 @@ import { Router } from '@angular/router'; import { UsuarioEncuestaService } from 'app/entities/usuario-encuesta/service/usuario-encuesta.service'; import { IUsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model'; import { RolColaborador } from '../../enumerations/rol-colaborador.model'; +import { Account } from '../../../core/auth/account.model'; +import { AccountService } from 'app/core/auth/account.service'; @Component({ selector: 'jhi-encuesta-update', @@ -58,6 +60,8 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { usuariosColaboradores: IUsuarioEncuesta[] = []; colaborador: IUsuarioEncuesta | null = null; + account: Account | null = null; + usuarioExtra: UsuarioExtra | null = null; // editForm = this.fb.group({ // id: [], // nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], @@ -118,7 +122,8 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { protected parametroAplicacionService: ParametroAplicacionService, protected ePreguntaAbiertaService: EPreguntaAbiertaService, protected usuarioEncuestaService: UsuarioEncuestaService, - protected router: Router + protected router: Router, + protected accountService: AccountService ) {} loadAll(): void { @@ -181,6 +186,15 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { // this.loadRelationshipsOptions(); }); + + // Get jhi_user and usuario_extra information + this.accountService.getAuthenticationState().subscribe(account => { + if (account !== null) { + this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + }); + } + }); } ngAfterViewChecked(): void { @@ -576,15 +590,41 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { this.rolSeleccionado = c.rol; } - openColaborator(event: any) {} - saveCollab(): void { this.isSavingCollab = true; const collab = this.colaborador; if (collab !== null) { collab.rol = this.editFormUpdateCollab.get('rol')!.value; collab.fechaAgregado = dayjs(this.colaborador?.fechaAgregado, DATE_TIME_FORMAT); - this.usuarioEncuestaService.update(collab); + /*this.usuarioEncuestaService.update(collab).subscribe( + res => {}, + (error) => {console.log(error)} + );*/ + + this.subscribeToSaveResponseUpdateCollab(this.usuarioEncuestaService.update(collab)); } } + protected subscribeToSaveResponseUpdateCollab(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalizeUpdateCollab())).subscribe( + () => this.onSaveSuccessUpdateCollab(), + () => this.onSaveErrorUpdateCollab() + ); + } + + protected onSaveSuccessUpdateCollab(): void { + this.loadAll(); + $('#btnCancelUbdateColaboradores').click(); + } + + protected onSaveErrorUpdateCollab(): void { + // Api for inheritance. + } + + protected onSaveFinalizeUpdateCollab(): void { + this.isSavingCollab = false; + } + + isAutor() { + return this.usuarioExtra?.id == this.encuesta?.usuarioExtra?.id; + } } From 0d04c8d80cdf06630d43a479aa2d5c43b6a56289 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sat, 31 Jul 2021 01:26:17 -0600 Subject: [PATCH 05/26] fix texto de boton de cancelar --- .../app/entities/encuesta/update/encuesta-update.component.html | 2 +- 1 file changed, 1 insertion(+), 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 fd9ef4a..d4b2f11 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 @@ -463,7 +463,7 @@
+ diff --git a/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.scss b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.spec.ts b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.spec.ts new file mode 100644 index 0000000..93e5dbd --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EncuestaDeleteColaboratorDialogComponent } from './encuesta-delete-colaborator-dialog.component'; + +describe('EncuestaDeleteColaboratorDialogComponent', () => { + let component: EncuestaDeleteColaboratorDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EncuestaDeleteColaboratorDialogComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EncuestaDeleteColaboratorDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.ts new file mode 100644 index 0000000..6b5be08 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; + +import { IUsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model'; +import { UsuarioEncuestaService } from '../../usuario-encuesta/service/usuario-encuesta.service'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'jhi-encuesta-delete-colaborator-dialog', + templateUrl: './encuesta-delete-colaborator-dialog.component.html', + styleUrls: ['./encuesta-delete-colaborator-dialog.component.scss'], +}) +export class EncuestaDeleteColaboratorDialogComponent { + colaborador?: IUsuarioEncuesta; + + constructor(protected usuarioEncuestaService: UsuarioEncuestaService, protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmDelete(id: number): void { + this.usuarioEncuestaService.delete(id).subscribe(() => { + this.activeModal.close('deleted'); + }); + } +} diff --git a/src/main/webapp/app/entities/encuesta/encuesta.module.ts b/src/main/webapp/app/entities/encuesta/encuesta.module.ts index c6740f1..47ffbbf 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta.module.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta.module.ts @@ -10,6 +10,7 @@ import { EncuestaPublishDialogComponent } from './encuesta-publish-dialog/encues import { EncuestaDeleteQuestionDialogComponent } from './encuesta-delete-question-dialog/encuesta-delete-question-dialog.component'; import { EncuestaDeleteOptionDialogComponent } from './encuesta-delete-option-dialog/encuesta-delete-option-dialog.component'; import { EncuestaCompartirDialogComponent } from './encuesta-compartir-dialog/encuesta-compartir-dialog.component'; +import { EncuestaDeleteColaboratorDialogComponent } from './encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component'; @NgModule({ imports: [SharedModule, EncuestaRoutingModule, FontAwesomeModule], @@ -22,6 +23,7 @@ import { EncuestaCompartirDialogComponent } from './encuesta-compartir-dialog/en EncuestaDeleteQuestionDialogComponent, EncuestaDeleteOptionDialogComponent, EncuestaCompartirDialogComponent, + EncuestaDeleteColaboratorDialogComponent, ], entryComponents: [EncuestaDeleteDialogComponent], }) 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 2858a9a..e756162 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 @@ -13,25 +13,27 @@ >   
-
+
+
{{ colaborador.usuarioExtra.nombre }}
@@ -444,7 +446,7 @@
- - + + - + - + @@ -48,9 +48,10 @@ - + + - + - + diff --git a/src/main/webapp/app/layouts/sidebar/sidebar.constants.ts b/src/main/webapp/app/layouts/sidebar/sidebar.constants.ts index 5c5d412..40bbb53 100644 --- a/src/main/webapp/app/layouts/sidebar/sidebar.constants.ts +++ b/src/main/webapp/app/layouts/sidebar/sidebar.constants.ts @@ -76,10 +76,10 @@ export const USER_ROUTES: RouteInfo[] = [ // type: 'link', // icontype: 'nc-icon nc-album-2', // }, - // { - // path: '/colaboraciones', - // title: 'Colaboraciones', - // type: 'link', - // icontype: 'nc-icon nc-world-2', - // }, + { + path: '/colaboraciones', + title: 'Colaboraciones', + type: 'link', + icontype: 'nc-icon nc-world-2', + }, ]; diff --git a/src/main/webapp/i18n/es/usuarioEncuesta.json b/src/main/webapp/i18n/es/usuarioEncuesta.json index e292b48..b43df44 100644 --- a/src/main/webapp/i18n/es/usuarioEncuesta.json +++ b/src/main/webapp/i18n/es/usuarioEncuesta.json @@ -2,7 +2,7 @@ "dataSurveyApp": { "usuarioEncuesta": { "home": { - "title": "Colaboraciones en Encuestas", + "title": "Colaboraciones", "refreshListLabel": "Refrescar lista", "createLabel": "Crear nuevo Colaborador", "createOrEditLabel": "Crear o editar Colaboración", @@ -12,7 +12,9 @@ "updated": "Una colaboración ha sido actualizada con el identificador {{ param }}", "deleted": "Una colaboracióna ha sido eliminada con el identificador {{ param }}", "delete": { - "question": "¿Seguro que quiere eliminar la colaboración {{ id }}?" + "question": "¿Seguro que quiere eliminar la colaboración {{ id }}?", + "questionGetOut": "¿Seguro que quiere salirse de la colaboracion de encuesta?", + "getOut": "Salir" }, "detail": { "title": "Colaboración en encuesta" From 47f940dcaacdda95d5ec63f50788ba3a3408de3a Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Sun, 1 Aug 2021 00:54:44 -0600 Subject: [PATCH 12/26] Add survey template question and options registration --- .../rest/PPreguntaCerradaOpcionResource.java | 23 +- .../web/rest/PlantillaResource.java | 71 ++- .../p-pregunta-cerrada-opcion.service.ts | 8 +- .../plantilla/list/plantilla.component.html | 41 +- ...ntilla-delete-option-dialog.component.html | 24 + ...lantilla-delete-option-dialog.component.ts | 17 + ...illa-delete-question-dialog.component.html | 24 + ...ntilla-delete-question-dialog.component.ts | 17 + .../entities/plantilla/plantilla.module.ts | 14 +- .../plantilla/service/plantilla.service.ts | 16 + .../update/plantilla-update.component.html | 498 ++++++++++++------ .../update/plantilla-update.component.ts | 437 ++++++++++++--- src/main/webapp/app/login/login.component.ts | 7 - src/main/webapp/app/login/login.service.ts | 1 - 14 files changed, 945 insertions(+), 253 deletions(-) create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.html create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.ts create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.html create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.ts diff --git a/src/main/java/org/datasurvey/web/rest/PPreguntaCerradaOpcionResource.java b/src/main/java/org/datasurvey/web/rest/PPreguntaCerradaOpcionResource.java index 3dcc603..24a5b1b 100644 --- a/src/main/java/org/datasurvey/web/rest/PPreguntaCerradaOpcionResource.java +++ b/src/main/java/org/datasurvey/web/rest/PPreguntaCerradaOpcionResource.java @@ -2,11 +2,14 @@ package org.datasurvey.web.rest; import java.net.URI; import java.net.URISyntaxException; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import org.datasurvey.domain.EPreguntaCerrada; +import org.datasurvey.domain.PPreguntaCerrada; import org.datasurvey.domain.PPreguntaCerradaOpcion; import org.datasurvey.repository.PPreguntaCerradaOpcionRepository; import org.datasurvey.service.PPreguntaCerradaOpcionQueryService; @@ -58,10 +61,15 @@ public class PPreguntaCerradaOpcionResource { * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with body the new pPreguntaCerradaOpcion, or with status {@code 400 (Bad Request)} if the pPreguntaCerradaOpcion has already an ID. * @throws URISyntaxException if the Location URI syntax is incorrect. */ - @PostMapping("/p-pregunta-cerrada-opcions") + @PostMapping("/p-pregunta-cerrada-opcions/{id}") public ResponseEntity createPPreguntaCerradaOpcion( - @Valid @RequestBody PPreguntaCerradaOpcion pPreguntaCerradaOpcion + @Valid @RequestBody PPreguntaCerradaOpcion pPreguntaCerradaOpcion, + @PathVariable(value = "id", required = false) final Long id ) throws URISyntaxException { + PPreguntaCerrada pPreguntaCerrada = new PPreguntaCerrada(); + pPreguntaCerrada.setId(id); + pPreguntaCerradaOpcion.setPPreguntaCerrada(pPreguntaCerrada); + log.debug("REST request to save PPreguntaCerradaOpcion : {}", pPreguntaCerradaOpcion); if (pPreguntaCerradaOpcion.getId() != null) { throw new BadRequestAlertException("A new pPreguntaCerradaOpcion cannot already have an ID", ENTITY_NAME, "idexists"); @@ -196,4 +204,15 @@ public class PPreguntaCerradaOpcionResource { .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, id.toString())) .build(); } + + @PostMapping("/p-pregunta-cerrada-opcions/deleteMany") + public ResponseEntity deleteManyPPreguntaCerradaOpcion(@Valid @RequestBody int[] ids) { + for (int id : ids) { + pPreguntaCerradaOpcionService.delete((long) id); + } + return ResponseEntity + .noContent() + .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, Arrays.toString(ids))) + .build(); + } } diff --git a/src/main/java/org/datasurvey/web/rest/PlantillaResource.java b/src/main/java/org/datasurvey/web/rest/PlantillaResource.java index 1b94fc2..c3b3114 100644 --- a/src/main/java/org/datasurvey/web/rest/PlantillaResource.java +++ b/src/main/java/org/datasurvey/web/rest/PlantillaResource.java @@ -2,15 +2,17 @@ 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.Plantilla; +import org.datasurvey.domain.*; import org.datasurvey.repository.PlantillaRepository; -import org.datasurvey.service.PlantillaQueryService; -import org.datasurvey.service.PlantillaService; +import org.datasurvey.service.*; import org.datasurvey.service.criteria.PlantillaCriteria; import org.datasurvey.web.rest.errors.BadRequestAlertException; import org.slf4j.Logger; @@ -41,14 +43,26 @@ public class PlantillaResource { private final PlantillaQueryService plantillaQueryService; + private final PPreguntaCerradaService pPreguntaCerradaService; + + private final PPreguntaAbiertaService pPreguntaAbiertaService; + + private final PPreguntaCerradaOpcionService pPreguntaCerradaOpcionService; + public PlantillaResource( PlantillaService plantillaService, PlantillaRepository plantillaRepository, - PlantillaQueryService plantillaQueryService + PlantillaQueryService plantillaQueryService, + PPreguntaCerradaService pPreguntaCerradaService, + PPreguntaAbiertaService pPreguntaAbiertaService, + PPreguntaCerradaOpcionService ePreguntaCerradaOpcionService ) { this.plantillaService = plantillaService; this.plantillaRepository = plantillaRepository; this.plantillaQueryService = plantillaQueryService; + this.pPreguntaCerradaService = pPreguntaCerradaService; + this.pPreguntaAbiertaService = pPreguntaAbiertaService; + this.pPreguntaCerradaOpcionService = ePreguntaCerradaOpcionService; } /** @@ -154,6 +168,55 @@ public class PlantillaResource { return ResponseEntity.ok().body(entityList); } + @GetMapping("/plantillas/preguntas/{id}") + public ResponseEntity> getPreguntasByIdPlantilla(@PathVariable Long id) { + List preguntasCerradas = pPreguntaCerradaService.findAll(); + List preguntasAbiertas = pPreguntaAbiertaService.findAll(); + List preguntas = Stream.concat(preguntasCerradas.stream(), preguntasAbiertas.stream()).collect(Collectors.toList()); + List preguntasFiltered = new ArrayList<>(); + + for (Object obj : preguntas) { + if (obj.getClass() == PPreguntaCerrada.class) { + if (((PPreguntaCerrada) obj).getPlantilla() != null) { + if (((PPreguntaCerrada) obj).getPlantilla().getId().equals(id)) { + preguntasFiltered.add(obj); + } + } + } else if (obj.getClass() == PPreguntaAbierta.class) { + if (((PPreguntaAbierta) obj).getPlantilla() != null) { + if (((PPreguntaAbierta) obj).getPlantilla().getId().equals(id)) { + preguntasFiltered.add(obj); + } + } + } + } + return ResponseEntity.ok().body(preguntasFiltered); + } + + @GetMapping("/plantillas/preguntas-opciones/{id}") + public ResponseEntity>> getPreguntaCerradaOpcionByIdPlantilla(@PathVariable Long id) { + List> res = new ArrayList<>(); + List preguntasCerradas = pPreguntaCerradaService.findAll(); + List preguntasCerradasFiltered = preguntasCerradas + .stream() + .filter(p -> Objects.nonNull(p.getPlantilla())) + .filter(p -> p.getPlantilla().getId().equals(id)) + .collect(Collectors.toList()); + List opciones = pPreguntaCerradaOpcionService.findAll(); + + for (PPreguntaCerrada pPreguntaCerrada : preguntasCerradasFiltered) { + long preguntaCerradaId = pPreguntaCerrada.getId(); + List opcionesFiltered = opciones + .stream() + .filter(o -> Objects.nonNull(o.getPPreguntaCerrada())) + .filter(o -> o.getPPreguntaCerrada().getId().equals(preguntaCerradaId)) + .collect(Collectors.toList()); + res.add(opcionesFiltered); + } + + return ResponseEntity.ok().body(res); + } + /** * {@code GET /plantillas/count} : count all the plantillas. * diff --git a/src/main/webapp/app/entities/p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service.ts b/src/main/webapp/app/entities/p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service.ts index 0edd78f..6b5593b 100644 --- a/src/main/webapp/app/entities/p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service.ts +++ b/src/main/webapp/app/entities/p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service.ts @@ -16,8 +16,8 @@ export class PPreguntaCerradaOpcionService { constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} - create(pPreguntaCerradaOpcion: IPPreguntaCerradaOpcion): Observable { - return this.http.post(this.resourceUrl, pPreguntaCerradaOpcion, { observe: 'response' }); + create(pPreguntaCerradaOpcion: IPPreguntaCerradaOpcion, preguntaId?: number): Observable { + return this.http.post(`${this.resourceUrl}/${preguntaId}`, pPreguntaCerradaOpcion, { observe: 'response' }); } update(pPreguntaCerradaOpcion: IPPreguntaCerradaOpcion): Observable { @@ -49,6 +49,10 @@ export class PPreguntaCerradaOpcionService { return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); } + deleteMany(ids: number[]): Observable { + return this.http.post(`${this.resourceUrl}/deleteMany`, ids, { observe: 'response' }); + } + addPPreguntaCerradaOpcionToCollectionIfMissing( pPreguntaCerradaOpcionCollection: IPPreguntaCerradaOpcion[], ...pPreguntaCerradaOpcionsToCheck: (IPPreguntaCerradaOpcion | null | undefined)[] diff --git a/src/main/webapp/app/entities/plantilla/list/plantilla.component.html b/src/main/webapp/app/entities/plantilla/list/plantilla.component.html index 628b985..400e2c0 100644 --- a/src/main/webapp/app/entities/plantilla/list/plantilla.component.html +++ b/src/main/webapp/app/entities/plantilla/list/plantilla.component.html @@ -1,23 +1,28 @@

- Plantillas +
+
+ Encuestas +

Administre las plantillas comprables de la tienda

+
-
- +
+ - + +

@@ -58,11 +63,11 @@ + + +
+ diff --git a/src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.ts b/src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.ts new file mode 100644 index 0000000..94cde43 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + templateUrl: './plantilla-delete-option-dialog.component.html', +}) +export class PlantillaDeleteOptionDialogComponent { + constructor(protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmDelete(): void { + this.activeModal.close('confirm'); + } +} diff --git a/src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.html b/src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.html new file mode 100644 index 0000000..d6eb620 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.html @@ -0,0 +1,24 @@ +
+ + + + + + diff --git a/src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.ts b/src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.ts new file mode 100644 index 0000000..ceb0585 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-delete-question-dialog/plantilla-delete-question-dialog.component.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + templateUrl: './plantilla-delete-question-dialog.component.html', +}) +export class PlantillaDeleteQuestionDialogComponent { + constructor(protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmDelete(): void { + this.activeModal.close('confirm'); + } +} diff --git a/src/main/webapp/app/entities/plantilla/plantilla.module.ts b/src/main/webapp/app/entities/plantilla/plantilla.module.ts index 2284714..f4d2e54 100644 --- a/src/main/webapp/app/entities/plantilla/plantilla.module.ts +++ b/src/main/webapp/app/entities/plantilla/plantilla.module.ts @@ -5,10 +5,20 @@ import { PlantillaDetailComponent } from './detail/plantilla-detail.component'; import { PlantillaUpdateComponent } from './update/plantilla-update.component'; import { PlantillaDeleteDialogComponent } from './delete/plantilla-delete-dialog.component'; import { PlantillaRoutingModule } from './route/plantilla-routing.module'; +import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; +import { PlantillaDeleteQuestionDialogComponent } from './plantilla-delete-question-dialog/plantilla-delete-question-dialog.component'; +import { PlantillaDeleteOptionDialogComponent } from './plantilla-delete-option-dialog/plantilla-delete-option-dialog.component'; @NgModule({ - imports: [SharedModule, PlantillaRoutingModule], - declarations: [PlantillaComponent, PlantillaDetailComponent, PlantillaUpdateComponent, PlantillaDeleteDialogComponent], + imports: [SharedModule, PlantillaRoutingModule, FontAwesomeModule], + declarations: [ + PlantillaComponent, + PlantillaDetailComponent, + PlantillaUpdateComponent, + PlantillaDeleteDialogComponent, + PlantillaDeleteQuestionDialogComponent, + PlantillaDeleteOptionDialogComponent, + ], entryComponents: [PlantillaDeleteDialogComponent], }) export class PlantillaModule {} diff --git a/src/main/webapp/app/entities/plantilla/service/plantilla.service.ts b/src/main/webapp/app/entities/plantilla/service/plantilla.service.ts index 6402f49..dbaa0ac 100644 --- a/src/main/webapp/app/entities/plantilla/service/plantilla.service.ts +++ b/src/main/webapp/app/entities/plantilla/service/plantilla.service.ts @@ -45,6 +45,22 @@ export class PlantillaService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + findPlantilla(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/app/entities/plantilla/update/plantilla-update.component.html b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html index 59cd6ea..117d224 100644 --- a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html +++ b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html @@ -1,165 +1,355 @@ -
-
-
-

- Create or edit a Plantilla -

+
+

+
+

+ {{ plantilla!.nombre }} +

+
-
- +

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

-
- - -
+
+ + -
- - -
- - This field is required to be at least 1 characters. - - - This field cannot be longer than 50 characters. - -
-
+ +
+

-
- - -
+ -
- -
- -
+ + + + +
+
+ +

Plantilla en tienda

+

No puede modificar la plantilla debido a que esta ya está en la tienda.

+
+ +

Plantilla vacía

+

Inicie creando preguntas y opciones para la plantilla.

+
+ +
- - This field is required. - - - This field should be a date and time. - +
+ + {{ i + 1 }}.  + {{ pPregunta.nombre }} + + +
+
+ Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + {{ pPregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + {{ pPregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta abierta {{ pPregunta.opcional ? '(opcional)' : '' }} +
+ + + + +
+ + + +
+
+
+
+
+ + Añadir opción +
+
+
+ +
- -
- -
- -
-
- -
- - -
- - This field is required. - -
-
- -
- - -
- - This field is required. - - - This field should be a number. - -
-
- -
- - -
-
- -
- - - -
- + +
+
+
+ + + + + + + + diff --git a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts index 21f1465..6a380e8 100644 --- a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts +++ b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts @@ -1,4 +1,9 @@ -import { Component, OnInit } from '@angular/core'; +import { PPreguntaAbierta, IPPreguntaAbierta } from './../../p-pregunta-abierta/p-pregunta-abierta.model'; +import { PPreguntaCerrada } from './../../p-pregunta-cerrada/p-pregunta-cerrada.model'; +import { PPreguntaCerradaOpcion, IPPreguntaCerradaOpcion } from './../../p-pregunta-cerrada-opcion/p-pregunta-cerrada-opcion.model'; +import { PPreguntaAbiertaService } from './../../p-pregunta-abierta/service/p-pregunta-abierta.service'; +import { PPreguntaCerradaOpcionService } from './../../p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service'; +import { AfterViewChecked, Component, OnInit } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; @@ -12,67 +17,258 @@ import { IPlantilla, Plantilla } from '../plantilla.model'; import { PlantillaService } from '../service/plantilla.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 { IPPreguntaCerrada } from 'app/entities/p-pregunta-cerrada/p-pregunta-cerrada.model'; +import { PPreguntaCerradaService } from 'app/entities/p-pregunta-cerrada/service/p-pregunta-cerrada.service'; +import { PPreguntaCerradaDeleteDialogComponent } from 'app/entities/p-pregunta-cerrada/delete/p-pregunta-cerrada-delete-dialog.component'; + +import { faTimes, faPlus, faQuestion, faPollH, faEye } from '@fortawesome/free-solid-svg-icons'; +import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; +import { PlantillaDeleteQuestionDialogComponent } from '../plantilla-delete-question-dialog/plantilla-delete-question-dialog.component'; +import { PlantillaDeleteOptionDialogComponent } from '../plantilla-delete-option-dialog/plantilla-delete-option-dialog.component'; + +import { ParametroAplicacionService } from './../../parametro-aplicacion/service/parametro-aplicacion.service'; +import { IParametroAplicacion } from './../../parametro-aplicacion/parametro-aplicacion.model'; +import { Router } from '@angular/router'; @Component({ selector: 'jhi-plantilla-update', templateUrl: './plantilla-update.component.html', }) -export class PlantillaUpdateComponent implements OnInit { +export class PlantillaUpdateComponent implements OnInit, AfterViewChecked { + faTimes = faTimes; + faPlus = faPlus; + faPollH = faPollH; + faQuestion = faQuestion; + faEye = faEye; + isSaving = false; + isSavingQuestion = false; categoriasSharedCollection: ICategoria[] = []; + usuarioExtrasSharedCollection: IUsuarioExtra[] = []; editForm = this.fb.group({ id: [], - nombre: [null, [Validators.minLength(1), Validators.maxLength(50)]], - descripcion: [], - fechaCreacion: [null, [Validators.required]], - fechaPublicacionTienda: [], - estado: [null, [Validators.required]], - precio: [null, [Validators.required]], - categoria: [], + nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(500)]], }); + editFormQuestion = this.fb.group({ + id: [], + nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(500)]], + tipo: [PreguntaCerradaTipo.SINGLE], + opcional: [false], + tipopregunta: ['CLOSED'], + }); + + pPreguntas?: any[]; + pPreguntasOpciones?: any[]; + plantilla: Plantilla | null = null; + parametrosAplicacion?: IParametroAplicacion | null = null; + + isLoading = false; + + createAnother: Boolean = false; + createAnotherQuestion: Boolean = false; + selectedQuestionToCreateOption: IPPreguntaCerrada | null = null; + constructor( protected plantillaService: PlantillaService, protected categoriaService: CategoriaService, + protected usuarioExtraService: UsuarioExtraService, protected activatedRoute: ActivatedRoute, - protected fb: FormBuilder + protected fb: FormBuilder, + protected modalService: NgbModal, + protected pPreguntaCerradaService: PPreguntaCerradaService, + protected pPreguntaCerradaOpcionService: PPreguntaCerradaOpcionService, + protected parametroAplicacionService: ParametroAplicacionService, + protected pPreguntaAbiertaService: PPreguntaAbiertaService, + protected router: Router ) {} + loadAll(): void { + this.isLoading = true; + + this.plantillaService.findQuestions(this.plantilla?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.pPreguntas = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + + this.plantillaService.findQuestionsOptions(this.plantilla?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.pPreguntasOpciones = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); + } + + async loadAplicationParameters(): Promise { + const params = await this.parametroAplicacionService.find(1).toPromise(); + this.parametrosAplicacion = params.body; + } + ngOnInit(): void { this.activatedRoute.data.subscribe(({ plantilla }) => { if (plantilla.id === undefined) { const today = dayjs().startOf('day'); plantilla.fechaCreacion = today; - plantilla.fechaPublicacionTienda = today; + plantilla.fechaPublicacion = today; + plantilla.fechaFinalizar = today; + plantilla.fechaFinalizada = today; + } else { + this.plantilla = plantilla; + this.loadAll(); + this.loadAplicationParameters(); } - this.updateForm(plantilla); + // this.updateForm(plantilla); - this.loadRelationshipsOptions(); + // this.loadRelationshipsOptions(); }); } + ngAfterViewChecked(): void { + // this.initListeners(); + } + + trackId(index: number, item: IPPreguntaCerrada): number { + return item.id!; + } + + delete(pPreguntaCerrada: IPPreguntaCerrada): void { + const modalRef = this.modalService.open(PPreguntaCerradaDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.pPreguntaCerrada = pPreguntaCerrada; + // unsubscribe not needed because closed completes on modal close + modalRef.closed.subscribe(reason => { + if (reason === 'deleted') { + this.loadAll(); + } + }); + } + + // initListeners(): void { + // const checkboxes = document.getElementsByClassName('ds-survey--checkbox'); + // for (let i = 0; i < checkboxes.length; i++) { + // checkboxes[i].addEventListener('click', e => { + // if ((e.target as HTMLInputElement).checked) { + // (e.target as HTMLElement).offsetParent!.classList.add('ds-survey--closed-option--active'); + // } else { + // (e.target as HTMLElement).offsetParent!.classList.remove('ds-survey--closed-option--active'); + // } + // }); + // } + // } + previousState(): void { window.history.back(); } - save(): void { - this.isSaving = true; - const plantilla = this.createFromForm(); - if (plantilla.id !== undefined) { - this.subscribeToSaveResponse(this.plantillaService.update(plantilla)); - } else { - this.subscribeToSaveResponse(this.plantillaService.create(plantilla)); + publishSurvey(): void {} + + finishSurvey(): void {} + + addOption(event: any): void {} + + openPreview() { + const surveyId = this.plantilla?.id; + this.router.navigate(['/plantilla', surveyId, 'preview']); + } + + resetForm(event: any): void { + this.editForm.reset(); + if (event !== null) { + const id = event.target.dataset.id; + this.pPreguntaCerradaService.find(id).subscribe(e => { + this.selectedQuestionToCreateOption = e.body; + }); } } - trackCategoriaById(index: number, item: ICategoria): number { + deleteQuestion(event: any) { + const modalRef = this.modalService.open(PlantillaDeleteQuestionDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.closed.subscribe(reason => { + if (reason === 'confirm') { + const id = event.target.dataset.id; + if (event.target.dataset.type) { + // Delete closed question + const questionElement = (event.target as HTMLElement).parentElement?.parentElement; + const optionIdsToDelete: number[] = []; + + // Get options IDs + questionElement?.childNodes.forEach((e, i) => { + if (e.nodeName !== 'DIV') return; + if (i === 0) return; + if ((e as HTMLElement).dataset.id === undefined) return; + if (!(e as HTMLElement).classList.contains('can-delete')) return; + let optionId = (e as HTMLElement).dataset.id; + optionIdsToDelete.push(+optionId!); + }); + + if (optionIdsToDelete.length === 0) { + this.pPreguntaCerradaService.delete(id).subscribe(e => { + this.loadAll(); + }); + } else { + // Delete question options + this.pPreguntaCerradaOpcionService.deleteMany(optionIdsToDelete).subscribe(e => { + // Delete question + this.pPreguntaCerradaService.delete(id).subscribe(e => { + this.loadAll(); + }); + }); + } + } else { + // Delete open question + this.pPreguntaAbiertaService.delete(id).subscribe(e => { + this.loadAll(); + }); + } + } + }); + } + + deleteOption(event: any): void { + const modalRef = this.modalService.open(PlantillaDeleteOptionDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.closed.subscribe(reason => { + if (reason === 'confirm') { + const id = event.target.dataset.optionid; + this.pPreguntaCerradaOpcionService.delete(id).subscribe(e => { + this.pPreguntas = []; + this.pPreguntasOpciones = []; + this.loadAll(); + }); + } + }); + } + + save(): void { + this.isSaving = true; + const pPreguntaCerradaOpcion = this.createFromForm(); + if (pPreguntaCerradaOpcion.id !== undefined) { + this.subscribeToSaveResponse(this.pPreguntaCerradaOpcionService.update(pPreguntaCerradaOpcion)); + } else { + this.subscribeToSaveResponse( + this.pPreguntaCerradaOpcionService.create(pPreguntaCerradaOpcion, this.selectedQuestionToCreateOption?.id!) + ); + } + } + + trackPPreguntaCerradaById(index: number, item: IPPreguntaCerrada): number { return item.id!; } - protected subscribeToSaveResponse(result: Observable>): void { + protected subscribeToSaveResponse(result: Observable>): void { result.pipe(finalize(() => this.onSaveFinalize())).subscribe( () => this.onSaveSuccess(), () => this.onSaveError() @@ -80,7 +276,14 @@ export class PlantillaUpdateComponent implements OnInit { } protected onSaveSuccess(): void { - this.previousState(); + // this.previousState(); + this.resetForm(null); + this.pPreguntas = []; + this.pPreguntasOpciones = []; + this.loadAll(); + if (!this.createAnother) { + $('#cancelBtn').click(); + } } protected onSaveError(): void { @@ -91,51 +294,159 @@ export class PlantillaUpdateComponent implements OnInit { this.isSaving = false; } - protected updateForm(plantilla: IPlantilla): void { - this.editForm.patchValue({ - id: plantilla.id, - nombre: plantilla.nombre, - descripcion: plantilla.descripcion, - fechaCreacion: plantilla.fechaCreacion ? plantilla.fechaCreacion.format(DATE_TIME_FORMAT) : null, - fechaPublicacionTienda: plantilla.fechaPublicacionTienda ? plantilla.fechaPublicacionTienda.format(DATE_TIME_FORMAT) : null, - estado: plantilla.estado, - precio: plantilla.precio, - categoria: plantilla.categoria, - }); + protected createFromForm(): IPPreguntaCerradaOpcion { + return { + ...new PPreguntaCerradaOpcion(), + id: undefined, + nombre: this.editForm.get(['nombre'])!.value, + orden: 10, + pPreguntaCerrada: this.selectedQuestionToCreateOption, + }; + } - this.categoriasSharedCollection = this.categoriaService.addCategoriaToCollectionIfMissing( - this.categoriasSharedCollection, - plantilla.categoria + createAnotherChange(event: any) { + this.createAnother = event.target.checked; + } + + createQuestion(): void { + const surveyId = this.plantilla?.id; + } + + protected createFromFormClosedQuestion(): IPPreguntaCerrada { + return { + // ...new PPreguntaCerrada(), + id: undefined, + nombre: this.editFormQuestion.get(['nombre'])!.value, + tipo: this.editFormQuestion.get(['tipo'])!.value, + opcional: this.editFormQuestion.get(['opcional'])!.value, + orden: 10, + plantilla: this.plantilla, + }; + } + + protected createFromFormOpenQuestion(): IPPreguntaAbierta { + return { + // ...new PPreguntaAbierta(), + id: undefined, + nombre: this.editFormQuestion.get(['nombre'])!.value, + opcional: this.editFormQuestion.get(['opcional'])!.value, + orden: 10, + plantilla: this.plantilla, + }; + } + + createAnotherQuestionChange(event: any) { + this.createAnotherQuestion = event.target.checked; + } + + saveQuestion(): void { + this.isSavingQuestion = true; + const tipoPregunta = this.editFormQuestion.get(['tipopregunta'])!.value; + + if (tipoPregunta === 'CLOSED') { + const pPreguntaCerrada = this.createFromFormClosedQuestion(); + if (pPreguntaCerrada.id !== undefined) { + this.subscribeToSaveResponseQuestionClosed(this.pPreguntaCerradaService.update(pPreguntaCerrada)); + } else { + this.subscribeToSaveResponseQuestionClosed(this.pPreguntaCerradaService.create(pPreguntaCerrada)); + } + } else if (tipoPregunta === 'OPEN') { + const pPreguntaAbierta = this.createFromFormOpenQuestion(); + if (pPreguntaAbierta.id !== undefined) { + this.subscribeToSaveResponseQuestionOpen(this.pPreguntaAbiertaService.update(pPreguntaAbierta)); + } else { + this.subscribeToSaveResponseQuestionOpen(this.pPreguntaAbiertaService.create(pPreguntaAbierta)); + } + } + } + + protected subscribeToSaveResponseQuestionClosed(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalizeQuestion())).subscribe( + () => this.onSaveSuccessQuestion(), + () => this.onSaveErrorQuestion() ); } - 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)); + protected subscribeToSaveResponseQuestionOpen(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalizeQuestion())).subscribe( + () => this.onSaveSuccessQuestion(), + () => this.onSaveErrorQuestion() + ); } - protected createFromForm(): IPlantilla { - return { - ...new Plantilla(), - 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, - fechaPublicacionTienda: this.editForm.get(['fechaPublicacionTienda'])!.value - ? dayjs(this.editForm.get(['fechaPublicacionTienda'])!.value, DATE_TIME_FORMAT) - : undefined, - estado: this.editForm.get(['estado'])!.value, - precio: this.editForm.get(['precio'])!.value, - categoria: this.editForm.get(['categoria'])!.value, - }; + protected onSaveSuccessQuestion(): void { + this.editFormQuestion.reset({ tipo: PreguntaCerradaTipo.SINGLE, tipopregunta: 'CLOSED', opcional: false }); + this.editForm.reset(); + this.pPreguntas = []; + this.pPreguntasOpciones = []; + this.loadAll(); + if (!this.createAnotherQuestion) { + $('#cancelBtnQuestion').click(); + } + } + + protected onSaveErrorQuestion(): void { + // Api for inheritance. + } + + protected onSaveFinalizeQuestion(): void { + this.isSavingQuestion = false; + } + + updateTemplateName(event: any) { + const updatedSurveyName = event.target.innerText; + if (updatedSurveyName !== this.plantilla?.nombre) { + const survey = { ...this.plantilla }; + survey.nombre = updatedSurveyName; + + this.plantillaService.update(survey).subscribe(res => {}); + } + } + + updateQuestionName(event: any): void { + const questionType = event.target.dataset.tipo; + const questionId = event.target.dataset.id; + const questionName = event.target.innerText; + if (questionType) { + // Closed question + this.pPreguntaCerradaService.find(questionId).subscribe(res => { + const pPreguntaCerrada: PPreguntaCerrada | null = res.body ?? null; + const updatedPPreguntaCerrada = { ...pPreguntaCerrada }; + if (questionName !== pPreguntaCerrada?.nombre && pPreguntaCerrada !== null) { + updatedPPreguntaCerrada.nombre = questionName; + this.pPreguntaCerradaService.update(updatedPPreguntaCerrada).subscribe(updatedQuestion => { + console.log(updatedQuestion); + }); + } + }); + } else { + // Open question + // Closed question + this.pPreguntaAbiertaService.find(questionId).subscribe(res => { + const pPreguntaAbierta: PPreguntaAbierta | null = res.body ?? null; + const updatedPPreguntaAbierta = { ...pPreguntaAbierta }; + if (questionName !== pPreguntaAbierta?.nombre && pPreguntaAbierta !== null) { + updatedPPreguntaAbierta.nombre = questionName; + this.pPreguntaAbiertaService.update(updatedPPreguntaAbierta).subscribe(updatedQuestion => { + console.log(updatedQuestion); + }); + } + }); + } + // const questionId = event.target.dataset.id; + // const survey = { ...this.plantilla }; + // survey.nombre = updatedQuestionName; + // // Prevent user update by setting to null + // survey.usuarioExtra!.user = null; + + // this.plantillaService.updateSurvey(survey).subscribe(res => {}); + } + + trackCategoriaById(index: number, item: ICategoria): number { + return item.id!; + } + + trackUsuarioExtraById(index: number, item: IUsuarioExtra): number { + return item.id!; } } diff --git a/src/main/webapp/app/login/login.component.ts b/src/main/webapp/app/login/login.component.ts index f85105d..1f46b74 100644 --- a/src/main/webapp/app/login/login.component.ts +++ b/src/main/webapp/app/login/login.component.ts @@ -94,7 +94,6 @@ export class LoginComponent implements OnInit, AfterViewInit { } }, response => { - debugger; if (response.status == 401 && response.error.detail == 'Bad credentials') { this.activateGoogle(); } else { @@ -109,7 +108,6 @@ export class LoginComponent implements OnInit, AfterViewInit { } processError(response: HttpErrorResponse): void { - debugger; if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { this.errorUserExists = true; } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { @@ -153,7 +151,6 @@ export class LoginComponent implements OnInit, AfterViewInit { login(): void { this.error = false; this.userSuspended = false; - debugger; this.loginService .login({ username: this.loginForm.get('username')!.value, @@ -162,9 +159,6 @@ export class LoginComponent implements OnInit, AfterViewInit { }) .subscribe( value => { - debugger; - console.log(value); - /*if (value?.activated == false){ this.userSuspended = true; @@ -178,7 +172,6 @@ export class LoginComponent implements OnInit, AfterViewInit { // } }, response => { - debugger; if (response.status == 401 && response.error.detail == 'Bad credentials') { this.error = true; } else { diff --git a/src/main/webapp/app/login/login.service.ts b/src/main/webapp/app/login/login.service.ts index 8e24e3d..bc97be6 100644 --- a/src/main/webapp/app/login/login.service.ts +++ b/src/main/webapp/app/login/login.service.ts @@ -12,7 +12,6 @@ export class LoginService { constructor(private accountService: AccountService, private authServerProvider: AuthServerProvider) {} login(credentials: Login): Observable { - debugger; return this.authServerProvider.login(credentials).pipe(mergeMap(() => this.accountService.identity(true))); } From 089174935d25e553632fb820e441efba9759a61a Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Sun, 1 Aug 2021 01:04:15 -0600 Subject: [PATCH 13/26] Remove tests --- ...plantilla.component.spec.ts => plantilla.component.tmpSpec.ts} | 0 ...te.component.spec.ts => plantilla-update.component.tmpSpec.ts} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/app/entities/plantilla/list/{plantilla.component.spec.ts => plantilla.component.tmpSpec.ts} (100%) rename src/main/webapp/app/entities/plantilla/update/{plantilla-update.component.spec.ts => plantilla-update.component.tmpSpec.ts} (100%) diff --git a/src/main/webapp/app/entities/plantilla/list/plantilla.component.spec.ts b/src/main/webapp/app/entities/plantilla/list/plantilla.component.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/plantilla/list/plantilla.component.spec.ts rename to src/main/webapp/app/entities/plantilla/list/plantilla.component.tmpSpec.ts diff --git a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.spec.ts b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/plantilla/update/plantilla-update.component.spec.ts rename to src/main/webapp/app/entities/plantilla/update/plantilla-update.component.tmpSpec.ts From 884a06f6ddc4fc32a14ed7cd68cdedec31ab5089 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sun, 1 Aug 2021 01:29:53 -0600 Subject: [PATCH 14/26] change test --- ...a.component.spec.ts => usuario-encuesta.component.tempSpec.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/app/entities/usuario-encuesta/list/{usuario-encuesta.component.spec.ts => usuario-encuesta.component.tempSpec.ts} (100%) diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.spec.ts b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.tempSpec.ts similarity index 100% rename from src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.spec.ts rename to src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.tempSpec.ts From 9d310922e2248eae92087c7a537d94b8b38a5e4c Mon Sep 17 00:00:00 2001 From: Paola Date: Sun, 1 Aug 2021 12:15:26 -0600 Subject: [PATCH 15/26] agregar boton y dialog de finalizar encuesta --- .../encuesta-finalizar-dialog.component.html | 19 ++++++++++ .../encuesta-finalizar-dialog.component.scss | 0 ...ncuesta-finalizar-dialog.component.spec.ts | 24 +++++++++++++ .../encuesta-finalizar-dialog.component.ts | 36 +++++++++++++++++++ .../app/entities/encuesta/encuesta.module.ts | 2 ++ .../encuesta/service/encuesta.service.ts | 2 ++ .../update/encuesta-update.component.html | 4 +++ .../update/encuesta-update.component.ts | 15 ++++++++ 8 files changed, 102 insertions(+) create mode 100644 src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html create mode 100644 src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.scss create mode 100644 src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.spec.ts create mode 100644 src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts diff --git a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html new file mode 100644 index 0000000..9c7d1b1 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.html @@ -0,0 +1,19 @@ +
+ + + + + + diff --git a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.scss b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.spec.ts b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.spec.ts new file mode 100644 index 0000000..0ba7093 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EncuestaFinalizarDialogComponent } from './encuesta-finalizar-dialog.component'; + +describe('EncuestaFinalizarDialogComponent', () => { + let component: EncuestaFinalizarDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EncuestaFinalizarDialogComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EncuestaFinalizarDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts new file mode 100644 index 0000000..eef9f2e --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { IEncuesta } from '../encuesta.model'; +import { EstadoEncuesta } from '../../enumerations/estado-encuesta.model'; +import { EncuestaService } from '../service/encuesta.service'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import * as dayjs from 'dayjs'; +import { DATE_TIME_FORMAT } from '../../../config/input.constants'; + +@Component({ + selector: 'jhi-encuesta-finalizar-dialog', + templateUrl: './encuesta-finalizar-dialog.component.html', + styleUrls: ['./encuesta-finalizar-dialog.component.scss'], +}) +export class EncuestaFinalizarDialogComponent implements OnInit { + encuesta?: IEncuesta; + + constructor(protected encuestaService: EncuestaService, protected activeModal: NgbActiveModal) {} + + ngOnInit(): void {} + + confirmFinalizar(encuesta: IEncuesta): void { + debugger; + const now = dayjs(); + + encuesta.estado = EstadoEncuesta.FINISHED; + encuesta.fechaFinalizada = dayjs(now, DATE_TIME_FORMAT); + + this.encuestaService.updateSurvey(encuesta).subscribe(() => { + this.activeModal.close('finalized'); + }); + } + + cancel(): void { + this.activeModal.dismiss(); + } +} diff --git a/src/main/webapp/app/entities/encuesta/encuesta.module.ts b/src/main/webapp/app/entities/encuesta/encuesta.module.ts index c6740f1..91c2da5 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta.module.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta.module.ts @@ -10,6 +10,7 @@ import { EncuestaPublishDialogComponent } from './encuesta-publish-dialog/encues import { EncuestaDeleteQuestionDialogComponent } from './encuesta-delete-question-dialog/encuesta-delete-question-dialog.component'; import { EncuestaDeleteOptionDialogComponent } from './encuesta-delete-option-dialog/encuesta-delete-option-dialog.component'; import { EncuestaCompartirDialogComponent } from './encuesta-compartir-dialog/encuesta-compartir-dialog.component'; +import { EncuestaFinalizarDialogComponent } from './encuesta-finalizar-dialog/encuesta-finalizar-dialog.component'; @NgModule({ imports: [SharedModule, EncuestaRoutingModule, FontAwesomeModule], @@ -22,6 +23,7 @@ import { EncuestaCompartirDialogComponent } from './encuesta-compartir-dialog/en EncuestaDeleteQuestionDialogComponent, EncuestaDeleteOptionDialogComponent, EncuestaCompartirDialogComponent, + EncuestaFinalizarDialogComponent, ], entryComponents: [EncuestaDeleteDialogComponent], }) 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 35bdf0b..c762759 100644 --- a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts +++ b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts @@ -26,6 +26,7 @@ export class EncuestaService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + //update para publicar update(encuesta: IEncuesta): Observable { const copy = this.convertDateFromClient(encuesta); return this.http @@ -33,6 +34,7 @@ export class EncuestaService { .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); } + //update normal updateSurvey(encuesta: IEncuesta): Observable { const copy = this.convertDateFromClient(encuesta); 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 2858a9a..7a6fabd 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 @@ -40,6 +40,9 @@

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

+
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 bd76505..4a80c38 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 @@ -39,6 +39,8 @@ import { IUsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model' import { RolColaborador } from '../../enumerations/rol-colaborador.model'; import { Account } from '../../../core/auth/account.model'; import { AccountService } from 'app/core/auth/account.service'; +import { EncuestaPublishDialogComponent } from '../encuesta-publish-dialog/encuesta-publish-dialog.component'; +import { EncuestaFinalizarDialogComponent } from '../encuesta-finalizar-dialog/encuesta-finalizar-dialog.component'; @Component({ selector: 'jhi-encuesta-update', @@ -54,6 +56,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { isSaving = false; isSavingQuestion = false; isSavingCollab = false; + finalizada = false; public rolSeleccionado: RolColaborador | undefined = undefined; categoriasSharedCollection: ICategoria[] = []; usuarioExtrasSharedCollection: IUsuarioExtra[] = []; @@ -662,4 +665,16 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { isAutor() { return this.usuarioExtra?.id == this.encuesta?.usuarioExtra?.id; } + + finalizar(): void { + const modalRef = this.modalService.open(EncuestaFinalizarDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.encuesta = this.encuesta; + // unsubscribe not needed because closed completes on modal close + modalRef.closed.subscribe(reason => { + if (reason === 'finalized') { + this.finalizada = true; + this.loadAll(); + } + }); + } } From b068359da61ec664c300cc06bff5e79abdf16204 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sun, 1 Aug 2021 12:18:00 -0600 Subject: [PATCH 16/26] add modal add colaborador --- .../encuesta/service/encuesta.service.ts | 2 + .../update/encuesta-update.component.html | 64 ++++++++++++++++- .../update/encuesta-update.component.ts | 72 ++++++++++++++++--- 3 files changed, 127 insertions(+), 11 deletions(-) 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 35bdf0b..af657c8 100644 --- a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts +++ b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts @@ -100,6 +100,8 @@ export class EncuestaService { return this.http.delete(`${this.resourceUrl}/notify/${encuesta.id}`, { observe: 'response' }); } + sendCorreoInvitacion(correo: string) {} + addEncuestaToCollectionIfMissing(encuestaCollection: IEncuesta[], ...encuestasToCheck: (IEncuesta | null | undefined)[]): IEncuesta[] { const encuestas: IEncuesta[] = encuestasToCheck.filter(isPresent); if (encuestas.length > 0) { 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 e756162..4cbb60b 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 @@ -16,7 +16,7 @@
-
+
@@ -443,7 +443,7 @@ - +
ID Rol Estado Fecha AgregadoUsuario ExtraEncuestaId encuestaNombre encuesta
- {{ usuarioEncuesta.id }} - {{ usuarioEncuesta.rol }} {{ usuarioEncuesta.estado }} {{ usuarioEncuesta.fechaAgregado | formatMediumDatetime }} - -
+
- - - diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts index dfcef9d..7dddd89 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts @@ -5,16 +5,37 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { IUsuarioEncuesta } from '../usuario-encuesta.model'; import { UsuarioEncuestaService } from '../service/usuario-encuesta.service'; import { UsuarioEncuestaDeleteDialogComponent } from '../delete/usuario-encuesta-delete-dialog.component'; +import * as dayjs from 'dayjs'; +import { faPollH, faPencilAlt } from '@fortawesome/free-solid-svg-icons'; + +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/auth/account.model'; +import { IUsuarioExtra, UsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model'; +import { IUser } from '../../user/user.model'; +import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service'; +import { ActivatedRoute, Router } from '@angular/router'; @Component({ selector: 'jhi-usuario-encuesta', templateUrl: './usuario-encuesta.component.html', }) export class UsuarioEncuestaComponent implements OnInit { + faPollH = faPollH; + faPencilAlt = faPencilAlt; + usuarioEncuestas?: IUsuarioEncuesta[]; isLoading = false; + usuarioExtra: IUsuarioExtra | null = null; + user: IUser | null = null; - constructor(protected usuarioEncuestaService: UsuarioEncuestaService, protected modalService: NgbModal) {} + constructor( + protected usuarioEncuestaService: UsuarioEncuestaService, + protected modalService: NgbModal, + protected usuarioExtraService: UsuarioExtraService, + protected activatedRoute: ActivatedRoute, + protected accountService: AccountService, + protected router: Router + ) {} loadAll(): void { this.isLoading = true; @@ -22,7 +43,11 @@ export class UsuarioEncuestaComponent implements OnInit { this.usuarioEncuestaService.query().subscribe( (res: HttpResponse) => { this.isLoading = false; - this.usuarioEncuestas = res.body ?? []; + const tempUsuarioEncuestas = res.body ?? []; + this.usuarioEncuestas = tempUsuarioEncuestas + .filter(c => c.usuarioExtra?.id === this.usuarioExtra?.id) + .filter(c => c.estado === 'ACTIVE') + .filter(c => c.encuesta?.estado !== 'DELETED'); }, () => { this.isLoading = false; @@ -31,7 +56,20 @@ export class UsuarioEncuestaComponent implements OnInit { } ngOnInit(): void { - this.loadAll(); + this.accountService.getAuthenticationState().subscribe(account => { + if (account !== null) { + this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + this.loadAll(); + if (this.usuarioExtra !== null) { + if (this.usuarioExtra.id === undefined) { + const today = dayjs().startOf('day'); + this.usuarioExtra.fechaNacimiento = today; + } + } + }); + } + }); } trackId(index: number, item: IUsuarioEncuesta): number { diff --git a/src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing.module.ts b/src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing.module.ts index 32ab08b..2324ea6 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing.module.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/route/usuario-encuesta-routing.module.ts @@ -6,6 +6,9 @@ import { UsuarioEncuestaComponent } from '../list/usuario-encuesta.component'; import { UsuarioEncuestaDetailComponent } from '../detail/usuario-encuesta-detail.component'; import { UsuarioEncuestaUpdateComponent } from '../update/usuario-encuesta-update.component'; import { UsuarioEncuestaRoutingResolveService } from './usuario-encuesta-routing-resolve.service'; +import { EncuestaDetailComponent } from '../../encuesta/detail/encuesta-detail.component'; +import { EncuestaUpdateComponent } from '../../encuesta/update/encuesta-update.component'; +import { EncuestaRoutingResolveService } from '../../encuesta/route/encuesta-routing-resolve.service'; const usuarioEncuestaRoute: Routes = [ { @@ -37,6 +40,22 @@ const usuarioEncuestaRoute: Routes = [ }, canActivate: [UserRouteAccessService], }, + { + path: '/encuesta/:id/preview', + component: EncuestaDetailComponent, + resolve: { + usuarioEncuesta: EncuestaRoutingResolveService, + }, + canActivate: [UserRouteAccessService], + }, + { + path: '/encuesta/:id/edit', + component: EncuestaUpdateComponent, + resolve: { + usuarioEncuesta: EncuestaRoutingResolveService, + }, + canActivate: [UserRouteAccessService], + }, ]; @NgModule({ diff --git a/src/main/webapp/i18n/es/usuarioEncuesta.json b/src/main/webapp/i18n/es/usuarioEncuesta.json index 3350969..e292b48 100644 --- a/src/main/webapp/i18n/es/usuarioEncuesta.json +++ b/src/main/webapp/i18n/es/usuarioEncuesta.json @@ -2,27 +2,27 @@ "dataSurveyApp": { "usuarioEncuesta": { "home": { - "title": "Usuario Encuestas", + "title": "Colaboraciones en Encuestas", "refreshListLabel": "Refrescar lista", - "createLabel": "Crear nuevo Usuario Encuesta", - "createOrEditLabel": "Crear o editar Usuario Encuesta", - "notFound": "Ningún Usuario Encuestas encontrado" + "createLabel": "Crear nuevo Colaborador", + "createOrEditLabel": "Crear o editar Colaboración", + "notFound": "Ninguna colaboración encontrada" }, - "created": "Un nuevo Usuario Encuesta ha sido creado con el identificador {{ param }}", - "updated": "Un Usuario Encuesta ha sido actualizado con el identificador {{ param }}", - "deleted": "Un Usuario Encuesta ha sido eliminado con el identificador {{ param }}", + "created": "Una nueva colaboración ha sido creada con el identificador {{ param }}", + "updated": "Una colaboración ha sido actualizada con el identificador {{ param }}", + "deleted": "Una colaboracióna ha sido eliminada con el identificador {{ param }}", "delete": { - "question": "¿Seguro que quiere eliminar Usuario Encuesta {{ id }}?" + "question": "¿Seguro que quiere eliminar la colaboración {{ id }}?" }, "detail": { - "title": "Usuario Encuesta" + "title": "Colaboración en encuesta" }, "id": "ID", "rol": "Rol", "estado": "Estado", "fechaAgregado": "Fecha Agregado", - "usuarioExtra": "Usuario Extra", - "encuesta": "Encuesta" + "usuarioExtra": "Usuario", + "encuesta": "Id de Encuesta" } } } From eb31ed41dd781a42e4c1550a5190967a77265235 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Tue, 27 Jul 2021 00:59:15 -0600 Subject: [PATCH 02/26] add filtrar colaboracion por estado --- .../list/usuario-encuesta.component.html | 16 ++++++++++++++-- ...ts => usuario-encuesta.component.tempSpec.ts} | 0 .../list/usuario-encuesta.component.ts | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-) rename src/main/webapp/app/entities/usuario-encuesta/list/{usuario-encuesta.component.spec.ts => usuario-encuesta.component.tempSpec.ts} (100%) diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html index e4371a7..338247c 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html @@ -13,7 +13,19 @@ - +
+
+
+
+ +
+
+
No usuarioEncuestas found
@@ -31,7 +43,7 @@
{{ usuarioEncuesta.rol }} {{ usuarioEncuesta.estado }} {{ usuarioEncuesta.fechaAgregado | formatMediumDatetime }}
{{ plantilla.nombre }} {{ plantilla.descripcion }}{{ plantilla.fechaCreacion | formatMediumDatetime }}{{ plantilla.fechaPublicacionTienda | formatMediumDatetime }}{{ plantilla.fechaPublicacionTienda | formatShortDatetime | titlecase }} {{ plantilla.estado }} {{ plantilla.precio }} - - {{ plantilla.categoria?.nombre }}
+ + + diff --git a/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts b/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts index 1c1e111..dc1f19f 100644 --- a/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts +++ b/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts @@ -1,11 +1,23 @@ import { Component, OnInit } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Observable } from 'rxjs'; +import { finalize, map } from 'rxjs/operators'; -import { IPlantilla } from '../plantilla.model'; +import { IPlantilla, Plantilla } from '../plantilla.model'; import { PlantillaService } from '../service/plantilla.service'; import { PlantillaDeleteDialogComponent } from '../delete/plantilla-delete-dialog.component'; +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/auth/account.model'; +import { FormBuilder, Validators } from '@angular/forms'; +import { EstadoPlantilla } from 'app/entities/enumerations/estado-plantilla.model'; +import { ICategoria } from 'app/entities/categoria/categoria.model'; +import { CategoriaService } from 'app/entities/categoria/service/categoria.service'; + +import * as dayjs from 'dayjs'; +import { DATE_TIME_FORMAT } from 'app/config/input.constants'; + @Component({ selector: 'jhi-plantilla', templateUrl: './plantilla.component.html', @@ -13,8 +25,27 @@ import { PlantillaDeleteDialogComponent } from '../delete/plantilla-delete-dialo export class PlantillaComponent implements OnInit { plantillas?: IPlantilla[]; isLoading = false; + isSaving = false; + createAnotherTemplate: Boolean = false; - constructor(protected plantillaService: PlantillaService, protected modalService: NgbModal) {} + account: Account | null = null; + categoriasSharedCollection: ICategoria[] = []; + + templateCreateForm = this.fb.group({ + id: [], + nombre: [null, [Validators.minLength(1), Validators.maxLength(50)]], + descripcion: [], + precio: [null, [Validators.required]], + categoria: [], + }); + + constructor( + protected plantillaService: PlantillaService, + protected modalService: NgbModal, + protected accountService: AccountService, + protected fb: FormBuilder, + protected categoriaService: CategoriaService + ) {} loadAll(): void { this.isLoading = true; @@ -32,6 +63,7 @@ export class PlantillaComponent implements OnInit { ngOnInit(): void { this.loadAll(); + this.loadRelationshipsOptions(); } trackId(_index: number, item: IPlantilla): number { @@ -48,4 +80,90 @@ export class PlantillaComponent implements OnInit { } }); } + + isAdmin(): boolean { + return this.accountService.hasAnyAuthority('ROLE_ADMIN'); + } + + isAuthenticated(): boolean { + return this.accountService.isAuthenticated(); + } + + resetCreateTemplateForm(): void { + this.templateCreateForm.reset(); + } + + createAnotherTemplateChange(event: any): void { + // ID: #crearPlantilla + this.createAnotherTemplate = event.target.checked; + } + + previousState(): void { + window.history.back(); + } + + save(): void { + this.isSaving = true; + const plantilla = this.createFromForm(); + if (plantilla.id !== undefined) { + this.subscribeToSaveResponse(this.plantillaService.update(plantilla)); + } else { + this.subscribeToSaveResponse(this.plantillaService.create(plantilla)); + } + } + + trackCategoriaById(index: number, item: ICategoria): number { + return item.id!; + } + + protected subscribeToSaveResponse(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalize())).subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); + } + + protected onSaveSuccess(): void { + this.templateCreateForm.reset(); + this.plantillas = []; + this.loadAll(); + if (!this.createAnotherTemplate) { + $('#cancelBtn').click(); + } + } + + protected onSaveError(): void { + // Api for inheritance. + } + + protected onSaveFinalize(): void { + this.isSaving = false; + } + + protected loadRelationshipsOptions(): void { + this.categoriaService + .query() + .pipe(map((res: HttpResponse) => res.body ?? [])) + .pipe( + map((categorias: ICategoria[]) => + this.categoriaService.addCategoriaToCollectionIfMissing(categorias, this.templateCreateForm.get('categoria')!.value) + ) + ) + .subscribe((categorias: ICategoria[]) => (this.categoriasSharedCollection = categorias)); + } + + protected createFromForm(): IPlantilla { + const now = dayjs(); + + return { + ...new Plantilla(), + id: undefined, + nombre: this.templateCreateForm.get(['nombre'])!.value, + descripcion: this.templateCreateForm.get(['descripcion'])!.value, + fechaCreacion: dayjs(now, DATE_TIME_FORMAT), + estado: EstadoPlantilla.DRAFT, + precio: this.templateCreateForm.get(['precio'])!.value, + categoria: this.templateCreateForm.get(['categoria'])!.value, + }; + } } From a9f2e0b2a37719b3dd6c7c86249b91996b5f5e2d Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sat, 31 Jul 2021 21:57:36 -0600 Subject: [PATCH 09/26] cambiar nombre id en html de eliminar colaborador dialog --- ...a-delete-colaborator-dialog.component.html | 3 +-- ...elete-colaborator-dialog.component.spec.ts | 24 ------------------- 2 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.spec.ts diff --git a/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.html b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.html index d257e70..4cd121f 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.html +++ b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.html @@ -1,10 +1,9 @@
Nombre DescripcionFecha Creacion Fecha Publicacion Tienda Estado Precio{{ plantilla.nombre }} {{ plantilla.descripcion }} {{ plantilla.fechaPublicacionTienda | formatShortDatetime | titlecase }}{{ plantilla.fechaPublicacionTienda | formatShortDatetime | titlecase }}No establecida {{ plantilla.estado }}{{ plantilla.precio }}{{ plantilla.precio | currency: 'USD':'symbol-narrow' }} {{ plantilla.categoria?.nombre }}
@@ -70,7 +71,6 @@ class="ds-btn ds-btn--primary btn-sm" data-cy="entityEditButton" > - Edit @@ -188,9 +188,9 @@
- +
{{ usuarioEncuesta.rol }} {{ usuarioEncuesta.estado }}{{ usuarioEncuesta.fechaAgregado | formatMediumDatetime }}{{ usuarioEncuesta.fechaAgregado | formatShortDatetime | titlecase }}
-
+ + + + + + + + + + + + + +
+ + + + +
+
+ +
+ + + + +
+
+

¡Hola!

+

+ Your JHipster account has been created, please click on the URL below to activate it: +

+

+ Ir a Colaboraciones +

+
+
+

+ Regards, +
+ JHipster. +

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

DataSurvey.org

+
+
+ + + 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 af657c8..0862ab5 100644 --- a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts +++ b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts @@ -100,7 +100,9 @@ export class EncuestaService { return this.http.delete(`${this.resourceUrl}/notify/${encuesta.id}`, { observe: 'response' }); } - sendCorreoInvitacion(correo: string) {} + /*sendCorreoInvitacion(correo: string) { + return this.http.post(`${this.resourceUrl}/notify/${encuesta.id}`, { observe: 'response' }); + }*/ addEncuestaToCollectionIfMissing(encuestaCollection: IEncuesta[], ...encuestasToCheck: (IEncuesta | null | undefined)[]): IEncuesta[] { const encuestas: IEncuesta[] = encuestasToCheck.filter(isPresent); 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 4cbb60b..0d96f93 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 @@ -16,7 +16,7 @@
-
+
@@ -519,18 +519,11 @@

Correo electrónico

- +
- 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 2bb6124..e1cbd3c 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 @@ -635,7 +635,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { protected createFromFormCollab(): UsuarioEncuesta { return { id: undefined, - rol: this.editFormAddCollab.get(['rol_add'])!.value, + rol: this.editFormAddCollab.get(['rol'])!.value, }; } @@ -662,22 +662,23 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { saveAddCollab(): void { this.isSavingCollab = true; const collab = this.createFromFormCollab(); - let correoCollab = this.editFormAddCollab.get('email_collab')!.value; + let correoCollab = this.editFormAddCollab.get('email')!.value; - this.usuarioExtraService + this.userService .retrieveAllPublicUsers() .pipe( finalize(() => { if (this.userPublicCollab?.id !== undefined) { this.usuarioExtraService.find(this.userPublicCollab?.id).subscribe(res => { this.usuarioExtraCollab = res.body; - collab.fechaAgregado = dayjs(new Date(), DATE_TIME_FORMAT); + let now = new Date(); + collab.fechaAgregado = dayjs(now); collab.usuarioExtra = this.usuarioExtraCollab; collab.estado = EstadoColaborador.PENDING; collab.encuesta = this.encuesta; let id = 0; this.subscribeToSaveResponseUpdateCollab(this.usuarioEncuestaService.create(collab)); - this.sendInvitation(correoCollab); + // this.sendInvitation(correoCollab); }); } else { this.userCollabNotExist = true; @@ -732,7 +733,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { return this.usuarioExtra?.id == this.encuesta?.usuarioExtra?.id; } - sendInvitation(correo: string) { - this.encuestaService.sendCorreoInvitacion(correo); - } + /*sendInvitation(Colla) { + this.usuarioEncuestaService.sendCorreoInvitacion(correo); + }*/ } diff --git a/src/main/webapp/app/entities/user/user.service.ts b/src/main/webapp/app/entities/user/user.service.ts index 9d4571a..80d9ccb 100644 --- a/src/main/webapp/app/entities/user/user.service.ts +++ b/src/main/webapp/app/entities/user/user.service.ts @@ -22,6 +22,10 @@ export class UserService { return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); } + retrieveAllPublicUsers(): Observable { + return this.http.get(this.resourceUrl); + } + addUserToCollectionIfMissing(userCollection: IUser[], ...usersToCheck: (IUser | null | undefined)[]): IUser[] { const users: IUser[] = usersToCheck.filter(isPresent); if (users.length > 0) { diff --git a/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts index dd7aee7..c917c31 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts @@ -68,6 +68,10 @@ export class UsuarioEncuestaService { return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); } + sendCorreoInvitacion(colaborator: IUsuarioEncuesta) { + return this.http.post(`${this.resourceUrl}/notify/${colaborator.id}`, { body: colaborator, observe: 'response' }); + } + addUsuarioEncuestaToCollectionIfMissing( usuarioEncuestaCollection: IUsuarioEncuesta[], ...usuarioEncuestasToCheck: (IUsuarioEncuesta | null | undefined)[] From e1d11a5beaddc51d70fd60bc56489417e4a67914 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sun, 1 Aug 2021 16:04:33 -0600 Subject: [PATCH 19/26] add filtro por estado --- .../list/usuario-encuesta.component.html | 21 +++++++++++-------- .../list/usuario-encuesta.component.ts | 4 +++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html index 338247c..75dce09 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html @@ -23,6 +23,12 @@ +
@@ -37,24 +43,21 @@ Rol Estado Fecha Agregado - Id encuesta - Nombre encuesta + Encuesta - + {{ usuarioEncuesta.rol }} {{ usuarioEncuesta.estado }} {{ usuarioEncuesta.fechaAgregado | formatMediumDatetime }}
- {{ usuarioEncuesta.encuesta?.id }} -
- - -
- {{ usuarioEncuesta.encuesta?.nombre }} + {{ usuarioEncuesta.encuesta?.nombre }} (#{{ usuarioEncuesta.encuesta?.id }})
diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts index 29666ce..d31dfc6 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.ts @@ -29,6 +29,7 @@ export class UsuarioEncuestaComponent implements OnInit { user: IUser | null = null; public searchRol: string; + public searchEstado: string; constructor( protected usuarioEncuestaService: UsuarioEncuestaService, @@ -39,6 +40,7 @@ export class UsuarioEncuestaComponent implements OnInit { protected router: Router ) { this.searchRol = ''; + this.searchEstado = ''; } loadAll(): void { @@ -50,7 +52,6 @@ export class UsuarioEncuestaComponent implements OnInit { const tempUsuarioEncuestas = res.body ?? []; this.usuarioEncuestas = tempUsuarioEncuestas .filter(c => c.usuarioExtra?.id === this.usuarioExtra?.id) - .filter(c => c.estado === 'ACTIVE') .filter(c => c.encuesta?.estado !== 'DELETED'); }, () => { @@ -61,6 +62,7 @@ export class UsuarioEncuestaComponent implements OnInit { ngOnInit(): void { this.searchRol = ''; + this.searchEstado = ''; this.accountService.getAuthenticationState().subscribe(account => { if (account !== null) { this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { From 085d5a16a6f0eb0a08fdf98b9fb5efbce997cff5 Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Sun, 1 Aug 2021 16:18:53 -0600 Subject: [PATCH 20/26] Add publish and delete survey template to/from the store --- ...antilla-delete-store-dialog.component.html | 24 +++++++++++++++++ ...plantilla-delete-store-dialog.component.ts | 17 ++++++++++++ ...ntilla-publish-store-dialog.component.html | 24 +++++++++++++++++ ...lantilla-publish-store-dialog.component.ts | 20 ++++++++++++++ .../entities/plantilla/plantilla.module.ts | 4 +++ .../update/plantilla-update.component.html | 20 ++++++++++++++ .../update/plantilla-update.component.ts | 26 ++++++++++++++++++- src/main/webapp/i18n/es/estadoPlantilla.json | 2 +- src/main/webapp/i18n/es/plantilla.json | 6 ++++- 9 files changed, 140 insertions(+), 3 deletions(-) create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.html create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.ts create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.html create mode 100644 src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.ts diff --git a/src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.html b/src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.html new file mode 100644 index 0000000..c63b3d2 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.html @@ -0,0 +1,24 @@ +
+ + + + + +
diff --git a/src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.ts b/src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.ts new file mode 100644 index 0000000..d748b4b --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-delete-store-dialog/plantilla-delete-store-dialog.component.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + templateUrl: './plantilla-delete-store-dialog.component.html', +}) +export class PlantillaDeleteStoreDialogComponent { + constructor(protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmDeleteFromStore(): void { + this.activeModal.close('confirm'); + } +} diff --git a/src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.html b/src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.html new file mode 100644 index 0000000..2a7685d --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.html @@ -0,0 +1,24 @@ +
+ + + + + +
diff --git a/src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.ts b/src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.ts new file mode 100644 index 0000000..070568f --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-publish-store-dialog/plantilla-publish-store-dialog.component.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { faStore } from '@fortawesome/free-solid-svg-icons'; + +@Component({ + templateUrl: './plantilla-publish-store-dialog.component.html', +}) +export class PlantillaPublishStoreDialogComponent { + faStore = faStore; + + constructor(protected activeModal: NgbActiveModal) {} + + cancel(): void { + this.activeModal.dismiss(); + } + + confirmPublishToStore(): void { + this.activeModal.close('confirm'); + } +} diff --git a/src/main/webapp/app/entities/plantilla/plantilla.module.ts b/src/main/webapp/app/entities/plantilla/plantilla.module.ts index f4d2e54..602dba7 100644 --- a/src/main/webapp/app/entities/plantilla/plantilla.module.ts +++ b/src/main/webapp/app/entities/plantilla/plantilla.module.ts @@ -8,6 +8,8 @@ import { PlantillaRoutingModule } from './route/plantilla-routing.module'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { PlantillaDeleteQuestionDialogComponent } from './plantilla-delete-question-dialog/plantilla-delete-question-dialog.component'; import { PlantillaDeleteOptionDialogComponent } from './plantilla-delete-option-dialog/plantilla-delete-option-dialog.component'; +import { PlantillaPublishStoreDialogComponent } from './plantilla-publish-store-dialog/plantilla-publish-store-dialog.component'; +import { PlantillaDeleteStoreDialogComponent } from './plantilla-delete-store-dialog/plantilla-delete-store-dialog.component'; @NgModule({ imports: [SharedModule, PlantillaRoutingModule, FontAwesomeModule], @@ -18,6 +20,8 @@ import { PlantillaDeleteOptionDialogComponent } from './plantilla-delete-option- PlantillaDeleteDialogComponent, PlantillaDeleteQuestionDialogComponent, PlantillaDeleteOptionDialogComponent, + PlantillaPublishStoreDialogComponent, + PlantillaDeleteStoreDialogComponent, ], entryComponents: [PlantillaDeleteDialogComponent], }) diff --git a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html index 117d224..8f4999e 100644 --- a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html +++ b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.html @@ -26,6 +26,26 @@ >   Crear pregunta + + + +
diff --git a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts index 6a380e8..3ccf1f5 100644 --- a/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts +++ b/src/main/webapp/app/entities/plantilla/update/plantilla-update.component.ts @@ -25,7 +25,7 @@ import { IPPreguntaCerrada } from 'app/entities/p-pregunta-cerrada/p-pregunta-ce import { PPreguntaCerradaService } from 'app/entities/p-pregunta-cerrada/service/p-pregunta-cerrada.service'; import { PPreguntaCerradaDeleteDialogComponent } from 'app/entities/p-pregunta-cerrada/delete/p-pregunta-cerrada-delete-dialog.component'; -import { faTimes, faPlus, faQuestion, faPollH, faEye } from '@fortawesome/free-solid-svg-icons'; +import { faTimes, faPlus, faQuestion, faPollH, faEye, faStore } from '@fortawesome/free-solid-svg-icons'; import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; import { PlantillaDeleteQuestionDialogComponent } from '../plantilla-delete-question-dialog/plantilla-delete-question-dialog.component'; import { PlantillaDeleteOptionDialogComponent } from '../plantilla-delete-option-dialog/plantilla-delete-option-dialog.component'; @@ -33,6 +33,9 @@ import { PlantillaDeleteOptionDialogComponent } from '../plantilla-delete-option import { ParametroAplicacionService } from './../../parametro-aplicacion/service/parametro-aplicacion.service'; import { IParametroAplicacion } from './../../parametro-aplicacion/parametro-aplicacion.model'; import { Router } from '@angular/router'; +import { EstadoPlantilla } from 'app/entities/enumerations/estado-plantilla.model'; +import { PlantillaDeleteStoreDialogComponent } from '../plantilla-delete-store-dialog/plantilla-delete-store-dialog.component'; +import { PlantillaPublishStoreDialogComponent } from '../plantilla-publish-store-dialog/plantilla-publish-store-dialog.component'; @Component({ selector: 'jhi-plantilla-update', @@ -44,6 +47,7 @@ export class PlantillaUpdateComponent implements OnInit, AfterViewChecked { faPollH = faPollH; faQuestion = faQuestion; faEye = faEye; + faStore = faStore; isSaving = false; isSavingQuestion = false; @@ -449,4 +453,24 @@ export class PlantillaUpdateComponent implements OnInit, AfterViewChecked { trackUsuarioExtraById(index: number, item: IUsuarioExtra): number { return item.id!; } + + publishTemplateToStore(): void { + const modalRef = this.modalService.open(PlantillaPublishStoreDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.closed.subscribe(reason => { + if (reason === 'confirm') { + this.plantilla!.estado = EstadoPlantilla.ACTIVE; + this.plantillaService.update(this.plantilla!).subscribe(res => {}); + } + }); + } + + deleteTemplateFromStore(): void { + const modalRef = this.modalService.open(PlantillaDeleteStoreDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.closed.subscribe(reason => { + if (reason === 'confirm') { + this.plantilla!.estado = EstadoPlantilla.DRAFT; + this.plantillaService.update(this.plantilla!).subscribe(res => {}); + } + }); + } } diff --git a/src/main/webapp/i18n/es/estadoPlantilla.json b/src/main/webapp/i18n/es/estadoPlantilla.json index a574065..ac690aa 100644 --- a/src/main/webapp/i18n/es/estadoPlantilla.json +++ b/src/main/webapp/i18n/es/estadoPlantilla.json @@ -3,7 +3,7 @@ "EstadoPlantilla": { "null": "", "DRAFT": "Borrador", - "ACTIVE": "Activa", + "ACTIVE": "En tienda", "DELETED": "Eliminada", "DISABLED": "Desactivada" } diff --git a/src/main/webapp/i18n/es/plantilla.json b/src/main/webapp/i18n/es/plantilla.json index 7a0d31d..6ec8675 100644 --- a/src/main/webapp/i18n/es/plantilla.json +++ b/src/main/webapp/i18n/es/plantilla.json @@ -12,7 +12,11 @@ "updated": "Una plantilla ha sido actualizada con el identificador {{ param }}", "deleted": "Una plantilla ha sido eliminada con el identificador {{ param }}", "delete": { - "question": "¿Seguro que quiere eliminar Plantilla {{ id }}?" + "question": "¿Seguro que quiere eliminar Plantilla {{ id }}?", + "deletefromstore": "¿Seguro que quiere eliminar esta plantilla de la tienda?" + }, + "publish": { + "store": "¿Seguro que quiere publicar esta plantilla a la tienda?" }, "detail": { "title": "Plantilla" From 391c4fcb2963e5c9221f9d6988ae65694b321100 Mon Sep 17 00:00:00 2001 From: Mariela Bonilla Date: Sun, 1 Aug 2021 18:13:17 -0600 Subject: [PATCH 21/26] add agregar colaborador completo --- .../org/datasurvey/service/MailService.java | 11 + .../web/rest/UsuarioEncuestaResource.java | 6 +- src/main/resources/i18n/messages.properties | 10 +- .../mail/deleteColaboratorEmail.html | 322 ++++++++++++++++++ .../update/encuesta-update.component.html | 48 ++- .../update/encuesta-update.component.ts | 44 ++- .../list/usuario-encuesta.component.html | 10 + .../list/usuario-encuesta.component.ts | 37 +- src/main/webapp/i18n/es/usuarioEncuesta.json | 4 +- 9 files changed, 467 insertions(+), 25 deletions(-) create mode 100644 src/main/resources/templates/mail/deleteColaboratorEmail.html diff --git a/src/main/java/org/datasurvey/service/MailService.java b/src/main/java/org/datasurvey/service/MailService.java index 85e1f77..13b50b3 100644 --- a/src/main/java/org/datasurvey/service/MailService.java +++ b/src/main/java/org/datasurvey/service/MailService.java @@ -192,4 +192,15 @@ public class MailService { "email.invitation.title" ); } + + @Async + public void sendNotifyDeleteColaborator(UsuarioEncuesta user) { + log.debug("Sending delete collaboration notification mail to '{}'", user.getUsuarioExtra().getUser().getEmail()); + sendEmailFromTemplateUsuarioEncuesta( + user.getUsuarioExtra().getUser(), + user, + "mail/deleteColaboratorEmail", + "email.deleteColaborator.title" + ); + } } diff --git a/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java b/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java index 030f40c..f440cd7 100644 --- a/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java +++ b/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java @@ -205,7 +205,11 @@ public class UsuarioEncuestaResource { @DeleteMapping("/usuario-encuestas/{id}") public ResponseEntity deleteUsuarioEncuesta(@PathVariable Long id) { log.debug("REST request to delete UsuarioEncuesta : {}", id); + Optional usuarioEncuesta = usuarioEncuestaService.findOne(id); usuarioEncuestaService.delete(id); + if (usuarioEncuesta != null) { + mailService.sendNotifyDeleteColaborator(usuarioEncuesta.get()); + } return ResponseEntity .noContent() .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, id.toString())) @@ -232,7 +236,7 @@ public class UsuarioEncuestaResource { } @PostMapping("/usuario-encuestas/notify/{id}") - public ResponseEntity notifyEncuestaDeleted(@PathVariable Long id, @Valid @RequestBody UsuarioEncuesta usuarioEncuesta) { + public ResponseEntity notifyInvitationColaborator(@PathVariable Long id, @Valid @RequestBody UsuarioEncuesta usuarioEncuesta) { log.debug("REST request to notify {} of invitation to Encuesta", usuarioEncuesta.getUsuarioExtra().getUser().getEmail()); mailService.sendInvitationColaborator(usuarioEncuesta); return ResponseEntity.noContent().build(); diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index e86ee22..e3392c0 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -48,7 +48,7 @@ email.public.text2=Saludos, #PrivateEncuesta email.private.title=Su encuesta ha sido publicada de manera privada -email.private.greeting=�Felicidades {0}! +email.private.greeting=¡Felicidades {0}! email.private.text1=Su encuesta ha sdo publicada de manera privada. Su contraseña de acceso es: {0} email.private.text2=Saludos, @@ -56,5 +56,11 @@ email.private.text2=Saludos, #Invitation Colaborator email.invitation.title=Se le ha invitado a colaborar en una encuesta email.invitation.greeting=¡Nueva invitacion, {0}! -email.invitation.text1=Fue invitado a la encuesta {0}(#{1}). Para aceptar la solicitud de colaborador, ingrese al área de colaboraciones.". +email.invitation.text1=Fue invitado a la encuesta "{0}(#{1})". Para aceptar la solicitud de colaborador, ingrese al área de colaboraciones. email.invitation.text2=Saludos, + +#Delete Colaborator +email.deleteColaborator.title=Se le ha expulsado de una encuesta como colaborador +email.deleteColaborator.greeting=¡Se le ha expulsado, {0}! +email.deleteColaborator.text1=Fue expulsado de la encuesta {0}(#{1})". +email.deleteColaborator.text2=Saludos, diff --git a/src/main/resources/templates/mail/deleteColaboratorEmail.html b/src/main/resources/templates/mail/deleteColaboratorEmail.html new file mode 100644 index 0000000..9f9104f --- /dev/null +++ b/src/main/resources/templates/mail/deleteColaboratorEmail.html @@ -0,0 +1,322 @@ + + + + + + + + + + + JHipster activation + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + 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 b882e9a..fb4f56a 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 @@ -518,21 +518,59 @@ 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 5ca6a19..c66ba09 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 @@ -38,11 +38,7 @@ import { IUsuarioEncuesta, UsuarioEncuesta } from '../../usuario-encuesta/usuari import { RolColaborador } from '../../enumerations/rol-colaborador.model'; import { Account } from '../../../core/auth/account.model'; import { AccountService } from 'app/core/auth/account.service'; - -import { EncuestaPublishDialogComponent } from '../encuesta-publish-dialog/encuesta-publish-dialog.component'; import { EncuestaFinalizarDialogComponent } from '../encuesta-finalizar-dialog/encuesta-finalizar-dialog.component'; - -import { EncuestaDeleteDialogComponent } from '../delete/encuesta-delete-dialog.component'; import { EncuestaDeleteColaboratorDialogComponent } from '../encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component'; import { IUser } from '../../user/user.model'; @@ -64,6 +60,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { isSaving = false; isSavingQuestion = false; isSavingCollab = false; + isSavingAddCollab = false; finalizada = false; public rolSeleccionado: RolColaborador | undefined = undefined; categoriasSharedCollection: ICategoria[] = []; @@ -109,9 +106,10 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { editFormUpdateCollab = this.fb.group({ rol: [null, [Validators.required]], }); + editFormAddCollab = this.fb.group({ - email: [null, [Validators.required, Validators.email]], - rol: [null, [Validators.required]], + email_add: [null, [Validators.required, Validators.email]], + rol_add: [null, [Validators.required]], }); ePreguntas?: any[]; @@ -641,7 +639,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { protected createFromFormCollab(): UsuarioEncuesta { return { id: undefined, - rol: this.editFormAddCollab.get(['rol'])!.value, + rol: this.editFormAddCollab.get(['rol_add'])!.value, }; } @@ -666,9 +664,15 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { } saveAddCollab(): void { - this.isSavingCollab = true; + this.isSavingAddCollab = true; const collab = this.createFromFormCollab(); - let correoCollab = this.editFormAddCollab.get('email')!.value; + let rol = this.editFormAddCollab.get('rol_add')!.value; + if (rol === 'READ') { + collab.rol = RolColaborador.READ; + } else if (rol === 'WRITE') { + collab.rol = RolColaborador.WRITE; + } + let correoCollab = this.editFormAddCollab.get('email_add')!.value; this.userService .retrieveAllPublicUsers() @@ -683,8 +687,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { collab.estado = EstadoColaborador.PENDING; collab.encuesta = this.encuesta; let id = 0; - this.subscribeToSaveResponseUpdateCollab(this.usuarioEncuestaService.create(collab)); - // this.sendInvitation(correoCollab); + this.subscribeToSaveResponseAddCollab(this.usuarioEncuestaService.create(collab)); }); } else { this.userCollabNotExist = true; @@ -720,6 +723,25 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { this.isSavingCollab = false; } + protected subscribeToSaveResponseAddCollab(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalizeAddCollab())).subscribe( + () => this.onSaveSuccessAddCollab(), + () => this.onSaveErrorAddCollab() + ); + } + + protected onSaveSuccessAddCollab(): void { + this.loadAll(); + $('#btnCancelAddColaboradores').click(); + } + + protected onSaveErrorAddCollab(): void { + // Api for inheritance. + } + + protected onSaveFinalizeAddCollab(): void { + this.isSavingAddCollab = false; + } deleteCollab(collab: IUsuarioEncuesta) { //$('#btnCancelUbdateColaboradores').click(); //setTimeout(() => { diff --git a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html index 6359d32..3d47290 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html +++ b/src/main/webapp/app/entities/usuario-encuesta/list/usuario-encuesta.component.html @@ -64,6 +64,7 @@
+
diff --git a/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts b/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts index dc1f19f..9145186 100644 --- a/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts +++ b/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts @@ -33,10 +33,10 @@ export class PlantillaComponent implements OnInit { templateCreateForm = this.fb.group({ id: [], - nombre: [null, [Validators.minLength(1), Validators.maxLength(50)]], - descripcion: [], - precio: [null, [Validators.required]], - categoria: [], + nombre: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], + descripcion: [[Validators.required]], + precio: [null, [Validators.required, Validators.min(0)]], + categoria: [null, [Validators.required]], }); constructor( diff --git a/src/main/webapp/i18n/es/global.json b/src/main/webapp/i18n/es/global.json index 42d43b3..02866f3 100644 --- a/src/main/webapp/i18n/es/global.json +++ b/src/main/webapp/i18n/es/global.json @@ -151,7 +151,8 @@ "pattern": "Este campo debe seguir el patrón {{pattern}}.", "number": "Este campo debe ser un número.", "integerNumber": "Este campo debe ser un número entero.", - "datetimelocal": "Este campo debe ser una fecha y hora." + "datetimelocal": "Este campo debe ser una fecha y hora.", + "minoigual": "Este campo debe ser mayor o igual que 0." }, "publish": { "title": "Publicar encuesta", From a503db206a795889c0a2199756f27d9c59315e23 Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Sun, 1 Aug 2021 21:21:49 -0600 Subject: [PATCH 25/26] Add preview of survey templates --- .../detail/encuesta-detail.component.html | 11 +- .../detail/plantilla-detail.component.html | 128 +++++++++------- .../detail/plantilla-detail.component.ts | 137 +++++++++++++++++- .../paper-dashboard/_datasurvey-survey.scss | 2 +- 4 files changed, 219 insertions(+), 59 deletions(-) diff --git a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html index 4ab20a7..81681aa 100644 --- a/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html +++ b/src/main/webapp/app/entities/encuesta/detail/encuesta-detail.component.html @@ -27,12 +27,13 @@ -
- No se encontraron preguntas -
- -
+
+ +

Encuesta vacía

+

Inicie creando preguntas y opciones para su encuesta.

+
+
-
-
-

Plantilla

+
+
+

+
+

Vista previa de {{ plantilla!.nombre }}

+
-
+

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

+
+ +
+

- + - + -
-
ID
-
- {{ plantilla.id }} -
-
Nombre
-
- {{ plantilla.nombre }} -
-
Descripcion
-
- {{ plantilla.descripcion }} -
-
Fecha Creacion
-
- {{ plantilla.fechaCreacion | formatMediumDatetime }} -
-
Fecha Publicacion Tienda
-
- {{ plantilla.fechaPublicacionTienda | formatMediumDatetime }} -
-
Estado
-
- {{ plantilla.estado }} -
-
Precio
-
- {{ plantilla.precio }} -
-
Categoria
-
-
- {{ plantilla.categoria?.nombre }} +
+
+ +

Plantilla vacía

+

Inicie creando preguntas y opciones para su plantilla.

+
+ +
+
+
+ {{ i + 1 }}. {{ pPregunta.nombre }} +
+
+ Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.SINGLE' | translate | lowercase }} + {{ pPregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta {{ 'dataSurveyApp.PreguntaCerradaTipo.MULTIPLE' | translate | lowercase }} + {{ pPregunta.opcional ? '(opcional)' : '' }} + Pregunta de respuesta abierta {{ pPregunta.opcional ? '(opcional)' : '' }} +
+ + + + +
+
+ + + +
+
+ + + +
+
+
+
+
+
+
+ +
-
-
- - - - +
+
diff --git a/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.ts b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.ts index 4563a29..d15440a 100644 --- a/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.ts +++ b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.ts @@ -1,21 +1,152 @@ import { Component, OnInit } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; +import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; +import { EstadoPlantilla } from 'app/entities/enumerations/estado-plantilla.model'; -import { IPlantilla } from '../plantilla.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 { IPlantilla, Plantilla } from '../plantilla.model'; +import { PlantillaService } from '../service/plantilla.service'; +import { ICategoria } from 'app/entities/categoria/categoria.model'; +import { CategoriaService } from 'app/entities/categoria/service/categoria.service'; +import { IUsuarioExtra, UsuarioExtra } 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 { IPPreguntaCerrada } from 'app/entities/p-pregunta-cerrada/p-pregunta-cerrada.model'; +import { PPreguntaCerradaService } from 'app/entities/p-pregunta-cerrada/service/p-pregunta-cerrada.service'; +import { PPreguntaCerradaDeleteDialogComponent } from 'app/entities/p-pregunta-cerrada/delete/p-pregunta-cerrada-delete-dialog.component'; +import { IPPreguntaAbierta } from '../../p-pregunta-abierta/p-pregunta-abierta.model'; +import { PPreguntaCerrada } from '../../p-pregunta-cerrada/p-pregunta-cerrada.model'; +import { PPreguntaCerradaOpcion, IPPreguntaCerradaOpcion } from '../../p-pregunta-cerrada-opcion/p-pregunta-cerrada-opcion.model'; +import { PPreguntaAbiertaService } from '../../p-pregunta-abierta/service/p-pregunta-abierta.service'; +import { PPreguntaCerradaOpcionService } from '../../p-pregunta-cerrada-opcion/service/p-pregunta-cerrada-opcion.service'; +import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; + +import { faTimes, faPlus, faStar, faQuestion } from '@fortawesome/free-solid-svg-icons'; +import { Account } from '../../../core/auth/account.model'; +import { AccountService } from 'app/core/auth/account.service'; @Component({ selector: 'jhi-plantilla-detail', templateUrl: './plantilla-detail.component.html', }) export class PlantillaDetailComponent implements OnInit { + categoriasSharedCollection: ICategoria[] = []; + usuarioExtrasSharedCollection: IUsuarioExtra[] = []; + faTimes = faTimes; + faPlus = faPlus; + faStar = faStar; + faQuestion = faQuestion; plantilla: IPlantilla | null = null; + isLoading = false; + successPublished = false; + pPreguntas?: any[]; + pPreguntasOpciones?: any[]; + usuarioExtra: UsuarioExtra | null = null; - constructor(protected activatedRoute: ActivatedRoute) {} + constructor( + protected activatedRoute: ActivatedRoute, + protected plantillaService: PlantillaService, + protected categoriaService: CategoriaService, + protected usuarioExtraService: UsuarioExtraService, + protected fb: FormBuilder, + protected modalService: NgbModal, + protected pPreguntaCerradaService: PPreguntaCerradaService, + protected pPreguntaCerradaOpcionService: PPreguntaCerradaOpcionService, + protected pPreguntaAbiertaService: PPreguntaAbiertaService, + protected accountService: AccountService + ) {} ngOnInit(): void { this.activatedRoute.data.subscribe(({ plantilla }) => { - this.plantilla = plantilla; + if (plantilla) { + this.plantilla = plantilla; + this.loadAll(); + } else { + this.previousState(); + } }); + + // Get jhi_user and usuario_extra information + this.accountService.getAuthenticationState().subscribe(account => { + if (account !== null) { + this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + }); + } + }); + } + + ngAfterViewChecked(): void { + this.initListeners(); + } + + initListeners(): void { + const checkboxes = document.getElementsByClassName('ds-survey--checkbox'); + for (let i = 0; i < checkboxes.length; i++) { + checkboxes[i].addEventListener('click', e => { + if ((e.target as HTMLInputElement).checked) { + (e.target as HTMLElement).offsetParent!.classList.add('ds-survey--closed-option--active'); + } else { + (e.target as HTMLElement).offsetParent!.classList.remove('ds-survey--closed-option--active'); + } + }); + } + } + + trackId(index: number, item: IPPreguntaCerrada): number { + return item.id!; + } + + trackPPreguntaCerradaById(index: number, item: IPPreguntaCerrada): number { + return item.id!; + } + + trackCategoriaById(index: number, item: ICategoria): number { + return item.id!; + } + + trackUsuarioExtraById(index: number, item: IUsuarioExtra): number { + return item.id!; + } + + getPlantilla(id: number) { + return this.plantillaService.findPlantilla(id); + } + + loadAll(): void { + this.isLoading = true; + + this.plantillaService + .findQuestions(this.plantilla?.id!) + .pipe( + finalize(() => + this.plantillaService.findQuestionsOptions(this.plantilla?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.pPreguntasOpciones = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ) + ) + ) + .subscribe( + (res: any) => { + this.isLoading = false; + this.pPreguntas = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); } previousState(): void { diff --git a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey.scss b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey.scss index a4d72a9..53068db 100644 --- a/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey.scss +++ b/src/main/webapp/content/scss/paper-dashboard/_datasurvey-survey.scss @@ -14,7 +14,7 @@ } .preview-survey > div { padding: 20px 0; - border-bottom: 1px solid #ccc; + // border-bottom: 1px solid #ccc; } .preview-survey .radio label, .preview-survey .checkbox label { From 994daddd7c0227d5ee8a73b9aa44e6aae1a8acdc Mon Sep 17 00:00:00 2001 From: Pablo Bonilla Date: Sun, 1 Aug 2021 21:33:26 -0600 Subject: [PATCH 26/26] Remove test --- ...il.component.spec.ts => plantilla-detail.component.tmpSpec.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/app/entities/plantilla/detail/{plantilla-detail.component.spec.ts => plantilla-detail.component.tmpSpec.ts} (100%) diff --git a/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.spec.ts b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.tmpSpec.ts similarity index 100% rename from src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.spec.ts rename to src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.tmpSpec.ts