This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 471c3dedb5ac3a471ea577592fa2ee05eeef0dc9 Author: jcouteau <couteau@codelutin.com> Date: Mon Jul 2 17:30:57 2018 +0200 fixes #9986 : Pris par lent --- .../faxtomail/services/service/EmailService.java | 2 + .../services/service/EmailServiceImpl.java | 55 ++++++++++++++++++++++ .../services/service/EmailServiceTest.java | 27 +++++++++++ .../demande/takenby/actions/TakenByAction.java | 6 +-- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java index 14afdeb8..0afd616e 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java @@ -78,6 +78,8 @@ public interface EmailService extends FaxToMailService { Email saveEmail(Email email, Collection<Attachment> attachments, Collection<Reply> replies, FaxToMailUser user, String... modifiedFields) throws InvalidClientException; + Email takeBy(Email email, FaxToMailUser user); + void transmitPendingDemandsToEdi(); Set<Object> getDistinctValues(MailFolder folder, String[] properties, boolean sum); diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java index 55ecaa49..e3442bb2 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java @@ -120,6 +120,7 @@ import java.io.Writer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.sql.Connection; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; @@ -184,6 +185,7 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe Hibernate.initialize(email.getMatchingClients()); Hibernate.initialize(email.getReplies()); Hibernate.initialize(email.getAttachment()); + Hibernate.initialize(email.getMailFolder()); Collection<History> histories = email.getHistory(); if (histories != null) { for (History history : histories) { @@ -369,6 +371,59 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe return result; } + + @Override + public Email takeBy(final Email email, final FaxToMailUser user) { + + TopiaSqlSupport sqlSupport = getPersistenceContext().getSqlSupport(); + + sqlSupport.doSqlWork(new TopiaSqlWork() { + @Override + public void execute(Connection connection) throws SQLException { + Date now = getNow(); + + HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); + + Set<String> fieldSet = Sets.newHashSet(Email.PROPERTY_TAKEN_BY); + final History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.MODIFICATION, + History.PROPERTY_FAX_TO_MAIL_USER, user, + History.PROPERTY_MODIFICATION_DATE, now, + History.PROPERTY_EMAIL, email, + History.PROPERTY_FIELDS_JSON, AbstractFaxToMailTopiaDao.GSON_INSTANCE.toJson(fieldSet)); + + getPersistenceContext().getHibernateSupport().getHibernateSession().flush(); + + try (PreparedStatement updateStatement = connection.prepareStatement("UPDATE email SET takenby = ? WHERE topiaid = ?"); + PreparedStatement historyStatement = connection.prepareStatement("UPDATE history SET email = ? WHERE topiaid = ?")) { + + updateStatement.setString(1, user.getTopiaId()); + updateStatement.setString(2, email.getTopiaId()); + int result = updateStatement.executeUpdate(); + + historyStatement.setString(1, email.getTopiaId()); + historyStatement.setString(2, history.getTopiaId()); + int result2 = historyStatement.executeUpdate(); + + if (result != 1 || result2 != 1) { + log.error(String.format("Could not take email ($s) by user ($s)", email.getTopiaId(), user.getTopiaId())); + } + } + + + connection.commit(); + } + }); + + getPersistenceContext().commit(); + + getPersistenceContext().getHibernateSupport().getHibernateSession().clear(); + getPersistenceContext().getHibernateSupport().getHibernateSession().refresh(email); + + Email returnValue = getFullEmailById(email.getTopiaId()); + + return returnValue; + } + /** * Les réponses sont modifiées par l'ui pour ne pas charger le contenu binaire, pour la sauvegarde, * il faut bien rétablir les replyContent avec ceux en base. diff --git a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java index c6d77781..90e4ac21 100644 --- a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java +++ b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java @@ -292,6 +292,33 @@ public class EmailServiceTest extends AbstractFaxToMailServiceTest { } + @Test + public void testSetTakenBy(){ + MailFolderTopiaDao mailFolderDao = getServiceContext().getPersistenceContext().getMailFolderDao(); + MailFolder cyrilFolder = mailFolderDao.forNameEquals("Cyril").findUnique(); + + FaxToMailUser cmarquis = userService.getUserByLogin("cmarquis"); + + EmailTopiaDao emailDao = getServiceContext().getPersistenceContext().getEmailDao(); + + List<Email> emails = emailDao.forMailFolderEquals(cyrilFolder).addEquals(Email.PROPERTY_ARCHIVE_DATE, null).find(0, 1); + + Email email = emails.get(0); + + Assert.assertNotEquals(cmarquis,email.getTakenBy()); + + service.takeBy(email, cmarquis); + + Email emailToTest = service.getEmailById(email.getTopiaId()); + + Assert.assertEquals(emailToTest.getSubject(), email.getSubject()); + + Assert.assertEquals(cmarquis.getTrigraph(),emailToTest.getTakenBy().getTrigraph()); + + //TODO should test history to + + } + @Test public void test6863() { testConvertHTMLToPdf("test6863"); diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/takenby/actions/TakenByAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/takenby/actions/TakenByAction.java index 63e2cc0c..cee6f843 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/takenby/actions/TakenByAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/takenby/actions/TakenByAction.java @@ -33,8 +33,6 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.content.demande.takenby.TakenByFormUI; import com.franciaflex.faxtomail.ui.swing.content.demande.takenby.TakenByFormUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.takenby.TakenByFormUIModel; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import java.util.Collection; @@ -46,8 +44,6 @@ import static org.nuiton.i18n.I18n.t; */ public class TakenByAction extends AbstractFaxToMailAction<TakenByFormUIModel, TakenByFormUI, TakenByFormUIHandler> { - private static final Log log = LogFactory.getLog(TakenByAction.class); - public TakenByAction(TakenByFormUIHandler handler) { super(handler, false); setActionDescription(t("faxtomail.action.takenBy.tip")); @@ -71,7 +67,7 @@ public class TakenByAction extends AbstractFaxToMailAction<TakenByFormUIModel, T Email email = demand.toEntity(persistedEmail); - email = emailService.saveEmail(email, currentUser, Email.PROPERTY_TAKEN_BY); + email = emailService.takeBy(email, currentUser); demand.fromEntity(email); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.