Example #1
0
        /// <summary>
        /// Renders a view on screen.
        /// </summary>
        /// <returns>A view</returns>
        public ActionResult Index()
        {
            var    customerId = String.Empty;
            string modelCode;

            var viewModel = new FormViewModel();

            if (!String.IsNullOrEmpty(Request.QueryString["c"]))
            {
                customerId = Request.QueryString["c"];

                var command  = new GetCustomerDataCommand(Int32.Parse(customerId));
                var customer = command.Execute();
                viewModel = new FormViewModel
                {
                    FirstName = customer.FirstName.ToLower().ToTitleCase(),
                    LastName  = customer.LastName.ToLower().ToTitleCase(),
                    Email     = customer.Email.ToLower()
                };
            }
            if (!String.IsNullOrEmpty(Request.QueryString["m"]))
            {
                modelCode = Request.QueryString["m"];
            }
            else
            {
                var cQuery = customerId != String.Empty ? ("?c=" + customerId) : "";
                return(RedirectToAction("Index", "Home", cQuery));
            }

            var result = new List <Title>();
            var values = Enum.GetValues(typeof(Salutation));

            foreach (var item in values)
            {
                result.Add(new Title {
                    Id = (int)item, Name = item.ToString()
                });
            }

            viewModel.Titles = result.ToList();
            viewModel.Code   = modelCode;

            var car = _dbContext.GetCar(modelCode).SingleOrDefault();

            if (car != null)
            {
                ViewBag.ModelName = car.Name;
            }
            ViewBag.UserId     = customerId;
            ViewBag.ModelCode  = modelCode;
            ViewBag.EngineName = car.EngineName;
            ViewBag.Brand      = car.Brand;
            ViewBag.Url        = car.Url;
            ViewBag.ModelName  = car.Name;
            ViewBag.Model      = car.Model;

            if (!string.IsNullOrEmpty(customerId))
            {
                viewModel.UserId = Int32.Parse(customerId);
            }
            return(View(viewModel));
        }
        /// <summary>
        /// Sends form data to eMaster and GRG APIs and despatches emails.
        /// </summary>
        /// <returns>True/False</returns>
        /// <exception cref="CarNotFoundException">
        /// Car not found.
        /// or
        /// Finance option not found.
        /// </exception>
        public bool Execute()
        {
            var isComplete = false;

            var dbCar = _dbContext.GetCar(_carModel).FirstOrDefault();

            if (dbCar == null)
            {
                throw new CarNotFoundException("Car not found.");
            }

            var dbFinance = _dbContext.GetCarFinance(dbCar.Id).FirstOrDefault();

            if (dbFinance == null)
            {
                throw new CarNotFoundException("Finance option not found.");
            }

            var car = new Models.NewCar()
            {
                Code         = dbCar.Code,
                Color        = dbCar.Color,
                Engine       = dbCar.Engine,
                EngineName   = dbCar.EngineName,
                Model        = dbCar.Model,
                Name         = dbCar.Name,
                Capacity     = dbCar.Capacity,
                Luggage      = dbCar.Luggage,
                Lifestyle    = dbCar.Lifestyle,
                Awd          = dbCar.Awd,
                High         = dbCar.High,
                Convertible  = dbCar.Convertible,
                Price        = dbCar.Price,
                Cost         = dbCar.Cost,
                Speed        = dbCar.Speed,
                Mph          = dbCar.Mph,
                Economy      = dbCar.Economy,
                Terms        = dbCar.Terms,
                Alt_1        = dbCar.Alt1,
                Alt_2        = dbCar.Alt2,
                Alt_3        = dbCar.Alt3,
                APR          = dbFinance.APR,
                Contribution = dbFinance.Contribution,
                CreditCharge = dbFinance.CreditCharge,
                Deposit      = dbFinance.Deposit,
                FinalPayment = dbFinance.FinalPayment,
                PurchaseFee  = dbFinance.PurchaseFee,
                ROI          = dbFinance.ROI,
                Term         = dbFinance.Term,
                FinancePrice = dbFinance.FinancePrice,
                Payment      = dbFinance.Payment,
                Mpg          = Convert.ToDouble(dbCar.Mpg),
                Url          = dbCar.Url,
                Joke         = dbCar.Joke
            };

            _customer.Car = car;
            var requestUrl = string.Empty;

            // Send to eMaster API
            var emResponse = false;

            if (_customer.UserId != "0")
            {
                IProvider eMasterProvider = new EMasterProvider();
                var       emfunc          = new FuncHelper.ExternalApiFunction <Customer, string, bool>(eMasterProvider.SendData);
                emResponse = FuncHelper.DoFuncWithRetry(emfunc, _customer, out requestUrl, TimeSpan.FromSeconds(2));
            }

            // Send to GRG API
            IProvider grassRootsProvider = new GrassRootsProvider();
            var       grgfunc            = new FuncHelper.ExternalApiFunction <Customer, string, bool>(grassRootsProvider.SendData);
            var       grgResponse        = FuncHelper.DoFuncWithRetry(grgfunc, _customer, out requestUrl, TimeSpan.FromSeconds(2));

            Log.Info("Response: " + grgResponse);

            if (!grgResponse)
            {
                var errorEmailSubject     = Config.ErrorEmailSubject;
                var errorEmailDestination = Config.ErrorEmailDestination;
                var errorEmailText        = requestUrl;
                MandrillHelper.SendEmail(errorEmailDestination, errorEmailSubject, null, "An error occured while processing the following URL:\r\n\r\n" + errorEmailText);
            }

            string readHTMLFile;
            string readTextFile;
            var    subject = Config.EmailMeResultsSubject;

            using (var reader = new StreamReader(_htmlTemplatePath))
            {
                readHTMLFile = reader.ReadToEnd();
            }
            using (var reader = new StreamReader(_textTemplatePath))
            {
                readTextFile = reader.ReadToEnd();
            }
            var htmlBody     = readHTMLFile;
            var textBody     = readTextFile;
            var assetPath    = Config.EmailAssetsDomain + Config.EmailAssetsLocation;
            var carAssetPath = Config.EmailAssetsDomain + Config.EmailCarAssetsLocation;
            var carPath      = carAssetPath + "/" + _customer.Car.Code + ".jpg";

            var colour =
                Enum.GetValues(typeof(Colour))
                .Cast <Colour>()
                .FirstOrDefault(v => v.GetDescription() == _customer.Car.Color);
            var hexColour = colour.DisplayName();

            htmlBody = htmlBody.Replace("[[Title]]", _customer.Title)
                       .Replace("[[Firstname]]", _customer.FirstName.ToUpper())
                       .Replace("[[Lastname]]", _customer.LastName.ToUpper())
                       .Replace("[[CarName]]", (Config.Brand + " " + car.EngineName + " " + car.Model).ToUpper())
                       .Replace("[[Location]]", assetPath)
                       .Replace("[[CarImage]]", carPath)
                       .Replace("[[Colour]]", hexColour);

            textBody = textBody.Replace("[[Title]]", _customer.Title)
                       .Replace("[[Firstname]]", _customer.FirstName.ToUpper())
                       .Replace("[[Lastname]]", _customer.LastName.ToUpper())
                       .Replace("[[CarName]]", (Config.Brand + " " + car.EngineName + " " + car.Model).ToUpper())
                       .Replace("[[Location]]", assetPath)
                       .Replace("[[CarImage]]", carPath)
                       .Replace("[[Colour]]", hexColour);

            MandrillHelper.SendEmail(_customer.Email, subject, htmlBody, textBody);

            isComplete = true;

            return(isComplete);
        }
Example #3
0
        public ActionResult ResultDetail(string modelCode, string userId)
        {
            if (String.IsNullOrEmpty(modelCode))
            {
                return(PartialView("_ResultError"));
            }

            var dbCar = _dbContext.GetCar(modelCode).FirstOrDefault();

            if (dbCar == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var dbFinance = _dbContext.GetCarFinance(dbCar.Id).FirstOrDefault();

            if (dbFinance == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var viewModel = new CarViewModel
            {
                Brand       = Common.Config.Brand,
                Code        = dbCar.Code,
                Model       = dbCar.Model,
                Color       = dbCar.Color,
                Engine      = dbCar.Engine,
                Engine_Name = dbCar.EngineName,
                Url         = dbCar.Url,
                Name        = dbCar.Name,
                Capacity    = dbCar.Capacity,
                Luggage     = dbCar.Luggage,
                Lifestyle   = dbCar.Lifestyle,
                Awd         = dbCar.Awd,
                High        = dbCar.High,
                Convertible = dbCar.Convertible,
                Price       = dbCar.Price,
                Cost        = dbCar.Cost,
                Speed       = dbCar.Speed,
                Mph         = dbCar.Mph,
                Economy     = dbCar.Economy,
                Alt_1       = dbCar.Alt1,
                Alt_2       = dbCar.Alt2,
                Alt_3       = dbCar.Alt3,
                Terms       = dbCar.Terms,
                Finance     = new Models.Finance
                {
                    Info          = dbFinance.Info,
                    Term          = dbFinance.Term ?? 0,
                    Payment       = dbFinance.Payment ?? 0.0,
                    Price         = dbFinance.FinancePrice ?? 0.0,
                    Deposit       = dbFinance.Deposit ?? 0.0,
                    Contribution  = dbFinance.Contribution ?? 0.0,
                    Purchase_Fee  = dbFinance.PurchaseFee ?? 0.0,
                    Final_Payment = dbFinance.FinalPayment ?? 0.0,
                    Credit_Charge = dbFinance.CreditCharge ?? 0.0,
                    ROI           = dbFinance.ROI,
                    APR           = dbFinance.APR
                }
            };

            ViewBag.UserId = userId;

            return(PartialView("_ResultDetail", viewModel));
        }