private static bool ArchiveDocument(Upsilab.Data.Model.SignatureTransaction signatureTransaction)
        {
            bool bOK = true; //TODO

            DTPClient dtpClient = new DTPClient(signatureTransaction.idDTPTransaction);

            //1- Update missionDocument table
            //signatoryTransaction.Status = ReportBL.Status.Completed.ToString(); //If signed by all signatories
            DocumentBL.Status docStatus = DocumentBL.Status.Completed;
            DocumentSignatureTransactionBL.UpdateTransactionStatus(signatureTransaction.idSignatureTransaction, docStatus);

            //2- Reduice firm credit after signature + mise au coffre
            //TODO : don't archive, sign doc if credit is not sufficient
            try
            {
                //var firmSDG = Upsilab.Business.Configuration.FirmInstitutionBL.GetFirmInstitutionParentByIdUser(signatureTransaction.idUserCreated);
                var firmSDG = Configuration.FirmInstitutionBL.GetFirmInstitutionParentByIdFirm(signatureTransaction.idFirmInstitution.Value);

                CreditOperationBL.OperationType operationType = CreditOperationBL.OperationType.UNKNOWN;//TODO
                if (signatureTransaction.SignatureTransactionType == DocumentSignatureTransactionBL.SignatureTransactionType.CONVENTION.ToString())
                {
                    operationType = CreditOperationBL.OperationType.SIGNATURE_SDG_CONVENTION;
                }
                else if (signatureTransaction.SignatureTransactionType == DocumentSignatureTransactionBL.SignatureTransactionType.AVENANT.ToString())
                {
                    operationType = CreditOperationBL.OperationType.SIGNATURE_SDG_AVENANT;
                }

                CreditOperationBL.SubstractCredit(firmSDG.idFirmInstitution, operationType.ToString(), signatureTransaction.idUserCreated);
            }
            catch { }

            //3- Save signed document to the server
            var docDocType = ElectronicSafeDocumentBL.DocumentType.DOC.ToString();
            var documentsToSign = (from doc in signatureTransaction.Document
                                   where doc.DocumentType != docDocType && doc.DocumentSignatory.Count > 0
                                   select doc).ToList();

            //TODO - TEST--------------------------------
            //documentsToSign = documentsToSign.Where(x => x.DocumentType == "CPART").ToList();
            //--------------------------------------------

            for (int i = 0; i < documentsToSign.Count; i++)
            {
                try
                {
                    var document = documentsToSign.ElementAt(i);

                    //Document to sign
                    var dtpDocType = (i == 0) ? DTPClient.DocumentTypes.CONTRACT.ToString() : string.Format("{0}{1}", DTPClient.APPENDIX, i);

                    var relativePath = string.Empty;
                    var documentName = ElectronicSafeDocumentBL.BuildDocumentName(document.DocumentType, document.idDocument);
                    var fullPath = ElectronicSafeDocumentBL.BuildSignatureDocumentPath(signatureTransaction.FirmInstitution.FirmInstitutionName, signatureTransaction.FirmInstitution.idFirmInstitution, document.DocumentType.ToDocumentTypeEnum(), false, out relativePath); //CF

                    Upsilab.Infrastructure.DictaoDTPCoreServiceReference.Document dtpDoc = dtpClient.GetDocumentByType(dtpDocType);

                    if (dtpDoc != null)
                    {
                        //Save physically
                        dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

                        //TODO : Save document to ElectronicSafe table
                        var documentLabel = LanguageContentBL.Translate(document.DocumentType.ToLower());

                        //Particular case for "AVENANT"
                        if (signatureTransaction.SignatureTransactionType == DocumentSignatureTransactionBL.SignatureTransactionType.AVENANT.ToString())
                        {
                            documentLabel = document.Designation;
                        }

                        ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, document.DocumentType, documentLabel, relativePath, signatureTransaction.idFirmInstitution.Value, signatureTransaction.idDTPTransaction, null, false, null, null, signatureTransaction.idSignatureTransaction);
                    }
                }
                catch (Exception ex)
                {
                    Log.Log.AppendException(ex);
                }
            } 
      
            //4- Save to coffre document of type "DOC", doc not signed (documents de complétude)
            var clientD3S = new D3SClient();

            var documentsNotSigned = (from doc in signatureTransaction.Document
                                      where doc.DocumentType == docDocType
                                      select doc).ToList();

            foreach (var document in documentsNotSigned)
            {
                try
                {
                    //1- Copy to directory
                    var sourceFilePath = FileManager.GetFileFromUploadDirectory(document.Location, document.Name);

                    var relativePath = string.Empty;
                    var fullPath = ElectronicSafeDocumentBL.BuildSignatureDocumentPath(signatureTransaction.FirmInstitution.FirmInstitutionName, signatureTransaction.FirmInstitution.idFirmInstitution, ElectronicSafeDocumentBL.DocumentType.DOC, false, out relativePath); //CF
                    var destFileName = ElectronicSafeDocumentBL.BuildDocumentName(document.Label, document.idDocument);
                    var destFilePath = Path.Combine(fullPath, destFileName);

                    if (!System.IO.File.Exists(destFilePath))
                    {
                        System.IO.File.Copy(sourceFilePath, destFilePath);

                        //2- Send to dictao
                        var dictaoId = ElectronicSafeDocumentBL.SendToDictaoCoffreFort(sourceFilePath.Replace(document.Name, string.Empty),
                            document.Name, clientD3S);

                        if (!string.IsNullOrEmpty(dictaoId))
                        {
                            var documentLabel = document.DocumentCategory != null ? document.DocumentCategory.Label : document.Name.Split('.')[0];
                            ElectronicSafeDocumentBL.SaveDocumentToDB(destFileName, document.DocumentType, documentLabel, relativePath, signatureTransaction.idFirmInstitution.Value, dictaoId, clientD3S, false, document.IdDocumentCategory, null, signatureTransaction.idSignatureTransaction);
                        }

                    }

                }
                catch (Exception ex)
                {
                    Log.Log.AppendException(ex);
                }
            }


            //5- If all is ok, finish / close transaction
            dtpClient.FinishTransaction();

            IList<string> documentTypesToExcludeOnArchive = null; //TODO

            //6- Archive transaction : TODO : asynchrone ?
            try
            {
                string businessId = string.Format("{0}-{1}", DOCUMENT, signatureTransaction.idSignatureTransaction);
                dtpClient.ArchiveTransaction(string.Empty, string.Empty, string.Empty, businessId, documentTypesToExcludeOnArchive);
            }
            catch { }


            return bOK;
        }
        public static bool GetSignedDocumentFromDictao(string idDictao, string destFullPath, string destFileName, DTPClient.DocumentTypes dtpDocumentType)
        {
            var isOk = true;
            try
            {
                //1- Instanciate DTPClient
                DTPClient dtpClient = new DTPClient(idDictao);

                //2- Save signed document to the server 
                //NB : only for CONTRACT type
                Upsilab.Infrastructure.DictaoDTPCoreServiceReference.Document dtpDoc = dtpClient.GetDocumentByType(dtpDocumentType);
                dtpClient.SaveDocumentToFile(dtpDoc, destFullPath, destFileName);
            }
            catch (Exception ex)
            {
                isOk = false;
                Log.Log.AppendException(ex);
            }

            return isOk;
        }
        private static bool ArchiveSignedDER(Upsilab.Data.Model.DER der)
        {
            bool bOK = true; //TODO

            DTPClient dtpClient = new DTPClient(der.idDictao);

            //1- Update missionDocument table
            der.Status = ReportBL.Status.Completed.ToString(); //If signed by the 2 parts and saved to coffrefort
            der.Archived = true;
            der.IsOriginal = true;

            //2- Reduice firm credit after signature + mise au coffre
            //TODO : don't archive, sign doc if credit is not sufficient
            try
            {
                CreditOperationBL.SubstractCredit(der.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.MISE_AU_COFFRE_AUTOMATIQUE_DER.ToString(), der.CustomerProspect.idUserCreated, der.CustomerProspect.idCustomer);
            }
            catch { }

            //3- Save signed document to the server 
            //a- CONTRACT
            ElectronicSafeDocumentBL.DocumentType docType = ElectronicSafeDocumentBL.DocumentType.FIL; //<=> DER
            string documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), der.idCustomerProspect);
            string documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), der.CustomerProspect);
            string fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

            Upsilab.Infrastructure.DictaoDTPCoreServiceReference.Document dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.CONTRACT);
            dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

            //4- Save document to ElectronicSafe table
            string docLabel = LanguageContentBL.Translate("der_title");
            string documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), docLabel, (der.DateUpdated.HasValue) ? der.DateUpdated.Value.ToString("dd/MM/yyyy") : der.DateCreated.ToString("dd/MM/yyyy"));

            ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, der.idCustomerProspect, der.idDictao, null);

            //b- APPENDIX 1 : BS
            if (der.AttachPresentation)
            {
                docType = ElectronicSafeDocumentBL.DocumentType.BS;
                documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), der.idCustomerProspect);
                documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), der.CustomerProspect);
                fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

                dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.APPENDIX1);

                if (dtpDoc != null)
                {
                    dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

                    //Save document to ElectronicSafe table
                    documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), LanguageContentBL.Translate("der_bs_title"), (der.DateUpdated.HasValue) ? der.DateUpdated.Value.ToString("dd/MM/yyyy") : der.DateCreated.ToString("dd/MM/yyyy"));

                    ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, der.idCustomerProspect, der.idDictao, null);
                }

            }

            //5- If all is ok, finish / close transaction
            dtpClient.FinishTransaction();

            IList<string> documentTypesToExcludeOnArchive = null; //TODO

            //6- Archive transaction : TODO : asynchrone ?
            try
            {
                string businessId = string.Format("DER-{0}", der.idDer);
                dtpClient.ArchiveTransaction(der.CustomerProspect.FirmInstitution.FirmInstitutionName, der.CustomerProspect.User.UserName, der.CustomerProspect.User.UserFirstName, businessId, documentTypesToExcludeOnArchive);
            }
            catch { }


            return bOK;
        }
        private static bool ArchiveSignedMissionDocument(Upsilab.Data.Model.MissionDocument missionDoc)
        {
            bool bOK = true; //TODO

            DTPClient dtpClient = new DTPClient(missionDoc.idDictao);

            //1- Update missionDocument table
            missionDoc.Status = ReportBL.Status.Completed.ToString(); //If signed by the 2 parts and saved to coffrefort
            missionDoc.Archived = true;
            missionDoc.IsOriginal = true;

            //2- Reduice firm credit after signature + mise au coffre
            //TODO : don't archive, sign doc if credit is not sufficient
            try
            {
                CreditOperationBL.SubstractCredit(missionDoc.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.MISE_AU_COFFRE_AUTOMATIQUE_DOCUMENT_MISSION.ToString(), missionDoc.CustomerProspect.idUserCreated, missionDoc.CustomerProspect.idCustomer);
            }
            catch (Exception ex)
            {
                Log.Log.AppendException(ex);
            }

            //3- Save signed document to the server 
            //a- CONTRACT
            ElectronicSafeDocumentBL.DocumentType docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM : ElectronicSafeDocumentBL.DocumentType.RM;
            string documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), missionDoc.idCustomerProspect);
            string documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), missionDoc.CustomerProspect);
            string fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

            Upsilab.Infrastructure.DictaoDTPCoreServiceReference.Document dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.CONTRACT);
            dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

            //4- Save document to ElectronicSafe table
            string missionDocLabel = (missionDoc.IsLetter) ? LanguageContentBL.Translate("lettre_de_mission") : LanguageContentBL.Translate("rapport_de_mission");
            string documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), missionDocLabel, (missionDoc.DateUpdated.HasValue) ? missionDoc.DateUpdated.Value.ToString("dd/MM/yyyy") : missionDoc.DateCreated.ToString("dd/MM/yyyy"));

            ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, missionDoc.idCustomerProspect, missionDoc.idDictao, null);

            //b- APPENDIX 1 : BS
            if (missionDoc.AttachPresentation)
            {
                docType = ElectronicSafeDocumentBL.DocumentType.BS;
                documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), missionDoc.idCustomerProspect);
                documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), missionDoc.CustomerProspect);
                fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

                dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.APPENDIX1);

                if (dtpDoc != null)
                {
                    dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

                    //Save document to ElectronicSafe table
                    documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), LanguageContentBL.Translate("presentation_de_l_etab"), (missionDoc.DateUpdated.HasValue) ? missionDoc.DateUpdated.Value.ToString("dd/MM/yyyy") : missionDoc.DateCreated.ToString("dd/MM/yyyy"));

                    ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, missionDoc.idCustomerProspect, missionDoc.idDictao, null);
                }

            }

            //c- APPENDIX 2 : FIL => DER
            if (missionDoc.AttachInformationCard)
            {
                docType = ElectronicSafeDocumentBL.DocumentType.FIL;
                documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), missionDoc.idCustomerProspect);
                documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), missionDoc.CustomerProspect);
                fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

                dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.APPENDIX2);

                if (dtpDoc != null)
                {
                    dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

                    //Save document to ElectronicSafe table
                    documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), LanguageContentBL.Translate("doc_entree_en_relation"), (missionDoc.DateUpdated.HasValue) ? missionDoc.DateUpdated.Value.ToString("dd/MM/yyyy") : missionDoc.DateCreated.ToString("dd/MM/yyyy"));

                    ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, missionDoc.idCustomerProspect, missionDoc.idDictao, null);
                }

            }

            // d- APPENDIX 3 : CRTO
            if (missionDoc.AttachConventionRTO.HasValue && missionDoc.AttachConventionRTO.Value)
            {
                docType = ElectronicSafeDocumentBL.DocumentType.CRTO;
                documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), missionDoc.idCustomerProspect);
                documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), missionDoc.CustomerProspect);
                fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

                dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.APPENDIX3);

                if (dtpDoc != null)
                {
                    dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

                    //Save document to ElectronicSafe table
                    documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), LanguageContentBL.Translate("convention_de_rto"), (missionDoc.DateUpdated.HasValue) ? missionDoc.DateUpdated.Value.ToString("dd/MM/yyyy") : missionDoc.DateCreated.ToString("dd/MM/yyyy"));

                    ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, missionDoc.idCustomerProspect, missionDoc.idDictao, null);
                }
            }

            // e- APPENDIX >= 4
            //For RM
            if (!missionDoc.IsLetter && missionDoc.MissionDocumentAppendix.Count > 0)
            {
                List<MissionDocumentAppendix> lstAppendixDocs = missionDoc.MissionDocumentAppendix.OrderBy(app => app.DateCreated).ToList();
                int appendixNum = 4;
                foreach (var appendixDoc in lstAppendixDocs)
                {
                    docType = ElectronicSafeDocumentBL.DocumentType.AX;
                    documentName = ElectronicSafeDocumentBL.BuildDocumentName(docType.ToString(), appendixDoc.idMissionDocumentAppendix);
                    documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), missionDoc.CustomerProspect);
                    fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

                    string dtpDocType = string.Format("{0}{1}", DTPClient.APPENDIX, appendixNum);
                    dtpDoc = dtpClient.GetDocumentByType(dtpDocType);

                    appendixNum++;

                    if (dtpDoc != null)
                    {
                        dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

                        //Save document to ElectronicSafe table
                        documentLabel = string.Format(LanguageContentBL.Translate("signature_doc_title_on"), appendixDoc.Designation, (missionDoc.DateUpdated.HasValue) ? missionDoc.DateUpdated.Value.ToString("dd/MM/yyyy") : missionDoc.DateCreated.ToString("dd/MM/yyyy"));

                        ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, docType.ToString(), documentLabel, documentPath, missionDoc.idCustomerProspect, missionDoc.idDictao, null, true, appendixDoc.idDocumentCategory);
                    }
                }

            }

            //5- If all is ok, finish / close transaction
            dtpClient.FinishTransaction();

            IList<string> documentTypesToExcludeOnArchive = null; //TODO

            //6- Archive transaction : TODO : asynchrone ?
            try
            {
                string businessId = string.Format("{0}-{1}", (missionDoc.IsLetter) ? MISSION_LETTER : MISSION_REPORT, missionDoc.idMissionDocument);
                dtpClient.ArchiveTransaction(missionDoc.CustomerProspect.FirmInstitution.FirmInstitutionName, missionDoc.CustomerProspect.User.UserName, missionDoc.CustomerProspect.User.UserFirstName, businessId, documentTypesToExcludeOnArchive);
            }
            catch (Exception ex)
            {
                Log.Log.AppendException(ex);
            }

            return bOK;
        }
        private static bool ArchiveCRTOSignedDocument(Upsilab.Data.Model.CustomerProspect customer)
        {
            bool bOK = true; //TODO

            Upsilab.Data.Model.ConventionRTO crto = customer.ConventionRTO;

            DTPClient dtpClient = new DTPClient(crto.idDictao);

            //1- Update ConfidentialityAgreement table
            crto.Status = ReportBL.Status.Completed.ToString(); //If signed by the 2 parts and saved to coffrefort
            crto.Archived = true;

            //2- Reduice firm credit after signature + mise au coffre
            //TODO : don't archive, sign doc if credit is not sufficient
            try
            {
                CreditOperationBL.SubstractCredit(customer.idFirmInstitution, CreditOperationBL.OperationType.MISE_AU_COFFRE_AUTOMATIQUE_CRTO.ToString(), customer.idUserCreated, customer.idCustomer);
            }
            catch (Exception ex)
            {
                Log.Log.AppendException(ex);
            }

            //3- Save signed document to the server
            string documentName = ElectronicSafeDocumentBL.BuildDocumentName(ElectronicSafeDocumentBL.DocumentType.CRTO.ToString(), customer.idCustomer);
            string documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(ElectronicSafeDocumentBL.DocumentType.CRTO.ToString(), customer);
            string fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

            Upsilab.Infrastructure.DictaoDTPCoreServiceReference.Document dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.CONTRACT);
            dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

            //4- Save document to ElectronicSafe table
            string documentLabel = LanguageContentBL.Translate("signature_crto_title");
            ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, ElectronicSafeDocumentBL.DocumentType.CRTO.ToString(), documentLabel, documentPath, customer.idCustomer, crto.idDictao, null);

            //5- If all is ok, finish / close transaction
            dtpClient.FinishTransaction();

            //6- Archive transaction : TODO : asynchrone ?
            IList<string> documentTypesToExcludeOnArchive = null; //TODO
            try
            {
                string businessId = string.Format("{0}-{1}", CONVENTION_RTO, customer.idCustomer);
                dtpClient.ArchiveTransaction(customer.FirmInstitution.FirmInstitutionName, customer.User.UserName, customer.User.UserFirstName, businessId, documentTypesToExcludeOnArchive);
            }
            catch { }

            return bOK;
        }
        private static bool ArchiveReportSignedDocument(Upsilab.Data.Model.Report report)
        {
            bool bOK = true; //TODO
           
            DTPClient dtpClient = new DTPClient(report.idDictao);

            //1- Update report table
            report.Status = ReportBL.Status.Completed.ToString(); //If signed by the 2 parts and saved to coffrefort
            report.Archived = true;
            report.IsOriginal = true;

            //2- Reduice firm credit after signature + mise au coffre
            //TODO : don't archive, sign doc if credit is not sufficient
            try
            {
                CreditOperationBL.SubstractCredit(report.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.MISE_AU_COFFRE_RECUEIL.ToString(), report.CustomerProspect.idUserCreated, report.CustomerProspect.idCustomer);
            }
            catch (Exception ex)
            {
                Log.Log.AppendException(ex);
            }

            //3- Save signed document to the server
            string documentName = ElectronicSafeDocumentBL.BuildDocumentName(ElectronicSafeDocumentBL.DocumentType.RC.ToString(), report.idCustomerProspect);
            string documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(ElectronicSafeDocumentBL.DocumentType.RC.ToString(), report.CustomerProspect);
            string fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

            Upsilab.Infrastructure.DictaoDTPCoreServiceReference.Document dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.CONTRACT);
            dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);

            //4- Save document to ElectronicSafe table
            string documentLabel = string.Format(LanguageContentBL.Translate("signature_report_on"), (report.DateUpdated.HasValue) ? report.DateUpdated.Value.ToString("dd/MM/yyyy") : report.DateCreated.ToString("dd/MM/yyyy"));

            ElectronicSafeDocumentBL.SaveDocumentToDB(documentName, ElectronicSafeDocumentBL.DocumentType.RC.ToString(), documentLabel, documentPath, report.idCustomerProspect, report.idDictao, null);

            //5- If all is ok, finish / close transaction
            dtpClient.FinishTransaction();

            IList<string> documentTypesToExcludeOnArchive = null; //TODO

            //6- Archive transaction : TODO : asynchrone ?
            try
            {
                string businessId = string.Format("{0}-{1}", REPORT, report.idReport);
                dtpClient.ArchiveTransaction(report.CustomerProspect.FirmInstitution.FirmInstitutionName, report.CustomerProspect.User.UserName, report.CustomerProspect.User.UserFirstName, businessId, documentTypesToExcludeOnArchive);
            }
            catch { }

            return bOK;
        }
        public string SaveSignedDERToCoffreFort()
        {
            using (var db = new UpsilabEntities())
            {
                var dateStart = new DateTime(2015, 4, 9);

                var query = from lm in db.MissionDocument.Include("CustomerProspect")
                            from rm in db.MissionDocument.Where(r => lm.idCustomerProspect == r.idCustomerProspect
                                                                    && lm.IsLetter && !r.IsLetter
                                                                    && lm.AttachInformationCard && r.AttachInformationCard
                                                                    && lm.Status == "Completed" && r.Status == "Completed"
                                                                    && lm.idDTPUserAccess != null && r.idDTPUserAccess != null)
                            where lm.DateCustomerSignature.Value.Year == rm.DateCustomerSignature.Value.Year
                                 && lm.DateCustomerSignature.Value.Month == rm.DateCustomerSignature.Value.Month
                                 && lm.DateCustomerSignature.Value.Day == rm.DateCustomerSignature.Value.Day
                                 && rm.DateCustomerSignature >= dateStart
                            select new
                            {
                                LM_DateCustomerSignature = lm.DateCustomerSignature,
                                RM_DateCustomerSignature = rm.DateCustomerSignature,
                                IdCustomerProspect = lm.idCustomerProspect,
                                IdDictao = (lm.DateCustomerSignature < rm.DateCustomerSignature) ? lm.idDictao : rm.idDictao,
                                CustomerProspect = lm.CustomerProspect
                            };

                var list = query.ToList();

                //Get signed DER : from LM or RM => which signed first
                var count = 0;
                foreach (var item in list)
                {
                    try
                    {
                        DTPClient dtpClient = new DTPClient(item.IdDictao);

                        var docType = ElectronicSafeDocumentBL.DocumentType.FIL;
                        var documentName = string.Format("{0}_{1}_{2}.pdf", docType.ToString(), item.IdCustomerProspect.ToString(), item.LM_DateCustomerSignature.Value.ToString("ddMMyyyy"));
                        var documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType.ToString(), item.CustomerProspect);
                        var fullPath = System.IO.Path.Combine(Upsilab.Business.Utility.ConfigurationManager.CoffreFortRootPath, documentPath);

                        var dtpDoc = dtpClient.GetDocumentByType(DTPClient.DocumentTypes.APPENDIX2);

                        if (dtpDoc != null)
                        {
                            dtpClient.SaveDocumentToFile(dtpDoc, fullPath, documentName);
                            count++;
                        }
                    }
                    catch { }


                }

                return count.ToString();
            }

        }