package es.uv.saic.service; import java.text.SimpleDateFormat; import java.util.LinkedList; import java.util.Queue; import jakarta.mail.MessagingException; import org.springframework.mail.MailSendException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; import es.uv.saic.domain.Calendari; import es.uv.saic.domain.Email; import es.uv.saic.domain.InstanciaTasca; import es.uv.saic.domain.Usuari; @Service public class EmailService { private JavaMailSender mailSender; private Queue pendingQueue = new LinkedList(); public EmailService(JavaMailSender javaMailSender) { this.mailSender = javaMailSender; } public boolean sendActiveTaskNext() { if(!this.pendingQueue.isEmpty()) { Email e = this.getNextEmail(); try { if(e.getInstanciaTasca() != null) { this.sendNewTaskMail(e.getUsusari(), e.getInstanciaTasca()); } else { this.sendMail(e.getUsusari().getEmail(), e.getSubject(), e.getBody()); } } catch (MessagingException err) { err.printStackTrace(); } catch (MailSendException err) { err.printStackTrace(); } return true; } else { return false; } } public void addEmail(Email email) { pendingQueue.add(email); } private Email getNextEmail() { return this.pendingQueue.poll(); } public Queue getPendingQueue() { return this.pendingQueue; } public boolean pendingQueueIsEmpty() { return this.pendingQueue.isEmpty(); } public void sendMail(String to, String subject, String msg) throws MessagingException{ SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(to); mailMessage.setSubject(subject); mailMessage.setText(msg); mailMessage.setFrom("saic@uv.es"); mailSender.send(mailMessage); } public void sendNewTaskMail(Usuari u, InstanciaTasca it) throws MessagingException{ String subject = "Notificació de tasca a realitzar en SAIC"; String msg = "Estimat/da usuari/a:\n" + "\n" + "El Sistema d'Assegurament Intern de la Qualitat (SAIC) de la Universitat de València li informa que té vosté una tasca per realitzar\n" + "\n" + "Tasca: "+it.getTasca().getTitolVal()+"\n" + "Procediment: "+it.getTasca().getProces().getTitolVal()+"\n" + "Centre/Titulació: "+it.getInstancia().getOrgan().getOrgan().getNomVal()+" / "+it.getInstancia().getOrgan().getNomVal()+"\n" + "Curs al qual s'aplica: "+Integer.toString(it.getInstancia().getProces().getCursAvaluat()-1) + "-" + Integer.toString(it.getInstancia().getProces().getCursAvaluat())+"\n" + "\n" + "Per a realitzar-la ha de connectar-se al SAIC i seguir els passos que allà es descriuen.\n" + "\n" + "Faça clic ací https://saic.uv.es per a accedir al Sistema d'Assegurament Intern de la Qualitat (SAIC).\n" + "\n" + "Per a consultes sobre procediments o la documentació que s'ha d'aportar, envie un correu a unitat.qualitat@uv.es\n" + "Per a qualsevol consulta tècnica, envie un correu a saic@uv.es\n" + "\n" + "----------" + "\n" + "Estimado/a usuario/a:\n" + "\n" + "El Sistema de Aseguramiento Interno de la Calidad (SAIC) de la Universitat de València le informa que tiene Vd. una tarea por realizar:\n" + "\n" + "Tarea: "+it.getTasca().getTitolCas()+"\n" + "Procedimiento: "+it.getTasca().getProces().getTitolCas()+"\n" + "Centro/Titulación: "+it.getInstancia().getOrgan().getOrgan().getNomCas()+" / "+it.getInstancia().getOrgan().getNomCas()+"\n" + "Curso al que se aplica: "+Integer.toString(it.getInstancia().getProces().getCursAvaluat())+"\n" + "\n" + "Para realizarla debe Vd. conectarse al SAIC y seguir los pasos allí descritos.\n" + "\n" + "Pinche aquí https://saic.uv.es para acceder al Sistema de Aseguramiento Interno de la Calidad (SAIC).\n" + "\n" + "Para consultas sobre los procedimientos o la documentación a aportar, envíe un correo a unitat.qualitat@uv.es \n" + "Para cualquier consulta técnica, envíe un correo a saic@uv.es\n"; this.sendMail(u.getEmail(), subject, msg); } public void sendCalendarMail(Usuari u, Calendari c) throws MessagingException{ String subject = "[SYS] Notificación de evento planificado en SAIC"; String msg = "Estimado/a administrador:\n" + "\n" + "El siguiente evento está planificado para hoy.\n" + "\n" + "Nombre: "+c.getTitolCas()+"\n" + "ID Proceso: "+c.getIdProces().toString()+"\n" + "Ámbito: "+c.getAmbit()+"\n" + "Planificado para el día "+new SimpleDateFormat("dd/MM/yyyy").format(c.getData())+"\n"+ "\n" + "Acceda a https://saic.uv.es y realice las acciones pertinentes. \n" + "\n"; this.sendMail(u.getEmail(), subject, msg); } }