Example #1
0
        public void ReleaseSlotsOnScreeningtimeChanged(TempCart tempCart, long newEventPackageId, string newEventTestIds)
        {
            var newEvenTestIds = new List <long>();

            if (!string.IsNullOrEmpty(newEventTestIds))
            {
                newEventTestIds.Split(',').ToList().ForEach(t => newEvenTestIds.Add(Convert.ToInt64(t)));
                newEvenTestIds.RemoveAll(t => t == 0);
            }

            //var existingEventTestIds = new List<long>();
            //if (!string.IsNullOrEmpty(tempCart.TestId))
            //{
            //    tempCart.TestId.Split(',').ToList().ForEach(t => existingEventTestIds.Add(Convert.ToInt64(t)));
            //    existingEventTestIds.RemoveAll(t => t == 0);
            //}

            //var isOrderChanged = newEventPackageId != tempCart.EventPackageId || (!newEvenTestIds.All(existingEventTestIds.Contains) || !existingEventTestIds.All(newEvenTestIds.Contains));

            var screeningTime = _eventPackageSelectorService.GetScreeningTime(tempCart.EventPackageId.Value, newEvenTestIds);

            if (!tempCart.InChainAppointmentSlotIds.IsNullOrEmpty())//&& isOrderChanged
            {
                var testIds = new List <long>();
                if (newEvenTestIds != null && newEvenTestIds.Any())
                {
                    var eventTests = _eventTestRepository.GetbyIds(newEvenTestIds);
                    if (eventTests != null && !eventTests.IsNullOrEmpty())
                    {
                        eventTests.ForEach(et => testIds.Add(et.TestId));
                    }
                }

                var newPackageId = _eventPackageRepository.GetById(newEventPackageId).PackageId;

                var theEvent = _eventRepository.GetById(tempCart.EventId.Value);

                var slots = _eventSchedulingSlotService.AdjustAppointmentSlot(tempCart.EventId.Value, screeningTime, tempCart.InChainAppointmentSlotIds, newPackageId, testIds, theEvent.LunchStartTime, theEvent.LunchDuration);

                if (slots == null)
                {
                    _eventSchedulingSlotRepository.ReleaseSlots(tempCart.InChainAppointmentSlotIds);
                    tempCart.AppointmentId           = null;
                    tempCart.InChainAppointmentSlots = null;
                    tempCart.PreliminarySelectedTime = null;
                }
                else
                {
                    var eventSchedulingSlots = slots as EventSchedulingSlot[] ?? slots.ToArray();
                    tempCart.AppointmentId           = eventSchedulingSlots.OrderBy(s => s.StartTime).First().Id;
                    tempCart.PreliminarySelectedTime = eventSchedulingSlots.OrderBy(s => s.StartTime).First().StartTime;
                    tempCart.InChainAppointmentSlots = string.Join(",", eventSchedulingSlots.Select(s => s.Id.ToString()).ToArray());
                }

                _tempcartService.SaveTempCart(tempCart);
            }
        }
Example #2
0
        public EventAppointmentOnlineListModel SaveEventAppointmentSlotOnline(TempCart tempCart)
        {
            if (tempCart.EventPackageId == null || tempCart.AppointmentId == null)
            {
                return(GetEventAppointmentSlotOnline(tempCart));
            }


            var selectedAppointmentId = tempCart.AppointmentId.Value;

            if (tempCart.InChainAppointmentSlotIds != null && tempCart.InChainAppointmentSlotIds.Any())
            {
                _eventSchedulingSlotRepository.ReleaseSlots(tempCart.InChainAppointmentSlotIds);
                tempCart.AppointmentId           = null;
                tempCart.InChainAppointmentSlots = null;
                tempCart.PreliminarySelectedTime = null;
            }


            var eventTestIds = new List <long>();
            var testIds      = new List <long>();

            if (!string.IsNullOrEmpty(tempCart.TestId))
            {
                tempCart.TestId.Split(',').ForEach(x => eventTestIds.Add(Convert.ToInt64(x)));
                var eventTests = _eventTestRepository.GetbyIds(eventTestIds).ToList();
                if (eventTests != null && !eventTests.IsNullOrEmpty())
                {
                    eventTests.ForEach(et => testIds.Add(et.TestId));
                }
            }

            var eventPackage = _eventPackageRepository.GetById(tempCart.EventPackageId.Value);


            var screeningTime = _eventPackageSelectorService.GetScreeningTime(tempCart.EventPackageId.Value, eventTestIds);
            var result        = _eventSchedulingSlotService.BookSlotTemporarily(selectedAppointmentId, screeningTime, eventPackage.PackageId, testIds);

            if (result == null)
            {
                throw new Exception("The slot selected by you is no longer available as it is booked for another customer. Please Choose another slot or select any other preferable hour.");
            }

            var eventSchedulingSlots = result as EventSchedulingSlot[] ?? result.ToArray();
            var selectedSlotIds      = eventSchedulingSlots.Select(x => x.Id).ToList();

            if (!selectedSlotIds.Any())
            {
                tempCart.AppointmentId           = null;
                tempCart.InChainAppointmentSlots = string.Empty;
                tempCart.IsUsedAppointmentSlotExpiryExtension = null;
                return(GetEventAppointmentSlotOnline(tempCart));
            }


            var slotFirst = eventSchedulingSlots.OrderBy(s => s.StartTime).First();

            tempCart.AppointmentId           = slotFirst.Id;
            tempCart.PreliminarySelectedTime = slotFirst.StartTime;
            tempCart.InChainAppointmentSlots = string.Join(",", selectedSlotIds);
            tempCart.IsUsedAppointmentSlotExpiryExtension = null;
            _tempcartService.SaveTempCart(tempCart);

            return(GetEventAppointmentSlotOnline(tempCart));
        }
Example #3
0
        public bool RegisterCustomer(MassRegistrationEditModel model, long eventId, EventType eventType)
        {
            var createdByOrgRoleUser = Mapper.Map <OrganizationRoleUserModel, OrganizationRoleUser>(_sessionContext.UserSession.CurrentOrganizationRole);

            if (model.Address != null && string.IsNullOrEmpty(model.Address.StreetAddressLine1) && string.IsNullOrEmpty(model.Address.City) && string.IsNullOrEmpty(model.Address.ZipCode))
            {
                var state = _stateRepository.GetStatebyCode(_settings.State) ??
                            _stateRepository.GetState(_settings.State);
                model.Address.StreetAddressLine1 = _settings.Address1;
                model.Address.StreetAddressLine2 = _settings.Address2;
                model.Address.City    = _settings.City;
                model.Address.StateId = state != null ? state.Id : model.Address.StateId;
                model.Address.ZipCode = _settings.ZipCode;
            }
            var customer = _massRegistrationEditModelFactory.CreateCustomer(model, createdByOrgRoleUser);

            _customerService.SaveCustomer(customer, createdByOrgRoleUser.Id);

            var forOrgRoleUser = _orgRoleUserRepository.GetOrganizationRoleUser(customer.CustomerId);

            var orderables = new List <IOrderable>();

            if (model.PackageId > 0)
            {
                orderables.Add(_eventPackageRepository.GetByEventAndPackageIds(eventId, model.PackageId));
            }
            if (orderables.IsNullOrEmpty())
            {
                return(false);
            }

            var screeningTime = _eventPackageSelectorService.GetScreeningTime(eventId, model.PackageId, null);
            var slots         = _eventSchedulingSlotService.BookSlotTemporarily(model.AppointmentId, screeningTime, model.PackageId, null);

            if (slots.IsNullOrEmpty())
            {
                throw new InvalidOperationException("Slot is booked by some other customer.");
            }

            var eventCustomer = SaveEventCustomer(createdByOrgRoleUser, model.AppointmentId, eventId, customer.CustomerId);

            ShippingDetail shippingDetail = null;

            if (model.AddFreeShipping)
            {
                var shippingAddress = Mapper.Map <AddressEditModel, Address>(model.Address);

                shippingDetail = SaveShippingDetail(shippingAddress, createdByOrgRoleUser);
            }
            PlaceOrder(forOrgRoleUser, createdByOrgRoleUser, orderables, eventCustomer, null, shippingDetail);

            if (model.SendNotification)
            {
                var eventData = _eventRepository.GetById(eventId);
                SendNotification(customer, eventData, createdByOrgRoleUser, "/Scheduling/MassRegistration/Create");
            }

            try
            {
                _eventSchedulingSlotService.SendEventFillingNotification(eventId, createdByOrgRoleUser.Id);
            }
            catch (Exception)
            {
            }
            return(true);
        }