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); } }
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)); }
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); }