Exemple #1
0
        public OrderPlaceEditModel SaveSelectedPackage(string guid, long selectedEventPackageId)
        {
            var onlineRequestValidationModel = _tempcartService.ValidateOnlineRequest(guid);
            var model = new OrderPlaceEditModel {
                RequestValidationModel = onlineRequestValidationModel
            };

            if (onlineRequestValidationModel.RequestStatus != OnlineRequestStatus.Valid)
            {
                return(model);
            }

            var tempCart = onlineRequestValidationModel.TempCart;

            if (tempCart.AppointmentId > 0)
            {
                _onlinePackageService.ReleaseSlotsOnScreeningtimeChanged(tempCart, selectedEventPackageId, tempCart.TestId);
            }

            tempCart.EventPackageId = selectedEventPackageId;

            _onlinePackageService.UpdateTestPurchased(tempCart);

            _tempcartService.SaveTempCart(tempCart);

            if (tempCart.EventId.HasValue && tempCart.EventId > 0 && !string.IsNullOrEmpty(tempCart.Gender))
            {
                model.UpsellTestAvailable = _onlinePackageService.IsUpsellTestAvailable(tempCart);
                var allAdditionalTests = _onlinePackageService.GetAdditionalTest(tempCart);
                model.IsAdditionalTestAvailable = allAdditionalTests != null && allAdditionalTests.Any();
            }

            return(model);
        }
        public OrderPlaceEditModel GetEventPackage(TempCart tempCart, long eventId, Roles role)
        {
            var model = new OrderPlaceEditModel();

            model = GetEventPackage(model, eventId, role, (tempCart != null && tempCart.CustomerId.HasValue ? tempCart.CustomerId.Value : 0), tempCart);

            //var defaultShippingId = model.AllShippingOptions != null && model.AllShippingOptions.Count() > 0
            //                            ? model.AllShippingOptions.OrderByDescending(m => m.Price).Last().
            //                            ShippingOptionId : 0;
            long defaultShippingId = model.AllShippingOptions != null && model.AllShippingOptions.Count() > 0 ? -1 : 0;

            if (tempCart != null)
            {
                model.SelectedPackageId        = tempCart.EventPackageId.HasValue ? tempCart.EventPackageId.Value : 0;
                model.SelectedShippingOptionId = tempCart.ShippingId.HasValue ? tempCart.ShippingId.Value : defaultShippingId;

                model.SelectedTestIds = !string.IsNullOrEmpty(tempCart.TestId)
                                            ? tempCart.TestId.Split(new[] { ',' }).Select(t => Convert.ToInt64(t.Trim()))
                                            : new long[0];

                model.SelectedProductIds = !string.IsNullOrEmpty(tempCart.ProductId)
                                            ? tempCart.ProductId.Split(new[] { ',' }).Select(t => Convert.ToInt64(t.Trim()))
                                            : new long[0];
            }
            else
            {
                model.SelectedShippingOptionId = defaultShippingId;
            }

            return(model);
        }
        private OrderPlaceEditModel UpdatePanelTests(OrderPlaceEditModel model)
        {
            if (model == null)
            {
                return(model);
            }
            var eventPackages = model.AllEventPackages;

            if (eventPackages != null && eventPackages.Any())
            {
                var mensBloodPanel  = _testRepository.GetByIds(TestGroup.MensBloodPanelTestIds);
                var womenBloodPanel = _testRepository.GetByIds(TestGroup.WomenBloodPanelTestIds);

                foreach (var eventPackageOrderItemViewModel in eventPackages)
                {
                    var mensBloodPanelTest = eventPackageOrderItemViewModel.Tests.FirstOrDefault(x => x.TestId == (long)TestType.MenBloodPanel);
                    if (mensBloodPanelTest != null)
                    {
                        mensBloodPanelTest.Tests = mensBloodPanel;
                    }

                    var womenBloodPanelTest = eventPackageOrderItemViewModel.Tests.FirstOrDefault(x => x.TestId == (long)TestType.WomenBloodPanel);
                    if (womenBloodPanelTest != null)
                    {
                        womenBloodPanelTest.Tests = womenBloodPanel;
                    }
                }
            }
            model.AllEventPackages = eventPackages;

            return(model);
        }
Exemple #4
0
        public OrderPlaceEditModel GetAdditionalTest(string guid)
        {
            var onlineRequestValidationModel = _tempcartService.ValidateOnlineRequest(guid);
            var model = new OrderPlaceEditModel()
            {
                RequestValidationModel = onlineRequestValidationModel
            };

            if (onlineRequestValidationModel.RequestStatus != OnlineRequestStatus.Valid)
            {
                return(model);
            }

            var tempCart = onlineRequestValidationModel.TempCart;

            model.AllEventTests = _onlinePackageService.GetAdditionalTest(onlineRequestValidationModel.TempCart);

            if (tempCart.EventId.HasValue && tempCart.EventId > 0 && !string.IsNullOrEmpty(tempCart.Gender) && tempCart.EventPackageId.HasValue)
            {
                Gender gender;
                System.Enum.TryParse(tempCart.Gender, out gender);
                var upsellTests = _onlinePackageService.UpsaleTest(tempCart.EventId.Value, tempCart.EventPackageId.Value, gender);
                model.UpsellTestAvailable = _onlinePackageService.IsUpsellTestAvailable(tempCart);
                if (model.UpsellTestAvailable)
                {
                    var panelTestId = gender == Gender.Male ? TestType.MenBloodPanel : TestType.WomenBloodPanel;
                    var test        = upsellTests.Where(x => x.TestId == (long)panelTestId);
                    if (test != null && test.Any())
                    {
                        var panelEventTestId = test.First().EventTestId;
                        model.BloodPanelTestName = test.First().Name;
                        model.BloodPanelTestId   = test.First().TestId;
                        if (!String.IsNullOrEmpty(tempCart.TestId))
                        {
                            var testIds = new List <long>();
                            testIds = tempCart.TestId.Split(',').Select(long.Parse).ToList();
                            if (testIds.Contains(panelEventTestId))
                            {
                                model.IsBloodPanelTestTaken = true;
                            }
                        }
                    }
                }
            }

            return(model);
        }
Exemple #5
0
        public OrderPlaceEditModel SaveSelectedTest(UpsellTestEditModel upsellTest)
        {
            var onlineRequestValidationModel = _tempcartService.ValidateOnlineRequest(upsellTest.Guid);
            var model = new OrderPlaceEditModel {
                RequestValidationModel = onlineRequestValidationModel
            };

            if (onlineRequestValidationModel.RequestStatus != OnlineRequestStatus.Valid)
            {
                return(model);
            }
            var tempCart = onlineRequestValidationModel.TempCart;

            var selectedEventTestIds = (upsellTest.SelectedEventTestIds != null && upsellTest.SelectedEventTestIds.Any()) ? string.Join(",", upsellTest.SelectedEventTestIds.ToList()) : string.Empty;

            _onlinePackageService.SaveaAlacarteTestIds(tempCart, selectedEventTestIds, upsellTest.SaveBloodPanelTest);

            if (tempCart.AppointmentId > 0)
            {
                _onlinePackageService.ReleaseSlotsOnScreeningtimeChanged(tempCart, tempCart.EventPackageId.Value, tempCart.TestId);
            }
            return(model);
        }
        public EventCustomerOrderSummaryModel GetEventCustomerOrderSummaryModel(TempCart tempCart, OrderPlaceEditModel orderPlaceEditModel, SourceCodeApplyEditModel sourceCodeModel)
        {
            if (tempCart == null)
            {
                return(new EventCustomerOrderSummaryModel());
            }

            Event theEvent  = null;
            Host  eventHost = null;

            if (tempCart.EventId.HasValue)
            {
                theEvent  = _eventRepository.GetById(tempCart.EventId.Value);
                eventHost = _hostRepository.GetHostForEvent(tempCart.EventId.Value);
            }

            EventSchedulingSlot appointment = null;

            if (tempCart.AppointmentId.HasValue)
            {
                appointment = _slotRepository.GetbyId(tempCart.AppointmentId.Value);
            }

            EventPackage eventPackage = null;

            if (orderPlaceEditModel.SelectedPackageId > 0)
            {
                eventPackage = _eventPackageRepository.GetById(orderPlaceEditModel.SelectedPackageId);
            }

            IEnumerable <EventTest> eventTests = null;

            if (orderPlaceEditModel.SelectedTestIds != null && orderPlaceEditModel.SelectedTestIds.Count() > 0)
            {
                eventTests = _eventTestRepository.GetbyIds(orderPlaceEditModel.SelectedTestIds);
            }

            IEnumerable <ElectronicProduct> products = null;

            if (orderPlaceEditModel.SelectedProductIds != null && orderPlaceEditModel.SelectedProductIds.Count() > 0)
            {
                products = _productRepository.GetByIds(orderPlaceEditModel.SelectedProductIds);
            }

            ShippingOption shippingOption = null;

            if (orderPlaceEditModel.SelectedShippingOptionId > 0)
            {
                shippingOption = _shippingOptionRepository.GetById(orderPlaceEditModel.SelectedShippingOptionId);
            }

            Order order = null;

            if (tempCart.IsCompleted)
            {
                order = _orderRepository.GetOrder(tempCart.CustomerId.Value, tempCart.EventId.Value);
            }
            return(_eventCustomerSummaryModelFactory.Create(theEvent, eventHost, appointment, eventPackage, eventTests, products, shippingOption, sourceCodeModel, order, tempCart.ShippingId));
        }
        public OrderPlaceEditModel GetEventPackage(OrderPlaceEditModel model, long eventId, Roles role, long customerId, TempCart tempCart)
        {
            var theEvent       = _eventRepository.GetById(eventId);
            var userGender     = !string.IsNullOrEmpty(tempCart.Gender) ? ((long)(Gender)Enum.Parse(typeof(Gender), tempCart.Gender, true)) : (long)Gender.Unspecified;
            var enableAlaCarte = Convert.ToBoolean(_configurationRepository.GetConfigurationValue(ConfigurationSettingName.EnableAlaCarte));

            var parentRole = (Roles)GetParentRoleIdByRoleId((long)role);

            if (enableAlaCarte)
            {
                if (role == Roles.Customer || parentRole == Roles.Customer)
                {
                    enableAlaCarte = theEvent.EnableAlaCarteOnline;
                }
                else if (role == Roles.CallCenterRep || role == Roles.CallCenterManager || parentRole == Roles.CallCenterRep || parentRole == Roles.CallCenterManager)
                {
                    enableAlaCarte = theEvent.EnableAlaCarteCallCenter;
                }
                else if (role == Roles.Technician || parentRole == Roles.Technician)
                {
                    enableAlaCarte = theEvent.EnableAlaCarteTechnician;
                }
                else if (!(theEvent.EnableAlaCarteOnline || theEvent.EnableAlaCarteCallCenter || theEvent.EnableAlaCarteTechnician))
                {
                    enableAlaCarte = false;
                }
            }

            var eventPackages = _eventPackageRepository.GetPackagesForEventByRole(eventId, (long)role, userGender);

            var eventTests = enableAlaCarte ? _eventTestRepository.GetTestsForEventByRole(eventId, (long)role, userGender) : null;

            if (eventTests != null && eventTests.Count() > 0)
            {
                eventTests = eventTests.Where(et => et.Test.ShowInAlaCarte).Select(et => et).ToArray();
            }
            var products        = _productRepository.GetAllProductsForEvent(eventId);
            var shippingOptions = _shippingOptionRepository.GetAllShippingOptionsForBuyingProcess();

            var shippingOptionsToBind = new List <ShippingOption>();

            if (theEvent.EventType == EventType.Retail)
            {
                var onlineShippingOption = _shippingOptionRepository.GetOnlineShippingOption();
                shippingOptionsToBind.Add(onlineShippingOption);

                if (shippingOptions != null && shippingOptions.Count > 0)
                {
                    shippingOptions.RemoveAll(so => so.Price == 0);
                    shippingOptionsToBind.AddRange(shippingOptions);
                }
                model.EventType = EventType.Retail;
            }
            else if (theEvent.EventType == EventType.Corporate)
            {
                var onlineShippingOption = _shippingOptionRepository.GetOnlineShippingOption();
                shippingOptionsToBind.Add(onlineShippingOption);

                shippingOptions = _shippingOptionRepository.GetAllShippingOptionForCorporate(theEvent.AccountId.HasValue ? theEvent.AccountId.Value : 0);
                if (shippingOptions != null && shippingOptions.Count > 0)
                {
                    shippingOptionsToBind.AddRange(shippingOptions);
                }
                else
                {
                    tempCart.ShippingId = onlineShippingOption.Id;
                }

                model.EventType = EventType.Corporate;
            }

            if (theEvent.EventType == EventType.Corporate)
            {
                eventPackages = eventPackages != null?eventPackages.OrderByDescending(d => d.Price).ThenBy(d => d.Package.RelativeOrder) : null;
            }
            else
            {
                eventPackages = eventPackages != null?eventPackages.OrderByDescending(d => d.Price) : null;
            }

            eventTests = eventTests != null?eventTests.OrderByDescending(d => d.Price) : null;

            products = products != null?products.OrderBy(d => d.Price).ToList() : null;


            model.AllEventPackages   = Mapper.Map <IEnumerable <EventPackage>, IEnumerable <EventPackageOrderItemViewModel> >(eventPackages);
            model.AllEventTests      = Mapper.Map <IEnumerable <EventTest>, IEnumerable <EventTestOrderItemViewModel> >(eventTests);
            model.AllProducts        = Mapper.Map <IEnumerable <ElectronicProduct>, IEnumerable <ProductOrderItemViewModel> >(products);
            model.AllShippingOptions = Mapper.Map <IEnumerable <ShippingOption>, IEnumerable <ShippingOptionOrderItemViewModel> >(shippingOptionsToBind);

            int age = 0;

            if (customerId > 0)
            {
                var customer = _customerRepository.GetCustomer(customerId);
                age = customer.DateOfBirth.HasValue ? customer.DateOfBirth.Value.GetAge() : 0;
            }
            else if (tempCart.Dob.HasValue)
            {
                age = tempCart.Dob.Value.GetAge();
            }

            if (age > 0)
            {
                foreach (var eventPackage in model.AllEventPackages)
                {
                    foreach (var test in eventPackage.Tests)
                    {
                        if (test.MinAge > 0 && age < test.MinAge)
                        {
                            eventPackage.NotAvailable           = true;
                            eventPackage.NotAvailabilityMessage = "includes " + test.Name + " for which minimum age required is " + test.MinAge;
                            break;
                        }
                        if (test.MaxAge > 0 && age > test.MaxAge)
                        {
                            eventPackage.NotAvailable           = true;
                            eventPackage.NotAvailabilityMessage = "includes " + test.Name + " for which maximum age required is " + test.MaxAge;
                            break;
                        }
                    }
                }

                foreach (var test in model.AllEventTests)
                {
                    if (test.MinAge > 0 && age < test.MinAge)
                    {
                        test.NotAvailable           = true;
                        test.NotAvailabilityMessage = "For this test minimum age required is " + test.MinAge;
                        break;
                    }
                    if (test.MaxAge > 0 && age > test.MaxAge)
                    {
                        test.NotAvailable           = true;
                        test.NotAvailabilityMessage = "For this test maximum age required is " + test.MaxAge;
                        break;
                    }
                }
            }

            if (model.AllEventPackages != null && model.AllEventPackages.Any())
            {
                EventPackageOrderItemViewModel package = null;
                Gender gender;
                Enum.TryParse(tempCart.Gender, out gender);

                package = EventPackageOrderItemViewModel(model.AllEventPackages, eventPackages, gender);

                foreach (var eventPackage in model.AllEventPackages)
                {
                    eventPackage.IsRecommended = eventPackage.PackageId == package.PackageId;
                }
            }

            LoadPackageImagePath(eventPackages, model.AllEventPackages);

            model.EnableImageUpsell = IsImageUpsellEnabled(eventId);

            return(model);
        }
        public OrderPlaceEditModel GetEventPackageList(TempCart tempCart)
        {
            var model = new OrderPlaceEditModel();

            var userGender = !string.IsNullOrEmpty(tempCart.Gender) ? ((long)(Gender)Enum.Parse(typeof(Gender), tempCart.Gender, true)) : (long)Gender.Unspecified;

            if (tempCart.EventId != null)
            {
                var theEvent = _eventRepository.GetById(tempCart.EventId.Value);

                model.RecommendPackageForEvent = theEvent.RecommendPackage;

                var eventPackages = _eventPackageRepository.GetPackagesForEventByRole(tempCart.EventId.Value, (long)Roles.Customer, userGender);
                if (theEvent.EventType == EventType.Corporate)
                {
                    eventPackages = eventPackages != null
                        ? eventPackages.OrderByDescending(d => d.Price).ThenBy(d => d.Package.RelativeOrder)
                        : null;
                }
                else
                {
                    eventPackages = eventPackages != null?eventPackages.OrderByDescending(d => d.Price) : null;
                }

                model.AllEventPackages =
                    Mapper.Map <IEnumerable <EventPackage>, IEnumerable <EventPackageOrderItemViewModel> >(eventPackages);


                var age = 0;
                if (tempCart.Dob.HasValue)
                {
                    age = tempCart.Dob.Value.GetAge();
                }

                if (age > 0)
                {
                    foreach (var eventPackage in model.AllEventPackages)
                    {
                        foreach (var test in eventPackage.Tests)
                        {
                            if (test.MinAge > 0 && age < test.MinAge)
                            {
                                eventPackage.NotAvailable           = true;
                                eventPackage.NotAvailabilityMessage = "includes " + test.Name +
                                                                      " for which minimum age required is " +
                                                                      test.MinAge;
                                break;
                            }
                            if (test.MaxAge > 0 && age > test.MaxAge)
                            {
                                eventPackage.NotAvailable           = true;
                                eventPackage.NotAvailabilityMessage = "includes " + test.Name +
                                                                      " for which maximum age required is " +
                                                                      test.MaxAge;
                                break;
                            }
                        }
                    }
                }

                if (model.AllEventPackages != null && model.AllEventPackages.Any())
                {
                    EventPackageOrderItemViewModel package = null;
                    Gender gender;
                    Enum.TryParse(tempCart.Gender, out gender);

                    package = EventPackageOrderItemViewModel(model.AllEventPackages, eventPackages, gender);

                    foreach (var eventPackage in model.AllEventPackages)
                    {
                        eventPackage.IsRecommended = package != null && eventPackage.PackageId == package.PackageId;
                    }

                    int sequence = 1;
                    //if (tempCart.EventPackageId > 0)
                    //{
                    //    var selectedPackage = model.AllEventPackages.Where(ep => ep.EventPackageId == tempCart.EventPackageId);
                    //    if (selectedPackage.Any())
                    //    {
                    //        selectedPackage.First().DisplaySequence = sequence;
                    //        sequence = sequence + 1;
                    //    }
                    //}

                    var bestValuePackage = model.AllEventPackages.Where(ep => ep.BestValue);

                    //if (tempCart.EventPackageId > 0)
                    //{
                    //    bestValuePackage = model.AllEventPackages.Where(ep => ep.BestValue && ep.EventPackageId != tempCart.EventPackageId);
                    //}

                    if (bestValuePackage.Any())
                    {
                        bestValuePackage.First().DisplaySequence = sequence;
                        sequence = sequence + 1;
                    }

                    var mostPopularPackage = model.AllEventPackages.Where(ep => ep.MostPopular);

                    //if (tempCart.EventPackageId > 0)
                    //{
                    //    mostPopularPackage = model.AllEventPackages.Where(ep => ep.MostPopular && ep.EventPackageId != tempCart.EventPackageId);
                    //}

                    if (mostPopularPackage.Any())
                    {
                        mostPopularPackage.First().DisplaySequence = sequence;
                        sequence = sequence + 1;
                    }

                    //var lowestpricePackage = model.AllEventPackages.OrderBy(s => s.Price).First();
                    //if (lowestpricePackage != null)
                    //{
                    //    lowestpricePackage.IsLowestPrice = true;
                    //    lowestpricePackage.DisplaySequence = sequence;
                    //    sequence = sequence + 1;
                    //}

                    var highestpricePackage = model.AllEventPackages.OrderByDescending(s => s.Price).First();
                    if (highestpricePackage != null)
                    {
                        highestpricePackage.IsHighestPrice = true;
                    }

                    foreach (var packageItem in model.AllEventPackages.OrderByDescending(s => s.Price).Where(x => x.IsLowestPrice == false && x.MostPopular == false && x.BestValue == false)) //&& (!(tempCart.EventPackageId > 0) || x.EventPackageId != tempCart.EventPackageId)
                    {
                        packageItem.DisplaySequence = sequence;
                        sequence = sequence + 1;
                    }

                    model.AllEventPackages = model.AllEventPackages.OrderBy(d => d.DisplaySequence);
                }

                _eventPackageSelectorService.LoadPackageImagePath(eventPackages, model.AllEventPackages);
            }

            return(UpdatePanelTests(model));
        }