Author: echatellier Date: 2014-04-28 15:47:02 +0200 (Mon, 28 Apr 2014) New Revision: 51 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/51 Log: fixes #4657: [TECH] Int?\195?\169gration 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-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java 2014-04-28 08:52:27 UTC (rev 50) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java 2014-04-28 13:47:02 UTC (rev 51) @@ -25,10 +25,7 @@ */ import com.google.common.base.Charsets; -import com.google.common.base.Predicate; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.logging.Log; @@ -47,7 +44,6 @@ import java.io.File; import java.io.IOException; import java.net.URL; -import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; @@ -301,6 +297,12 @@ 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-04-28 08:52:27 UTC (rev 50) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java 2014-04-28 13:47:02 UTC (rev 51) @@ -142,12 +142,17 @@ true), // NOT TRANSIENT CONFIG - CSV_SEPARATOR( "faxtomail.csv.separator", n("faxtomail.config.option.csv.separator.description"), ";", char.class), + + EDI_DIRECTORY( + "faxtomail.edi.directory", + n("faxtomail.config.option.edi.directory.description"), + "${faxtomail.basedir}/edi", + File.class), // UI 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-04-28 08:52:27 UTC (rev 50) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-04-28 13:47:02 UTC (rev 51) @@ -24,6 +24,32 @@ * #L% */ +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.net.URL; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Properties; +import java.util.Set; + +import javax.mail.internet.MailDateFormat; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.mail.DefaultAuthenticator; +import org.apache.commons.mail.EmailConstants; +import org.apache.commons.mail.MultiPartEmail; + import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentTopiaDao; import com.franciaflex.faxtomail.persistence.entities.DemandStatus; @@ -42,29 +68,11 @@ import com.franciaflex.faxtomail.persistence.entities.Reply; import com.franciaflex.faxtomail.persistence.entities.ReplyTopiaDao; import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; +import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.commons.mail.DefaultAuthenticator; -import org.apache.commons.mail.EmailConstants; -import org.apache.commons.mail.MultiPartEmail; - -import javax.mail.internet.MailDateFormat; - -import java.io.File; -import java.net.URL; -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Properties; -import java.util.Set; - /** * @author kmorin <kmorin@codelutin.com> * @since x.x @@ -120,7 +128,7 @@ Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_PROJECT_REFERENCE))) { email.setDemandStatus(DemandStatus.IN_PROGRESS); - //TODO transmit to EDI + transmitDemandToEdi(email); } History history; @@ -154,6 +162,98 @@ return result; } + /** + * Generate txt file to send demand to EDI system. + * + * @param email email to send + */ + protected void transmitDemandToEdi(Email email) { + Preconditions.checkArgument(email.getDemandStatus() == DemandStatus.IN_PROGRESS); + + if (CollectionUtils.isEmpty(email.getRangeRow())) { + return; + } + + // 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()) { + String fileName = "ORD_FAX_" + fileDate + "_" + rangeRow.getTopiaId() + ".txt"; + + File ediFile = new File(ediDirectory, fileName); + + // generate output content + String separator = ";"; + try (Writer ediWriter = new BufferedWriter(new FileWriter(ediFile))) { + + ediWriter.write("%BEGIN_ENTETE_QUOTE\n"); + + //N° Champ/Champ/Type/Longueur/Observation + //01/Id Enregistrement/Alpha/1/Cst : E (En-tête) + ediWriter.write("E" + separator); + //02/N° d’ordre achat/Numérique/6/Cst : OARFAX + ediWriter.write("OARFAX" + separator); + //03/Date traitement/Date/6/JJMMAA dte système + ediWriter.write(DateFormatUtils.format(now, "ddMMyy") + separator); + //04/Date livraison prévue/Date/6/JJMMAA dte système + ediWriter.write(DateFormatUtils.format(now, "ddMMyy") + separator); + //05/Commentaire/Alpha/70/Vide + ediWriter.write(separator); + //06/Commentaire/Alpha/70/Vide + ediWriter.write(separator); + //07/Commentaire/Alpha/70/Vide + ediWriter.write(separator); + //08/Commentaire/Alpha/70/Vide + ediWriter.write(separator); + //09//Référence client FX/Alpha/36/Référence Chantier + ediWriter.write(Strings.nullToEmpty(email.getProjectReference()) + separator); + //10/Nom du contact/Alpha/35/Vide + ediWriter.write(separator); + //11/Téléphone contact/Alpha/15/Vide + ediWriter.write(separator); + //12/Fax contact/Alpha/15/Vide + ediWriter.write(separator); + //13/Devise/Alpha/3/Cst : EUR + ediWriter.write("EUR" + separator); + //14/Condition de livraison/Alpha/3/Vide + ediWriter.write(separator); + //15/Type de commande/Alpha/Type de document + ediWriter.write(email.getDemandType().getLabel() + separator); + //16/Adresse livr : Nom/Alpha/35/Vide + ediWriter.write(separator); + //18/Adresse livr : adr1/Alpha/30/Vide + ediWriter.write(separator); + //19/Adresse livr : adr2/Alpha/30/Vide + ediWriter.write(separator); + //20/Adresse livr : cp ville/Alpha/30/Vide + ediWriter.write(separator); + //21/Adresse livr : compl./Alpha/30/Vide + ediWriter.write(separator); + //22/Adresse livr : Code postal/Alpha/10/Vide + ediWriter.write(separator); + //23/Adresse livr : Code Pays/Alpha/3/Vide + ediWriter.write(separator); + //24/Code Ean acheteur/Alpha/13/Code client + ediWriter.write(email.getClient().getCode() + separator); + //25/Code Ean facturé/Alpha/13/Code client + ediWriter.write(email.getClient().getCode() + separator); + //26/Code Ean fournisseur/Alpha/13/Gamme + ediWriter.write(rangeRow.getRange().getLabel() + separator); + //27/Identifiant Unique + ediWriter.write(rangeRow.getRange().getTopiaId() + "\n"); + + ediWriter.write("%END_ENTETE_QUOTE\n"); + } catch (IOException ex) { + throw new RuntimeException("Can't generate EDI file"); + } + } + } + public List<Email> getEmailForFolder(MailFolder folder) { EmailTopiaDao dao = getPersistenceContext().getEmailDao(); List<Email> result = new ArrayList<>(dao.forMailFolderEquals(folder)