Пример #1
0
    // Start is called before the first frame update
    void Start()
    {
        interaction            = FindObjectOfType <InteractionUni>();
        terminalCamera.enabled = false;
        weapon     = FindObjectOfType <ChangeWeapon>();
        flashLight = FindObjectOfType <FlashLight>();
        move       = FindObjectOfType <PlayerMove>();
        mDoc       = FindObjectOfType <MissionDocument>();
        eq         = FindObjectOfType <EquipmentSystem>();
        TextAsset asset = (TextAsset)Resources.Load(@"TerminalSCP\SCPTerminal");

        terminalXML = new XmlDocument();
        terminalXML.LoadXml(asset.text);
        textLogo.text = terminalXML.GetElementsByTagName("title")[0].InnerText;
        settings      = FindObjectOfType <Settings_options>();
        source        = GetComponent <AudioSource>();
        LoadText("back", 0);
    }
        /// <summary>
        /// Create a CRTO and update customerProspect idCRTO (from an existing LM/RM)
        /// </summary>
        /// <param name="missionDocument">LM ou RM having attached CRTO</param>
        /// <returns>Created CRTO</returns>
        public static ConvRTO CreateCRTOFromMissionDocument(MissionDocument missionDocument)
        {
            try
            {
                using (var context = new UpsilabEntities())
                {
                    if (missionDocument != null && missionDocument.AttachConventionRTO.HasValue && missionDocument.AttachConventionRTO.Value)
                    {
                        //Création d'un enregistrement dans la table ConventionRTO
                        ConvRTO convention = new ConvRTO()
                        {
                            idConventionRTO = Guid.NewGuid(),
                            IdCustomerProspect = missionDocument.idCustomerProspect,
                            idDictao = missionDocument.idDictao,
                            idDTPUserAccess = missionDocument.idDTPUserAccess,
                            idSignatoryUser = missionDocument.idSignatoryUser,
                            SignedByAdviser = missionDocument.SignedByAdviser,
                            SignedByCustomer = missionDocument.SignedByCustomer,
                            Status = missionDocument.Status,
                            Archived = missionDocument.Archived,
                            DateAdviserSignature = missionDocument.DateAdviserSignature,
                            DateCreated = missionDocument.DateCreated,
                            DateSignatureCustomer = missionDocument.DateCustomerSignature,
                            DatesSendMailToCustomer = missionDocument.DatesSendMailToCustomer,
                            DateUpdated = missionDocument.DateUpdated,
                        };

                        Upsilab.Business.ConventionRTO.ConventionRTOBL.Create(convention);

                        return convention;

                    }
                    

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

            return null;

        }
        public static string GetSignedMissionDocument(MissionDocument missionDoc, ElectronicSafeDocumentBL.DocumentType ESDocumentType, bool isUrl)
        {
            string file = string.Empty;
            string filename = string.Empty;

            Data.Model.CustomerProspect customer = missionDoc.CustomerProspect;
            string docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString();
            DTPClient.DocumentTypes dtpDocType = DTPClient.DocumentTypes.CONTRACT; //For LM and RM doc

            switch (ESDocumentType)
            {
                case ElectronicSafeDocumentBL.DocumentType.BS:
                    docType = ElectronicSafeDocumentBL.DocumentType.BS.ToString();
                    dtpDocType = DTPClient.DocumentTypes.APPENDIX1;
                    break;

                case ElectronicSafeDocumentBL.DocumentType.FIL:
                    docType = ElectronicSafeDocumentBL.DocumentType.FIL.ToString();
                    dtpDocType = DTPClient.DocumentTypes.APPENDIX2;
                    break;

                case ElectronicSafeDocumentBL.DocumentType.CRTO:
                    docType = docType + "_" + ElectronicSafeDocumentBL.DocumentType.CRTO;
                    dtpDocType = DTPClient.DocumentTypes.APPENDIX3;
                    break;
            }

            string userPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType, customer, true);
            string destFullPath = System.IO.Path.Combine(ConfigurationManager.SignedDocumentRootPath, userPath, filename);
            filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);
            filename = string.Format("SIGNED_{0}", filename);

            //Download signed doc from dictao server
            if (!System.IO.File.Exists(System.IO.Path.Combine(destFullPath, filename)))
            {
                GetSignedDocumentFromDictao(missionDoc.idDictao, destFullPath, filename, dtpDocType);
            }

            if (isUrl)
            {
                file = System.IO.Path.Combine(ConfigurationManager.SignedDocumentRootPath, userPath, filename);
                //file = Url.Content(string.Format("~/uploads/{0}/{1}", userPath, filename).Replace("\\", "/"));

            }
            else
            {
                file = System.IO.Path.Combine(destFullPath, filename);
            }

            return file;
        }
        public ActionResult SignerDocumentMissionParConseiller(string id)
        {
            string error = string.Empty;
            string urlIHM_Dictao = string.Empty;
            MissionDocument missionDoc = new MissionDocument();
            List<DocumentToSign> documentsToSign = new List<DocumentToSign>();

            try
            {
                // Id mission doc = id in parameter                
                missionDoc = MissionDocumentBL.GetMissionDocumentById(new Guid(id));

                if (missionDoc == null)
                {
                    error = _languageData.GetContent("selectionner_un_doc_a_signer");
                }
                else
                {
                    documentsToSign = this.GetDocumentsToSign(missionDoc); //TODO generate pdf ?

                    //Signature
                    if (documentsToSign.Count == 0)
                    {
                        error = _languageData.GetContent("aucun_doc_a_signer_veuillez");
                    }

                    if (string.IsNullOrEmpty(error))
                    {
                        // Sign the document mission
                        Upsilab.Data.Model.User userAdviser = (missionDoc.User != null) ? missionDoc.User : Upsilab.Business.Utility.SessionManager.GetUserSession();
                        urlIHM_Dictao = SignatureDocumentBL.SignMissionDocumentByAdviser(missionDoc.idMissionDocument, documentsToSign, userAdviser);
                    }
                }
            }
            catch (Exception ex)
            {
                Upsilab.Business.Log.Log.AppendException(ex);
                error = ex.Message;
            }

            if (!string.IsNullOrEmpty(error))
            {
                string missionDocLabel = (missionDoc.IsLetter) ? _languageData.GetContent("lettre_de_mission") : _languageData.GetContent("rapport_de_mission");

                SignatureModel signatureModel = new SignatureModel()
                {
                    H1Title = (missionDoc.IsLetter) ? _languageData.GetContent("lettre_de_mission") : _languageData.GetContent("rapport_de_mission"),
                    HeadTitle = string.Format("Signature {0}", missionDocLabel),
                    ErrorMessage = error
                };

                return View("AllerSignature", signatureModel);
            }
            else
            {
                return Redirect(urlIHM_Dictao);
            }

        }
        public ActionResult SignerDocumentMissionParClient(string id)
        {
            string error = string.Empty;
            string urlIHM_Dictao = string.Empty;
            int pageCount = 0;
            MissionDocument missionDoc = new MissionDocument();

            try
            {
                // Id latest mission document = id in parameter                
                if (string.IsNullOrEmpty(id))
                {
                    error = _languageData.GetContent("selectionner_un_doc_a_signer");
                }
                else
                {
                    missionDoc = MissionDocumentBL.GetMissionDocumentById(new Guid(id));

                    if (missionDoc == null)
                    {
                        error = _languageData.GetContent("selectionner_un_doc_a_signer");
                    }
                    else
                    {
                        List<DocumentToSign> documentsToSign = this.GetDocumentsToSign(missionDoc); //TODO generate pdf ?
                        
                        // Sign the mission document (Customer signs secondly)
                        urlIHM_Dictao = SignatureDocumentBL.SignMissionDocumentByCustomer(missionDoc.idMissionDocument, documentsToSign, pageCount);
                    }
                }
            }
            catch (Exception ex)
            {
                Upsilab.Business.Log.Log.AppendException(ex);
                error = ex.Message;
            }

            if (!string.IsNullOrEmpty(error))
            {
                string missionDocLabel = (missionDoc.IsLetter) ? _languageData.GetContent("lettre_de_mission") : _languageData.GetContent("rapport_de_mission");

                SignatureModel signatureModel = new SignatureModel()
                {
                    H1Title = (missionDoc.IsLetter) ? _languageData.GetContent("lettre_de_mission") : _languageData.GetContent("rapport_de_mission"),
                    HeadTitle = string.Format(_languageData.GetContent("signature_"), missionDocLabel),
                    ErrorMessage = error 
                };

                return View("AllerSignature", signatureModel);
            }
            else
            {
                return Redirect(urlIHM_Dictao);
            }
        }
        private List<DocumentToSign> GetDocumentsToSign(MissionDocument missionDoc)
        {
            var currentUser = SessionManager.GetUserSession();
            string error = string.Empty;
            int pageCount = 0;
            CustomerProspect customer = missionDoc.CustomerProspect;
            bool isPP = (missionDoc.CustomerProspect.IsCorporation.HasValue) ? ((missionDoc.CustomerProspect.IsCorporation.Value) ? false : true) : false;
            List<SignatureParameter> signatureParametersMD = new List<SignatureParameter>();
            List<DocumentToSign> documentsToSign = new List<DocumentToSign>();

            #region 1- Mission document
            //A- Build pdf mission document to sign
            string docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString();

            string destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
            string filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

            string destMissionDocFilePath = System.IO.Path.Combine(destFullPath, filename);

            //If Upsideo model, generate pdf
            //If Firm model, merge uploaded file with the first and last page
            if (missionDoc.IsUpsideoModel)
            {
                //1 : Génération du PDF
                if (missionDoc.IsLetter) //Lettre de Mission
                {
                    if (isPP)
                    {
                        pageCount = MissionDocumentPdfGenerationBL.GeneratePP_EngagementLetter(missionDoc, destMissionDocFilePath, false);
                    }
                    else
                    {
                        pageCount = MissionDocumentPdfGenerationBL.GeneratePM_EngagementLetter(missionDoc, destMissionDocFilePath, false);
                    }
                }
                else // Rapport de mission
                {
                    pageCount = MissionDocumentPdfGenerationBL.Generate_MissionReport(missionDoc, destMissionDocFilePath, false);
                }

            }
            else
            {
                //Merge pdf
                filename = missionDoc.FileName;
                string uploadedDoc = System.IO.Path.Combine(destFullPath, filename);
                if (missionDoc.IsLetter)
                {
                    MissionDocumentPdfGenerationBL.GenerateEngagementLetterByMerge(missionDoc, uploadedDoc, destMissionDocFilePath, false, out pageCount);
                }
                else
                {
                    MissionDocumentPdfGenerationBL.GenerateReportLetterByMerge(missionDoc, uploadedDoc, destMissionDocFilePath, false, out pageCount);
                }
            }

            if (!System.IO.File.Exists(destMissionDocFilePath))
            {
                error = _languageData.GetContent("doc_n_a_pas_ete_genere_correctement");
            }
            else
            {
                //B- Prepare object to sign
                SignatureParameter signatureParameter = new SignatureParameter()
                {
                    SignatureFieldLabel = DTPClient.USER_ADVISER,

                    SignaturePosition = new SignaturePosition()
                    {
                        Page = (pageCount > 0) ? pageCount : (missionDoc.IsLetter) ? (isPP ? 13 : 12) : 10, //LM : 13pages; RM : 10pages
                        X = 33,
                        Y = 177
                    }                    
                };

                signatureParametersMD.Add(signatureParameter);

                signatureParameter = new SignatureParameter()
                {
                    SignatureFieldLabel = DTPClient.USER_CUSTOMER,

                    SignaturePosition = new SignaturePosition()
                    {
                        Page = (pageCount > 0) ? pageCount : (missionDoc.IsLetter) ? (isPP ? 13 : 12) : 10, //LM : 13pages; RM : 10pages
                        X = 120,
                        Y = 177
                    }
                };
                
                signatureParametersMD.Add(signatureParameter);

                string typeDocLabel = (missionDoc.IsLetter) ? _languageData.GetContent("lettre_de_mission") : _languageData.GetContent("rapport_de_mission");

                DocumentToSign docMD = new DocumentToSign()
                {
                    Label = typeDocLabel,
                    Description = typeDocLabel,
                    PathFilename = destMissionDocFilePath,
                    Type = DTPClient.DocumentTypes.CONTRACT.ToString(),
                    SignatureParameters = signatureParametersMD
                };

                documentsToSign.Add(docMD);
            }
            #endregion

            #region 2- Convention RTO Document
            if (missionDoc.AttachConventionRTO.HasValue && missionDoc.AttachConventionRTO.Value)
            {
                List<SignatureParameter> signatureParametersRTO = new List<SignatureParameter>();
                //A- Generate CRTO pdf
                pageCount = 0;
                docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString();
                docType = docType + "_" + ElectronicSafeDocumentBL.DocumentType.CRTO.ToString();

                destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                string destCRTOFilePath = System.IO.Path.Combine(destFullPath, filename);

                //If Upsideo model, generate pdf
                //If Firm model, merge uploaded file with the first and last page
                if (missionDoc.IsConventionRTOFromYourModel.HasValue && !missionDoc.IsConventionRTOFromYourModel.Value)
                {
                    //MissionDocumentPdfGenerationBL.GenerateRTO(missionDoc, destCRTOFilePath, false);
                    pageCount = MissionDocumentPdfGenerationBL.GenerateRTO(missionDoc.idMissionDocument, missionDoc.User,
                                                               missionDoc.CustomerProspect, destCRTOFilePath, false);
                }
                else if (!string.IsNullOrEmpty(missionDoc.ConventionRTOFirmModelFileName))
                {
                    //Merge pdf
                    filename = missionDoc.ConventionRTOFirmModelFileName;
                    string uploadedDoc = System.IO.Path.Combine(destFullPath, filename);

                    MissionDocumentPdfGenerationBL.GenerateRTOByMerge(missionDoc, uploadedDoc, destCRTOFilePath, false, out pageCount);
                }

                if (!System.IO.File.Exists(destCRTOFilePath))
                {
                    error = _languageData.GetContent("pdf_rto_n_a_pas_ete_genere_correctement");
                }
                else
                {
                    //B- Prepare object to send to signature
                    SignatureParameter signatureParameter = new SignatureParameter()
                    {
                        SignatureFieldLabel = DTPClient.USER_ADVISER,

                        SignaturePosition = new SignaturePosition()
                        {
                            Page = (pageCount > 0) ? pageCount : 4, //CRTO : 4pages
                            X = 33,
                            Y = 177
                        }
                    };

                    signatureParametersRTO.Add(signatureParameter);

                    signatureParameter = new SignatureParameter()
                    {
                        SignatureFieldLabel = DTPClient.USER_CUSTOMER,

                        SignaturePosition = new SignaturePosition()
                        {
                            Page = (pageCount > 0) ? pageCount : 4, //CRTO : 4pages
                            X = 120,
                            Y = 177
                        }
                    };

                    signatureParametersRTO.Add(signatureParameter);


                    DocumentToSign docRTO = new DocumentToSign()
                    {
                        Label = _languageData.GetContent("convention_de_rto"),
                        Description = _languageData.GetContent("convention_de_rto"),
                        PathFilename = destCRTOFilePath,
                        Type = DTPClient.DocumentTypes.APPENDIX3.ToString(),
                        SignatureParameters = signatureParametersRTO
                    };

                    documentsToSign.Add(docRTO);
                }
            }
            #endregion

            #region 3- Presentation etablissement
            if (missionDoc.AttachPresentation)
            {
                List<SignatureParameter> signatureParametersBS = new List<SignatureParameter>();
                //A- PDF ?
                pageCount = 0;
                docType = ElectronicSafeDocumentBL.DocumentType.BS.ToString();
                string firmDocumentPath = string.Format(@"{0}\FirmInstitution\FI_{1}", Server.MapPath("~/uploads"), missionDoc.CustomerProspect.FirmInstitution.idFirmInstitution);
                destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                string destBSFilePath = System.IO.Path.Combine(destFullPath, filename);

                //From firmModel or from upsideomodel
                if (missionDoc.IsPresentationFromModel)
                {
                    //Merge pdf
                    filename = missionDoc.CustomerProspect.FirmInstitution.PresentationFile;
                    string uploadedDoc = System.IO.Path.Combine(firmDocumentPath, filename);

                    if (System.IO.File.Exists(uploadedDoc))
                    {
                        Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GeneratePresentationByMerge(missionDoc.CustomerProspect.FirmInstitution, uploadedDoc, destBSFilePath, false, out pageCount);
                    }
                    else
                    {
                        error = _languageData.GetContent("pdf_presentation_etab_n_existe_pas_ou");
                    }

                }
                else
                {
                    //From upsideo model => generate it
                    Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GeneratePresentation(missionDoc.CustomerProspect.FirmInstitution, destBSFilePath, false);
                }

                if (!System.IO.File.Exists(destBSFilePath))
                {
                    error = _languageData.GetContent("pdf_presentation_etab_n_existe_pas_ou");
                }
                else
                {
                    //B- Prepare object to send to signature
                    SignatureParameter signatureParameter = new SignatureParameter()
                    {
                        SignatureFieldLabel = DTPClient.USER_ADVISER,

                        SignaturePosition = new SignaturePosition()
                        {
                            Page = (pageCount > 0) ? pageCount : 6, //BS : 6pages
                            X = 33,
                            Y = 177
                        }
                    };

                    signatureParametersBS.Add(signatureParameter);

                    signatureParameter = new SignatureParameter()
                    {
                        SignatureFieldLabel = DTPClient.USER_CUSTOMER,

                        SignaturePosition = new SignaturePosition()
                        {
                            Page = (pageCount > 0) ? pageCount : 6, //BS : 6pages
                            X = 120,
                            Y = 177
                        }
                    };

                    signatureParametersBS.Add(signatureParameter);


                    DocumentToSign docPE = new DocumentToSign()
                    {
                        Label = _languageData.GetContent("presentation_de_l_etab"),
                        Description = _languageData.GetContent("presentation_de_l_etab"),
                        PathFilename = destBSFilePath,
                        Type = DTPClient.DocumentTypes.APPENDIX1.ToString(),
                        SignatureParameters = signatureParametersBS
                    };

                    documentsToSign.Add(docPE);
                }
            }
            #endregion

            #region 4- Fiche d'information legale FIL => DER
            //If the DER has been signed, don't include to the doc to sign
            bool hasSignedDER = !string.IsNullOrEmpty(customer.DerStatus) && customer.DerStatus == DerModel.Status.Completed.ToString();

            if (!hasSignedDER || currentUser.IsEndUser()) //Permettre au client de signer le DER si deja joint pas le CGP
            {
                if (missionDoc.AttachInformationCard)
                {
                    List<SignatureParameter> signatureParametersDER = new List<SignatureParameter>();
                    //A- PDF ?
                    pageCount = 0;
                    docType = ElectronicSafeDocumentBL.DocumentType.FIL.ToString();
                    string firmDocumentPath = string.Format(@"{0}\FirmInstitution\FI_{1}", Server.MapPath("~/uploads"), missionDoc.CustomerProspect.FirmInstitution.idFirmInstitution);
                    destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                    filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                    string destFILFilePath = System.IO.Path.Combine(destFullPath, filename);

                    //From firmModel or from upsideomodel
                    if (missionDoc.IsInformationCardFromModel)
                    {
                        //Merge pdf
                        filename = missionDoc.CustomerProspect.FirmInstitution.LegalInformationFile;
                        string uploadedDoc = System.IO.Path.Combine(firmDocumentPath, filename);

                        if (System.IO.File.Exists(uploadedDoc))
                        {
                            Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GenerateDERByMerge(missionDoc.CustomerProspect.FirmInstitution, uploadedDoc, destFILFilePath, false, out pageCount);
                        }
                        else
                        {
                            error = _languageData.GetContent("le_pdf_doc_entree_en_relation_n_existe_pas");
                        }

                    }
                    else
                    {
                        //From upsideo model => generate it
                        pageCount = Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GenerateDER(missionDoc.CustomerProspect.FirmInstitution, missionDoc.CustomerProspect.idCustomer, destFILFilePath, false);
                    }

                    if (!System.IO.File.Exists(destFILFilePath))
                    {
                        error = _languageData.GetContent("le_pdf_doc_entree_en_relation_n_existe_pas");
                    }
                    else
                    {
                        //B- Prepare object to send to signature
                        SignatureParameter signatureParameter = new SignatureParameter()
                        {
                            SignatureFieldLabel = DTPClient.USER_ADVISER,

                            SignaturePosition = new SignaturePosition()
                            {
                                Page = (pageCount > 0) ? pageCount : 16, //DER : 16pages
                                X = 33,
                                Y = 177
                            }
                        };

                        signatureParametersDER.Add(signatureParameter);

                        signatureParameter = new SignatureParameter()
                        {
                            SignatureFieldLabel = DTPClient.USER_CUSTOMER,

                            SignaturePosition = new SignaturePosition()
                            {
                                Page = (pageCount > 0) ? pageCount : 16, //DER : 16pages
                                X = 120,
                                Y = 177
                            }
                        };

                        signatureParametersDER.Add(signatureParameter);

                        DocumentToSign docDER = new DocumentToSign()
                        {
                            Label = _languageData.GetContent("doc_entree_en_relation"),
                            Description = _languageData.GetContent("doc_entree_en_relation"),
                            PathFilename = destFILFilePath,
                            Type = DTPClient.DocumentTypes.APPENDIX2.ToString(),
                            SignatureParameters = signatureParametersDER
                        };

                        documentsToSign.Add(docDER);
                    }
                }
            }
            #endregion

            #region 5- Documents annexes
            var lstAppendixDocs = MissionDocumentAppendixBL.GetMissionDocumentAppendixByMissionDocument(missionDoc.idMissionDocument); //order by datecreated

            docType = ElectronicSafeDocumentBL.DocumentType.AX.ToString();
            destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);

            int appendixNumber = 4;
            foreach (var appendixDoc in lstAppendixDocs)
            {
                List<SignatureParameter> signatureParametersAppendixDoc = new List<SignatureParameter>();

                //A- Generate  pdf
                pageCount = 0;

                filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, appendixDoc.idMissionDocumentAppendix, false);
                var destPathFilename = System.IO.Path.Combine(destFullPath, filename);

                var sourceAppendixPathFilename = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath(string.Format("~{0}", appendixDoc.Filename)));
                //On PREPROD - PROD server : always create doc to extranet_user not to extranet_client
                sourceAppendixPathFilename = sourceAppendixPathFilename.Replace(@"extranet_client", @"user");

                //Merge pdf : + page de garde (1ere page) et page de signature (2e page)
                MissionDocumentPdfGenerationBL.GenerateAppendixDocByMerge(appendixDoc, sourceAppendixPathFilename, destPathFilename, false, out pageCount);

                if (!System.IO.File.Exists(destPathFilename))
                {
                    error = _languageData.GetContent("pdf_rto_n_a_pas_ete_genere_correctement"); //TODO
                }
                else
                {
                    //B- Prepare object to send to signature
                    //Advisor signature field
                    SignatureParameter signatureParameter = new SignatureParameter()
                    {
                        SignatureFieldLabel = DTPClient.USER_ADVISER,

                        SignaturePosition = new SignaturePosition()
                        {
                            Page = pageCount,
                            X = 33,
                            Y = 177
                        }
                    };

                    signatureParametersAppendixDoc.Add(signatureParameter);

                    //Customer signature field
                    signatureParameter = new SignatureParameter()
                    {
                        SignatureFieldLabel = DTPClient.USER_CUSTOMER,

                        SignaturePosition = new SignaturePosition()
                        {
                            Page = pageCount,
                            X = 120,
                            Y = 177
                        }
                    };

                    signatureParametersAppendixDoc.Add(signatureParameter);

                    //Document to sign
                    DocumentToSign appendixDocumentToSign = new DocumentToSign()
                    {
                        Label = (!string.IsNullOrEmpty(appendixDoc.Designation)) ? appendixDoc.Designation : "Document annexe",
                        Description = (!string.IsNullOrEmpty(appendixDoc.Designation)) ? appendixDoc.Designation : "Document annexe",
                        PathFilename = destPathFilename,
                        Type = string.Format("{0}{1}", DTPClient.APPENDIX.ToString(), appendixNumber),
                        SignatureParameters = signatureParametersAppendixDoc
                    };

                    documentsToSign.Add(appendixDocumentToSign);
                }

                appendixNumber++;
            }
 

            #endregion

            return documentsToSign;
            
        }
        public RegulatoryDocumentModel GetViewDataModel(int idParentOption, Guid idTargetCustomer, bool isMissionLetter)
        {
            RegulatoryDocumentModel regulatoryDocumentModel = new RegulatoryDocumentModel();
            regulatoryDocumentModel.IsMissionLetter = isMissionLetter;
            regulatoryDocumentModel.idOptionParent = idParentOption;
            regulatoryDocumentModel.TargetCustomerProspect = CustomerProspectBL.GetCustomerProspectById(idTargetCustomer);

            //1- Get latest mission document for the customer or create if no doc
            MissionDocument missionDoc = MissionDocumentBL.GetLatestMissionDocumentByIdCustomer(idTargetCustomer, isMissionLetter); //Mission letter

            //2- If null, create one
            //If current user is END-USER, don't create new document
            var currentUser = SessionManager.GetUserSession();

            if (!currentUser.IsEndUser())
            {
                if (missionDoc == null)
                {
                    missionDoc = this.CreateMissionDocument(regulatoryDocumentModel, isMissionLetter);
                    //update customer status
                    if (isMissionLetter)
                        regulatoryDocumentModel.TargetCustomerProspect.LetterStatus = RegulatoryDocumentModel.Status.Created.ToString();
                    else
                        regulatoryDocumentModel.TargetCustomerProspect.MissionStatus = RegulatoryDocumentModel.Status.Created.ToString();
                    CustomerProspectBL.Update(regulatoryDocumentModel.TargetCustomerProspect);
                }
                else if (missionDoc.Status == RegulatoryDocumentModel.Status.Canceled.ToString()
                         || missionDoc.Status == RegulatoryDocumentModel.Status.Completed.ToString())
                {
                    //3- Check if canceled or completed : create a new document in progress
                    //missionDoc = this.CreateMissionDocument(regulatoryDocumentModel, isMissionLetter, RegulatoryDocumentModel.Status.InProgress);

                    //Update : #4535 / #4536 : always create an initial mission document => status = Created
                    missionDoc = this.CreateMissionDocument(regulatoryDocumentModel, isMissionLetter);
                    //update customer 
                    if (isMissionLetter)
                        regulatoryDocumentModel.TargetCustomerProspect.LetterStatus = RegulatoryDocumentModel.Status.Created.ToString();
                    else
                        regulatoryDocumentModel.TargetCustomerProspect.MissionStatus = RegulatoryDocumentModel.Status.Created.ToString();
                    CustomerProspectBL.Update(regulatoryDocumentModel.TargetCustomerProspect);
                }
            }
            else
            {
                if (missionDoc == null)
                {
                    missionDoc = new MissionDocument();
                }
            }

            regulatoryDocumentModel.MissionDocument = missionDoc;

            //4- Retrieve Options and Attributes data
            var option = OptionBL.GetOptionsByIdParent(idParentOption);

            // if PP
            bool isPP = (regulatoryDocumentModel.TargetCustomerProspect.IsCorporation.HasValue) ? ((regulatoryDocumentModel.TargetCustomerProspect.IsCorporation.Value) ? false : true) : false;
            if (isPP)
            {
                //Remove some options for PM
                option.RemoveAll(o => o.NameKey.Contains("Client_Letter_PM_"));
            }
            else
            {
                int indexFirstPP = 0; // sert de repère pour l'index d'insertion de List PL
                var optionRepere = option.Where(o => o.NameKey.CompareTo("Client_Letter_029") == 0).FirstOrDefault();
                if (optionRepere != null)
                {
                    indexFirstPP = option.IndexOf(optionRepere);
                }

                var lstOptsPM = option.Where(o => o.NameKey.Contains("Client_Letter_PM_")).ToList(); // à ajouter dans un rang(position) précis un peu plus tard

                //Remove some options for PP
                option.RemoveAll(o => o.idParent == 151);
                option.RemoveAll(o => o.NameKey.CompareTo("Client_Letter_029") == 0);
                option.RemoveAll(o => o.NameKey.Contains("Client_Letter_PM_")); // à supprimer car ne respecte pas le rang (position des éléments)

                option.InsertRange(indexFirstPP, lstOptsPM);
            }

            if (option != null)
            {
                regulatoryDocumentModel.Option = option.ToList();
            }

            //5- Update Data if post ?
            if (Request.RequestType.ToLower() != "get")
            {
                UpdateData(regulatoryDocumentModel);
            }

            //6- Retrieve Option Value and OptionAttribute Value
            regulatoryDocumentModel.OptionValue = CustomerProspectOptionBL.GetOptionValueListWithIdCustomerProspectAndIdParentOption(idTargetCustomer, idParentOption);

            //For new RM : recall Remuneration value from LM
            if (!isMissionLetter && regulatoryDocumentModel.MissionDocument.Status == RegulatoryDocumentModel.Status.Created.ToString())
            {
                regulatoryDocumentModel.LM_RemunerationOptionValues = CustomerProspectOptionBL.GetOptionValueListWithIdCustomerProspectAndIdOptions(idTargetCustomer, new List<Int32>() { 131, 133 }); //131 : remuneration; 133 : honoraire

                regulatoryDocumentModel = GetRemunerationDefaultValueFromLMtoRM(regulatoryDocumentModel);


            }

            //7- Signature log
            regulatoryDocumentModel.SignatureInformation = this.BuildSignatureLog(regulatoryDocumentModel.MissionDocument);

            //8- Map data to View Model
            regulatoryDocumentModel.OptionData = DeriveDataForView(regulatoryDocumentModel);

            //9- Retrieve CustomEnum
            int idCurrentLanguage = SessionManager.GetCurrentLanguage().idLanguageType;
            IDictionary<int, List<DropDownEnumModel>> dicoDropDownEnumModel = CustomEnumBL.GetCustomEnums(idCurrentLanguage);

            regulatoryDocumentModel.EnumPaymentValue = dicoDropDownEnumModel[CustomEnumBL.PaymentType];

            //10- Check credits
            regulatoryDocumentModel.InsufficientCreditMessage = this.CheckInsufficientCredits(regulatoryDocumentModel);

            //11- Signature controller
            regulatoryDocumentModel.SignatureController = SignatureDocumentBL.GetSignatureControllerName(missionDoc.Status, missionDoc.idDTPUserAccess);

            return regulatoryDocumentModel;
        }
        private string BuildSignatureLog(MissionDocument missionDoc)
        {
            string signatureLog = string.Empty;

            //Conseiller name
            string userAdviserName = string.Empty;
            if (missionDoc.User != null)
            {
                userAdviserName = missionDoc.User.EntireName + "<br />";
            }

            if (missionDoc.Status == RegulatoryDocumentModel.Status.InProgress.ToString())
            {
                signatureLog = string.Empty;
            }
            else if (missionDoc.Status == RegulatoryDocumentModel.Status.WaitingForAdviserSignature.ToString())
            {
                //If not signed by adviser
                if (!missionDoc.SignedByCustomer)
                {
                    signatureLog = string.Format("<li>En attente signature Conseiller<br />{0}</li>", userAdviserName);
                }
                else
                {
                    //Already signed by the client
                    signatureLog = string.Format(@"<li>Signé par le Client<br />le {0}</li>
                                                   <li>En attente signature Conseiller<br />{1}</li>", missionDoc.DateCustomerSignature.Value.ToShortDateString(), userAdviserName);
                }
            }
            else if (missionDoc.Status == RegulatoryDocumentModel.Status.WaitingForClientSignature.ToString())
            {
                //If not signed by adviser
                if (!missionDoc.SignedByAdviser)
                {
                    signatureLog = "<li>En attente signature Client</li>";
                }
                else
                {
                    signatureLog = string.Format(@"<li>Signé par le Conseiller<br />{0}le {1}</li>
                                               <li>En attente signature Client</li>", userAdviserName, missionDoc.DateAdviserSignature.Value.ToShortDateString());
                }
            }
            else if (missionDoc.Status == RegulatoryDocumentModel.Status.Completed.ToString())
            {
                //Case signed manually
                if (!missionDoc.DateAdviserSignature.HasValue)
                {
                    signatureLog = "<li>Signé manuellement par <br /> le Conseiller et le Client </li>";
                }
                else
                {
                    string adviserText = string.Format(@"<li>Signé par le Conseiller<br />{0}le {1}</li>", userAdviserName, missionDoc.DateAdviserSignature.Value.ToShortDateString());
                    string clientText = string.Format(@"<li>Signé par le Client<br />le {0}</li>", missionDoc.DateCustomerSignature.Value.ToShortDateString());

                    if (DateTime.Compare(missionDoc.DateAdviserSignature.Value, missionDoc.DateCustomerSignature.Value) < 0) //Conseille signe en premier
                    {
                        signatureLog = string.Concat(adviserText, clientText);
                    }
                    else
                    {
                        signatureLog = string.Concat(clientText, adviserText);
                    }
                }
            }

            return signatureLog;

        }
        private string GenerateRTODocument(MissionDocument missionDoc, bool forceDownload)
        {
            string urlGeneratedDoc = string.Empty;
            int pageCount = 0;

            try
            {
                CustomerProspect customer = missionDoc.CustomerProspect;
                string docType = ElectronicSafeDocumentBL.DocumentType.CRTO.ToString();

                string documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType, customer);
                string destDocumentFullPath = System.IO.Path.Combine(Server.MapPath("~/uploads"), documentPath);
                string filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, customer.idCustomer);

                string destFilePath = System.IO.Path.Combine(destDocumentFullPath, filename);

                //If Upsideo model, generate pdf
                //If Firm model, merge uploaded file with the first and last page
                if (missionDoc.IsConventionRTOFromYourModel.HasValue && missionDoc.IsConventionRTOFromYourModel.Value)
                {
                    //1 : Génération du PDF
                    string uploadedDoc = System.IO.Path.Combine(Server.MapPath("~/uploads"), documentPath, missionDoc.FileName);//TODO
                    MissionDocumentPdfGenerationBL.GenerateRTOByMerge(missionDoc, uploadedDoc, destFilePath, forceDownload, out pageCount);
                }
                else
                {
                    MissionDocumentPdfGenerationBL.GenerateRTO(missionDoc.idMissionDocument,missionDoc.User,missionDoc.CustomerProspect, destFilePath, forceDownload);
                }

                urlGeneratedDoc = Url.Content(string.Format("~/uploads/{0}/{1}", documentPath, filename).Replace("\\", "/"));
            }
            catch (Exception ex)
            {
                Log.AppendException(ex);
            }

            return urlGeneratedDoc;
        }
        private string GenerateMissionDocument(MissionDocument missionDoc, bool forceDownload)
        {
            string urlGeneratedDoc = string.Empty;
            int pageCount = 0;

            try
            {
                CustomerProspect customer = missionDoc.CustomerProspect;
                string docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString();

                string documentPath = ElectronicSafeDocumentBL.BuildClientDocumentPath(docType, customer);
                string destDocumentFullPath = System.IO.Path.Combine(Server.MapPath("~/uploads"), documentPath);
                string filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, customer.idCustomer);

                string destFilePath = System.IO.Path.Combine(destDocumentFullPath, filename);

                //If Upsideo model, generate pdf
                //If Firm model, merge uploaded file with the first and last page
                if (missionDoc.IsUpsideoModel)
                {
                    //1 : Génération du PDF
                    if (missionDoc.IsLetter) // lettre de mission
                    {
                        bool isPP = (missionDoc.CustomerProspect.IsCorporation.HasValue) ? ((missionDoc.CustomerProspect.IsCorporation.Value) ? false : true) : false;
                        if (isPP)
                        {
                            MissionDocumentPdfGenerationBL.GeneratePP_EngagementLetter(missionDoc, destFilePath, forceDownload);
                        }
                        else
                        {
                            MissionDocumentPdfGenerationBL.GeneratePM_EngagementLetter(missionDoc, destFilePath, forceDownload);
                        }
                    }
                    else // Rapport de mission
                    {
                        MissionDocumentPdfGenerationBL.Generate_MissionReport(missionDoc, destFilePath, forceDownload);
                    }

                }
                else
                {
                    string uploadedDoc = System.IO.Path.Combine(Server.MapPath("~/uploads"), documentPath, missionDoc.FileName);
                    if (missionDoc.IsLetter)
                    {
                        MissionDocumentPdfGenerationBL.GenerateEngagementLetterByMerge(missionDoc, uploadedDoc, destFilePath, forceDownload, out pageCount);
                    }
                    else
                    {
                        MissionDocumentPdfGenerationBL.GenerateReportLetterByMerge(missionDoc, uploadedDoc, destFilePath, forceDownload, out pageCount);
                    }
                }

                urlGeneratedDoc = Url.Content(string.Format("~/uploads/{0}/{1}", documentPath, filename).Replace("\\", "/"));
            }
            catch (Exception ex)
            {
                Log.AppendException(ex);
            }

            return urlGeneratedDoc;
        }
        private MissionDocument CreateMissionDocument(RegulatoryDocumentModel regulatoryDocumentModel, bool isLetter, RegulatoryDocumentModel.Status docStatus = RegulatoryDocumentModel.Status.Created)
        {
            MissionDocument missionDoc = new MissionDocument()
            {
                idMissionDocument = GuidHelper.GenerateGuid(),
                idCustomerProspect = regulatoryDocumentModel.TargetCustomerProspect.idCustomer,
                Status = docStatus.ToString(),
                DateCreated = DateTime.Now,
                DateUpdated = DateTime.Now,
                IsLetter = isLetter,
                AttachInformationCard = true,
                IsInformationCardFromModel = true,
                AttachPresentation = true,
                IsPresentationFromModel = true
            };

            MissionDocumentBL.InsertMissionDocument(missionDoc);

            return missionDoc;
        }
        public static string BuildMissionDocumentName(MissionDocument missionDoc)
        {
            string docType = (missionDoc.IsLetter) ? "LM" : "RM";
            string documentName = BuildDocumentName(docType, missionDoc.idMissionDocument, false);

            return documentName;
        }
        public ActionResult SignerDocumentMissionParConseiller(string id)
        {
            string error = string.Empty;
            string urlIHM_Dictao = string.Empty;
            int pageCount = 0;
            MissionDocument missionDoc = new MissionDocument();
            List<DocumentToSign> documentsToSign = new List<DocumentToSign>();

            try
            {
                // Id mission doc = id in parameter                
                missionDoc = MissionDocumentBL.GetMissionDocumentById(new Guid(id));

                if (missionDoc == null)
                {
                    error = LanguageData.GetContent("selectionner_un_doc_a_signer");
                }
                else
                {
                    CustomerProspect customer = missionDoc.CustomerProspect;
                    SignatureParameters signatureParameters = null;

                    #region 1- Mission document
                    //A- Build pdf mission document to sign
                    string docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString();

                    string destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                    string filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                    string destMissionDocFilePath = System.IO.Path.Combine(destFullPath, filename);

                    //If Upsideo model, generate pdf
                    //If Firm model, merge uploaded file with the first and last page
                    if (missionDoc.IsUpsideoModel)
                    {
                        //1 : Génération du PDF
                        if (missionDoc.IsLetter) //Lettre de Mission
                        {
                            bool isPP = (missionDoc.CustomerProspect.IsCorporation.HasValue) ? ((missionDoc.CustomerProspect.IsCorporation.Value) ? false : true) : false;
                            if (isPP)
                            {
                                MissionDocumentPdfGenerationBL.GeneratePP_EngagementLetter(missionDoc, destMissionDocFilePath, false);
                            }
                            else
                            {
                                MissionDocumentPdfGenerationBL.GeneratePM_EngagementLetter(missionDoc, destMissionDocFilePath, false);
                            }
                        }
                        else // Rapport de mission
                        {
                            MissionDocumentPdfGenerationBL.Generate_MissionReport(missionDoc, destMissionDocFilePath, false);
                        }

                    }
                    else
                    {
                        //Merge pdf
                        filename = missionDoc.FileName;
                        string uploadedDoc = System.IO.Path.Combine(destFullPath, filename);
                        if (missionDoc.IsLetter)
                        {
                            MissionDocumentPdfGenerationBL.GenerateEngagementLetterByMerge(missionDoc, uploadedDoc, destMissionDocFilePath, false, out pageCount);
                        }
                        else
                        {
                            MissionDocumentPdfGenerationBL.GenerateReportLetterByMerge(missionDoc, uploadedDoc, destMissionDocFilePath, false, out pageCount);
                        }
                    }

                    if (!System.IO.File.Exists(destMissionDocFilePath))
                    {
                        error = LanguageData.GetContent("doc_n_a_pas_ete_genere_correctement");
                    }
                    else
                    {
                        //B- Prepare object to sign
                        signatureParameters = new SignatureParameters()
                        {
                            page = (pageCount > 0) ? pageCount : (missionDoc.IsLetter) ? 13 : 9, //LM : 10pages; RM : 8pages
                            x_adviser = 33,
                            x_customer = 120,
                            y = 177
                        };

                        string typeDocLabel = (missionDoc.IsLetter) ? LanguageData.GetContent("lettre_de_mission") : LanguageData.GetContent("rapport_de_mission");

                        DocumentToSign docMD = new DocumentToSign()
                        {
                            Label = typeDocLabel,
                            Description = typeDocLabel,
                            PathFilename = destMissionDocFilePath,
                            Type = DTPClient.DocumentTypes.CONTRACT.ToString(),
                            SignatureParameters = signatureParameters
                        };

                        documentsToSign.Add(docMD);
                    }
                    #endregion

                    #region 2- Convention RTO Document
                    if (missionDoc.AttachConventionRTO.HasValue && missionDoc.AttachConventionRTO.Value)
                    {
                        //A- Generate CRTO pdf
                        pageCount = 0;
                        docType = (missionDoc.IsLetter) ? ElectronicSafeDocumentBL.DocumentType.LM.ToString() : ElectronicSafeDocumentBL.DocumentType.RM.ToString();
                        docType = docType + "_" + ElectronicSafeDocumentBL.DocumentType.CRTO.ToString();

                        destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                        filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                        string destCRTOFilePath = System.IO.Path.Combine(destFullPath, filename);

                        //If Upsideo model, generate pdf
                        //If Firm model, merge uploaded file with the first and last page
                        if (missionDoc.IsConventionRTOFromYourModel.HasValue && !missionDoc.IsConventionRTOFromYourModel.Value)
                        {
                            // MissionDocumentPdfGenerationBL.GenerateRTO(missionDoc, destCRTOFilePath, false);
                            pageCount = MissionDocumentPdfGenerationBL.GenerateRTO(missionDoc.idMissionDocument, missionDoc.User,
                                                                         missionDoc.CustomerProspect, destCRTOFilePath,
                                                                         false);
                        }
                        else if (!string.IsNullOrEmpty(missionDoc.ConventionRTOFirmModelFileName))
                        {
                            //Merge pdf
                            filename = missionDoc.ConventionRTOFirmModelFileName;
                            string uploadedDoc = System.IO.Path.Combine(destFullPath, filename);

                            MissionDocumentPdfGenerationBL.GenerateRTOByMerge(missionDoc, uploadedDoc, destCRTOFilePath, false, out pageCount);
                        }

                        if (!System.IO.File.Exists(destCRTOFilePath))
                        {
                            error = LanguageData.GetContent("pdf_rto_n_a_pas_ete_genere_correctement");
                        }
                        else
                        {
                            //B- Prepare object to send to signature
                            signatureParameters = new SignatureParameters()
                            {
                                page = (pageCount > 0) ? pageCount : 4, //CRTO : 4pages
                                x_adviser = 33,
                                x_customer = 120,
                                y = 177
                            };

                            DocumentToSign docRTO = new DocumentToSign()
                            {
                                Label = LanguageData.GetContent("convention_de_rto"),
                                Description = LanguageData.GetContent("convention_de_rto"),
                                PathFilename = destCRTOFilePath,
                                Type = DTPClient.DocumentTypes.APPENDIX3.ToString(),
                                SignatureParameters = signatureParameters
                            };

                            documentsToSign.Add(docRTO);
                        }
                    }
                    #endregion

                    #region 3- Presentation etablissement
                    if (missionDoc.AttachPresentation)
                    {
                        //A- PDF ?
                        pageCount = 0;
                        docType = ElectronicSafeDocumentBL.DocumentType.BS.ToString();
                        string firmDocumentPath = string.Format(@"{0}\FirmInstitution\FI_{1}", Server.MapPath("~/uploads"), missionDoc.CustomerProspect.FirmInstitution.idFirmInstitution);
                        destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                        filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                        string destBSFilePath = System.IO.Path.Combine(destFullPath, filename);

                        //From firmModel or from upsideomodel
                        if (missionDoc.IsPresentationFromModel)
                        {
                            //Merge pdf
                            filename = missionDoc.CustomerProspect.FirmInstitution.PresentationFile;
                            string uploadedDoc = System.IO.Path.Combine(firmDocumentPath, filename);

                            if (System.IO.File.Exists(uploadedDoc))
                            {
                                Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GeneratePresentationByMerge(missionDoc.CustomerProspect.FirmInstitution, uploadedDoc, destBSFilePath, false, out pageCount);
                            }
                            else
                            {
                                error = LanguageData.GetContent("pdf_presentation_etab_n_existe_pas_ou");
                            }

                        }
                        else
                        {
                            //From upsideo model => generate it
                            pageCount = Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GeneratePresentation(missionDoc.CustomerProspect.FirmInstitution, destBSFilePath, false);
                        }

                        if (!System.IO.File.Exists(destBSFilePath))
                        {
                            error = LanguageData.GetContent("pdf_presentation_etab_n_existe_pas_ou");
                        }
                        else
                        {
                            //B- Prepare object to send to signature
                            signatureParameters = new SignatureParameters()
                            {
                                //page = (pageCount > 0) ? pageCount : 6, //BS : 6pages
                                page = pageCount,
                                x_adviser = 33,
                                x_customer = 120,
                                y = 177
                            };

                            DocumentToSign docPE = new DocumentToSign()
                            {
                                Label = LanguageData.GetContent("presentation_de_l_etab"),
                                Description = LanguageData.GetContent("presentation_de_l_etab"),
                                PathFilename = destBSFilePath,
                                Type = DTPClient.DocumentTypes.APPENDIX1.ToString(),
                                SignatureParameters = signatureParameters
                            };

                            documentsToSign.Add(docPE);
                        }
                    }
                    #endregion

                    #region 4- Fiche d'information legale FIL => DER
                    if (string.IsNullOrEmpty(customer.DerStatus)
                        || (!string.IsNullOrEmpty(customer.DerStatus) && customer.DerStatus != DerModel.Status.Completed.ToString()))
                    {

                        if (missionDoc.AttachInformationCard)
                        {
                            //A- PDF ?
                            pageCount = 0;
                            docType = ElectronicSafeDocumentBL.DocumentType.FIL.ToString();
                            string firmDocumentPath = string.Format(@"{0}\FirmInstitution\FI_{1}", Server.MapPath("~/uploads"), missionDoc.CustomerProspect.FirmInstitution.idFirmInstitution);
                            destFullPath = ElectronicSafeDocumentBL.BuildClientUploadDocumentPath(docType, customer);
                            filename = ElectronicSafeDocumentBL.BuildDocumentName(docType, missionDoc.idMissionDocument, false);

                            string destFILFilePath = System.IO.Path.Combine(destFullPath, filename);

                            //From firmModel or from upsideomodel
                            if (missionDoc.IsInformationCardFromModel)
                            {
                                //Merge pdf
                                filename = missionDoc.CustomerProspect.FirmInstitution.LegalInformationFile;
                                string uploadedDoc = System.IO.Path.Combine(firmDocumentPath, filename);

                                if (System.IO.File.Exists(uploadedDoc))
                                {
                                    Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GenerateDERByMerge(missionDoc.CustomerProspect.FirmInstitution, uploadedDoc, destFILFilePath, false, out pageCount);
                                }
                                else
                                {
                                    error = LanguageData.GetContent("le_pdf_doc_entree_en_relation_n_existe_pas");
                                }

                            }
                            else
                            {
                                //From upsideo model => generate it
                                pageCount = Upsilab.Business.Configuration.FirmInstitutionPdfGeneration.GenerateDER(missionDoc.CustomerProspect.FirmInstitution, missionDoc.CustomerProspect.idCustomer, destFILFilePath, false);
                            }

                            if (!System.IO.File.Exists(destFILFilePath))
                            {
                                error = LanguageData.GetContent("le_pdf_doc_entree_en_relation_n_existe_pas");
                            }
                            else
                            {
                                //B- Prepare object to send to signature
                                signatureParameters = new SignatureParameters()
                                {
                                    page = (pageCount > 0) ? pageCount : 16, //DER : 14pages
                                    x_adviser = 33,
                                    x_customer = 120,
                                    y = 177
                                };

                                DocumentToSign docDER = new DocumentToSign()
                                {
                                    Label = LanguageData.GetContent("doc_entree_en_relation"),
                                    Description = LanguageData.GetContent("doc_entree_en_relation"),
                                    PathFilename = destFILFilePath,
                                    Type = DTPClient.DocumentTypes.APPENDIX2.ToString(),
                                    SignatureParameters = signatureParameters
                                };

                                documentsToSign.Add(docDER);
                            }
                        }
                    }
                    #endregion

                    //Signature
                    if (documentsToSign.Count == 0)
                    {
                        error = LanguageData.GetContent("aucun_doc_a_signer_veuillez");
                    }

                    if (string.IsNullOrEmpty(error))
                    {
                        // Sign the document mission
                        Upsilab.Data.Model.User userAdviser = (missionDoc.User != null) ? missionDoc.User : Upsilab.Business.Utility.SessionManager.GetUserSession();
                        urlIHM_Dictao = SignatureDocumentBL_4_1.SignMissionDocumentByAdviser(missionDoc.idMissionDocument, documentsToSign, userAdviser);
                    }
                }
            }
            catch (Exception ex)
            {
                Upsilab.Business.Log.Log.AppendException(ex);
                error = ex.Message;
            }

            if (!string.IsNullOrEmpty(error))
            {
                string missionDocLabel = (missionDoc.IsLetter) ? LanguageData.GetContent("lettre_de_mission") : LanguageData.GetContent("rapport_de_mission");

                SignatureModel signatureModel = new SignatureModel()
                {
                    H1Title = (missionDoc.IsLetter) ? LanguageData.GetContent("lettre_de_mission") : LanguageData.GetContent("rapport_de_mission"),
                    HeadTitle = string.Format("Signature {0}", missionDocLabel),
                    ErrorMessage = error
                };

                return View("AllerSignature", signatureModel);
            }
            else
            {
                return Redirect(urlIHM_Dictao);
            }

        }
        public ActionResult SignerDocumentMissionParClient(string id)
        {
            string error = string.Empty;
            string urlIHM_Dictao = string.Empty;
            int pageCount = 0;
            MissionDocument missionDoc = new MissionDocument();

            try
            {
                // Id latest mission document = id in parameter                
                if (string.IsNullOrEmpty(id))
                {
                    error = LanguageData.GetContent("selectionner_un_doc_a_signer");
                }
                else
                {
                    missionDoc = MissionDocumentBL.GetMissionDocumentById(new Guid(id));

                    if (missionDoc == null)
                    {
                        error = LanguageData.GetContent("selectionner_un_doc_a_signer");
                    }
                    else
                    {
                        // Sign the mission document (Customer signs secondly)
                        urlIHM_Dictao = SignatureDocumentBL_4_1.SignMissionDocumentByCustomer(missionDoc.idMissionDocument, string.Empty, pageCount);
                    }
                }
            }
            catch (Exception ex)
            {
                //Log
                error = ex.Message;
            }

            if (!string.IsNullOrEmpty(error))
            {
                string missionDocLabel = (missionDoc.IsLetter) ? LanguageData.GetContent("lettre_de_mission") : LanguageData.GetContent("rapport_de_mission");

                SignatureModel signatureModel = new SignatureModel()
                {
                    H1Title = (missionDoc.IsLetter) ? LanguageData.GetContent("lettre_de_mission") : LanguageData.GetContent("rapport_de_mission"),
                    HeadTitle = string.Format(LanguageData.GetContent("signature_"), missionDocLabel),
                    ErrorMessage = error
                };

                return View("AllerSignature", signatureModel);
            }
            else
            {
                return Redirect(urlIHM_Dictao);
            }
        }