r570 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util faxtomail-ui-swing/src/main/resources/i18n
Author: kmorin Date: 2014-08-18 15:51:14 +0200 (Mon, 18 Aug 2014) New Revision: 570 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/570 Log: fixes #5381 Permettre de transf?\195?\169rer les demandes d'un m?\195?\170me groupe et m?\195?\170me dossier correction actions depuis la liste quand les demandes ne sont pas valides Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java 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/EmailServiceImpl.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenMailFolderChooserAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 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-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-08-18 13:51:14 UTC (rev 570) @@ -52,6 +52,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Kevin Morin (Code Lutin) @@ -93,6 +94,8 @@ String content, Collection<AttachmentFile> attachments, String originalEmailId, FaxToMailUser user) throws EmailException, MessagingException, IOException; + void transmit(Collection<String> emailIds, MailFolder newFolder, FaxToMailUser currentUser); + AttachmentFile getAttachmentFileFromStream(InputStream contentStream); AttachmentFile getAttachmentFile(String attachmentId, boolean original); Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-18 13:51:14 UTC (rev 570) @@ -119,7 +119,6 @@ .forTopiaIdEquals(id) .addAllFetches(Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_DEMAND_TYPE + "." + DemandType.PROPERTY_FIELDS, - Email.PROPERTY_RANGE_ROW, Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, Email.PROPERTY_HISTORY, Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, @@ -130,6 +129,7 @@ Email.PROPERTY_CLIENT, Email.PROPERTY_EMAIL_GROUP, Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL, + Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL +"." + Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_ETAT_ATTENTE, Email.PROPERTY_ETAT_ATTENTE + "." + EtatAttente.PROPERTY_INVALID_FORM_DISABLED_ACTIONS, Email.PROPERTY_ETAT_ATTENTE + "." + EtatAttente.PROPERTY_VALID_FORM_DISABLED_ACTIONS, @@ -573,6 +573,8 @@ Email.PROPERTY_CLIENT, Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, Email.PROPERTY_ETAT_ATTENTE, + Email.PROPERTY_ETAT_ATTENTE + "." + EtatAttente.PROPERTY_INVALID_FORM_DISABLED_ACTIONS, + Email.PROPERTY_ETAT_ATTENTE + "." + EtatAttente.PROPERTY_VALID_FORM_DISABLED_ACTIONS, Email.PROPERTY_TAKEN_BY, Email.PROPERTY_REPLIES, Email.PROPERTY_ATTACHMENT, @@ -965,6 +967,27 @@ return email; } + @Override + public void transmit(Collection<String> emailIds, MailFolder newFolder, FaxToMailUser currentUser) { + EmailTopiaDao dao = getPersistenceContext().getEmailDao(); + HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); + + List<Email> emails = dao.forTopiaIdIn(emailIds).findAll(); + for (Email email : emails) { + email.setDemandStatus(DemandStatus.QUALIFIED); + email.setMailFolder(newFolder); + email.setTakenBy(null); + + History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.TRANSMISSION, + History.PROPERTY_FAX_TO_MAIL_USER, currentUser, + History.PROPERTY_MODIFICATION_DATE, new Date()); + + email.addHistory(history); + } + dao.updateAll(emails); + getPersistenceContext().commit(); + } + /** * Save content stream into attachment file content. * Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java 2014-08-18 13:51:14 UTC (rev 570) @@ -154,7 +154,7 @@ if (folder.isChildrenNotEmpty()) { for (MailFolder child : folder.getChildren()) { - // if the child is in the readable roots, rmeove it to merge the branches + // if the child is in the readable roots, remove it to merge the branches if (!readableRoots.remove(child)) { browseReadableFolders(child, readableRoots, user, writable); } @@ -175,10 +175,11 @@ for (MailFolder folder : folders) { MailFolder f = folder; + Boolean allowMoveDemandIntoFolder = folder.getAllowMoveDemandIntoFolder(); while (f.getParent() != null) { f = f.getParent(); - // if the parent is already in the readable roots, remove the current folder from the roots + // if the parent is already in the moveable roots, remove the current folder from the roots if (result.contains(f)) { result.remove(folder); folder = null; @@ -186,23 +187,33 @@ } fetchFolderAttributes(f); + + if (allowMoveDemandIntoFolder == null) { + allowMoveDemandIntoFolder = f.getAllowMoveDemandIntoFolder(); + } } if (folder != null) { - browseMoveableFolders(folder, result, user); + browseMoveableFolders(folder, result, allowMoveDemandIntoFolder); } } return result; } - protected void browseMoveableFolders(MailFolder folder, List<MailFolder> readableRoots, FaxToMailUser user) { - folder.setFolderMoveable(true); + protected void browseMoveableFolders(MailFolder folder, List<MailFolder> readableRoots, boolean inheritedAllowMoveDemandIntoFolder) { + Boolean allowMoveDemandIntoFolder = folder.getAllowMoveDemandIntoFolder(); + if (allowMoveDemandIntoFolder == null) { + allowMoveDemandIntoFolder = inheritedAllowMoveDemandIntoFolder; + } else { + inheritedAllowMoveDemandIntoFolder = allowMoveDemandIntoFolder; + } + folder.setFolderMoveable(allowMoveDemandIntoFolder); if (folder.isChildrenNotEmpty()) { for (MailFolder child : folder.getChildren()) { - // if the child is in the readable roots, rmeove it to merge the branches + // if the child is in the moveable roots, remove it to merge the branches if (!readableRoots.remove(child)) { - browseMoveableFolders(child, readableRoots, user); + browseMoveableFolders(child, readableRoots, inheritedAllowMoveDemandIntoFolder); } } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java 2014-08-18 13:51:14 UTC (rev 570) @@ -26,6 +26,7 @@ import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.MailAction; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; @@ -34,6 +35,7 @@ import com.google.common.collect.Iterables; import javax.swing.*; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -45,6 +47,8 @@ */ public class ArchiveFromListAction extends SaveDemandeFromListAction { + protected List<DemandeUIModel> demandsToArchive; + public ArchiveFromListAction(DemandeListUIHandler handler) { super(handler); setActionDescription(t("faxtomail.action.archive.tip")); @@ -52,27 +56,60 @@ @Override public boolean prepareAction() throws Exception { - int i = JOptionPane.showConfirmDialog( - null, - t("faxtomail.alert.archiveConfirmation.message"), - t("faxtomail.alert.archiveConfirmation.title"), - JOptionPane.YES_NO_OPTION, - JOptionPane.QUESTION_MESSAGE); + boolean result = super.prepareAction(); - boolean result = i == JOptionPane.YES_OPTION; + demandsToArchive = new ArrayList<DemandeUIModel>(); + List<DemandeUIModel> currentEmails = getModel().getSelectedEmails(); + + String notArchivableDemandTitles = ""; + for (DemandeUIModel demandeUIModel : currentEmails) { + // is the demand archivable? + if (!demandeUIModel.isEditable() || + !handler.isActionEnabled(demandeUIModel, MailAction.ARCHIVE, handler.getConfiguration())) { + notArchivableDemandTitles += "- " + demandeUIModel.getTitle() + "<br/>"; + + } else { + demandsToArchive.add(demandeUIModel); + } + } + + if (demandsToArchive.isEmpty()) { + displayWarningMessage(t("faxtomail.alert.noDemandToArchive.title"), + t("faxtomail.alert.noDemandToArchive.message", notArchivableDemandTitles)); + result = false; + + } else { + String message; + if (!notArchivableDemandTitles.isEmpty()) { + message = t("faxtomail.alert.archivesWithNotArchivableConfirmation.message", notArchivableDemandTitles); + + } else if (demandsToArchive.size() == 1) { + message = t("faxtomail.alert.archiveConfirmation.message"); + + } else { + message = t("faxtomail.alert.archivesConfirmation.message"); + } + int i = JOptionPane.showConfirmDialog(null, + message, + t("faxtomail.alert.archiveConfirmation.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + result = i == JOptionPane.YES_OPTION; + } + return result; } @Override public void doAction() throws Exception { - List<DemandeUIModel> currentEmails = getModel().getSelectedEmails(); // déplacement du mail dans le dossier d'archive le plus proche // cela permet de déplacer les archives dans d'autre dossier pour leur appliquer // des droits différents // les dossiers d'archive ne sont pas visible dans l'arbre des dossiers, mais les archives // peuvent être consultées dans la recherche - MailFolder folder = currentEmails.get(0).getMailFolder(); + MailFolder folder = demandsToArchive.get(0).getMailFolder(); MailFolder archiveChild = null; do { if (folder.getChildren() != null) { @@ -90,7 +127,7 @@ } while (archiveChild == null && folder != null); - for (DemandeUIModel email : currentEmails) { + for (DemandeUIModel email : demandsToArchive) { email.setArchiveDate(new Date()); email.setDemandStatus(DemandStatus.ARCHIVED); email.setTakenBy(null); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-08-18 13:51:14 UTC (rev 570) @@ -130,6 +130,7 @@ demand.setValid(handler.isDemandeValid(demand)); demand.setMailFolder(folder); + demand.setEditable(folder.isFolderWritable()); demands.add(demand); } @@ -139,15 +140,8 @@ } @Override - public void postSuccessAction() { - super.postSuccessAction(); + protected void releaseAction() { + super.releaseAction(); getUI().getNavigationTree().setEnabled(true); } - - @Override - public void postFailedAction(Throwable error) { - super.postFailedAction(error); - getUI().getNavigationTree().setEnabled(true); - } - } Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenMailFolderChooserFromListAction.java 2014-08-18 13:51:14 UTC (rev 570) @@ -0,0 +1,74 @@ +package com.franciaflex.faxtomail.ui.swing.actions; + +import com.franciaflex.faxtomail.persistence.entities.MailAction; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUI; +import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIModel; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + */ +public class OpenMailFolderChooserFromListAction extends AbstractFaxToMailAction<DemandeListUIModel, DemandeListUI, DemandeListUIHandler> { + + protected List<DemandeUIModel> demandsToTransmit; + protected MailFolderChooserUI frameContent; + + public OpenMailFolderChooserFromListAction(DemandeListUIHandler handler) { + super(handler, false); + } + + @Override + public boolean prepareAction() throws Exception { + boolean result = super.prepareAction(); + + List<DemandeUIModel> selectedEmails = getModel().getSelectedEmails(); + demandsToTransmit = new ArrayList<DemandeUIModel>(); + + String notTransmitableDemandsTitle = ""; + for (DemandeUIModel demandeUIModel : selectedEmails) { + if (!demandeUIModel.isEditable() || + !handler.isActionEnabled(demandeUIModel, MailAction.TRANSMIT, handler.getConfiguration())) { + + notTransmitableDemandsTitle += "- " + demandeUIModel.getTitle() + "<br/>"; + } else { + demandsToTransmit.add(demandeUIModel); + } + } + + + if (demandsToTransmit.isEmpty()) { + displayWarningMessage(t("faxtomail.alert.noDemandToTransmit.title"), + t("faxtomail.alert.noDemandToTransmit.message", notTransmitableDemandsTitle)); + result = false; + + } else if (!notTransmitableDemandsTitle.isEmpty()) { + displayWarningMessage(t("faxtomail.alert.demandsNotTransmittable.title"), + t("faxtomail.alert.demandsNotTransmittable.message", notTransmitableDemandsTitle)); + } + + return result; + } + + @Override + public void doAction() throws Exception { + MailFolderChooserUIModel model = new MailFolderChooserUIModel(); + model.setDemandeUIModels(demandsToTransmit); + frameContent = new MailFolderChooserUI(getUI(), model); + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + getHandler().openModalFrame(frameContent, t("faxtomail.chooseMailFolder.title"), new Dimension(350, 500)); + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/PrintOnDefaultPrinterAction.java 2014-08-18 13:51:14 UTC (rev 570) @@ -25,9 +25,11 @@ */ import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; +import com.franciaflex.faxtomail.persistence.entities.Configuration; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.persistence.entities.MailAction; import com.franciaflex.faxtomail.services.FaxToMailServiceContext; import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; @@ -60,6 +62,7 @@ protected Multimap<DemandeUIModel, AttachmentFile> attachmentsToPrintByDemand; protected boolean take; protected boolean printDemandDetails; + protected List<DemandeUIModel> notPrintableDemands; public PrintOnDefaultPrinterAction(AbstractFaxToMailUIHandler handler, Multimap<DemandeUIModel, AttachmentFile> attachmentsToPrintByDemand, @@ -77,46 +80,55 @@ @Override public void doAction() throws Exception { FaxToMailUser currentUser = getContext().getCurrentUser(); + AbstractFaxToMailUIHandler handler = (AbstractFaxToMailUIHandler) getHandler(); + Configuration config = getContext().newServiceContext().getConfigurationService().getConfiguration(); Multimap<DemandeUIModel, AttachmentFile> nonPrintedAttachment = HashMultimap.create(); + notPrintableDemands = new ArrayList<DemandeUIModel>(); for (DemandeUIModel demandeUIModel : attachmentsToPrintByDemand.keySet()) { - if (take) { - demandeUIModel.setTakenBy(currentUser); - } + if(!handler.isActionEnabled(demandeUIModel, MailAction.PRINT, config)) { + notPrintableDemands.add(demandeUIModel); - List<String> printedFiles = new ArrayList<String>(); + } else { + if (take) { + demandeUIModel.setTakenBy(currentUser); + } - FaxToMailServiceContext serviceContext = getContext().newServiceContext(); - if (printDemandDetails) { - // generate details as pdf - EmailService emailService = serviceContext.getEmailService(); - Email email = demandeUIModel.toEntity(); - final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); - // print details - FaxToMailUIUtil.print(demandDetailAttachment, true); - printedFiles.add(demandDetailAttachment.getFilename()); - } + List<String> printedFiles = new ArrayList<String>(); - for (AttachmentFile attachmentFile : attachmentsToPrintByDemand.get(demandeUIModel)) { + FaxToMailServiceContext serviceContext = getContext().newServiceContext(); + if (printDemandDetails) { + // generate details as pdf + EmailService emailService = serviceContext.getEmailService(); + Email email = demandeUIModel.toEntity(); + final AttachmentFile demandDetailAttachment = emailService.getEmailDetailAsAttachment(email); + // print details + FaxToMailUIUtil.print(demandDetailAttachment, true); + printedFiles.add(demandDetailAttachment.getFilename()); + } - boolean printable = FaxToMailUIUtil.isFileTypeEditable(attachmentFile.getFilename()); - if (printable) { - FaxToMailUIUtil.print(attachmentFile, true); - printedFiles.add(attachmentFile.getFilename()); + for (AttachmentFile attachmentFile : attachmentsToPrintByDemand.get(demandeUIModel)) { + if (attachmentFile != null) { + boolean printable = FaxToMailUIUtil.isFileTypeEditable(attachmentFile.getFilename()); + if (printable) { + FaxToMailUIUtil.print(attachmentFile, true); + printedFiles.add(attachmentFile.getFilename()); - } else { - nonPrintedAttachment.put(demandeUIModel, attachmentFile); + } else { + nonPrintedAttachment.put(demandeUIModel, attachmentFile); + } + } } + + Email email = serviceContext.getEmailService().addToHistory(demandeUIModel.getTopiaId(), + HistoryType.PRINTING, + getContext().getCurrentUser(), + new Date(), + printedFiles.toArray(new String[printedFiles.size()])); + demandeUIModel.setHistory(email.getHistory()); } - - Email email = serviceContext.getEmailService().addToHistory(demandeUIModel.getTopiaId(), - HistoryType.PRINTING, - getContext().getCurrentUser(), - new Date(), - printedFiles.toArray(new String[printedFiles.size()])); - demandeUIModel.setHistory(email.getHistory()); } // print another page for non printed attachments @@ -126,6 +138,22 @@ } } + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + if (!notPrintableDemands.isEmpty()) { + String notPrintableDemandTitles = ""; + for (DemandeUIModel demandeUIModel : notPrintableDemands) { + notPrintableDemandTitles += "- " + demandeUIModel.getTitle() + "<br/>"; + } + + displayWarningMessage(t("faxtomail.action.print.notPrintableDemands.title"), + t("faxtomail.action.print.notPrintableDemands.message", + notPrintableDemandTitles)); + } + } + /** * Retourne un flux de données qui correspond à une page de récapitulatif des pièces jointes * non imprimées. Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenMailFolderChooserAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenMailFolderChooserAction.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenMailFolderChooserAction.java 2014-08-18 13:51:14 UTC (rev 570) @@ -24,6 +24,7 @@ * #L% */ +import com.franciaflex.faxtomail.persistence.entities.MailAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandesUIHandler; @@ -32,6 +33,7 @@ import java.awt.*; import java.util.*; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -58,7 +60,7 @@ public void doAction() throws Exception { super.doAction(); - java.util.List<DemandeUIModel> demandes = Collections.singletonList(getModel()); + List<DemandeUIModel> demandes = Collections.singletonList(getModel()); MailFolderChooserUIModel model = new MailFolderChooserUIModel(); model.setDemandeUIModels(demandes); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-08-18 13:51:14 UTC (rev 570) @@ -26,20 +26,28 @@ import static org.nuiton.i18n.I18n.t; +import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import jaxx.runtime.JAXXContext; import jaxx.runtime.JAXXUtil; -import com.franciaflex.faxtomail.persistence.entities.DemandStatus; -import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; -import com.franciaflex.faxtomail.ui.swing.content.demande.DemandesUI; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUI; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIHandler; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIModel; +import javax.swing.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + /** * @author Kevin Morin (Code Lutin) * @@ -52,49 +60,79 @@ } @Override - public void doAction() throws Exception { + public boolean prepareAction() throws Exception { + boolean result = super.prepareAction(); + MailFolderChooserUIModel model = getModel(); - for (DemandeUIModel demande : model.getDemandeUIModels()) { - demande.setDemandStatus(DemandStatus.QUALIFIED); - demande.setMailFolder(model.getMailFolder()); - demande.setTakenBy(null); - } + List<DemandeUIModel> demandeUIModels = new ArrayList<DemandeUIModel>(model.getDemandeUIModels()); - // suivant la condition on est soit dans le cas d'une edition de demande - // soit dans le cas d'une action contextuel depuis la liste des demandes - FaxToMailUI parentDemandeListUI = (FaxToMailUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT); - if (parentDemandeListUI != null) { - if (DemandeListUI.class.isAssignableFrom(parentDemandeListUI.getClass())) { - // appel du service pour sauver les mails - // mais il faudrai sauver tous les mails d'un seul coup - for (DemandeUIModel demande : model.getDemandeUIModels()) { - String topiaId = demande.getTopiaId(); - Email email = getContext().newServiceContext().getEmailService().getEmailById(topiaId); - email = demande.toEntity(email); - getContext().newServiceContext().getEmailService().saveEmail(email, null, Email.PROPERTY_MAIL_FOLDER); + for (DemandeUIModel demandeUIModel : model.getDemandeUIModels()) { + + final MailFolder mailFolder = demandeUIModel.getMailFolder(); + List<DemandeUIModel> groupedDemandes = demandeUIModel.getGroupedDemandes(); + // on cherche les demandes groupées qui sont dans le même groupe, pour demander si on les déplace aussi + Collection<DemandeUIModel> sameFolderGroupedDemands = + Collections2.filter(groupedDemandes, new Predicate<DemandeUIModel>() { + @Override + public boolean apply(DemandeUIModel demandeUIModel) { + return mailFolder.equals(demandeUIModel.getMailFolder()); } + }); - // appel de l'action de rechargement de la liste - getContext().getActionEngine().runInternalAction(parentDemandeListUI.getHandler(), - LoadFolderEmailsAction.class); + if (!sameFolderGroupedDemands.isEmpty()) { + String groupedDemandTitles = ""; + for (DemandeUIModel groupedDemand : sameFolderGroupedDemands) { + groupedDemandTitles += "- " + groupedDemand.getTitle() + "<br/>"; + } - } else { - DemandesUI parentUI = (DemandesUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT); - DemandeUI demandeUI = (DemandeUI) parentUI.getDemandsTabPane().getSelectedComponent(); - getActionEngine().runInternalAction(demandeUI.getHandler(), SaveDemandeAction.class); + int i = JOptionPane.showConfirmDialog(null, + t("faxtomail.alert.transmit.groupedDemandsInSameFolder.message", + demandeUIModel.getTitle(), + groupedDemandTitles), + t("faxtomail.alert.transmit.groupedDemandsInSameFolder.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + if (i == JOptionPane.YES_OPTION) { + demandeUIModels.addAll(sameFolderGroupedDemands); + } } } + model.setDemandeUIModels(demandeUIModels); + + return result; } @Override + public void doAction() throws Exception { + MailFolderChooserUIModel model = getModel(); + Collection<String> emailIds = Collections2.transform(model.getDemandeUIModels(), new Function<DemandeUIModel, String>() { + @Override + public String apply(DemandeUIModel demandeUIModel) { + return demandeUIModel.getTopiaId(); + } + }); + getContext().newServiceContext().getEmailService().transmit(emailIds, model.getMailFolder(), getContext().getCurrentUser()); + } + + @Override public void postSuccessAction() { super.postSuccessAction(); MailFolderChooserUIHandler handler = getHandler(); - //FIXME works but ugly - FaxToMailUI parentDemandeListUI = (FaxToMailUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT); - if (parentDemandeListUI != null && !DemandeListUI.class.isAssignableFrom(parentDemandeListUI.getClass())) { - getActionEngine().runInternalAction(handler, GoToPreviousScreenAction.class); + + FaxToMailUI parentUI = (FaxToMailUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT); + if (parentUI != null) { + if (DemandeUI.class.isAssignableFrom(parentUI.getClass())) { + getActionEngine().runInternalAction(handler, GoToPreviousScreenAction.class); + + } else if (DemandeListUI.class.isAssignableFrom(parentUI.getClass())) { + DemandeListUI demandeListUI = (DemandeListUI) parentUI; + DemandeListUIModel listModel = demandeListUI.getModel(); + List<DemandeUIModel> demandList = new ArrayList<DemandeUIModel>(listModel.getEmails()); + demandList.removeAll(getModel().getDemandeUIModels()); + listModel.setEmails(demandList); + } } + handler.closeFrame(); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-08-18 13:51:14 UTC (rev 570) @@ -57,10 +57,14 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; +import com.franciaflex.faxtomail.persistence.entities.Configuration; +import com.franciaflex.faxtomail.persistence.entities.MailAction; +import com.franciaflex.faxtomail.ui.swing.actions.OpenMailFolderChooserFromListAction; import jaxx.runtime.JAXXContext; import jaxx.runtime.JAXXUtil; import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -111,6 +115,8 @@ /** Logger. */ private static final Log log = LogFactory.getLog(DemandeListUIHandler.class); + protected Configuration config; + protected ITableFilter<JTable> tableFilter; public ITableFilter<JTable> getTableFilter() { @@ -135,11 +141,16 @@ } }; + public Configuration getConfiguration() { + return config; + } + @Override public void beforeInit(DemandeListUI ui) { - super.beforeInit(ui); + config = getContext().newServiceContext().getConfigurationService().getConfiguration(); + DemandeListUIModel model = new DemandeListUIModel(); Collection<MailFolder> folders = getContext().newServiceContext().getMailFolderService() .getRootMailFoldersWithReadingRights(getContext().getCurrentUser()); @@ -467,12 +478,17 @@ int selectedRowCount = getUI().getDataTable().getSelectedRowCount(); + DemandeListUIModel model = getModel(); - model.setReplyEnabled(selectedRowCount == 1 && model.getSelectedEmails().get(0).isEditable()); - model.setArchiveEnabled(selectedRowCount > 1 || - selectedRowCount > 0 && model.getSelectedEmails().get(0).isEditable()); - model.setTransmitEnabled(selectedRowCount > 1 || - selectedRowCount > 0 && model.getSelectedEmails().get(0).isEditable()); + DemandeUIModel firstDemandeUIModel = model.getSelectedEmails().get(0); + + model.setReplyEnabled(selectedRowCount == 1 + && firstDemandeUIModel.isEditable() + && isActionEnabled(firstDemandeUIModel, MailAction.REPLY, config)); + + model.setArchiveEnabled(selectedRowCount > 0); + model.setTransmitEnabled(selectedRowCount > 0); + model.setPrintEnabled(selectedRowCount > 0); } /** @@ -554,16 +570,22 @@ for (DemandeUIModel demandeUIModel : model.getSelectedEmails()) { - for (Attachment attachment : demandeUIModel.getAttachment()) { - // force lazy loading - // TODO kmorin 20140813 action ? - FaxToMailUIUtil.forceAttachmentFileLoading(getContext(), attachment); + List<Attachment> attachments = demandeUIModel.getAttachment(); + if (CollectionUtils.isEmpty(attachments)) { + attachmentToPrints.put(demandeUIModel, null); - AttachmentFile attachmentFile = attachment.getEditedFile(); - if (attachmentFile == null) { - attachmentFile = attachment.getOriginalFile(); + } else { + for (Attachment attachment : attachments) { + // force lazy loading + // TODO kmorin 20140813 action ? + FaxToMailUIUtil.forceAttachmentFileLoading(getContext(), attachment); + + AttachmentFile attachmentFile = attachment.getEditedFile(); + if (attachmentFile == null) { + attachmentFile = attachment.getOriginalFile(); + } + attachmentToPrints.put(demandeUIModel, attachmentFile); } - attachmentToPrints.put(demandeUIModel, attachmentFile); } } @@ -594,21 +616,19 @@ } public void archive() { - ArchiveFromListAction saveAction = - getContext().getActionFactory().createLogicAction(DemandeListUIHandler.this, + ArchiveFromListAction action = + getContext().getActionFactory().createLogicAction(this, ArchiveFromListAction.class); - getContext().getActionEngine().runAction(saveAction); + getContext().getActionEngine().runAction(action); } /** * Display move popup for user to chose where to move all selected demands. */ public void transmit() { - List<DemandeUIModel> selectedEmails = getModel().getSelectedEmails(); - MailFolderChooserUIModel model = new MailFolderChooserUIModel(); - model.setDemandeUIModels(selectedEmails); - MailFolderChooserUI dialogContent = new MailFolderChooserUI(ui, model); - - openModalFrame(dialogContent, t("faxtomail.chooseMailFolder.title"), new Dimension(350, 500)); + OpenMailFolderChooserFromListAction action = + getContext().getActionFactory().createLogicAction(this, + OpenMailFolderChooserFromListAction.class); + getContext().getActionEngine().runAction(action); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java 2014-08-18 13:51:14 UTC (rev 570) @@ -52,6 +52,7 @@ public static final String PROPERTY_REPLY_ENABLED = "replyEnabled"; public static final String PROPERTY_ARCHIVE_ENABLED = "archiveEnabled"; public static final String PROPERTY_TRANSMIT_ENABLED = "transmitEnabled"; + public static final String PROPERTY_PRINT_ENABLED = "printEnabled"; public static final String PROPERTY_COMPUTE_QUANTITIES_BY_RANGE_ENABLED = "computeQuantitiesByRangeEnabled"; public static final String PROPERTY_NEW_DEMAND_ENABLED = "newDemandEnabled"; public static final String PROPERTY_RESULT_PER_PAGE = "resultPerPage"; @@ -79,6 +80,8 @@ protected boolean transmitEnabled; + protected boolean printEnabled; + protected boolean computeQuantitiesByRangeEnabled; protected boolean newDemandEnabled; @@ -216,6 +219,16 @@ return transmitEnabled; } + public void setPrintEnabled(boolean printEnabled) { + Object oldValue = this.printEnabled; + this.printEnabled = printEnabled; + firePropertyChange(PROPERTY_PRINT_ENABLED, oldValue, printEnabled); + } + + public boolean isPrintEnabled() { + return printEnabled; + } + public void setTransmitEnabled(boolean transmitEnabled) { Object oldValue = this.transmitEnabled; this.transmitEnabled = transmitEnabled; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-08-18 13:51:14 UTC (rev 570) @@ -782,6 +782,7 @@ demandeUIModel.setObject(email.getObject()); demandeUIModel.setCompanyReference(email.getCompanyReference()); demandeUIModel.setTopiaId(email.getTopiaId()); + demandeUIModel.setMailFolder(email.getMailFolder()); groupedDemandes.add(demandeUIModel); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-08-18 13:51:14 UTC (rev 570) @@ -148,39 +148,25 @@ model.addDemand(currentEmail); } - protected boolean isActionEnabled(DemandeUIModel model, MailAction action) { - - EtatAttente etatAttente = model.getEtatAttente(); - boolean valid = model.isValid(); - - boolean enabled = - etatAttente == null && (valid || !config.containsInvalidFormDisabledActions(action)) - || etatAttente != null && - (valid && !etatAttente.containsValidFormDisabledActions(action) - || !valid && !etatAttente.containsInvalidFormDisabledActions(action)); - - return enabled; - } - protected void updateButtonEnability() { DemandeUIModel model = getModel().getCurrentDemand(); boolean editable = model.isEditable(); boolean archived = model.getArchiveDate() != null; - boolean transmitEnabled = editable && isActionEnabled(model, MailAction.TRANSMIT); + boolean transmitEnabled = editable && isActionEnabled(model, MailAction.TRANSMIT, config); getModel().setTransmitEnabled(transmitEnabled); - boolean archiveEnabled = editable && isActionEnabled(model, MailAction.ARCHIVE); + boolean archiveEnabled = editable && isActionEnabled(model, MailAction.ARCHIVE, config); getModel().setArchiveEnabled(archiveEnabled); - boolean groupEnabled = isActionEnabled(model, MailAction.GROUP); + boolean groupEnabled = isActionEnabled(model, MailAction.GROUP, config); getModel().setGroupEnabled(groupEnabled); - boolean printEnabled = isActionEnabled(model, MailAction.PRINT); + boolean printEnabled = isActionEnabled(model, MailAction.PRINT, config); getModel().setPrintEnabled(printEnabled); - boolean replyEnabled = (editable || archived) && isActionEnabled(model, MailAction.REPLY); + boolean replyEnabled = (editable || archived) && isActionEnabled(model, MailAction.REPLY, config); getModel().setReplyEnabled(replyEnabled); } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java 2014-08-18 13:51:14 UTC (rev 570) @@ -64,10 +64,6 @@ initUI(mailFolderChooserUI); MailFolderChooserUIModel model = getModel(); - - // fixme echatellier 20140808 : pour le dossier courant, on prend celui du premier mais - // ce n'est pas forcement très correct pour la recherche car les demandes peuvent - // provenir de dossier différents MailFolder currentMailFolder = model.getDemandeUIModels().get(0).getMailFolder(); // on recupere seulement les dossiers qui accepte l'ensemble des états d'attentes de l'ensemble des demandes Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-18 13:51:14 UTC (rev 570) @@ -56,6 +56,10 @@ import javax.swing.event.TableModelListener; import javax.swing.text.JTextComponent; +import com.franciaflex.faxtomail.persistence.entities.Configuration; +import com.franciaflex.faxtomail.persistence.entities.EtatAttente; +import com.franciaflex.faxtomail.persistence.entities.MailAction; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanUIUtil; @@ -437,4 +441,17 @@ }); } + public boolean isActionEnabled(DemandeUIModel model, MailAction action, Configuration config) { + + EtatAttente etatAttente = model.getEtatAttente(); + boolean valid = model.isValid(); + + boolean enabled = + etatAttente == null && (valid || !config.containsInvalidFormDisabledActions(action)) + || etatAttente != null && + (valid && !etatAttente.containsValidFormDisabledActions(action) + || !valid && !etatAttente.containsInvalidFormDisabledActions(action)); + + return enabled; + } } Modified: trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-18 13:44:24 UTC (rev 569) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-18 13:51:14 UTC (rev 570) @@ -17,6 +17,8 @@ faxtomail.action.goto.search.tip=Aller à l'écran de recherche faxtomail.action.group.tip=Grouper l'élément faxtomail.action.loadFolderEmails.tip=Chargement des demandes du dossier %s +faxtomail.action.print.notPrintableDemands.message=<html>Les éléments suivant n'ont pas été imprimés car ils n'étaient pas valides \:<br/>%s</html> +faxtomail.action.print.notPrintableDemands.title=Éléments non imprimés faxtomail.action.print.tip=Impression faxtomail.action.reloadFaxToMail=Recharger FaxToMail faxtomail.action.reply.tip=Envoyer la réponse @@ -31,10 +33,20 @@ faxtomail.alert.alreadyTakenBy.title=Document déjà pris faxtomail.alert.archiveConfirmation.message=<html>Êtes vous sûr de vouloir archiver cet élément ?<br/>L'archivage est définitif.</html> faxtomail.alert.archiveConfirmation.title=Confirmation de l'archivage +faxtomail.alert.archivesConfirmation.message=<html>Êtes vous sûr de vouloir archiver ces éléments ?<br/>L'archivage est définitif.</html> +faxtomail.alert.archivesWithNotArchivableConfirmation.message=<html>Les éléments suivants ne peuvent pas être archivés car ils ne sont pas valides \:<br/>%sÊtes vous sûr de vouloir archiver les autres éléments ?<br/>L'archivage est définitif.</html> +faxtomail.alert.demandsNotTransmittable.message=<html>Les éléments suivant ne seront pas déplacés car ils ne sont pas valides \:<br/>%s</html> +faxtomail.alert.demandsNotTransmittable.title=Éléments non déplaçables faxtomail.alert.emailMoved.message=<html>Depuis que vous avez chargé les éléments du dossier %1$s, l'élément<br/>%3$s<br/>a été déplacé dans le dossier %2$s.</html> faxtomail.alert.emailMoved.title=Élément déplacé faxtomail.alert.groupConfirmation.message=<html>Êtes vous sûr de vouloir grouper les éléments<br/>%1$s et<br/>%2$s ?<br/>Le groupement est définitif.</html> faxtomail.alert.groupConfirmation.title=Confirmation du groupement +faxtomail.alert.noDemandToArchive.message=<html>Les éléments suivants ne peuvent pas être archivés car ils ne sont pas valides \:<br/>%sIl n'y a pas d'autres éléments à archiver.</html> +faxtomail.alert.noDemandToArchive.title=Aucun élément à archiver +faxtomail.alert.noDemandToTransmit.message=<html>Les éléments suivants ne peuvent pas seront pas déplacés car ils ne sont pas valides \:<br/>%sIl n'y a pas d'autres éléments à déplacer.</html> +faxtomail.alert.noDemandToTransmit.title=Aucun élément à déplacer +faxtomail.alert.transmit.groupedDemandsInSameFolder.message=<html>L'élément %1$s a un ou plusieurs éléments groupés dans le même dossier \:<br/>%2$sVoulez-vous les déplacer aussi ?</html> +faxtomail.alert.transmit.groupedDemandsInSameFolder.title=Déplacer les éléments groupés faxtomail.alert.userNotAuthorizedToReadEmail.message=Vous n'avez pas le droit de lire les éléments du dossier %s faxtomail.alert.userNotAuthorizedToReadEmail.title=Dossier interdit faxtomail.attachment.editedFile.name=%s-annoté
participants (1)
-
kmorin@users.forge.codelutin.com