diff --git a/src/main/java/org/datasurvey/service/MailService.java b/src/main/java/org/datasurvey/service/MailService.java index cc47a7b..85e1f77 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,15 @@ 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" + ); + } } diff --git a/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java b/src/main/java/org/datasurvey/web/rest/UsuarioEncuestaResource.java index 4707ba0..030f40c 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())) @@ -225,4 +230,11 @@ public class UsuarioEncuestaResource { } return ResponseEntity.ok().body(usuariosEncuestas); } + + @PostMapping("/usuario-encuestas/notify/{id}") + public ResponseEntity notifyEncuestaDeleted(@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..e86ee22 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -42,13 +42,19 @@ 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 invitacion, {0}! +email.invitation.text1=Fue invitado a la encuesta {0}(#{1}). Para aceptar la solicitud de colaborador, ingrese al área de colaboraciones.". +email.invitation.text2=Saludos, 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/service/encuesta.service.ts b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts index af657c8..0862ab5 100644 --- a/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts +++ b/src/main/webapp/app/entities/encuesta/service/encuesta.service.ts @@ -100,7 +100,9 @@ export class EncuestaService { return this.http.delete(`${this.resourceUrl}/notify/${encuesta.id}`, { observe: 'response' }); } - sendCorreoInvitacion(correo: string) {} + /*sendCorreoInvitacion(correo: string) { + return this.http.post(`${this.resourceUrl}/notify/${encuesta.id}`, { observe: 'response' }); + }*/ addEncuestaToCollectionIfMissing(encuestaCollection: IEncuesta[], ...encuestasToCheck: (IEncuesta | null | undefined)[]): IEncuesta[] { const encuestas: IEncuesta[] = encuestasToCheck.filter(isPresent); diff --git a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html index 4cbb60b..0d96f93 100644 --- a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html +++ b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.html @@ -16,7 +16,7 @@
-
+
@@ -519,18 +519,11 @@

Correo electrónico

- +
- diff --git a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts index 2bb6124..e1cbd3c 100644 --- a/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts +++ b/src/main/webapp/app/entities/encuesta/update/encuesta-update.component.ts @@ -635,7 +635,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { protected createFromFormCollab(): UsuarioEncuesta { return { id: undefined, - rol: this.editFormAddCollab.get(['rol_add'])!.value, + rol: this.editFormAddCollab.get(['rol'])!.value, }; } @@ -662,22 +662,23 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { saveAddCollab(): void { this.isSavingCollab = true; const collab = this.createFromFormCollab(); - let correoCollab = this.editFormAddCollab.get('email_collab')!.value; + let correoCollab = this.editFormAddCollab.get('email')!.value; - this.usuarioExtraService + this.userService .retrieveAllPublicUsers() .pipe( finalize(() => { if (this.userPublicCollab?.id !== undefined) { this.usuarioExtraService.find(this.userPublicCollab?.id).subscribe(res => { this.usuarioExtraCollab = res.body; - collab.fechaAgregado = dayjs(new Date(), DATE_TIME_FORMAT); + let now = new Date(); + collab.fechaAgregado = dayjs(now); collab.usuarioExtra = this.usuarioExtraCollab; collab.estado = EstadoColaborador.PENDING; collab.encuesta = this.encuesta; let id = 0; this.subscribeToSaveResponseUpdateCollab(this.usuarioEncuestaService.create(collab)); - this.sendInvitation(correoCollab); + // this.sendInvitation(correoCollab); }); } else { this.userCollabNotExist = true; @@ -732,7 +733,7 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked { return this.usuarioExtra?.id == this.encuesta?.usuarioExtra?.id; } - sendInvitation(correo: string) { - this.encuestaService.sendCorreoInvitacion(correo); - } + /*sendInvitation(Colla) { + this.usuarioEncuestaService.sendCorreoInvitacion(correo); + }*/ } diff --git a/src/main/webapp/app/entities/user/user.service.ts b/src/main/webapp/app/entities/user/user.service.ts index 9d4571a..80d9ccb 100644 --- a/src/main/webapp/app/entities/user/user.service.ts +++ b/src/main/webapp/app/entities/user/user.service.ts @@ -22,6 +22,10 @@ export class UserService { return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); } + retrieveAllPublicUsers(): Observable { + return this.http.get(this.resourceUrl); + } + addUserToCollectionIfMissing(userCollection: IUser[], ...usersToCheck: (IUser | null | undefined)[]): IUser[] { const users: IUser[] = usersToCheck.filter(isPresent); if (users.length > 0) { diff --git a/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts index dd7aee7..c917c31 100644 --- a/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts +++ b/src/main/webapp/app/entities/usuario-encuesta/service/usuario-encuesta.service.ts @@ -68,6 +68,10 @@ export class UsuarioEncuestaService { return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); } + sendCorreoInvitacion(colaborator: IUsuarioEncuesta) { + return this.http.post(`${this.resourceUrl}/notify/${colaborator.id}`, { body: colaborator, observe: 'response' }); + } + addUsuarioEncuestaToCollectionIfMissing( usuarioEncuestaCollection: IUsuarioEncuesta[], ...usuarioEncuestasToCheck: (IUsuarioEncuesta | null | undefined)[]