r379 - in trunk: faxtomail-persistence/src/main/java/com/franciaflex/faxtomail faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities faxtomail-persistence/src/main/resources/i18n faxtomail-persistence/src/main/xmi faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util faxtomail-ui-web/src/main/
Author: echatellier Date: 2014-07-10 15:41:44 +0200 (Thu, 10 Jul 2014) New Revision: 379 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/379 Log: Ajout d'un statut suppl?\195?\169mentaire pour enc cours de transfer EDI et transf?\195?\169r?\195?\169 ?\195?\160 l'EDI Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/DemandStatus.java trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java 2014-07-10 13:41:44 UTC (rev 379) @@ -353,12 +353,6 @@ return result; } - /** @return {@link FaxToMailConfigurationOption#EDI_DIRECTORY} value */ - public File getEdiDirectory() { - File result = applicationConfig.getOptionAsFile(FaxToMailConfigurationOption.EDI_DIRECTORY.getKey()); - return result; - } - public File getTmpDirectory() { File result = applicationConfig.getOptionAsFile(FaxToMailConfigurationOption.TMP_DIRECTORY.getKey()); return result; Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java 2014-07-10 13:41:44 UTC (rev 379) @@ -200,12 +200,6 @@ n("faxtomail.config.option.csv.separator.description"), ";", char.class), - - EDI_DIRECTORY( - "faxtomail.edi.directory", - n("faxtomail.config.option.edi.directory.description"), - "${faxtomail.data.directory}/edi", - File.class), // UI Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/DemandStatus.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/DemandStatus.java 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/DemandStatus.java 2014-07-10 13:41:44 UTC (rev 379) @@ -34,6 +34,7 @@ UNTREATED(n("faxtomail.demandStatus.untreated")), IN_PROGRESS(n("faxtomail.demandStatus.inProgress")), + TRANSMISSION_TO_EDI(n("faxtomail.demandStatus.transmissionToEdi")), TRANSMITTED_TO_EDI(n("faxtomail.demandStatus.transmittedToEdi")), QUALIFIED(n("faxtomail.demandStatus.qualified")), ARCHIVED(n("faxtomail.demandStatus.archive")); Modified: trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties =================================================================== --- trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties 2014-07-10 13:41:44 UTC (rev 379) @@ -26,6 +26,7 @@ faxtomail.demandStatus.archive=Archive faxtomail.demandStatus.inProgress=En cours faxtomail.demandStatus.qualified=Qualifié +faxtomail.demandStatus.transmissionToEdi=En cours de transmission à l'EDI faxtomail.demandStatus.transmittedToEdi=Transmis à l'EDI faxtomail.demandStatus.untreated=Non traité faxtomail.historyType.archive=Archivage Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo =================================================================== (Binary files differ) Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-07-10 13:41:44 UTC (rev 379) @@ -42,7 +42,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.regex.Pattern; import javax.activation.DataSource; import javax.activation.FileDataSource; @@ -64,7 +63,6 @@ import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; import org.nuiton.topia.persistence.TopiaEntities; -import org.nuiton.util.FileUtil; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import org.nuiton.util.pagination.PaginationParameter; @@ -202,16 +200,11 @@ // pour ne pas les charger inutilement // donc on les remet manuellement - //if (originalFile != null) { - if (!originalFile.isPersisted()) { - attachementFileTopiaDao.create(originalFile); - } else { - attachementFileTopiaDao.update(originalFile); - } - /*} else if (attachment.isPersisted()) { - AttachmentFile attachmentFile = getAttachmentFile(attachment.getTopiaId(), true); - currentAttachment.setOriginalFile(attachmentFile); - }*/ + if (!originalFile.isPersisted()) { + attachementFileTopiaDao.create(originalFile); + } else { + attachementFileTopiaDao.update(originalFile); + } if (editedFile != null) { if (!editedFile.isPersisted()) { @@ -219,10 +212,7 @@ } else { attachementFileTopiaDao.update(editedFile); } - } /*else if (attachment.isPersisted()) { - AttachmentFile attachmentFile = getAttachmentFile(attachment.getTopiaId(), false); - currentAttachment.setEditedFile(attachmentFile); - }*/ + } if (!currentAttachment.isPersisted()) { // persist using cascade @@ -257,33 +247,57 @@ Set<String> fieldSet = Sets.newHashSet(modifiedFields); - MailFolder folder = email.getMailFolder(); - while (!folder.isUseCurrentLevelEdiFolder() && folder.getParent() != null) { - folder = folder.getParent(); - } + History transmissionToEdi = CollectionUtils.find(email.getHistory(), new Predicate<History>() { + @Override + public boolean evaluate(History object) { + return object.getType() == HistoryType.TRANSMISSION_TO_EDI; + } + }); - // FIXME echatellier : et si on définit le ediFolder après ? la demande ne peux pas passer en TRANSMITTED_TO_EDI ? - if (StringUtils.isNotBlank(folder.getEdiFolder())) { - History transmissionToEdi = CollectionUtils.find(email.getHistory(), new Predicate<History>() { - @Override - public boolean evaluate(History object) { - return object.getType() == HistoryType.TRANSMISSION_TO_EDI; + // we transmit to EDI if: + // - it has never been transmitted before + // - all the required fields are filled + if (transmissionToEdi == null + && email.getClient() != null + && email.getDemandType() != null + && StringUtils.isNotBlank(email.getProjectReference())) { + + if (email.getDemandType().containsFields(MailField.RANGE_ROW)) { + + // si les gammes sont vides, la demande n'est pas valide, on ne fait rien dans ce cas + // sinon on transfer à edi + if (email.isRangeRowNotEmpty()) { + + if (email.getDemandType().isEdiTransfer()) { + // ajout d'un historique + transmissionToEdi = historyDao.create(History.PROPERTY_TYPE, HistoryType.TRANSMISSION_TO_EDI, + History.PROPERTY_MODIFICATION_DATE, new Date()); + email.addHistory(transmissionToEdi); + + // changement du status + email.setDemandStatus(DemandStatus.TRANSMISSION_TO_EDI); + fieldSet.add(Email.PROPERTY_DEMAND_STATUS); + } else { + // TODO echatellier : pas sur qu'il faille l'ajouter tout le temps, mais sinon, le transfer se reproduira + transmissionToEdi = historyDao.create(History.PROPERTY_TYPE, HistoryType.TRANSMISSION_TO_EDI, + History.PROPERTY_MODIFICATION_DATE, new Date()); + email.addHistory(transmissionToEdi); + + // passage en status + email.setDemandStatus(DemandStatus.IN_PROGRESS); + fieldSet.add(Email.PROPERTY_DEMAND_STATUS); + } } - }); - // we transmit to EDI if: - // - it has never been transmitted before - // - all the required fields are filled - if (transmissionToEdi == null - && email.getClient() != null - && email.getDemandType() != null - && StringUtils.isNotBlank(email.getProjectReference()) - && (!email.getDemandType().containsFields(MailField.RANGE_ROW) || CollectionUtils.isNotEmpty(email.getRangeRow()))) { + } else { - email.setDemandStatus(DemandStatus.TRANSMITTED_TO_EDI); + // TODO echatellier : pas sur qu'il faille l'ajouter tout le temps, mais sinon, le transfer se reproduira transmissionToEdi = historyDao.create(History.PROPERTY_TYPE, HistoryType.TRANSMISSION_TO_EDI, - History.PROPERTY_MODIFICATION_DATE, new Date()); + History.PROPERTY_MODIFICATION_DATE, new Date()); email.addHistory(transmissionToEdi); + + // passage en status + email.setDemandStatus(DemandStatus.IN_PROGRESS); fieldSet.add(Email.PROPERTY_DEMAND_STATUS); } } @@ -322,7 +336,7 @@ public void transmitPendingDemandsToEdi() { EmailTopiaDao dao = getPersistenceContext().getEmailDao(); - List<Email> toTransmitToEdi = dao.forDemandStatusEquals(DemandStatus.TRANSMITTED_TO_EDI).findAll(); + List<Email> toTransmitToEdi = dao.forDemandStatusEquals(DemandStatus.TRANSMISSION_TO_EDI).findAll(); if (log.isDebugEnabled()) { log.debug(toTransmitToEdi.size() + " demands to transmit to edi"); } @@ -337,40 +351,41 @@ * @param email email to send */ protected void transmitDemandToEdi(Email email) { - Preconditions.checkArgument(email.getDemandStatus() == DemandStatus.TRANSMITTED_TO_EDI); - - // FIXME echatellier : une demande transmise a EDI sasn rangeRow restera en TRANSMITTED_TO_EDI pour toujours - if (CollectionUtils.isEmpty(email.getRangeRow())) { + Preconditions.checkArgument(email.getDemandStatus() == DemandStatus.TRANSMISSION_TO_EDI); + Preconditions.checkArgument(!email.getRangeRow().isEmpty()); + + // recherche du dossier ou deposer les demandes EDI + MailFolder folder = email.getMailFolder(); + while (!folder.isUseCurrentLevelEdiFolder() && folder.getParent() != null) { + folder = folder.getParent(); + } + String ediFolder = folder.getEdiFolder(); + if (StringUtils.isBlank(ediFolder)) { + if (log.isFatalEnabled()) { + log.fatal("Aucun dossier de depot des demandes EDI défini pour le dossier " + folder.getName()); + } return; } + File ediFolderDirectory = new File(ediFolder); + if (!ediFolderDirectory.canWrite()) { + if (log.isFatalEnabled()) { + log.fatal("Le dossier " + ediFolderDirectory.getAbsolutePath() + " ne dispose pas des droits d'écriture !"); + } + return; + } //TODO kmorin 20140521 maybe check if the file is not being read // get output file with pattern name depending on date Date now = serviceContext.getNow(); - File ediDirectory = getApplicationConfig().getEdiDirectory(); - ediDirectory.mkdirs(); - String fileDate = DateFormatUtils.format(now, "yyMMddHHmmss"); // create a file for each commande for (RangeRow rangeRow : email.getRangeRow()) { - // il n'y a pas de condition si le fait que le fichier à déjà été généré - // si il existe déjà, on ne le génére pas à nouveau - // TODO comment avoir une vraie condition de non génération en double ? - String pattern = Pattern.quote("ORD_FAX_") + ".*" + Pattern.quote(rangeRow.getTopiaId() + ".txt"); - Collection<File> files = FileUtil.find(ediDirectory, pattern, false); - if (!files.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("Already existing file found for " + rangeRow.getTopiaId() + ". Skipping."); - } - continue; - } - String fileName = "ORD_FAX_" + fileDate + "_" + rangeRow.getTopiaId() + ".txt"; - File ediFile = new File(ediDirectory, fileName); + File ediFile = new File(ediFolderDirectory, fileName); // generate output content String separator = ";"; @@ -439,6 +454,11 @@ } } + + // changement du status + EmailTopiaDao dao = getPersistenceContext().getEmailDao(); + email.setDemandStatus(DemandStatus.TRANSMITTED_TO_EDI); + dao.update(email); } public PaginationResult<Email> getEmailForFolder(MailFolder folder, PaginationParameter page) { Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java 2014-07-10 13:41:44 UTC (rev 379) @@ -52,10 +52,8 @@ @Test public void testFindFilter() { - log.info(service.getAllMailFolders()); MailFolder folder = service.getFolderForRecipient("fx.savtest@franciaflex.com"); Assert.assertNotNull(folder); - log.info(folder.getName()); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-07-10 13:41:44 UTC (rev 379) @@ -265,6 +265,9 @@ DemandeUIModel selectedEmail = tableModel.getEntry(rowIndex); onDoubleClickOnDemande(selectedEmail); FaxToMailUIContext context = getContext(); + + // reset transaction + context.createNewTransaction(); Email email = context.getEmailService().addToHistory(selectedEmail.getTopiaId(), HistoryType.OPENING, context.getCurrentUser(), @@ -306,12 +309,6 @@ FaxToMailUIContext context = getContext(); - // reload transaction - context.createNewTransaction(); - // reload model with current transaction - Email email = context.getEmailService().getEmailById(selectedEmail.getTopiaId()); - selectedEmail.fromEntity(email); - context.setCurrentEmail(selectedEmail); context.getActionEngine().runAction(new ShowDemandeAction(context.getMainUI().getHandler())); } Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-07-10 13:41:44 UTC (rev 379) @@ -214,6 +214,11 @@ <input type="checkbox" ng-checked="selectedDemandType.fields.indexOf(mailField) != -1" ng-click="changeDemandTypeField(mailField)"> {{label}} </label> + <span ng-show="mailField == 'RANGE_ROW'">(<label> + <input type="checkbox" ng-model="selectedDemandType.ediTransfer" + ng-disabled="selectedDemandType.fields.indexOf(mailField) == -1"/> Autoriser le transfer EDI + <i class="fa fa-info-circle" tooltip="Si cette case est cochée, les demandes valides seront transférées à l'EDI pour le traitement des numéros de commande des gammes, sinon les demandes passerons directement dans le statut 'en cours'"></i> + </label>)</span> </div> </div> <div class="col-md-8" ng-if="!selectedDemandType"> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-07-10 12:41:05 UTC (rev 378) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-07-10 13:41:44 UTC (rev 379) @@ -327,11 +327,17 @@ // selection/deselection d'un champ $scope.changeDemandTypeField = function(mailField) { - + var index = $scope.selectedDemandType.fields.indexOf(mailField); if (index != -1) { $scope.selectedDemandType.fields.splice(index, 1); } else { + + // cas particulier des gammes + if (mailField == 'RANGE_ROW') { + $scope.selectedDemandType.ediTransfer = true; + } + $scope.selectedDemandType.fields.push(mailField); } };
participants (1)
-
echatellier@users.forge.codelutin.com