public static void PopulateComboBoxes(ManageFeesViewModel model)
        {
            var file = DocumentsServiceFacade.GetLatestFileByLoanIdAndDocumentClass(model.TitleAndEscrow.LoanId, DocumentClass.SmartGFEComplianceCertificate, model.TitleAndEscrow.UserAccountId);

            if (file != null && file.FileStoreItemId != Guid.Empty)
            {
                model.TitleAndEscrow.SmartGfeDocumentLink = HttpUtility.UrlEncode(EncryptionHelper.EncryptRijndael(file.FileStoreItemId.ToString(), EncriptionKeys.Default));
                if (!model.TitleAndEscrow.SmartGFEEnabled.HasValue)
                {
                    model.TitleAndEscrow.SmartGFEEnabled = model.TitleAndEscrow.SmartGFEEnabledOriginalValue = true;
                }
            }
            model.TitleAndEscrow.ListPaidBy = new List <string>();
            var ddlValues = LookupServiceFacade.Lookup(LookupKeywords.CostPaidBy, model.TitleAndEscrow.UserAccountId);

            foreach (var c in ddlValues)
            {
                model.TitleAndEscrow.ListPaidBy.Add(c.StringValue);
            }

            model.TitleAndEscrow.ListPaidTo = new List <string>();
            ddlValues = LookupServiceFacade.Lookup(LookupKeywords.CostPaidTo, model.TitleAndEscrow.UserAccountId);
            foreach (var c in ddlValues)
            {
                model.TitleAndEscrow.ListPaidTo.Add(c.StringValue);
            }
            model.TitleAndEscrow.ListWhen = new List <string>();
            ddlValues = LookupServiceFacade.Lookup(LookupKeywords.CostPaidWhen, model.TitleAndEscrow.UserAccountId);
            foreach (var c in ddlValues)
            {
                model.TitleAndEscrow.ListWhen.Add(c.StringValue);
            }
        }
        public void Execute()
        {
            #region Check and convert input parameters

            if (!InputParameters.ContainsKey("LoanId"))
            {
                throw new ArgumentException("LoanId value was expected!");
            }

            Guid loanId;
            Guid.TryParse(InputParameters["LoanId"].ToString().TrimEnd(), out loanId);

            var user = AccountHelper.GetUserAccount(HttpContext);
            if (user == null)
            {
                throw new InvalidOperationException("UserData is null");
            }

            #endregion

            var model = new ManageFeesViewModel();
            model.TitleAndEscrow = ManageFeesHelper.GetCostByLoanId(loanId, user, HttpContext);

            ManageFeesHelper.SetTitleAndEscrowModel(model);


            ViewName = "Commands/ManageFees/_manageFees";
            ViewData = model;
        }
        public ActionResult RetrieveSmartGfeData(ManageFeesViewModel model)
        {
            ModelState.Clear();
            var loan = LoanServiceFacade.RetrieveLoan(model.TitleAndEscrow.LoanId, false, model.TitleAndEscrow.UserAccountId);

            var costGroupNumber11      = model.TitleAndEscrow.CostGroups.First(c => c.CostGroupNumber == 11);
            var costGroupNumber12      = model.TitleAndEscrow.CostGroups.First(c => c.CostGroupNumber == 12);
            var closingCostRequestId   = IntegrationLogServiceFacade.GetClosingCorpXmlForLoanId(model.TitleAndEscrow.LoanId, model.TitleAndEscrow.UserAccountId);
            var defaultCostCalculation = new DefaultCostCalculation()
            {
                LoanId = model.TitleAndEscrow.LoanId,
                ClosingCostRequestId  = closingCostRequestId,
                FeeProvider           = model.TitleAndEscrow.FeeProvider,
                MortgageType          = loan.MortgageType,
                PropertyValue         = loan.SubjectProperty.CurrentEstimatedValue.HasValue ? ( decimal )loan.SubjectProperty.CurrentEstimatedValue : 0,
                LoanAmount            = ( decimal )loan.BaseLoanAmount,
                StateName             = loan.SubjectProperty.Address == null ? null : loan.SubjectProperty.Address.StateName,
                PropertyType          = loan.SubjectProperty.PropertyType,
                InvestorName          = loan.InvestorName,
                CompanyProfile        = CompanyProfileServiceFacade.RetrieveCompanyProfile(),
                LoanTransactionTypeId = loan.LoanType
            };

            costGroupNumber11 = CostServiceFacade.RetrieveCostFromSmartGfe(defaultCostCalculation, model.TitleAndEscrow.UserAccountId, costGroupNumber11);
            costGroupNumber12 = CostServiceFacade.RetrieveCostFromSmartGfe(defaultCostCalculation, model.TitleAndEscrow.UserAccountId, costGroupNumber12);
            ManageFeesHelper.PreselectDefaultCosts(costGroupNumber11);
            ManageFeesHelper.PreselectDefaultCosts(costGroupNumber12);
            var group1100Index = model.TitleAndEscrow.CostGroups.FindIndex(g => g.CostGroupNumber == 11);

            model.TitleAndEscrow.CostGroups.RemoveAt(group1100Index);
            model.TitleAndEscrow.CostGroups.Insert(group1100Index, costGroupNumber11);
            var group1200Index = model.TitleAndEscrow.CostGroups.FindIndex(g => g.CostGroupNumber == 12);

            model.TitleAndEscrow.CostGroups.RemoveAt(group1200Index);
            model.TitleAndEscrow.CostGroups.Insert(group1200Index, costGroupNumber12);

            var itemize = GeneralSettingsServiceFacade.RetrieveStatusByGeneralSettingsName("Itemize Lender Credit", Guid.Empty, 0);

            LoanHelper.PerformPTCCalculationsForTitleEscrow(model.TitleAndEscrow.CostGroups, itemize);
            ManageFeesHelper.PopulateComboBoxes(model);
            ManageFeesHelper.SetTitleAndEscrowModel(model);
            return(PartialView("Commands/ManageFees/_manageFeeSmartGfeSection", model));
        }
        public static void SetTitleAndEscrowModel(ManageFeesViewModel model)
        {
            var feeTitles801        = Enum.GetValues(typeof(FeeTitles801)).Cast <FeeTitles801>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles804To820   = Enum.GetValues(typeof(FeeTitles804To820)).Cast <FeeTitles804To820>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles900        = Enum.GetValues(typeof(FeeTitles900)).Cast <FeeTitles900>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles1000       = Enum.GetValues(typeof(FeeTitles1000)).Cast <FeeTitles1000>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles1100       = Enum.GetValues(typeof(FeeTitles1100)).Cast <FeeTitles1100>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles1200       = Enum.GetValues(typeof(FeeTitles1200)).Cast <FeeTitles1200>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles1302To1307 = Enum.GetValues(typeof(FeeTitles1302To1307)).Cast <FeeTitles1302To1307>().Select(title => title.GetStringValue()).ToList <string>();
            var feeTitles1308To1311 = Enum.GetValues(typeof(FeeTitles1308To1311)).Cast <FeeTitles1308To1311>().Select(title => title.GetStringValue()).ToList <string>();

            PrepareFeeTitlesDropdown(feeTitles801);
            model.FeeTitles801 = feeTitles801;

            PrepareFeeTitlesDropdown(feeTitles804To820);
            model.FeeTitles804To820 = feeTitles804To820;

            PrepareFeeTitlesDropdown(feeTitles900);
            model.FeeTitles900 = feeTitles900;

            PrepareFeeTitlesDropdown(feeTitles1000);
            model.FeeTitles1000 = feeTitles1000;

            PrepareFeeTitlesDropdown(feeTitles1100);
            model.FeeTitles1100 = feeTitles1100;

            PrepareFeeTitlesDropdown(feeTitles1200);
            model.FeeTitles1200 = feeTitles1200;

            PrepareFeeTitlesDropdown(feeTitles1302To1307);
            model.FeeTitles1302To1307 = feeTitles1302To1307;

            PrepareFeeTitlesDropdown(feeTitles1308To1311);
            model.FeeTitles1308To1311 = feeTitles1308To1311;

            var leadSource = LoanServiceFacade.RetrieveHearAboutUs(model.TitleAndEscrow.LoanId);

            model.LeadSourceInformation = leadSource != null ? leadSource.LeadSourceId + " " + leadSource.Description : String.Empty;
            model.TitleInformation      = ConciergeWorkQueueServiceFacade.ExecuteSPGetBorrowerData("GetBorrowerData", model.TitleAndEscrow.LoanId, model.TitleAndEscrow.UserAccountId);
        }
        public ActionResult SaveCosts(ManageFeesViewModel model)
        {
            try
            {
                var group1200Index = model.TitleAndEscrow.CostGroups.FindIndex(g => g.CostGroupNumber == 12);
                foreach (var cost in model.TitleAndEscrow.CostGroups[group1200Index].Costs)
                {
                    if (!String.IsNullOrEmpty(cost.Name))
                    {
                        cost.TotalRow = cost.Name.Contains("1203") ? "1203" : cost.Name.Contains("1201") ? "1201" : null;
                        cost.Name     = cost.Name.Contains("1203") ? cost.Name.Replace(" - 1203", String.Empty) :
                                        cost.Name.Contains("1201") ? cost.Name.Replace(" - 1201", String.Empty) : cost.Name;
                    }
                }
                if (model.TitleAndEscrow.SmartGFEEnabled.HasValue)
                {
                    var group1100Index = model.TitleAndEscrow.CostGroups.FindIndex(g => g.CostGroupNumber == 11);


                    if (!model.TitleAndEscrow.SmartGFEEnabled.Value && model.TitleAndEscrow.SmartGFEEnabledOriginalValue)
                    {
                        var costs1100Exist = false;
                        foreach (var cost in model.TitleAndEscrow.CostGroups[group1100Index].Costs)
                        {
                            if (cost.Amount > 0 || cost.FromBorrowerFunds > 0)
                            {
                                costs1100Exist = true;
                                break;
                            }
                        }

                        var costs1200Exist = false;
                        foreach (var cost in model.TitleAndEscrow.CostGroups[group1200Index].Costs)
                        {
                            if (cost.Amount > 0 || cost.FromBorrowerFunds > 0)
                            {
                                costs1200Exist = true;
                                break;
                            }
                        }

                        // If user disabled SmartGFE, but removed all fees -> re-enable to SmartGFE
                        if (!costs1100Exist && !costs1200Exist)
                        {
                            model.TitleAndEscrow.SmartGFEEnabled = true;
                        }
                    }

                    if (model.TitleAndEscrow.SmartGFEEnabled.Value)
                    {
                        if (model.TitleAndEscrow.SmartGFEEnabledOriginalValue)
                        {
                            //If SmartGFE is turned on, do not update fees in section 1100 and 1200 as they are locked
                            model.TitleAndEscrow.CostGroups.RemoveAt(group1100Index);

                            group1200Index = model.TitleAndEscrow.CostGroups.FindIndex(g => g.CostGroupNumber == 12);
                            model.TitleAndEscrow.CostGroups.RemoveAt(group1200Index);
                        }
                        else
                        {
                            // If SmartGFE was manually turned back on, remove locked flags for all fees in sections 1100 and 1200
                            foreach (var cost in model.TitleAndEscrow.CostGroups[group1100Index].Costs)
                            {
                                cost.IsLocked = false;
                            }

                            foreach (var cost in model.TitleAndEscrow.CostGroups[group1200Index].Costs)
                            {
                                cost.IsLocked = false;
                            }
                        }
                    }
                }

                CostServiceFacade.UpdateCostsByTitleAndEscrow(model.TitleAndEscrow, IdentityManager.GetUserAccountId());
            }
            catch (Exception ex)
            {
                TraceHelper.Error(TraceCategory.LoanCenterController,
                                  "An error occurred in MangeFeesController! SaveCosts(ManageFeesViewModel model)", ex);
            }

            return(RedirectToAction("Execute", "Command",
                                    new { command = "ManageFees,LoanId=" + model.TitleAndEscrow.LoanId }));
        }