public CreditsHero.Company.Dtos.CompanyConfigsDto GetCompanyConfig(CreditsHero.Common.Companies.Dtos.GetCompanyInput input)
        {
            var creditsHeroFormat = String.Format("{0}api/services/app/Company/GetCompanyConfig", System.Configuration.ConfigurationSettings.AppSettings["creditsHero:WebServiceApiPrefix"]);
            var timelineUrl = string.Format(creditsHeroFormat);
            CompanyConfigsDto companyConfigList;

            //Serialize object to JSON
            MemoryStream jsonStream = new MemoryStream();

            string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(input);
            byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

            HttpWebRequest creditsHeroRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);
            creditsHeroRequest.ContentType = "application/json;charset=utf-8";
            creditsHeroRequest.ContentLength = byteArray.Length;
            creditsHeroRequest.Method = "POST";
            Stream newStream = creditsHeroRequest.GetRequestStream();
            newStream.Write(byteArray, 0, byteArray.Length);
            newStream.Close();
            WebResponse timeLineResponse = creditsHeroRequest.GetResponse();
            using (timeLineResponse)
            {
                using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
                {
                    var results = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());

                    Newtonsoft.Json.Linq.JObject jObject2 = results.result;
                    var itemResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CompanyConfigsDto>(jObject2.ToString());
                    companyConfigList = itemResult;
                }
            }
            return companyConfigList;
        }
        /// <summary>
        /// Gets list of Cities
        /// </summary>
        /// <returns></returns>
        public Dtos.GetLocationOutput GetCities(CreditsHero.Common.Dtos.GetCriteriaInput input, string state)
        {
            if (state != String.Empty)
            {
                #region CreditsHero CriteriaValues
                var creditsHeroFormat = String.Format("{0}api/services/app/Criteria/GetCriteriaValues", System.Configuration.ConfigurationSettings.AppSettings["creditsHero:WebServiceApiPrefix"]);
                //var creditsHeroFormat = "http://creditshero.azurewebsites.net/api/services/cd/Criteria/GetCriteriaValues";
                //var creditsHeroFormat = "http://localhost:6234/api/services/cd/Criteria/GetCriteriaValues";
                var timelineUrl = string.Format(creditsHeroFormat);
                CreditsHero.Common.Dtos.GetCriteriaValuesOutput criteriaOutput = new CreditsHero.Common.Dtos.GetCriteriaValuesOutput();

                //Serialize object to JSON
                MemoryStream jsonStream = new MemoryStream();
                CreditsHero.Common.Dtos.GetCriteriaInput criteriaInput = new CreditsHero.Common.Dtos.GetCriteriaInput()
                {
                    CompanyId = input.CompanyId,
                    CriteriaId = input.CriteriaId
                };
                string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(criteriaInput);
                byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

                HttpWebRequest creditsHeroRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);
                creditsHeroRequest.ContentType = "application/json;charset=utf-8";
                creditsHeroRequest.ContentLength = byteArray.Length;
                creditsHeroRequest.Method = "POST";
                Stream newStream = creditsHeroRequest.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);
                newStream.Close();
                WebResponse timeLineResponse = creditsHeroRequest.GetResponse();
                using (timeLineResponse)
                {
                    using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
                    {
                        var results = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());
                        criteriaOutput.CriteriaValues = new List<CreditsHero.Common.Dtos.CriteriaValuesDto>();
                        foreach (var item in results.result.criteriaValues)
                        {
                            criteriaOutput.CriteriaValues.Add(
                                Newtonsoft.Json.JsonConvert.DeserializeObject<CreditsHero.Common.Dtos.CriteriaValuesDto>(item.ToString()));
                        }
                    }
                }
                #endregion

                var cities = _locationRepository.GetCities(state);

                List<Dtos.LocationDto> locations = new List<Dtos.LocationDto>();

                locations = new Dtos.GetLocationOutput
                {
                    Locations = Mapper.Map<List<Dtos.LocationDto>>(cities)
                }.Locations;

                var query = (from cv in criteriaOutput.CriteriaValues
                             from l in locations
                             where l.City == cv.Name
                             select new Dtos.LocationDto
                             {
                                 City = l.City,
                                 CreationTime = l.CreationTime,
                                 CreatorUserId = l.CreatorUserId,
                                 State = l.State,
                                 LastModificationTime = l.LastModificationTime,
                                 LastModifierUserId = l.LastModifierUserId,
                                 Id = cv.Id,
                                 CreditCount = cv.CreditCount,
                                 CriteriaRefId = cv.CriteriaRefId,
                                 Name = cv.Name
                             }).ToList<Dtos.LocationDto>();

                return new Dtos.GetLocationOutput() { Locations = query };
            }
            else
            {
                return new Dtos.GetLocationOutput() { Locations = new List<Dtos.LocationDto>() };
            }
        }
 public CreditsHero.Common.Dtos.GetCriteriaValuesOutput GetCriteriaValues(CreditsHero.Common.Dtos.GetCriteriaInput input)
 {
     CreditsHero.Common.Dtos.GetCriteriaValuesOutput results = new CreditsHero.Common.Dtos.GetCriteriaValuesOutput();
     return (CreditsHero.Common.Dtos.GetCriteriaValuesOutput)_creditsHeroConnect.CallCreditsHeroService<CreditsHero.Common.Dtos.GetCriteriaValuesOutput>(results, input,
         "api/services/app/Criteria/GetCriteriaValues");
 }
        public Dtos.GetRoofTypeOutput GetRoofTypes(CreditsHero.Common.Dtos.GetCriteriaInput input)
        {
            #region CreditsHero CriteriaValues
            var creditsHeroFormat = String.Format("{0}api/services/app/Criteria/GetCriteriaValues", System.Configuration.ConfigurationSettings.AppSettings["creditsHero:WebServiceApiPrefix"]);
            //var creditsHeroFormat = "http://creditshero.azurewebsites.net/api/services/cd/Criteria/GetCriteriaValues";
            //var creditsHeroFormat = "http://localhost:6234/api/services/cd/Criteria/GetCriteriaValues";
            var timelineUrl = string.Format(creditsHeroFormat);
            CreditsHero.Common.Dtos.GetCriteriaValuesOutput criteriaOutput = new CreditsHero.Common.Dtos.GetCriteriaValuesOutput();

            //Serialize object to JSON
            MemoryStream jsonStream = new MemoryStream();
            CreditsHero.Common.Dtos.GetCriteriaInput criteriaInput = new CreditsHero.Common.Dtos.GetCriteriaInput()
            {
                CompanyId = input.CompanyId,
                CriteriaId = input.CriteriaId
            };
            string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(criteriaInput);
            byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

            HttpWebRequest creditsHeroRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);
            creditsHeroRequest.ContentType = "application/json;charset=utf-8";
            creditsHeroRequest.ContentLength = byteArray.Length;
            creditsHeroRequest.Method = "POST";
            Stream newStream = creditsHeroRequest.GetRequestStream();
            newStream.Write(byteArray, 0, byteArray.Length);
            newStream.Close();
            WebResponse timeLineResponse = creditsHeroRequest.GetResponse();
            using (timeLineResponse)
            {
                using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
                {
                    var results = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());
                    criteriaOutput.CriteriaValues = new List<CreditsHero.Common.Dtos.CriteriaValuesDto>();
                    foreach (var item in results.result.criteriaValues)
                    {
                        criteriaOutput.CriteriaValues.Add(
                            Newtonsoft.Json.JsonConvert.DeserializeObject<CreditsHero.Common.Dtos.CriteriaValuesDto>(item.ToString()));
                    }
                }
            }
            #endregion

            //Called specific GetAllWithPeople method of task repository.
            var types = _roofTypeRepository.GetAll();

            List<Dtos.RoofTypeDto> roofTypes = new List<Dtos.RoofTypeDto>();

            roofTypes = new Dtos.GetRoofTypeOutput
                         {
                             RoofTypes = Mapper.Map<List<Dtos.RoofTypeDto>>(types)
                         }.RoofTypes;

            //var mergeResults = criteriaOutput.CriteriaValues.Select(s => new Dtos.RoofTypeDto { Name = s.Name, Id = s.Id, CreditCount = s.CreditCount, CriteriaRefId = s.CriteriaRefId }).ToList();
            //mergeResults.AddRange(roofTypes.Select(s => new Dtos.RoofTypeDto{Name = s.Name, CreditCount = s.CreditCount, CriteriaRefId = s.CriteriaRefId, Id = s.Id, Code = s.Code, CreationTime = s.CreationTime, CreatorUserId = s.CreatorUserId, Description = s.Description, LastModificationTime = s.LastModificationTime, LastModifierUserId = s.LastModifierUserId}).ToList());
            //List<CreditsHero.Common.Dtos.CriteriaValuesDto> roofTypeList = roofTypes.Concat(criteriaOutput.CriteriaValues).ToList();

            var query = (from cv in criteriaOutput.CriteriaValues
                        from rt in roofTypes
                        where rt.Description == cv.Name
                        select new Dtos.RoofTypeDto
                        {
                            Code = rt.Code,
                            CreationTime = rt.CreationTime,
                            CreatorUserId = rt.CreatorUserId,
                            Description = rt.Description,
                            LastModificationTime = rt.LastModificationTime,
                            LastModifierUserId = rt.LastModifierUserId,
                            Id = cv.Id,
                            CreditCount = cv.CreditCount,
                            CriteriaRefId = cv.CriteriaRefId,
                            Name = cv.Name
                        }).ToList<Dtos.RoofTypeDto>();

            return new Dtos.GetRoofTypeOutput() { RoofTypes = query };
            //roofTypeResults = roofTypeResults.Union(criteriaOutput.CriteriaValues);
        }
        public virtual async Task<ActionResult> RegisterCreditsHeroValues(CreditsHero.Common.Dtos.GetCriteriaInput input)
        {
            try
            {
                var creditsHeroFormat = String.Format("{0}api/services/app/Criteria/GetCriteriaValues", WebConfigurationManager.AppSettings["creditsHero:WebServiceApiPrefix"]);
                //var creditsHeroFormat = "http://creditshero.azurewebsites.net/api/services/cd/Criteria/GetCriteriaValues";
                var timelineUrl = string.Format(creditsHeroFormat);

                //Serialize object to JSON
                MemoryStream jsonStream = new MemoryStream();
                string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(input);
                byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

                HttpWebRequest creditsHeroRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);
                creditsHeroRequest.ContentType = "application/json;charset=utf-8";
                creditsHeroRequest.ContentLength = byteArray.Length;
                creditsHeroRequest.Method = "POST";
                Stream newStream = creditsHeroRequest.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);
                newStream.Close();
                WebResponse timeLineResponse = creditsHeroRequest.GetResponse();
                var timeLineJson = string.Empty;
                using (timeLineResponse)
                {
                    using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
                    {
                        timeLineJson = reader.ReadToEnd();
                    }
                }

                //return View("Register", subscriber);
                return Redirect(Url.Action("Index", "Home"));
            }
            catch (UserFriendlyException ex)
            {
                ViewBag.ErrorMessage = ex.Message;
                return View("Register", input);
            }
        }
        public Dtos.GetQuoteTypeOutput GetQuoteTypes(CreditsHero.Common.Dtos.GetCriteriaInput input)
        {
            #region CreditsHero CriteriaValues
            var creditsHeroFormat = String.Format("{0}api/services/app/Criteria/GetCriteriaValues", System.Configuration.ConfigurationSettings.AppSettings["creditsHero:WebServiceApiPrefix"]);
            //var creditsHeroFormat = "http://creditshero.azurewebsites.net/api/services/cd/Criteria/GetCriteriaValues";
            //var creditsHeroFormat = "http://localhost:6234/api/services/cd/Criteria/GetCriteriaValues";
            var timelineUrl = string.Format(creditsHeroFormat);
            CreditsHero.Common.Dtos.GetCriteriaValuesOutput criteriaOutput = new CreditsHero.Common.Dtos.GetCriteriaValuesOutput();

            //Serialize object to JSON
            MemoryStream jsonStream = new MemoryStream();
            CreditsHero.Common.Dtos.GetCriteriaInput criteriaInput = new CreditsHero.Common.Dtos.GetCriteriaInput()
            {
                CompanyId = input.CompanyId,
                CriteriaId = input.CriteriaId
            };
            string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(criteriaInput);
            byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

            HttpWebRequest creditsHeroRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);
            creditsHeroRequest.ContentType = "application/json;charset=utf-8";
            creditsHeroRequest.ContentLength = byteArray.Length;
            creditsHeroRequest.Method = "POST";
            Stream newStream = creditsHeroRequest.GetRequestStream();
            newStream.Write(byteArray, 0, byteArray.Length);
            newStream.Close();
            WebResponse timeLineResponse = creditsHeroRequest.GetResponse();
            using (timeLineResponse)
            {
                using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
                {
                    var results = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());
                    criteriaOutput.CriteriaValues = new List<CreditsHero.Common.Dtos.CriteriaValuesDto>();
                    foreach (var item in results.result.criteriaValues)
                    {
                        criteriaOutput.CriteriaValues.Add(
                            Newtonsoft.Json.JsonConvert.DeserializeObject<CreditsHero.Common.Dtos.CriteriaValuesDto>(item.ToString()));
                    }
                }
            }
            #endregion

            //Called specific GetAllWithPeople method of task repository.
            var types = _quoteTypeRepository.GetAll();

            //Used AutoMapper to automatically convert List<Task> to List<TaskDto>.
            //We must declare mappings to be able to use AutoMapper
            List<Dtos.QuoteTypeDto> quoteTypes = new List<Dtos.QuoteTypeDto>();

            quoteTypes = new Dtos.GetQuoteTypeOutput
                         {
                             QuoteTypes = Mapper.Map<List<Dtos.QuoteTypeDto>>(types)
                         }.QuoteTypes;

            var query = (from cv in criteriaOutput.CriteriaValues
                         from qt in quoteTypes
                         where qt.DisplayName == cv.Name
                         select new Dtos.QuoteTypeDto
                         {
                             Quote = qt.Quote,
                             CreationTime = qt.CreationTime,
                             CreatorUserId = qt.CreatorUserId,
                             DisplayName = qt.DisplayName,
                             LastModificationTime = qt.LastModificationTime,
                             LastModifierUserId = qt.LastModifierUserId,
                             Id = cv.Id,
                             CreditCount = cv.CreditCount,
                             CriteriaRefId = cv.CriteriaRefId,
                             Name = cv.Name
                         }).ToList<Dtos.QuoteTypeDto>();

            return new Dtos.GetQuoteTypeOutput() { QuoteTypes = query };
        }
        private void SetupLoginModel(ref LoginFormViewModel loginFormModel,
            CreditsHero.Messaging.Requests.Dtos.GetInquiryResults inquiryResults,
            CreditsHero.Messaging.Dtos.RequestsDto requestResults,
            string selectedState)
        {
            //Get RoofType
            var roofTypes = _roofTypeService.GetRoofTypes(new CreditsHero.Common.Dtos.GetCriteriaInput()
            {
                CompanyId = Guid.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:CompanyId"]),
                CriteriaId = Int32.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:RoofTypeId"])
            });
            //Get TypeOfService
            var serviceTypes = _serviceTypeService.GetServiceTypes(new CreditsHero.Common.Dtos.GetCriteriaInput()
            {
                CompanyId = Guid.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:CompanyId"]),
                CriteriaId = Int32.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:ServiceTypeId"])
            });
            //TODO: Get TimeOfRepair

            //TODO: Get State

            //TODO: Get City
            var cities = _locationService.GetCities(new CreditsHero.Common.Dtos.GetCriteriaInput()
            {
                CompanyId = Guid.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:CompanyId"]),
                CriteriaId = Int32.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:CityLocationTypeId"])
            }, selectedState);

            loginFormModel.InquiryResults = inquiryResults;
            loginFormModel.RequestResults = requestResults;
            loginFormModel.RoofTypeValues = roofTypes.RoofTypes.Cast<CreditsHero.Common.Dtos.CriteriaValuesDto>().ToList();
            loginFormModel.TypeOfService = serviceTypes.ServiceTypes.Cast<CreditsHero.Common.Dtos.CriteriaValuesDto>().ToList();
            loginFormModel.City = cities.Locations.Cast<CreditsHero.Common.Dtos.CriteriaValuesDto>().ToList();
        }
        public object SendEmail(CreditsHero.Messaging.Requests.Dtos.GetInquiryInput inquiryInput,
            string emailFrom, string emailSubject, string emailTo, string emailBodyOverride)
        {
            MemoryStream jsonStream = new MemoryStream();
            string jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(inquiryInput);
            byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

            //Send Inquiry Email to Admin
            var creditsHeroFormat = String.Format("{0}api/services/app/Notification/SendEmailNotification", WebConfigurationManager.AppSettings["creditsHero:WebServiceApiPrefix"]);
            CreditsHero.Messaging.Dtos.NotificationInput emailInput = new CreditsHero.Messaging.Dtos.NotificationInput();
            var timelineUrl = string.Format(creditsHeroFormat);
            CreditsHero.Messaging.Requests.Dtos.GetInquiryResults inquiryResults;
            List<KeyValuePair<string, string>> inquiryValues = new List<KeyValuePair<string, string>>();
            inquiryValues = inquiryInput.QueryRequest;

            if(emailBodyOverride == string.Empty)
            {
                emailBodyOverride = String.Format("<!DOCTYPE html><html lang=en xmlns='http://www.w3.org/1999/xhtml'><head><meta charset=utf-8 /><title></title><link rel='stylesheet' href='/Content/bootstrap-cosmo.min.css' /></head><body style='background-color:gainsboro;text-align:center;padding:0px;margin:0px'><div class='row' style='padding:0px;margin:0px;'> <div class='col-lg-2 col-md-2 col-sm-2 col-xs-2'></div><div class='col-lg-8 col-md-8 col-sm-8 col-xs-8' style='padding:0px;margin:0px'> <div class='row'> <div class='col-lg-2 col-md-2 col-sm-2 col-xs-2'></div><div class='col-lg-8 col-md-8 col-sm-8 col-xs-8' style='box-shadow: 5px 0px 5px -4px rgba(31,73,125,0.8), -5px 0px 8px -5px rgba(31,73,125,0.8); background-image: -ms-linear-gradient(rgb(25, 68, 125) 20%, rgb(32, 128, 190) 100%);'> <img src='/images/rooferlocatorlogo_70x170.png' /> <div class='row' style='padding:0px;margin:0px;height:50px;font-family:Arial;font-size:24pt'> <div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='border:2px solid white;border-radius:5px; background:white;'> <div class='row' style='padding-left:13px;padding-right:13px;border-radius:5px;'> <div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='background:#fe7900;'>Inquiry</div></div><div class='row' style='color:black'> <div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='font-size:16px;'>Hello Administrator: <br/> An inquiry/search has been submitted at RooferLocator.com.<p/> Following are the details of the inquiry:<p/> <strong>Roof Type = {0}</strong> <br/> <strong>Service Type = {1}</strong> <br/> <strong>Time Of Repair = {2}</strong> <br/> <strong>State = {3}</strong> <br/> <strong>City = {4}</strong></div></div><div class='row' style='padding-left:13px;padding-right:13px;border-radius:5px;'> <div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='background:#fe7900;'>Comment</div></div><div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='border-top:1px solid gainsboro;padding:10px;color:black'> <div>{1}</div></div></div></div></div><div class='col-lg-2 col-md-2 col-sm-2 col-xs-2'></div></div></div><div class='col-lg-2 col-md-2 col-sm-2 col-xs-2' style='padding:0px;margin:0px'></div></div></body></html>",
                    inquiryValues[0].Value,
                    inquiryValues[1].Value,
                    inquiryValues[2].Value,
                    inquiryValues[3].Value,
                    inquiryValues[4].Value);
            }

            emailInput = new CreditsHero.Messaging.Dtos.NotificationInput()
            {
                CompanyId = Guid.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:CompanyId"]),
                EmailFrom = emailFrom,
                EmailSubject = String.Format(emailSubject),
                EmailMessage = emailBodyOverride,
                EmailTo = emailTo
            };

            jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(emailInput);
            byteArray = Encoding.UTF8.GetBytes(jsonData);
            HttpWebRequest creditsHeroRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);

            creditsHeroRequest.ContentType = "application/json;charset=utf-8";
            creditsHeroRequest.ContentLength = byteArray.Length;
            creditsHeroRequest.Method = "POST";
            Stream newStream = creditsHeroRequest.GetRequestStream();
            newStream.Write(byteArray, 0, byteArray.Length);
            newStream.Close();
            WebResponse timeLineResponse = creditsHeroRequest.GetResponse();
            using (timeLineResponse)
            {
                using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
                {
                    var results = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());

                    Newtonsoft.Json.Linq.JObject jObject2 = results.result;
                    var itemResult = Newtonsoft.Json.JsonConvert.DeserializeObject<CreditsHero.Messaging.Requests.Dtos.GetInquiryResults>(jObject2.ToString());
                    inquiryResults = itemResult;
                    return inquiryResults;
                }
            }
        }