diff --git a/src/main/java/org/datasurvey/service/MailService.java b/src/main/java/org/datasurvey/service/MailService.java index cc47a7b..13b50b3 100644 --- a/src/main/java/org/datasurvey/service/MailService.java +++ b/src/main/java/org/datasurvey/service/MailService.java @@ -5,6 +5,7 @@ import java.util.Locale; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.datasurvey.domain.User; +import org.datasurvey.domain.UsuarioEncuesta; import org.datasurvey.domain.UsuarioExtra; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -111,6 +112,22 @@ public class MailService { sendEmail(user.getEmail(), subject, content, false, true); } + @Async + public void sendEmailFromTemplateUsuarioEncuesta(User user, UsuarioEncuesta usuarioEncuesta, String templateName, String titleKey) { + if (user.getEmail() == null) { + log.debug("Email doesn't exist for user '{}'", user.getLogin()); + return; + } + Locale locale = Locale.forLanguageTag(user.getLangKey()); + Context context = new Context(locale); + context.setVariable(USER, user); + context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl()); + context.setVariable("colaborador", usuarioEncuesta); + String content = templateEngine.process(templateName, context); + String subject = messageSource.getMessage(titleKey, null, locale); + sendEmail(user.getEmail(), subject, content, false, true); + } + @Async public void sendActivationEmail(User user) { log.debug("Sending activation email to '{}'", user.getEmail()); @@ -164,4 +181,26 @@ public class MailService { log.debug("Sending encuesta deletion notification mail to '{}'", user.getUser().getEmail()); sendEmailFromTemplate(user.getUser(), "mail/encuestaDeletedEmail", "email.encuestaDeleted.title"); } + + @Async + public void sendInvitationColaborator(UsuarioEncuesta user) { + log.debug("Sending encuesta invitation collaboration notification mail to '{}'", user.getUsuarioExtra().getUser().getEmail()); + sendEmailFromTemplateUsuarioEncuesta( + user.getUsuarioExtra().getUser(), + user, + "mail/invitationColaboratorEmail", + "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/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/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java b/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java index 4707ba0..f440cd7 100644 --- a/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java +++ b/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java @@ -9,13 +9,11 @@ import java.util.Optional; import java.util.stream.Collectors; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import org.datasurvey.domain.Encuesta; import org.datasurvey.domain.UsuarioEncuesta; import org.datasurvey.domain.UsuarioExtra; import org.datasurvey.repository.UsuarioEncuestaRepository; -import org.datasurvey.service.EncuestaService; -import org.datasurvey.service.UsuarioEncuestaQueryService; -import org.datasurvey.service.UsuarioEncuestaService; -import org.datasurvey.service.UsuarioExtraService; +import org.datasurvey.service.*; import org.datasurvey.service.criteria.UsuarioEncuestaCriteria; import org.datasurvey.web.rest.errors.BadRequestAlertException; import org.slf4j.Logger; @@ -48,18 +46,22 @@ public class UsuarioEncuestaResource { private final UsuarioEncuestaQueryService usuarioEncuestaQueryService; + private final MailService mailService; + public UsuarioEncuestaResource( UsuarioEncuestaService usuarioEncuestaService, UsuarioEncuestaRepository usuarioEncuestaRepository, UsuarioEncuestaQueryService usuarioEncuestaQueryService, UsuarioExtraService usuarioExtraService, - EncuestaService encuestaService + EncuestaService encuestaService, + MailService mailService ) { this.usuarioEncuestaService = usuarioEncuestaService; this.usuarioEncuestaRepository = usuarioEncuestaRepository; this.usuarioEncuestaQueryService = usuarioEncuestaQueryService; this.usuarioExtraService = usuarioExtraService; this.encuestaService = encuestaService; + this.mailService = mailService; } /** @@ -77,6 +79,9 @@ public class UsuarioEncuestaResource { throw new BadRequestAlertException("A new usuarioEncuesta cannot already have an ID", ENTITY_NAME, "idexists"); } UsuarioEncuesta result = usuarioEncuestaService.save(usuarioEncuesta); + if (result.getId() != null) { + mailService.sendInvitationColaborator(usuarioEncuesta); + } return ResponseEntity .created(new URI("/api/usuario-encuestas/" + result.getId())) .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString())) @@ -200,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())) @@ -225,4 +234,11 @@ public class UsuarioEncuestaResource { } return ResponseEntity.ok().body(usuariosEncuestas); } + + @PostMapping("/usuario-encuestas/notify/{id}") + 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 6dfbafb..9e05ac2 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -42,13 +42,25 @@ email.suspended.text2=Saludos, #PublicEncuesta email.public.title=Su encuesta ha sido publicada -email.public.greeting=¡Felicidades {0}! +email.public.greeting=¡Felicidades {0}! email.public.text1=Su encuesta ha sido publicada de manera publica email.public.text2=Saludos, #PrivateEncuesta email.private.title=Su encuesta ha sido publicada de manera privada -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.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, + +#Invitation Colaborator +email.invitation.title=Se le ha invitado a colaborar en una encuesta +email.invitation.greeting=¡Nueva invitación, {0}! +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/resources/templates/mail/invitationColaboratorEmail.html b/src/main/resources/templates/mail/invitationColaboratorEmail.html new file mode 100644 index 0000000..3901b50 --- /dev/null +++ b/src/main/resources/templates/mail/invitationColaboratorEmail.html @@ -0,0 +1,322 @@ + + + + + + + + + + + JHipster activation + + + + + + + +
+
+ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌  +
+ +
+ + 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 db1881b..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 @@ -11,7 +11,7 @@ - + @@ -27,12 +27,13 @@ -
- No se encontraron preguntas -
- -
+
+ +

Encuesta vacía

+

Inicie creando preguntas y opciones para su encuesta.

+
+
{ + if (account !== null) { + this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => { + this.usuarioExtra = usuarioExtra.body; + }); + } + }); } ngAfterViewChecked(): void { @@ -145,6 +162,16 @@ export class EncuestaDetailComponent implements OnInit { this.isLoading = false; } );*/ + + this.usuarioEncuestaService.findCollaborators(this.encuesta?.id!).subscribe( + (res: any) => { + this.isLoading = false; + this.usuariosColaboradores = res.body ?? []; + }, + () => { + this.isLoading = false; + } + ); } publishSurvey(): void { const modalRef = this.modalService.open(EncuestaPublishDialogComponent, { size: 'lg', backdrop: 'static' }); @@ -161,4 +188,20 @@ export class EncuestaDetailComponent implements OnInit { previousState(): void { window.history.back(); } + + isAutor() { + return this.usuarioExtra?.id === this.encuesta?.usuarioExtra?.id; + } + + isEscritor() { + let escritor = false; + this.usuariosColaboradores.forEach(c => { + if (this.usuarioExtra?.id === c.usuarioExtra?.id) { + if (c.rol === 'WRITE') { + escritor = true; + } + } + }); + return escritor; + } } 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 new file mode 100644 index 0000000..4cd121f --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component.html @@ -0,0 +1,23 @@ +
+ + + +
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.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-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.tmpspec.ts b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.tmpspec.ts new file mode 100644 index 0000000..0ba7093 --- /dev/null +++ b/src/main/webapp/app/entities/encuesta/encuesta-finalizar-dialog/encuesta-finalizar-dialog.component.tmpspec.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 a6b7c04..7fceb36 100644 --- a/src/main/webapp/app/entities/encuesta/encuesta.module.ts +++ b/src/main/webapp/app/entities/encuesta/encuesta.module.ts @@ -10,8 +10,9 @@ 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 { ShareButtonsModule } from 'ngx-sharebuttons/buttons'; +import { EncuestaFinalizarDialogComponent } from './encuesta-finalizar-dialog/encuesta-finalizar-dialog.component'; +import { EncuestaDeleteColaboratorDialogComponent } from './encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component'; @NgModule({ imports: [SharedModule, EncuestaRoutingModule, FontAwesomeModule, ShareButtonsModule], @@ -24,6 +25,8 @@ import { ShareButtonsModule } from 'ngx-sharebuttons/buttons'; EncuestaDeleteQuestionDialogComponent, EncuestaDeleteOptionDialogComponent, EncuestaCompartirDialogComponent, + EncuestaFinalizarDialogComponent, + EncuestaDeleteColaboratorDialogComponent, ], 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..8e241c3 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 @@ -100,6 +102,10 @@ export class EncuestaService { return this.http.delete(`${this.resourceUrl}/notify/${encuesta.id}`, { observe: 'response' }); } + /*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); 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 0a45aa8..5f0a4d0 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,19 +13,27 @@ >   
-
+
-
+
-
+ +
{{ colaborador.usuarioExtra.nombre }}
@@ -34,6 +42,9 @@

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

+
@@ -100,7 +112,7 @@ > --> + + + + + + + + + + + + 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 21a171e..46f1618 100644 --- a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts +++ b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts @@ -1,23 +1,23 @@ import { EPreguntaAbierta, IEPreguntaAbierta } from './../../e-pregunta-abierta/e-pregunta-abierta.model'; import { EPreguntaCerrada } from './../../e-pregunta-cerrada/e-pregunta-cerrada.model'; -import { EPreguntaCerradaOpcion, IEPreguntaCerradaOpcion } from './../../e-pregunta-cerrada-opcion/e-pregunta-cerrada-opcion.model'; +import { IEPreguntaCerradaOpcion } from './../../e-pregunta-cerrada-opcion/e-pregunta-cerrada-opcion.model'; import { EPreguntaAbiertaService } from './../../e-pregunta-abierta/service/e-pregunta-abierta.service'; import { EPreguntaCerradaOpcionService } from './../../e-pregunta-cerrada-opcion/service/e-pregunta-cerrada-opcion.service'; import { AfterViewChecked, Component, OnInit } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; -import { finalize, map } from 'rxjs/operators'; +import { finalize } from 'rxjs/operators'; import * as dayjs from 'dayjs'; import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -import { IEncuesta, Encuesta } from '../encuesta.model'; +import { 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'; @@ -25,17 +25,26 @@ import { IEPreguntaCerrada } from 'app/entities/e-pregunta-cerrada/e-pregunta-ce import { EPreguntaCerradaService } from 'app/entities/e-pregunta-cerrada/service/e-pregunta-cerrada.service'; import { EPreguntaCerradaDeleteDialogComponent } from 'app/entities/e-pregunta-cerrada/delete/e-pregunta-cerrada-delete-dialog.component'; -import { faTimes, faPlus, faQuestion, faPollH, faEye } from '@fortawesome/free-solid-svg-icons'; +import { faEye, faPlus, faPollH, faQuestion, faTimes } from '@fortawesome/free-solid-svg-icons'; import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-tipo.model'; 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 { ParametroAplicacionService } from './../../parametro-aplicacion/service/parametro-aplicacion.service'; import { IParametroAplicacion } from './../../parametro-aplicacion/parametro-aplicacion.model'; -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 { IUsuarioEncuesta, UsuarioEncuesta } 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 { EncuestaFinalizarDialogComponent } from '../encuesta-finalizar-dialog/encuesta-finalizar-dialog.component'; +import { EncuestaDeleteColaboratorDialogComponent } from '../encuesta-delete-colaborator-dialog/encuesta-delete-colaborator-dialog.component'; +import { IUser } from '../../user/user.model'; + +import * as $ from 'jquery'; +import { UserService } from '../../user/user.service'; +import { EstadoColaborador } from '../../enumerations/estado-colaborador.model'; @Component({ selector: 'jhi-encuesta-update', @@ -50,10 +59,17 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { isSaving = false; isSavingQuestion = false; - + isSavingCollab = false; + isSavingAddCollab = false; + finalizada = false; + public rolSeleccionado: RolColaborador | undefined = undefined; categoriasSharedCollection: ICategoria[] = []; usuarioExtrasSharedCollection: IUsuarioExtra[] = []; usuariosColaboradores: IUsuarioEncuesta[] = []; + colaborador: IUsuarioEncuesta | null = null; + + account: Account | null = null; + usuarioExtra: UsuarioExtra | null = null; // editForm = this.fb.group({ // id: [], @@ -87,6 +103,15 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { tipopregunta: ['CLOSED'], }); + editFormUpdateCollab = this.fb.group({ + rol: [null, [Validators.required]], + }); + + editFormAddCollab = this.fb.group({ + email_add: [null, [Validators.required, Validators.email]], + rol_add: [null, [Validators.required]], + }); + ePreguntas?: any[]; ePreguntasOpciones?: any[]; encuesta: Encuesta | null = null; @@ -98,6 +123,11 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { createAnotherQuestion: Boolean = false; selectedQuestionToCreateOption: IEPreguntaCerrada | null = null; + userPublicCollab: IUser | null = null; + usuarioExtraCollab: UsuarioExtra | null = null; + userCollabNotExist: boolean = false; + userCollabIsCollab: boolean = false; + userCollabIsAutor: boolean = false; constructor( protected encuestaService: EncuestaService, protected categoriaService: CategoriaService, @@ -110,7 +140,9 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { protected parametroAplicacionService: ParametroAplicacionService, protected ePreguntaAbiertaService: EPreguntaAbiertaService, protected usuarioEncuestaService: UsuarioEncuestaService, - protected router: Router + protected router: Router, + protected accountService: AccountService, + protected userService: UserService ) {} loadAll(): void { @@ -170,6 +202,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 { @@ -595,4 +636,187 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { // usuarioExtra: this.editForm.get(['usuarioExtra'])!.value, // }; // } + + /* methods for colaborators*/ + protected createFromFormCollab(): UsuarioEncuesta { + return { + id: undefined, + rol: this.editFormAddCollab.get(['rol_add'])!.value, + }; + } + + selectColaborator(c: IUsuarioEncuesta) { + this.colaborador = c; + this.rolSeleccionado = c.rol; + } + + 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).subscribe( + res => {}, + (error) => {console.log(error)} + );*/ + + this.subscribeToSaveResponseUpdateCollab(this.usuarioEncuestaService.update(collab)); + } + } + + resetFormAddCollab(): void { + this.editFormAddCollab.reset(); + this.userPublicCollab = null; + } + + saveAddCollab(): void { + this.isSavingAddCollab = true; + this.userCollabIsAutor = false; + this.userCollabIsCollab = false; + this.userCollabNotExist = false; + + const collab = this.createFromFormCollab(); + 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() + .pipe( + finalize(() => { + if (this.userPublicCollab?.id !== undefined) { + if (correoCollab === this.usuarioExtra?.user?.login) { + this.userCollabIsAutor = true; + this.isSavingAddCollab = false; + } else if (this.validarUserIsCollab(correoCollab)) { + this.userCollabIsCollab = true; + this.isSavingAddCollab = false; + } else { + this.usuarioExtraService.find(this.userPublicCollab?.id).subscribe(res => { + this.usuarioExtraCollab = res.body; + let now = new Date(); + collab.fechaAgregado = dayjs(now); + collab.usuarioExtra = this.usuarioExtraCollab; + collab.estado = EstadoColaborador.PENDING; + collab.encuesta = this.encuesta; + let id = 0; + this.subscribeToSaveResponseAddCollab(this.usuarioEncuestaService.create(collab)); + }); + } + } else { + this.userCollabNotExist = true; + this.isSavingAddCollab = false; + } + this.resetFormAddCollab(); + }) + ) + .subscribe(res => { + res.forEach(user => { + if (user.login === correoCollab) { + this.userPublicCollab = user; + } + if (user.id === this.usuarioExtra?.id) { + // @ts-ignore + this.usuarioExtra?.user?.login = user.login; + } + }); + }); + } + + 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; + } + + 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(() => { + const modalRef = this.modalService.open(EncuestaDeleteColaboratorDialogComponent, { size: 'lg', backdrop: 'static' }); + modalRef.componentInstance.colaborador = collab; + // unsubscribe not needed because closed completes on modal close + modalRef.closed.subscribe(reason => { + if (reason === 'deleted') { + $('#btnCancelUbdateColaboradores').click(); + this.loadAll(); + } + }); + //}, 500); + } + + isAutor() { + return this.usuarioExtra?.id === this.encuesta?.usuarioExtra?.id; + } + + isEscritor() { + let escritor = false; + this.usuariosColaboradores.forEach(c => { + if (this.usuarioExtra?.id === c.usuarioExtra?.id) { + if (c.rol === 'WRITE') { + escritor = true; + } + } + }); + return escritor; + } + + validarUserIsCollab(correoCollab: string) { + let isCollab = false; + this.usuariosColaboradores.forEach(c => { + if (c.usuarioExtra?.id === this.userPublicCollab?.id) { + isCollab = true; + } + }); + return isCollab; + } + + 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(); + } + }); + } } 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/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/detail/plantilla-detail.component.html b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html index 5f2be1a..8308da3 100644 --- a/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html +++ b/src/main/webapp/app/entities/plantilla/detail/plantilla-detail.component.html @@ -1,58 +1,86 @@ -
-
-
-

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.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 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/app/entities/plantilla/list/plantilla.component.html b/src/main/webapp/app/entities/plantilla/list/plantilla.component.html index ba8d9d5..565edfe 100644 --- a/src/main/webapp/app/entities/plantilla/list/plantilla.component.html +++ b/src/main/webapp/app/entities/plantilla/list/plantilla.component.html @@ -1,28 +1,34 @@

- Plantillas +
+
+ Encuestas +

Administre las plantillas comprables de la tienda

+
-
- +
+ - + +

- +
No templates found @@ -34,7 +40,7 @@ Nombre Descripcion - Fecha Creacion + Fecha Publicacion Tienda Estado Precio @@ -46,25 +52,23 @@ {{ plantilla.nombre }} {{ plantilla.descripcion }} - {{ plantilla.fechaCreacion | formatMediumDatetime }} - {{ plantilla.fechaPublicacionTienda | formatMediumDatetime }} + + {{ plantilla.fechaPublicacionTienda | formatShortDatetime | titlecase }} + No establecida {{ plantilla.estado }} - {{ plantilla.precio }} - - - + ${{ plantilla.precio | number: '1.2' }} + Gratis + {{ plantilla.categoria?.nombre }}
@@ -88,3 +91,164 @@
+ + + 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/list/plantilla.component.ts b/src/main/webapp/app/entities/plantilla/list/plantilla.component.ts index 1c1e111..9145186 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.required, Validators.minLength(1), Validators.maxLength(50)]], + descripcion: [[Validators.required]], + precio: [null, [Validators.required, Validators.min(0)]], + categoria: [null, [Validators.required]], + }); + + 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, + }; + } } diff --git a/src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.html b/src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.html new file mode 100644 index 0000000..2845052 --- /dev/null +++ b/src/main/webapp/app/entities/plantilla/plantilla-delete-option-dialog/plantilla-delete-option-dialog.component.html @@ -0,0 +1,24 @@ +
+ + + + + +
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-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 2284714..602dba7 100644 --- a/src/main/webapp/app/entities/plantilla/plantilla.module.ts +++ b/src/main/webapp/app/entities/plantilla/plantilla.module.ts @@ -5,10 +5,24 @@ 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'; +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], - declarations: [PlantillaComponent, PlantillaDetailComponent, PlantillaUpdateComponent, PlantillaDeleteDialogComponent], + imports: [SharedModule, PlantillaRoutingModule, FontAwesomeModule], + declarations: [ + PlantillaComponent, + PlantillaDetailComponent, + PlantillaUpdateComponent, + PlantillaDeleteDialogComponent, + PlantillaDeleteQuestionDialogComponent, + PlantillaDeleteOptionDialogComponent, + PlantillaPublishStoreDialogComponent, + PlantillaDeleteStoreDialogComponent, + ], 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..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 @@ -1,165 +1,375 @@ -
-
-
-

- 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.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 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..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 @@ -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,262 @@ 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, 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'; + +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', 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; + faStore = faStore; + 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 +280,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 +298,179 @@ 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!; + } + + 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/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/delete/usuario-encuesta-delete-dialog.component.html b/src/main/webapp/app/entities/usuario-encuesta/delete/usuario-encuesta-delete-dialog.component.html index cf63eb5..c8ac1ae 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/delete/usuario-encuesta-delete-dialog.component.html +++ b/src/main/webapp/app/entities/usuario-encuesta/delete/usuario-encuesta-delete-dialog.component.html @@ -1,16 +1,10 @@ -
- - +
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..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 @@ -1,29 +1,38 @@

- Usuario Encuestas + Colaboraciones +

Gestione las colaboraciones en encuestas a las que se encuentra agregado

- - -

- +
+
+
+
+ + +
+
+
No usuarioEncuestas found
@@ -32,58 +41,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 dfcef9d..18a8366 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,47 @@ 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 { faPencilAlt, faPollH } from '@fortawesome/free-solid-svg-icons'; + +import { AccountService } from 'app/core/auth/account.service'; +import { IUsuarioExtra } 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'; +import { EstadoColaborador } from '../../enumerations/estado-colaborador.model'; +import { Observable } from 'rxjs'; +import { finalize } from 'rxjs/operators'; +import * as $ from 'jquery'; +import { DATE_TIME_FORMAT } from '../../../config/input.constants'; @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; + isSavingCollab = false; + public searchRol: string; + public searchEstado: string; - 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 + ) { + this.searchRol = ''; + this.searchEstado = ''; + } loadAll(): void { this.isLoading = true; @@ -22,7 +53,10 @@ 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.encuesta?.estado !== 'DELETED'); }, () => { this.isLoading = false; @@ -31,7 +65,22 @@ export class UsuarioEncuestaComponent implements OnInit { } ngOnInit(): void { - this.loadAll(); + this.searchRol = ''; + this.searchEstado = ''; + 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 { @@ -48,4 +97,29 @@ export class UsuarioEncuestaComponent implements OnInit { } }); } + + aceptarInvitacion(usuarioEncuesta: IUsuarioEncuesta) { + usuarioEncuesta.estado = EstadoColaborador.ACTIVE; + usuarioEncuesta.fechaAgregado = dayjs(usuarioEncuesta.fechaAgregado, DATE_TIME_FORMAT); + this.subscribeToSaveResponseCollab(this.usuarioEncuestaService.update(usuarioEncuesta)); + } + + protected subscribeToSaveResponseCollab(result: Observable>): void { + result.pipe(finalize(() => this.onSaveFinalizeCollab())).subscribe( + () => this.onSaveSuccessCollab(), + () => this.onSaveErrorCollab() + ); + } + + protected onSaveSuccessCollab(): void { + this.loadAll(); + } + + protected onSaveErrorCollab(): void { + // Api for inheritance. + } + + protected onSaveFinalizeCollab(): void { + this.isSavingCollab = false; + } } 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/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts index fc47e76..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 @@ -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))); @@ -66,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)[] 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/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))); } 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 { 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/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", 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" diff --git a/src/main/webapp/i18n/es/usuarioEncuesta.json b/src/main/webapp/i18n/es/usuarioEncuesta.json index 3350969..4d8be95 100644 --- a/src/main/webapp/i18n/es/usuarioEncuesta.json +++ b/src/main/webapp/i18n/es/usuarioEncuesta.json @@ -2,26 +2,29 @@ "dataSurveyApp": { "usuarioEncuesta": { "home": { - "title": "Usuario Encuestas", + "title": "Colaboraciones", "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 Colaborador", + "notFound": "Ningún Colaborador encontrado" }, - "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": "Un Colaborador ha sido creado con el identificador {{ param }}", + "updated": "Ha aceptado la colaboración en la encuesta #{{ param }}", + "deleted": "Un Colaborador ha sido expulsado de la encuesta", "delete": { - "question": "¿Seguro que quiere eliminar Usuario Encuesta {{ id }}?" + "question": "¿Seguro que quiere expulsar al colaborador de la encuesta?", + "action": "Expulsar", + "questionGetOut": "¿Seguro que quiere salirse de la colaboracion de encuesta?", + "getOut": "Salir" }, "detail": { - "title": "Usuario Encuesta" + "title": "Colaborador" }, "id": "ID", "rol": "Rol", "estado": "Estado", "fechaAgregado": "Fecha Agregado", - "usuarioExtra": "Usuario Extra", + "usuarioExtra": "Usuario", "encuesta": "Encuesta" } }
ID Rol Estado Fecha AgregadoUsuario ExtraEncuestaEncuesta
- {{ usuarioEncuesta.id }} -
{{ usuarioEncuesta.rol }} {{ usuarioEncuesta.estado }}{{ usuarioEncuesta.fechaAgregado | formatMediumDatetime }} - - {{ usuarioEncuesta.fechaAgregado | formatShortDatetime | titlecase }} -
+
- - -