public ActionResult Index()
        {
            //Case end user
            var currentUser = SessionManager.GetUserSession();
            //If an EndUser is connected
            if (currentUser.IsEndUser())
            {
                DerModel derModel = this.GetDataModelForEndUser();

                SessionManager.Set<string>(SIGNED_DOC_PATH_FILENAME, derModel.GeneratedDocPathFileName);
                return View("DerClient", derModel);
            }

            Guid? customerId = GetTargetCustomer();
            DerModel model = new DerModel();

            if (customerId.HasValue)
            {
                if (!string.IsNullOrEmpty(Request.Params[_FD_TargetPage])) /// Check !!!
                {
                    return RedirectToAction(Request.Params[_FD_TargetPage]);
                }
                DerModel derModel = this.GetViewDataModel(customerId.Value);
                return View(derModel);
            }
            else
            {
                return RedirectToAction("Index", "Client");
            }

        }
        private string CheckInsufficientCredits(DerModel pDerModel)
        {
            CustomerProspect customer = null;
            string message = string.Empty;

            var currentUser = SessionManager.GetUserSession();

            if (currentUser.IsEndUser())
            {
                customer = SessionManager.GetCustomerProspectSession();
            }
            else
            {
                customer = pDerModel.TargetCustomerProspect;
            }

            if (customer != null)
            {
                if (!CreditOperationBL.HasFirmInstitutionSufficientCredit(customer.FirmInstitution.idFirmInstitution, CreditOperationBL.OperationType.SIGNATURE_DER.ToString())) //OR  :MISE_AU_COFFRE_MANUELLE_DOCUMENT_MISSION
                {
                    message = LanguageDataReg.GetContent("sign_credit_error");
                }
            }

            return message;

        }
        private DER CreateDer(DerModel derModel, RegulatoryDocumentModel.Status docStatus = RegulatoryDocumentModel.Status.Created)
        {
            DER der = new DER()
            {
                idDer = GuidHelper.GenerateGuid(),
                idCustomerProspect = derModel.TargetCustomerProspect.idCustomer,
                Status = docStatus.ToString(),
                DateCreated = DateTime.Now,
                DateUpdated = DateTime.Now,
                IsDerFromModel = true,
                AttachPresentation = true,
                IsPresentationFromModel = true
            };

            DerBL.InsertDER(der);

            return der;
        }
        public void UpdateData(DerModel _derData)
        {
            ViewBag.Error = null;
            ViewBag.Ok = null;
            Guid? customerId = this.GetTargetCustomer();

            DER der = DerBL.GetLatestDERByIdCustomer(customerId.Value);

          //  bool isAttachInformationCard = Convert.ToBoolean(Request.Params["AttachInformationCardText"].ToString());
            bool isDerFromFirmModel = Convert.ToBoolean(Request.Params["IsInformationCardFromModelText"].ToString());

            bool isAttachPresentation = Convert.ToBoolean(Request.Params["AttachPresentationText"].ToString());
            bool isPresentationFromFirmModel = Convert.ToBoolean(Request.Params["IsPresentationInformationCardFromModelText"].ToString());


            try
            {
                CustomerProspect customer = CustomerProspectBL.GetCustomerProspectById(customerId.Value);
                
                #region Traitement Fiche d'information légale (appelé par la suite : "Document d'entree en relation")
                /*
                    * Dans le cas où l'utilisateur choisit "J'utilise mon modèle", cela suppose
                    * que l'administrateur de l'établissement ait préalablement uploadé les
                    * documents
                */
                if (isDerFromFirmModel)
                {
                    // Tester si les documents ont été bien uploadés
                    // on enregistre
                    if (!string.IsNullOrEmpty(customer.FirmInstitution.LegalInformationFile))
                    {
                        der.IsDerFromModel = true;
                    }
                    else
                    {
                        /* 
                         * "Le document d'entrée en relation de votre établissement n'a pas été renseignée par votre administrateur"
                         *  NB : #4608 : ne pas afficher l'erreur si l'utilisateur a décidé de ne pas joindre le fichier
                          */

                        //if (isAttachInformationCard)
                        //{
                        der.IsDerFromModel = false;
                        ViewBag.Error = ViewBag.Error + LanguageDataReg.GetContent("doc_d_entree_en_relation_non_renseigné");
                        // }
                    }
                }
                else
                {
                    der.IsDerFromModel = false;
                }
                #endregion

                #region Traitement de la Présentation de la société
                /*
                    * Dans le cas où l'utilisateur choisit "J'utilise mon modèle", cela suppose
                    * que l'administrateur de l'établissement ait préalablement uploadé les
                    * documents
                */
                if (isPresentationFromFirmModel)
                {
                    // Tester si les documents ont été bien uploadés
                    // on enregistre
                    if (!string.IsNullOrEmpty(customer.FirmInstitution.PresentationFile))
                    {
                        der.IsPresentationFromModel = true;
                    }
                    else
                    {
                        /* 
                         * "La présentation de votre société n'a pas été renseignée par votre administrateur"
                         * NB : #4608 : ne pas afficher l'erreur si l'utilisateur a décidé de ne pas joindre le fichier
                          */

                        if (isAttachPresentation)
                        {
                            der.IsPresentationFromModel = false;
                            ViewBag.Error = ViewBag.Error + LanguageDataReg.GetContent("presentation_etab_non_renseigné");
                        }
                    }
                }
                else
                {
                    der.IsPresentationFromModel = false;
                }
                #endregion

                #region Sauvegarde du DER
                // 2- update avec le statut InProgress
                if (ViewBag.Error == null)
                {
                    der.Status = RegulatoryDocumentModel.Status.InProgress.ToString();
                    der.DateUpdated = DateTime.Now;
                    // der.AttachInformationCard = isAttachInformationCard;
                    der.AttachPresentation = isAttachPresentation;
                    DerBL.Update(der);

                    //string documentLabel = LanguageData.GetContent("du_der");
                    ViewBag.Ok = string.Format(LanguageData.GetContent("save_success"));
                }
                #endregion
            }
            catch (Exception ex)
            {
                ViewBag.Error = ex.Message;
                Log.AppendException(ex);
            }

            //If there is message, show it
            this.SetMessage();
        }
        public DerModel GetViewDataModel(Guid idTargetCustomer)
        {
            DerModel DERModel = new DerModel();
            DERModel.TargetCustomerProspect = CustomerProspectBL.GetCustomerProspectById(idTargetCustomer);

            //1- Get latest DER document for the customer or create if no doc
            DER der = DerBL.GetLatestDERByIdCustomer(idTargetCustomer);

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

            if (!currentUser.IsEndUser())
            {
                if (der == null)
                {
                    der = this.CreateDer(DERModel);
                    //update customer status                 
                    DERModel.TargetCustomerProspect.DerStatus = RegulatoryDocumentModel.Status.Created.ToString();
                    CustomerProspectBL.Update(DERModel.TargetCustomerProspect);
                }
                else if (der.Status == RegulatoryDocumentModel.Status.Canceled.ToString()
                         || der.Status == RegulatoryDocumentModel.Status.Completed.ToString())
                {
                    //3- Check if canceled or completed : create a new document in progress

                    //Update : #4535 / #4536 : always create an initial mission document => status = Created
                    der = this.CreateDer(DERModel);

                    //update customer 
                    DERModel.TargetCustomerProspect.DerStatus = RegulatoryDocumentModel.Status.Created.ToString();
                    CustomerProspectBL.Update(DERModel.TargetCustomerProspect);
                }
            }
            else
            {
                if (der == null)
                {
                    der = new DER();
                }
            }

            DERModel.Der = der;

            //4- Signature log
            DERModel.SignatureInformation = this.BuildSignatureLog(DERModel.Der);

            //5- Check credits
            DERModel.InsufficientCreditMessage = this.CheckInsufficientCredits(DERModel);

            //6- Signature controller
            DERModel.SignatureController = SignatureDocumentBL.GetSignatureControllerName(der.Status, der.idDTPUserAccess);

            return DERModel;
        }