Author: bleny Date: 2014-05-13 16:32:08 +0200 (Tue, 13 May 2014) New Revision: 1934 Url: http://forge.codelutin.com/projects/wao/repository/revisions/1934 Log: refs #4487 send notifications to update allegro wallets for observers Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/AddBoatToUserAllegroWalletEmail.java trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_en.mustache trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_fr.mustache Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfig.java trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfigOption.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/EmailService.java trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfig.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfig.java 2014-05-13 12:37:37 UTC (rev 1933) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfig.java 2014-05-13 14:32:08 UTC (rev 1934) @@ -118,4 +118,8 @@ public boolean isGoogleAnalyticsEnabled() { return applicationConfig.getOptionAsBoolean(WaoApplicationConfigOption.GOOGLE_ANALYTICS_ENABLED.key); } + + public String getEmailToUpdateAllegroWallets() { + return applicationConfig.getOption(WaoApplicationConfigOption.EMAIL_TO_UPDATE_ALLEGRO_WALLETS.key); + } } Modified: trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfigOption.java =================================================================== --- trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfigOption.java 2014-05-13 12:37:37 UTC (rev 1933) +++ trunk/wao-persistence/src/main/java/fr/ifremer/wao/WaoApplicationConfigOption.java 2014-05-13 14:32:08 UTC (rev 1934) @@ -65,8 +65,14 @@ "googleAnalyticsEnabled", "S'il faut activer les statistitques Google Analytics", "false", - Boolean.class); + Boolean.class), + EMAIL_TO_UPDATE_ALLEGRO_WALLETS( + "wao.emailToUpdateAllegroWallets", + "Adresse email à laquelle seront envoyé les demandes d'ajout au portefeuille", + null, + String.class); + protected final String key; protected final String description; protected final Class<?> type; Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java 2014-05-13 12:37:37 UTC (rev 1933) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ObsMerContactsService.java 2014-05-13 14:32:08 UTC (rev 1934) @@ -46,6 +46,8 @@ import fr.ifremer.wao.entity.WaoUserTopiaDao; import fr.ifremer.wao.services.AuthenticatedWaoUser; import fr.ifremer.wao.services.service.csv.ObsMerContactImportExportModel; +import fr.ifremer.wao.services.service.mail.AddBoatToUserAllegroWalletEmail; +import fr.ifremer.wao.services.service.mail.EmailService; import fr.ifremer.wao.services.service.mail.MammalsObservationEmail; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.IOUtils; @@ -61,9 +63,11 @@ import org.nuiton.csv.ImportConf; import org.nuiton.csv.ImportModel; import org.nuiton.csv.ImportRow; +import org.nuiton.i18n.I18n; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.pager.TopiaPagerBean; import org.nuiton.util.DateUtil; +import org.nuiton.util.StringUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -222,7 +226,7 @@ List<Contact> contacts = dao.findAll(filter, true); ExportModel<Contact> exportModel = ObsMerContactImportExportModel.forExport(getLocale(), - filter.getSampleRowFilter().getObsProgram()); + filter.getSampleRowFilter().getObsProgram()); Export<Contact> export = Export.newExport(exportModel, contacts); @@ -253,11 +257,11 @@ Locale l = getLocale(); ImportModel<Contact> contactImportModel = ObsMerContactImportExportModel.forImport(l, - obsProgram, - waoUsers, - sampleRows, - boats, - motives); + obsProgram, + waoUsers, + sampleRows, + boats, + motives); ImportConf importConf = new ImportConf(); importConf.setStrictMode(true); @@ -653,6 +657,9 @@ save0(updateContactCommand); commit(); + + updateAllegroWalletIfNecessary(updateContactCommand); + } public void delete(String contactId) throws IllegalDeletionException { @@ -736,8 +743,120 @@ dao.update(contact); } + } + protected void updateAllegroWalletIfNecessary(UpdateContactCommand updateContactCommand) { + + Contact contact = updateContactCommand.getContact(); + ContactState contactState = contact.getContactState(); + ObsProgram obsProgram = contact.getObsProgram(); + + boolean addBoatToObserversAllegroWallet = false; + + if (obsProgram == ObsProgram.OBSMER) { + addBoatToObserversAllegroWallet = contactState == ContactState.OBSERVATION_DONE + || contactState == ContactState.OBSERVATION_EXPECTED; + } else if (obsProgram == ObsProgram.OBSVENTE) { + addBoatToObserversAllegroWallet = ContactState.OBSERVATION_DONE == contactState; + } + + if (addBoatToObserversAllegroWallet) { + + Boat boat = contact.getBoat(); + + String info; + + if (contactState == ContactState.OBSERVATION_EXPECTED) { + info = I18n.l( + serviceContext.getLocale(), + "wao.email.addBoatToUserAllegroWallet.contactExpected", + WaoUtils.formatDate(serviceContext.getLocale(), contact.getObservationBeginDate())); + } else if (contactState == ContactState.OBSERVATION_DONE) { + info = I18n.l( + serviceContext.getLocale(), + "wao.email.addBoatToUserAllegroWallet.contactDone", + WaoUtils.formatDateTime(serviceContext.getLocale(), contact.getObservationBeginDate()), + WaoUtils.formatDateTime(serviceContext.getLocale(), contact.getObservationEndDate())); + } else { + throw new IllegalStateException(contactState + " should not lead to a mail sent"); + } + + // in obsvente, only the main observer + Collection<WaoUser> observers; + if (ObsProgram.OBSVENTE.equals(obsProgram)) { + observers = ImmutableSet.of(contact.getMainObserver()); + } else if (ObsProgram.OBSMER.equals(obsProgram)) { + observers = contact.getAllObservers(); + } else { + throw new IllegalStateException(); + } + + EmailService emailService = getEmailService(); + + WaoUserTopiaDao waoUserDao = getWaoUserDao(); + + for (WaoUser observer : observers) { + + boolean boatAlreadyInWallet = observer.containsAllegroWallet(boat); + + if (boatAlreadyInWallet) { + + if (log.isInfoEnabled()) { + log.info("user " + observer + " already has " + boat + " in his allegroWallet"); + } + + } else { + + if (log.isInfoEnabled()) { + log.info("user " + observer + " miss " + boat + " in his allegro wallet, adding"); + } + + String observerLogin = observer.getLogin(); + String emailToUpdateAllegroWallets = getApplicationConfig().getEmailToUpdateAllegroWallets(); + + AddBoatToUserAllegroWalletEmail email = + emailService.newAddBoatToUserAllegroWalletEmail(); + + email.setBoat(boat); + email.setObserver(observer); + email.setInfo(info); + email.setObsProgram(contact.getObsProgram()); + + if ( ! StringUtil.isEmail(observerLogin)) { + if (log.isInfoEnabled()) { + log.info("user login is not a email, won't send anything: " + observerLogin + " email=" + email); + } + } else if ( ! observer.isActive()) { + if (log.isInfoEnabled()) { + log.info("observer is no longer active, won't send " + email); + } + } else if (StringUtils.isBlank(emailToUpdateAllegroWallets)) { + if (log.isInfoEnabled()) { + log.info("no email to update allegro wallets provided in configuration, won't send " + email); + } + } else if ( ! StringUtil.isEmail(emailToUpdateAllegroWallets)) { + if (log.isWarnEnabled()) { + log.warn("email to update allegro wallets provided in configuration is not valid, won't send " + emailToUpdateAllegroWallets); + } + } else { + + email.addBcc(observer); + + email.addTo(emailToUpdateAllegroWallets); + + emailService.send(email); + + observer.addAllegroWallet(boat); + waoUserDao.update(observer); + commit(); + + } + } + } + } + } + public Contact createContact(AuthenticatedWaoUser authenticatedWaoUser, String sampleRowId, String boatId) { if (log.isInfoEnabled()) { Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/AddBoatToUserAllegroWalletEmail.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/AddBoatToUserAllegroWalletEmail.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/AddBoatToUserAllegroWalletEmail.java 2014-05-13 14:32:08 UTC (rev 1934) @@ -0,0 +1,67 @@ +package fr.ifremer.wao.services.service.mail; + +import fr.ifremer.wao.entity.Boat; +import fr.ifremer.wao.entity.ObsProgram; +import fr.ifremer.wao.entity.WaoUser; +import org.nuiton.i18n.I18n; + +import java.util.Locale; + +public class AddBoatToUserAllegroWalletEmail extends WaoMail { + + protected Boat boat; + + protected WaoUser observer; + + protected String info; + + private ObsProgram obsProgram; + + public AddBoatToUserAllegroWalletEmail(Locale locale) { + super(locale); + } + + @Override + public String getSubject() { + String subject = I18n.l( + getLocale(), + "wao.email.addBoatToUserAllegroWallet.subject", + I18n.l(getLocale(), obsProgram.getI18nKey()), + boat.getImmatriculation(), + observer.getLogin() + ); + return subject; + } + + public void setBoat(Boat boat) { + this.boat = boat; + } + + public Boat getBoat() { + return boat; + } + + public void setObserver(WaoUser observer) { + this.observer = observer; + } + + public WaoUser getObserver() { + return observer; + } + + public void setInfo(String info) { + this.info = info; + } + + public String getInfo() { + return info; + } + + public void setObsProgram(ObsProgram obsProgram) { + this.obsProgram = obsProgram; + } + + public ObsProgram getObsProgram() { + return obsProgram; + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/EmailService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/EmailService.java 2014-05-13 12:37:37 UTC (rev 1933) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/EmailService.java 2014-05-13 14:32:08 UTC (rev 1934) @@ -139,4 +139,7 @@ } + public AddBoatToUserAllegroWalletEmail newAddBoatToUserAllegroWalletEmail() { + return new AddBoatToUserAllegroWalletEmail(getLocale()); + } } \ No newline at end of file Added: trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_en.mustache =================================================================== --- trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_en.mustache (rev 0) +++ trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_en.mustache 2014-05-13 14:32:08 UTC (rev 1934) @@ -0,0 +1,10 @@ +Hello, + +Please, add boat {{boat.immatriculation}} to the ALLEGRO wallet of the observer +{{observer.fullName}} {{observer.company.name}} ({{observer.login}}). + +{{info}} + +Regards, + +Wao Added: trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_fr.mustache =================================================================== --- trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_fr.mustache (rev 0) +++ trunk/wao-services/src/main/resources/email/AddBoatToUserAllegroWalletEmail_fr.mustache 2014-05-13 14:32:08 UTC (rev 1934) @@ -0,0 +1,10 @@ +Bonjour, + +Merci d'ajouter le navire {{boat.immatriculation}} au portefeuille ALLEGRO de l'observateur +{{observer.fullName}} {{observer.company.name}} ({{observer.login}}). + +{{info}} + +Cordialement, + +Wao Modified: trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties =================================================================== --- trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties 2014-05-13 12:37:37 UTC (rev 1933) +++ trunk/wao-services/src/main/resources/i18n/wao-services_en_GB.properties 2014-05-13 14:32:08 UTC (rev 1934) @@ -26,6 +26,9 @@ wao.business.validationState.refused=Refused wao.business.validationState.standby=Stand by wao.business.validationState.validated=validate +wao.email.addBoatToUserAllegroWallet.contactDone=This demand is for observation expected done between %s and %s +wao.email.addBoatToUserAllegroWallet.contactExpected=This demand is for observation expected on %s +wao.email.addBoatToUserAllegroWallet.subject=%s: add boat %d to ALLEGRO wallet for user %s wao.export.ical.desc=wtih %s wao.export.ical.title=ObsDeb Observation wao.import.boat.failure.invalid.locationCode=The code '%s' is not a valid location code Modified: trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties =================================================================== --- trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties 2014-05-13 12:37:37 UTC (rev 1933) +++ trunk/wao-services/src/main/resources/i18n/wao-services_fr_FR.properties 2014-05-13 14:32:08 UTC (rev 1934) @@ -25,6 +25,9 @@ wao.business.validationState.refused=Réfusé wao.business.validationState.standby=En attente wao.business.validationState.validated=Validé +wao.email.addBoatToUserAllegroWallet.contactDone=Cette demande émane de l'observation réalisée entre le %s et le %s. +wao.email.addBoatToUserAllegroWallet.contactExpected=Cette demande émane de l'observation prévue le %s. +wao.email.addBoatToUserAllegroWallet.subject=%s : ajout navire %d sur portefeuille ALLEGRO de %s wao.export.ical.desc=avec %s wao.export.ical.title=Observation ObsDeb wao.import.boat.failure.invalid.locationCode=Le code '%s' n'est pas un code de lieu valide