/// <summary>
        /// 
        /// </summary>
        /// <param name="txid"></param>
        /// <param name="aid"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        public static bool BackFromAdviserConfidentialityAgreementSignature(string status, string login, string offer, out string error)
        {
            bool isOk = true;
            error = string.Empty;

            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    string idUserAccess = DTPData.GetUserAccessIdByLogin(login);

                    Upsilab.Data.Model.ConfidentialityAgreement confident = (from conf in context.ConfidentialityAgreement
                                                                             where conf.idDTPUserAccess == idUserAccess
                                                                             select conf).FirstOrDefault();

                    if (confident == null)
                    {
                        error = LanguageContentBL.Translate("signature_user_access_id_not_ok");
                        isOk = false;
                        SignatureLogBL.Save(null, null, null, login, status, ElectronicSafeDocumentBL.DocumentType.EC.ToString());
                    }
                    else
                    {
                        //Log signature
                        SignatureLogBL.Save(confident.idConfidentialityAgreement, null, confident.idDictao, confident.idDTPUserAccess, status, ElectronicSafeDocumentBL.DocumentType.EC.ToString());

                        //Finish user access and delete userspace
                        try
                        {
                            DTPClient dtpClient = new DTPClient(confident.idDictao);

                            dtpClient.FinishUserAccess(idUserAccess);
                            dtpClient.DeleteUserSpace(login);
                        }
                        catch { }

                        //Check status
                        if (status.ToUpper() == ALREADY_SIGNED)
                        {
                            error = GetDTPError(ALREADY_SIGNED);
                            isOk = false;
                        }

                        //If OK or ALREADY_SIGNED, do database update
                        if (status.ToUpper() == OK || status.ToUpper() == ALREADY_SIGNED)
                        {

                            Upsilab.Data.Model.CustomerProspect customer = (from cust in context.CustomerProspect
                                                                                    .Include("ConfidentialityAgreement.User")
                                                                                    .Include("FirmInstitution")
                                                                                    .Include("User")
                                                                                    .Include("User1")
                                                                            where cust.idConfidentialityAgreement == confident.idConfidentialityAgreement
                                                                            select cust).FirstOrDefault();

                            //Check if already signed by adviser
                            if (confident.SignedByAdviser)
                            {
                                error = LanguageContentBL.Translate("signature_ec_signed");
                                isOk = false;
                            }
                            else
                            {
                                //Update report table
                                confident.SignedByAdviser = true;
                                confident.DateAdviserSignature = DateTime.Now;

                                // If already signed by customer, archive document
                                if (!confident.SignedByCustomer)
                                {
                                    confident.Status = ReportBL.Status.WaitingForClientSignature.ToString();

                                    //Soustraire le credit
                                    try
                                    {
                                        CreditOperationBL.SubstractCredit(customer.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_ENGAGEMENT_CONFIDENTIALITE.ToString(), customer.idUserCreated, customer.idCustomer);
                                    }
                                    catch (Exception ex)
                                    {
                                        Log.Log.AppendException(ex);
                                    }

                                    // Send mail inviting client to sign
                                    SignatureDocumentBL.SendAgreementMailToClient(customer, true);
                                }
                                else
                                {
                                    //Achive the signed document : send to coffre-fort
                                    SignatureDocumentBL.ArchiveConfidentialityAgreementSignedDocument(customer);

                                    // Send mail informing client that Adviser has signed the "Report"
                                    SignatureDocumentBL.SendAgreementMailToClient(customer, false);
                                }

                                context.SaveChanges();
                            } //end signed
                        }
                        else
                        {
                            //error = string.Format("Erreur lors de la signature (status {0})", status);
                            error = GetDTPError(status);
                            isOk = false;
                        }
                    }

                } //End using
            }
            catch (Exception ex)
            {
                error = ex.Message;
                Log.Log.AppendException(ex);
                isOk = false;
            }

            return isOk;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="status"></param>
        /// <param name="login"></param>
        /// <param name="offer"></param>
        /// <param name="error"></param>
        /// <returns></returns>
        public static bool BackFromAdviserReportSignature(string status, string login, string offer, out string error)
        {
            bool isOk = true;
            error = string.Empty;

            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    string idUserAccess = DTPData.GetUserAccessIdByLogin(login);

                    Upsilab.Data.Model.Report report = (from rep in context.Report
                                                                .Include("CustomerProspect")
                                                                .Include("CustomerProspect.FirmInstitution")
                                                                .Include("CustomerProspect.User")
                                                                .Include("CustomerProspect.User1")
                                                        where rep.idDTPUserAccess == idUserAccess
                                                        select rep).FirstOrDefault();

                    if (report == null)
                    {
                        error = LanguageContentBL.Translate("signature_user_access_id_not_ok");
                        isOk = false;
                        SignatureLogBL.Save(null, null, null, login, status, ElectronicSafeDocumentBL.DocumentType.RC.ToString());
                    }
                    else
                    {
                        //Log signature
                        SignatureLogBL.Save(report.idReport, report.idCustomerProspect, report.idDictao, report.idDTPUserAccess, status, ElectronicSafeDocumentBL.DocumentType.RC.ToString());

                        //Finish user access and delete userspace
                        try
                        {
                            DTPClient dtpClient = new DTPClient(report.idDictao);

                            dtpClient.FinishUserAccess(idUserAccess);
                            dtpClient.DeleteUserSpace(login);
                        }
                        catch { }


                        //Check status
                        if (status.ToUpper() == ALREADY_SIGNED)
                        {
                            error = GetDTPError(ALREADY_SIGNED);
                            isOk = false;
                        }

                        //If OK or ALREADY_SIGNED, do database update
                        if (status.ToUpper() == OK || status.ToUpper() == ALREADY_SIGNED)
                        {
                            //Check if already signed by adviser
                            if (report.SignedByAdviser)
                            {
                                error = LanguageContentBL.Translate("signature_doc_signed");
                                isOk = false;
                            }
                            else
                            {
                                //Update report table
                                report.SignedByAdviser = true;
                                report.DateAdviserSignature = DateTime.Now;

                                // If already signed by customer, archive document
                                if (!report.SignedByCustomer)
                                {
                                    report.Status = ReportBL.Status.WaitingForClientSignature.ToString();
                                    //mettre à jour le current status du customer
                                    report.CustomerProspect.CurrentReportStatus = ReportBL.Status.WaitingForClientSignature.ToString();
                                    //Upsilab.Business.CustomerProspect.CustomerProspectBL.Update(report.CustomerProspect);

                                    //Soustraire le credit
                                    try
                                    {
                                        CreditOperationBL.SubstractCredit(report.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_RECUEIL.ToString(), report.CustomerProspect.idUserCreated, report.CustomerProspect.idCustomer);
                                    }
                                    catch (Exception ex)
                                    {
                                        Log.Log.AppendException(ex);
                                    }

                                    // Send mail inviting client to sign
                                    SignatureDocumentBL.SendReportMailToClient(report, true);
                                }
                                else
                                {
                                    //Achive the signed document : send to coffre-fort
                                    SignatureDocumentBL.ArchiveReportSignedDocument(report);

                                    //Update table CustomerProspect : DateShiftLabLast & DateShiftLabNext & Profil

                                    Upsilab.Data.Model.CustomerProspect customer = report.CustomerProspect;
                                    customer.DateUpdatedLast = DateTime.Now;
                                    customer.DateUpdatedNext = DateTime.Now.AddYears(1);
                                    customer.CurrentReportStatus = Upsilab.Business.Report.ReportBL.Status.Completed.ToString();
                                    customer.HasCompletedReport = true;
                                    customer.IsReportOriginal = true;
                                    
                                    if (customer.NbElectronicSafeDocument.HasValue)
                                    {
                                        customer.NbElectronicSafeDocument = customer.NbElectronicSafeDocument.Value + 1;
                                    }
                                    else
                                    {
                                        customer.NbElectronicSafeDocument = 1;
                                    }

                                    customer.RiskProfile = (customer.IsCorporation.HasValue && customer.IsCorporation.Value) ? CustomerProspectBL.GetCustomerPMProfil(report) : CustomerProspectBL.GetCustomerPPProfil(report);

                                    // Send mail informing client that Adviser has signed the "Report"
                                    SignatureDocumentBL.SendReportMailToClient(report, false);
                                }

                                context.SaveChanges();
                            }

                        }
                        else
                        {
                            //error = string.Format("Erreur lors de la signature (status {0})", status);
                            error = GetDTPError(status);
                            isOk = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
                Log.Log.AppendException(ex);
                isOk = false;
            }

            return isOk;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="txid"></param>
        /// <param name="aid"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        public static bool BackFromDocumentSignature(string status, string login, string offer, out string error, out string transactionType)
        {
            bool isOk = true;
            error = string.Empty;
            transactionType = string.Empty;

            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    string idUserAccess = DTPData.GetUserAccessIdByLogin(login);

                    Upsilab.Data.Model.Signatory signatory = (from sign in context.Signatory
                                                                                  .Include("SignatureTransaction")
                                                                                  .Include("SignatureTransaction.FirmInstitution")
                                                                                  .Include("SignatureTransaction.Signatory")
                                                                                  .Include("SignatureTransaction.Document")
                                                              where sign.idDTPUserAccess == idUserAccess
                                                              select sign).FirstOrDefault();

                    if (signatory == null)
                    {
                        error = LanguageContentBL.Translate("signature_user_access_id_not_ok");
                        isOk = false;
                        SignatureLogBL.Save(null, null, null, login, status, ElectronicSafeDocumentBL.DocumentType.SIGN.ToString());
                    }
                    else
                    {
                        //Log signature
                        SignatureLogBL.Save(signatory.idSignatory, null, null, signatory.idDTPUserAccess, status, ElectronicSafeDocumentBL.DocumentType.SIGN.ToString());
                        
                        transactionType = signatory.SignatureTransaction.SignatureTransactionType;

                        //Finish user access and delete userspace
                        try
                        {
                            DTPClient dtpClient = new DTPClient(signatory.SignatureTransaction.idDTPTransaction);

                            dtpClient.FinishUserAccess(idUserAccess);
                            dtpClient.DeleteUserSpace(login);
                        }
                        catch { }


                        //Check status
                        if (status.ToUpper() == ALREADY_SIGNED)
                        {
                            error = GetDTPError(ALREADY_SIGNED);
                            isOk = false;
                        }

                        //If OK or ALREADY_SIGNED, do database update
                        if (status.ToUpper() == OK || status.ToUpper() == ALREADY_SIGNED)
                        {
                            //Check if already signed by customer
                            if (signatory.DateSignature.HasValue)
                            {
                                error = LanguageContentBL.Translate("signature_doc_signed");
                                isOk = false;
                            }
                            else
                            {
                                //Update database
                                signatory.DateSignature = DateTime.Now;

                                // If already signed by other signatories, archive document
                                var signatoriesHaveNotSigned = signatory.SignatureTransaction.Signatory.Where(sign => !sign.DateSignature.HasValue).ToList();

                                if (signatoriesHaveNotSigned.Count > 0) //some signatories haven't sign
                                {
                                    DocumentBL.Status docStatus = DocumentBL.Status.InProgress;
                                    if (signatory.Role == SignatoryBL.Roles.SDG.ToString())
                                    {
                                        docStatus = DocumentBL.Status.WaitingForClientSignature; //TODO
                                    }

                                    DocumentSignatureTransactionBL.UpdateTransactionStatus(signatory.idSignatureTransaction.Value, docStatus);

                                    //TODO : Soustraire le credit
                                    try
                                    {
                                        //CreditOperationBL.SubstractCredit(report.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_RECUEIL.ToString(), report.CustomerProspect.idUserCreated, report.CustomerProspect.idCustomer);
                                    }
                                    catch { }

                                    //Send mail inviting CGP to sign
                                    if (signatory.Role == SignatoryBL.Roles.SDG.ToString())
                                    {
                                        //UpsideoSignature
                                        bool isConvention = signatory.SignatureTransaction.SignatureTransactionType == DocumentSignatureTransactionBL.SignatureTransactionType.CONVENTION.ToString();
                                        SignatureDocumentBL.SendConventionMailToCGP(signatory.SignatureTransaction, isConvention);
                                    }
                                    else
                                    { 
                                        //TODO : send mail for other application ?
                                    }
                                   
                                }
                                else
                                {
                                    //Archive signed document (send to coffre fort)
                                    SignatureDocumentBL.ArchiveDocument(signatory.SignatureTransaction);

                                    //TODO : Send mail informing adviser that client has signed the "Report"
                                    //SignatureDocumentBL.SendReportMailToAdviser(report, false);
                                }

                                context.SaveChanges();
                            }
                        }
                        else
                        {
                            //error = string.Format("Erreur lors de la signature (status {0})", status);
                            error = GetDTPError(status);
                            isOk = false;
                        }

                    }

                } //End using
            } //End try
            catch (Exception ex)
            {
                error = ex.Message;
                Log.Log.AppendException(ex);
                isOk = false;
            }

            return isOk;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="txid"></param>
        /// <param name="aid"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        public static bool BackFromCustomerCRTOSignature(string status, string login, string offer, out string error)
        {
            bool isOk = true;
            error = string.Empty;

            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    string idUserAccess = DTPData.GetUserAccessIdByLogin(login);

                    Upsilab.Data.Model.ConventionRTO crto = (from conf in context.ConventionRTO
                                                                                    .Include("User")
                                                                                    .Include("CustomerProspect_1")
                                                                                    .Include("CustomerProspect_1.User")
                                                                                    .Include("CustomerProspect_1.User1")
                                                                                    .Include("CustomerProspect_1.FirmInstitution")

                                                            where conf.idDTPUserAccess == idUserAccess
                                                            select conf).FirstOrDefault();

                    if (crto == null)
                    {
                        error = LanguageContentBL.Translate("signature_user_access_id_not_ok");
                        isOk = false;
                        SignatureLogBL.Save(null, null, null, login, status, ElectronicSafeDocumentBL.DocumentType.CRTO.ToString());
                    }
                    else
                    {
                        //Log signature
                        SignatureLogBL.Save(crto.idConventionRTO, null, crto.idDictao, crto.idDTPUserAccess, status, ElectronicSafeDocumentBL.DocumentType.CRTO.ToString());

                        //Finish user access and delete userspace
                        try
                        {
                            DTPClient dtpClient = new DTPClient(crto.idDictao);

                            dtpClient.FinishUserAccess(idUserAccess);
                            dtpClient.DeleteUserSpace(login);
                        }
                        catch { }

                        //Check status
                        if (status.ToUpper() == ALREADY_SIGNED)
                        {
                            error = GetDTPError(ALREADY_SIGNED);
                            isOk = false;
                        }

                        //If OK or ALREADY_SIGNED, do database update
                        if (status.ToUpper() == OK || status.ToUpper() == ALREADY_SIGNED)
                        {

                            Upsilab.Data.Model.CustomerProspect customer = crto.CustomerProspect_1;

                            customer.CustomersUsingSameAccount = CustomerProspect.CustomerProspectBL.GetCustomersByEmail(customer.User.UserEmail);

                            //Check if already signed by customer
                            if (crto.SignedByCustomer)
                            {
                                error = LanguageContentBL.Translate("signature_crto_signed");
                                isOk = false;
                            }
                            else
                            {
                                //Update database
                                crto.SignedByCustomer = true;
                                crto.DateSignatureCustomer = DateTime.Now;

                                //Update customer.idCRTO = latest signed CRTO
                                customer.idConventionRTO = crto.idConventionRTO;

                                //Archive signed document (send to coffre fort)
                                SignatureDocumentBL.ArchiveCRTOSignedDocument(customer);

                                // Send mail informing adviser that client has signed the "Confidentiality agreement"
                                SignatureDocumentBL.SendCRTOMailToAdviser(customer, false); //TODO : if customer sign "Second", template mail ?
                                
                                context.SaveChanges();

                                //Update session user
                                SessionManager.SetCustomerProspectSession(customer);
                            } //End signed
                        }
                        else
                        {
                            //error = string.Format("Erreur lors de la signature (status {0})", status);
                            error = GetDTPError(status);
                            isOk = false;
                        }
                    }

                } //end using                
            }
            catch (Exception ex)
            {
                error = ex.Message;
                Log.Log.AppendException(ex);
                isOk = false;
            }

            return isOk;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="txid"></param>
        /// <param name="aid"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        public static bool BackFromAdviserDERSignature(string status, string login, string offer, out string error)
        {
            bool isOk = true;
            error = string.Empty;

            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    string idUserAccess = DTPData.GetUserAccessIdByLogin(login);

                    Upsilab.Data.Model.DER derDoc = (from der in context.DER
                                                            .Include("User")
                                                            .Include("CustomerProspect")
                                                            .Include("CustomerProspect.FirmInstitution")
                                                            .Include("CustomerProspect.User")
                                                            .Include("CustomerProspect.User1")
                                                    where der.idDTPUserAccess == idUserAccess
                                                    select der).FirstOrDefault();
                    if (derDoc == null)
                    {
                        error = LanguageContentBL.Translate("signature_user_access_id_not_ok");
                        isOk = false;
                        SignatureLogBL.Save(null, null, null, login, status, ElectronicSafeDocumentBL.DocumentType.FIL.ToString());
                    }
                    else
                    {
                        //Log signature
                        SignatureLogBL.Save(derDoc.idDer, derDoc.idCustomerProspect, derDoc.idDictao, derDoc.idDTPUserAccess, status, ElectronicSafeDocumentBL.DocumentType.FIL.ToString());

                        //Finish user access and delete userspace
                        try
                        {
                            DTPClient dtpClient = new DTPClient(derDoc.idDictao);

                            dtpClient.FinishUserAccess(idUserAccess);
                            dtpClient.DeleteUserSpace(login);
                        }
                        catch { }

                        //Check status
                        if (status.ToUpper() == ALREADY_SIGNED)
                        {
                            error = GetDTPError(ALREADY_SIGNED);
                            isOk = false;
                        }

                        //If OK or ALREADY_SIGNED, do database update
                        if (status.ToUpper() == OK || status.ToUpper() == ALREADY_SIGNED)
                        {
                            //Check if already signed by adviser
                            if (derDoc.SignedByAdviser)
                            {
                                error = LanguageContentBL.Translate("signature_doc_signed");
                                isOk = false;
                            }
                            else
                            {
                                //Update report table
                                derDoc.SignedByAdviser = true;
                                derDoc.DateAdviserSignature = DateTime.Now;

                                // If already signed by customer, archive document
                                if (!derDoc.SignedByCustomer)
                                {
                                    derDoc.Status = ReportBL.Status.WaitingForClientSignature.ToString();
                                    //mettre à jour le current status du customer
                                    Upsilab.Data.Model.CustomerProspect cust = derDoc.CustomerProspect;
                                    cust.DerStatus = ReportBL.Status.WaitingForClientSignature.ToString();

                                    //Soustraire le credit
                                    try
                                    {
                                        CreditOperationBL.SubstractCredit(derDoc.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_DER.ToString(), derDoc.CustomerProspect.idUserCreated, derDoc.CustomerProspect.idCustomer);
                                    }
                                    catch (Exception ex)
                                    {
                                        Log.Log.AppendException(ex);
                                    }

                                    // Send mail inviting client to sign
                                    SignatureDocumentBL.SendDERMailToClient(derDoc, true);
                                }
                                else
                                {
                                    //Achive the signed document : send to coffre-fort
                                    SignatureDocumentBL.ArchiveSignedDER(derDoc);

                                    //Update table CustomerProspect : DateLastUpdatedMission
                                    Upsilab.Data.Model.CustomerProspect customer = derDoc.CustomerProspect;
                                    customer.DateLastUpdateDer = DateTime.Now;
                                    customer.DerStatus = Upsilab.Business.Report.ReportBL.Status.Completed.ToString();
                                    customer.IsDerOriginal = true;

                                    if (customer.NbElectronicSafeDocument.HasValue)
                                        customer.NbElectronicSafeDocument = customer.NbElectronicSafeDocument.Value + 1;
                                    else
                                        customer.NbElectronicSafeDocument = 1;

                                    // Send mail informing client that Adviser has signed the "Report"
                                    SignatureDocumentBL.SendDERMailToClient(derDoc, false);
                                }

                                context.SaveChanges();
                            }
                        }
                        else
                        {
                            //error = string.Format("Erreur lors de la signature (status {0})", status);
                            error = GetDTPError(status);
                            isOk = false;
                        }

                    }

                }//End using
            }
            catch (Exception ex)
            {
                error = ex.Message;
                Log.Log.AppendException(ex);
                isOk = false;
            }

            return isOk;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="txid"></param>
        /// <param name="aid"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        public static bool BackFromCustomerMissionDocumentSignature(string status, string login, string offer, out string error)
        {
            bool isOk = true;
            error = string.Empty;

            try
            {
                using (UpsilabEntities context = new UpsilabEntities())
                {
                    string idUserAccess = DTPData.GetUserAccessIdByLogin(login);

                    Upsilab.Data.Model.MissionDocument missionDoc = (from md in context.MissionDocument
                                                                            .Include("User")
                                                                            .Include("CustomerProspect")
                                                                            .Include("CustomerProspect.FirmInstitution")
                                                                            .Include("CustomerProspect.User")
                                                                            .Include("CustomerProspect.User1")
                                                                     where md.idDTPUserAccess == idUserAccess
                                                                     select md).FirstOrDefault();

                    if (missionDoc == null)
                    {
                        error = LanguageContentBL.Translate("signature_user_access_id_not_ok");
                        isOk = false;
                        SignatureLogBL.Save(null, null, null, login, status, "LM/RM");
                    }
                    else
                    {
                        //Log signature
                        SignatureLogBL.Save(missionDoc.idMissionDocument, missionDoc.idCustomerProspect, missionDoc.idDictao, missionDoc.idDTPUserAccess, status, (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString());

                        //Finish user access and delete userspace
                        try
                        {
                            DTPClient dtpClient = new DTPClient(missionDoc.idDictao);

                            dtpClient.FinishUserAccess(idUserAccess);
                            dtpClient.DeleteUserSpace(login);
                        }
                        catch { }

                        //Check status
                        if (status.ToUpper() == ALREADY_SIGNED)
                        {
                            error = GetDTPError(ALREADY_SIGNED);
                            isOk = false;
                        }

                        //If OK or ALREADY_SIGNED, do database update
                        if (status.ToUpper() == OK || status.ToUpper() == ALREADY_SIGNED)
                        {
                            //Check if already signed by customer
                            if (missionDoc.SignedByCustomer)
                            {
                                error = LanguageContentBL.Translate("signature_doc_signed");
                                isOk = false;
                            }
                            else
                            {
                                //Update database
                                missionDoc.SignedByCustomer = true;
                                missionDoc.DateCustomerSignature = DateTime.Now;

                                // If already signed by adviser, archive document
                                if (!missionDoc.SignedByAdviser)
                                {
                                    missionDoc.Status = ReportBL.Status.WaitingForAdviserSignature.ToString();
                                    //mettre à jour le current status du customer
                                    Upsilab.Data.Model.CustomerProspect cust = missionDoc.CustomerProspect;
                                    if (missionDoc.IsLetter)
                                        cust.LetterStatus = ReportBL.Status.WaitingForAdviserSignature.ToString();
                                    else
                                        cust.MissionStatus = ReportBL.Status.WaitingForAdviserSignature.ToString();
                                    //Upsilab.Business.CustomerProspect.CustomerProspectBL.Update(cust);

                                    //Soustraire le credit
                                    try
                                    {
                                        CreditOperationBL.SubstractCredit(missionDoc.CustomerProspect.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_DOCUMENT_MISSION.ToString(), missionDoc.CustomerProspect.idUserCreated, missionDoc.CustomerProspect.idCustomer);
                                    }
                                    catch(Exception ex)
                                    {
                                        Log.Log.AppendException(ex);
                                    }

                                    // Send mail inviting adviser to sign
                                    SignatureDocumentBL.SendMissionDocumentMailToAdviser(missionDoc, true);
                                }
                                else
                                {
                                    //Archive signed document (send to coffre fort)
                                    SignatureDocumentBL.ArchiveSignedMissionDocument(missionDoc);

                                    //Update table CustomerProspect : DateLastUpdatedMission
                                    Upsilab.Data.Model.CustomerProspect customer = missionDoc.CustomerProspect;

                                    if (missionDoc.IsLetter)
                                    {
                                        customer.DateLastUpdateLetter = DateTime.Now;
                                        customer.LetterStatus = Upsilab.Business.Report.ReportBL.Status.Completed.ToString();
                                        customer.IsLetterOriginal = true;
                                    }
                                    else
                                    {
                                        customer.DateLastUpdateMission = DateTime.Now;
                                        customer.MissionStatus = Upsilab.Business.Report.ReportBL.Status.Completed.ToString();
                                        customer.IsMissionOriginal = true;
                                    }

                                    if (customer.NbElectronicSafeDocument.HasValue)
                                        customer.NbElectronicSafeDocument = customer.NbElectronicSafeDocument.Value + 1;
                                    else
                                        customer.NbElectronicSafeDocument = 1;

                                    //If DER (FIL) is attached to LM/RM
                                    if (missionDoc.AttachInformationCard)
                                    {
                                        customer.DerStatus = Upsilab.Business.Report.ReportBL.Status.Completed.ToString();
                                        customer.IsDerOriginal = true;
                                        customer.DateLastUpdateDer = DateTime.Now;
                                    }

                                    //If CRTO is attached to LM/RM
                                    if (missionDoc.AttachConventionRTO.HasValue && missionDoc.AttachConventionRTO.Value)
                                    {
                                        var convention = Business.ConventionRTO.ConventionRTOBL.CreateCRTOFromMissionDocument(missionDoc);

                                        //Mise à jour idConventionRTO du client
                                        if (convention != null)
                                        {
                                            customer.idConventionRTO = convention.idConventionRTO;
                                        }
                                    }
                                   
                                    // Send mail informing adviser that client has signed the "Lettre de mission / Rapport de mission"
                                    SignatureDocumentBL.SendMissionDocumentMailToAdviser(missionDoc, false);
                                }

                                context.SaveChanges();
                            } //end else
                        }
                        else
                        {
                            //error = string.Format("Erreur lors de la signature (status {0})", status);
                            error = GetDTPError(status);
                            isOk = false;
                        }

                    }

                } //end using
            }
            catch (Exception ex)
            {
                error = ex.Message;
                isOk = false;
                Log.Log.AppendException(ex);
            }

            return isOk;
        }