public override async Task GetByIdThatDoesntExistReturnsNullAsync()
        {
            int id = 1000;

            var options = new DbContextOptionsBuilder <Project15Context>()
                          .UseInMemoryDatabase("db_eventcustomer_test_getId").Options;

            // arrange (use the context directly - we assume that works)
            using (var db = new Project15Context(options));

            // assert (for assert, once again use the context directly for verify.)
            using (var db = new Project15Context(options))
            {
                var repo = new EventCustomerRepository(db);

                EventCustomer eventCustomer = await repo.GetByIdAsync(id);

                Assert.Null(eventCustomer);
            }
        }
        public override async Task DeleteWithIdThatDoesntExistThrowsExceptionAsync()
        {
            int id = 1000;
            // arrange (use the context directly - we assume that works)
            var options = new DbContextOptionsBuilder <Project15Context>()
                          .UseInMemoryDatabase("db_eventcustomer_test_delete").Options;

            using (var db = new Project15Context(options));

            // assert (for assert, once again use the context directly for verify.)
            using (var db = new Project15Context(options))
            {
                var repo = new EventCustomerRepository(db);

                EventCustomer eventCustomer = await repo.GetByIdAsync(id);

                Assert.Null(eventCustomer);

                await Assert.ThrowsAsync <ArgumentException>(() => repo.DeleteAsync(id));
            }
        }
        public async Task <EventCustomer> UpdateAsync(EventCustomer model, int?id = null)
        {
            EventsCustomers eventDataAccess = Mapper.Map <EventCustomer, EventsCustomers>(model);

            if (id == null)
            {
                throw new ArgumentException("Nedded id", nameof(id));
            }

            EventsCustomers tracked = _db.EventsCustomers.Find(id);

            if (tracked == null)
            {
                throw new ArgumentException("No EventCustomerwith this id", nameof(id));
            }

            _db.Entry(tracked).CurrentValues.SetValues(eventDataAccess);
            model = Mapper.Map <EventsCustomers, EventCustomer>(eventDataAccess);

            return(model);
        }
Exemple #4
0
        public bool Insert(EventEntryEntity entity)
        {
            bool isinserted = false;

            using (var db = new EventDBEntities())
            {
                EventEntryMaster record = new EventEntryMaster();
                record.Eventid     = entity.Eventid;
                record.Eventdate   = entity.Eventdate;
                record.Createddate = entity.Createddate;
                record.Createdby   = entity.Createdby;
                record.TotalAmount = entity.TotalAmount;
                record.Location    = entity.Location;
                record.Id          = entity.Id;
                record.IsActive    = true;
                db.EventEntryMasters.Add(record);
                db.SaveChanges();
                long evenentryid = record.Id;

                if (evenentryid > 0)
                {
                    if (entity.customerlist != null)
                    {
                        foreach (var item in entity.customerlist)
                        {
                            EventCustomer eventcustrecord = new EventCustomer();
                            eventcustrecord.Eventcustomerid = item.Eventcustomerid;
                            eventcustrecord.Paidamount      = item.Paidamount;
                            eventcustrecord.IsActive        = true;
                            eventcustrecord.Evententryid    = evenentryid;
                            db.EventCustomers.Add(eventcustrecord);
                            db.SaveChanges();
                        }
                    }
                }

                isinserted = true;
            }
            return(isinserted);
        }
        public KynNotificationViewModel IsApplicableForNotification(EventCustomer eventCustomer)
        {
            if (!eventCustomer.AppointmentId.HasValue)
            {
                return(null);
            }

            var isKynIntegrationEnabled = _eventPodRepository.IsKynIntegrationEnabled(eventCustomer.EventId);

            if (!isKynIntegrationEnabled)
            {
                return(null);
            }

            var tests = _eventCustomerPackageTestDetailService.GetTestsPurchasedByCustomer(eventCustomer.EventId, eventCustomer.CustomerId);
            var isKynTestPurchased = tests != null && tests.Any(t => t.Id == (long)TestType.Kyn);

            if (!isKynTestPurchased)
            {
                return(null);
            }

            var customer = _customerRepository.GetCustomer(eventCustomer.CustomerId);

            var isDemographicInfoFilled = CheckDemographicInfo(customer);

            var isHafFilled = _kynHealthAssessmentHelper.IsKynHafFilled(eventCustomer.EventId, eventCustomer.CustomerId);

            if (isDemographicInfoFilled && isHafFilled)
            {
                return(null);
            }

            var eventHostViewData = _eventService.GetById(eventCustomer.EventId);
            var appointment       = _appointmentRepository.GetById(eventCustomer.AppointmentId.Value);

            return(_notificationModelsFactory.GetKynNotificationViewModel(customer, eventHostViewData, appointment, isDemographicInfoFilled, isHafFilled));
        }
        public async Task <ActionResult> CreateAsync(EventCustomer record)
        {
            try
            {
                // use POST method, not GET, based on the route the service has defined
                HttpRequestMessage  request  = CreateRequestToService(HttpMethod.Post, "api/EventCustomer", record);
                HttpResponseMessage response = await Client.SendAsync(request);

                if (!response.IsSuccessStatusCode)
                {
                    if (response.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        return(RedirectToAction("Login", "Account"));
                    }
                    return(View(record));
                }
                return(RedirectToAction(nameof(Index)));
            }
            catch
            {
                return(View(record));
            }
        }
        //TODO: This will be pulled into the UpdateSourceCode in EventCustomerRepository once old order system is removed.
        private bool UpdateSourceCodeForExistingOrder(long eventCustomerId, string sourceCode, long userId, long shellId, long roleId)
        {
            IUniqueItemRepository <EventCustomer> itemRepository = new EventCustomerRepository();
            EventCustomer eventCustomer = itemRepository.GetById(eventCustomerId);

            var creatorOrganizationRoleUser = IoC.Resolve <IOrgRoleUserModelBinder>().ToDomain(
                IoC.Resolve <ISessionContext>().UserSession.CurrentOrganizationRole,
                IoC.Resolve <ISessionContext>().UserSession.UserId);

            var newSourceCode = _sourceCodeRepository.GetSourceCodeByCode(sourceCode);

            if (creatorOrganizationRoleUser == null || newSourceCode == null)
            {
                return(false);
            }

            try
            {
                var order = _orderRepository.GetOrder(eventCustomer.CustomerId, eventCustomer.EventId);

                OrderDetail orderDetail = _orderController.GetActiveOrderDetail(order);

                if (orderDetail == null)
                {
                    return(false);
                }

                newSourceCode.CouponValue = orderDetail.SourceCodeOrderDetail != null ? orderDetail.SourceCodeOrderDetail.Amount : 0.00m;

                return(_orderController.UpdateOrder(order, newSourceCode, creatorOrganizationRoleUser.Id) != null);
            }
            catch (ObjectNotFoundInPersistenceException <Order> )
            {
                return(false);
            }
        }
        private string GetStatusCode(EventCustomer eventCustomer, Appointment appointment, Event eventData)
        {
            if (eventCustomer.NoShow || eventCustomer.LeftWithoutScreeningReasonId.HasValue || (eventData.EventDate < DateTime.Today && (appointment != null && (appointment.CheckInTime == null || appointment.CheckOutTime == null))))
            {
                return("N");
            }

            if (!eventCustomer.AppointmentId.HasValue)
            {
                return("C");
            }

            if (appointment != null && appointment.CheckInTime.HasValue && appointment.CheckOutTime.HasValue)
            {
                return("A");
            }

            if (eventData.EventDate >= DateTime.Today)
            {
                return("P");
            }

            return(string.Empty);
        }
        public void CreateOrder(TempCart tempCart, PaymentEditModel paymentEditModel = null)
        {
            if (tempCart.EventId == null || tempCart.CustomerId == null || tempCart.AppointmentId == null || (tempCart.EventPackageId == null && string.IsNullOrEmpty(tempCart.TestId)))
            {
                return;
            }

            var customer = _customerRepository.GetCustomer(tempCart.CustomerId.Value);
            var inDb     = _eventCustomerRepository.Get(tempCart.EventId.Value, tempCart.CustomerId.Value);

            var eventCustomer = new EventCustomer
            {
                Id                   = inDb != null ? inDb.Id : 0,
                EventId              = tempCart.EventId.Value,
                CustomerId           = tempCart.CustomerId.Value,
                DataRecorderMetaData = new DataRecorderMetaData
                {
                    DataRecorderCreator = new OrganizationRoleUser(tempCart.CustomerId.Value),
                    DateCreated         = DateTime.Now
                },
                OnlinePayment   = true,
                MarketingSource = tempCart.MarketingSource,
                NoShow          = false,
                TestConducted   = false,
                HIPAAStatus     = RegulatoryState.Unknown,
                EnableTexting   = customer.EnableTexting
            };

            using (var scope = new TransactionScope())
            {
                var appointment = _eventAppointmentService.CreateAppointment(tempCart.InChainAppointmentSlotIds, tempCart.CustomerId.Value);
                eventCustomer.AppointmentId = appointment.Id;
                eventCustomer = _eventCustomerRepository.Save(eventCustomer);

                //Moved code into ProcessPayment to Extract Common Code for API and Service
                ProcessPayment(paymentEditModel, eventCustomer.Id, customer.CustomerId, false);

                var orderables = new List <IOrderable>();

                if (tempCart.EventPackageId.HasValue)
                {
                    orderables.Add(_eventPackageRepository.GetById(tempCart.EventPackageId.Value));
                }


                var testIds = new List <long>();
                if (!string.IsNullOrEmpty(tempCart.TestId))
                {
                    string[] testIdStrings = tempCart.TestId.Split(new[] { ',' });
                    foreach (var testIdString in testIdStrings)
                    {
                        int i = 0;
                        if (int.TryParse(testIdString, out i))
                        {
                            testIds.Add(i);
                        }
                    }
                }

                if (testIds.Count > 0)
                {
                    var eventTests = _eventTestRepository.GetbyIds(testIds);
                    if (tempCart.EventPackageId.HasValue)
                    {
                        foreach (var eventTest in eventTests)
                        {
                            eventTest.Price = eventTest.WithPackagePrice;
                        }
                    }
                    orderables.AddRange(eventTests);
                }

                IEnumerable <ElectronicProduct> products = null;
                var productIds = new List <long>();
                if (!string.IsNullOrEmpty(tempCart.ProductId))
                {
                    string[] productIdStrings = tempCart.ProductId.Split(new[] { ',' });
                    foreach (var productIdIdString in productIdStrings)
                    {
                        int i = 0;
                        if (int.TryParse(productIdIdString, out i))
                        {
                            productIds.Add(i);
                        }
                    }
                }

                if (productIds.Count > 0)
                {
                    products = _productRepository.GetByIds(productIds);
                    orderables.AddRange(products);
                }

                if (orderables.IsNullOrEmpty())
                {
                    return;
                }

                SourceCode sourceCode = null;
                if (tempCart.SourceCodeId.HasValue && tempCart.SourceCodeId.Value > 0)
                {
                    var sourceCodeModel = GetSourceCodeApplied(tempCart);
                    sourceCode = new SourceCode
                    {
                        Id          = sourceCodeModel.SourceCodeId,
                        CouponCode  = sourceCodeModel.SourceCode,
                        CouponValue = sourceCodeModel.DiscountApplied
                    };
                }

                var shippingAddress = tempCart.ShippingAddressId.HasValue
                                          ? _addressRepository.GetAddress(tempCart.ShippingAddressId.Value)
                                          : null;

                ShippingDetail shippingDetail = null;
                if (tempCart.ShippingId != null && tempCart.ShippingId.Value > 0)
                {
                    var shippingOption = _shippingOptionRepository.GetById(tempCart.ShippingId.Value);
                    shippingDetail = new ShippingDetail
                    {
                        ShippingOption       = shippingOption,
                        ShippingAddress      = shippingAddress,
                        Status               = ShipmentStatus.Processing,
                        ActualPrice          = shippingOption.Price,
                        DataRecorderMetaData = new DataRecorderMetaData(tempCart.CustomerId.Value, DateTime.Now, null)
                    };
                    shippingDetail = _shippingController.OrderShipping(shippingDetail);
                }

                bool indentedLineItemsAdded = false;
                // TODO: applying hook to the system all the indented line items will be attached to the first order item.
                foreach (var orderable in orderables)
                {
                    if (!indentedLineItemsAdded && (orderable.OrderItemType == OrderItemType.EventPackageItem || orderable.OrderItemType == OrderItemType.EventTestItem))
                    {
                        _orderController.AddItem(orderable, 1, tempCart.CustomerId.Value, tempCart.CustomerId.Value, sourceCode, eventCustomer, shippingDetail, OrderStatusState.FinalSuccess);
                        indentedLineItemsAdded = true;
                    }
                    else
                    {
                        _orderController.AddItem(orderable, 1, tempCart.CustomerId.Value, tempCart.CustomerId.Value, OrderStatusState.FinalSuccess);
                    }
                }
                var order = _orderRepository.GetOrder(tempCart.CustomerId.Value, tempCart.EventId.Value);
                order = order == null?_orderController.PlaceOrder(OrderType.Retail, tempCart.CustomerId.Value) : _orderController.ActivateOrder(order);

                if (products != null && products.Count() > 0 && shippingDetail != null)
                {
                    foreach (var electronicProduct in products)
                    {
                        SaveProductShippingDetail(electronicProduct.Id, order, shippingAddress, customer.CustomerId);
                    }
                }

                if (paymentEditModel != null && paymentEditModel.Payments != null && paymentEditModel.Payments.Any(p => p.ChargeCard != null || p.ECheck != null || p.GiftCertificate != null))
                {
                    var paymentId = _paymentController.SavePayment(paymentEditModel, tempCart.CustomerId.Value);
                    _orderRepository.ApplyPaymentToOrder(order.Id, paymentId);
                }

                scope.Complete();
            }
        }
        private string SendCustomNotification(Customer customer, EventCustomer eventCustomer, CorporateAccount account, CustomEventNotification customEventNotification)
        {
            try
            {
                var message = string.Empty;
                _logger.Info("Running Custom SMS for  Customer: " + customer.CustomerId);
                if (!eventCustomer.EnableTexting)
                {
                    message = "Customer has not opted for SMS";
                    _logger.Info(message);
                    return(message);
                }
                if (customer.IsSubscribed == null || customer.IsSubscribed.Value == false)
                {
                    message = "Customer has not subscribed for SMS";
                    _logger.Info(message);
                    return(message);
                }
                var messageAlreadySentList = _eventCustomerNotificationRepository.GetAllByEventCustomerId(eventCustomer.EventId, NotificationTypeAlias.CustomEventSmsNotification);

                var messageCount = (!messageAlreadySentList.IsNullOrEmpty()) ? EnumerableExtensions.Count(messageAlreadySentList) : 0;

                if (account != null)
                {
                    var accountMaxSmscount = (account.MaximumSms.HasValue) ? account.MaximumSms.Value : 0;

                    if (messageCount >= accountMaxSmscount)
                    {
                        _logger.Info("Maximum SMS has Been Sent ");
                        _logger.Info(string.Format("Allowed SMS {0}, SMS Already Sent {0} " + accountMaxSmscount, messageCount));
                        message = "Maximum SMS limit has been reached.";

                        return(message);
                    }
                }
                if (messageAlreadySentList.Any() && (account == null || !account.MaximumSms.HasValue))
                {
                    message = "Maximum SMS limit has been reached.";
                    return(message);
                }
                var smsNotificaionModel = _phoneNotificationModelsFactory.GetCustomEventSmsNotificatonModel(customEventNotification.Body);

                var notification = _notifier.NotifyViaSms(NotificationTypeAlias.CustomEventSmsNotification, EmailTemplateAlias.CustomEventSms, smsNotificaionModel, customer.Id, customEventNotification.CreatedBy, "Event Detail ");

                if (notification != null)
                {
                    var eventCustomerNotification = new EventCustomerNotification
                    {
                        EventCustomerId    = eventCustomer.Id,
                        NotificationId     = notification.Id,
                        NotificationTypeId = notification.NotificationType.Id
                    };
                    _eventCustomerNotificationRepository.Save(eventCustomerNotification);
                }

                message = "Message has been successfully Queued";

                return(message);
            }
            catch (Exception exception)
            {
                _logger.Error("Some Error occurred while Queuing message");
                _logger.Info("Message: " + exception.Message);
                _logger.Info("Stack Trace: " + exception.StackTrace);

                return("Some Error occurred while Queuing message");
            }
        }
Exemple #11
0
        private bool AdjustCustomerOrder(EventCustomer eventCustomer, Order currentOrder, long newPackageId, long oldPackageId, long createdByOrgRoleUserId,
                                         long customerId, IEnumerable <long> orderedTestIds, IEnumerable <long> preApprovedTestIds, IEnumerable <long> packageTestIds, long corporateUploadId)
        {
            if (corporateUploadId == 0)
            {
                return(false);
            }

            if (currentOrder != null && !currentOrder.OrderDetails.IsEmpty())
            {
                if (eventCustomer == null)
                {
                    return(false);
                }

                var OrderId = currentOrder.Id;

                var forOrganizationRoleUser = GetForOrganizationRoleUser(customerId);

                IOrderController orderController = new Falcon.App.Infrastructure.Finance.Impl.OrderController();
                var currentPreApprovedTest       = _preApprovedTestRepository.GetByCustomerId(customerId);

                if (IsOldPreApprovedTestSame(currentPreApprovedTest.Select(x => x.TestId), preApprovedTestIds))
                {
                    return(false);
                }

                // var selectedTestIds = orderedTestIds.ToList();
                var selectedTestIds = new List <long>();

                //if (!currentPreApprovedTest.IsNullOrEmpty())
                //{
                //    var testIdToRemove = currentPreApprovedTest.Select(x => x.TestId);
                //    selectedTestIds = selectedTestIds.Where(x => !testIdToRemove.Contains(x)).ToList();
                //}

                //if (newPackageId != oldPackageId && oldPackageId != 0)
                //{
                //    selectedTestIds = selectedTestIds.Where(x => !packageTestIds.Contains(x)).ToList();
                //}

                selectedTestIds.AddRange(preApprovedTestIds);

                var          orderables        = new List <IOrderable>();
                long         oldEventPackageId = 0;
                long         newEventPackageId = 0;
                var          oldEventTestIds   = new List <long>();
                var          newEventTestIds   = new List <long>();
                EventPackage eventPackage      = null;
                EventPackage oldEventPackage   = null;

                if (newPackageId > 0)
                {
                    eventPackage = _eventPackageRepository.GetByEventAndPackageIds(eventCustomer.EventId, newPackageId);
                }

                if (oldPackageId > 0)
                {
                    oldEventPackage = _eventPackageRepository.GetByEventAndPackageIds(eventCustomer.EventId, oldPackageId);
                }

                var testIdsInPackage = new List <long>();

                if (eventPackage != null)
                {
                    orderables.Add(eventPackage);
                    newEventPackageId = eventPackage.Id;
                    RemoveTestsAlreadyInPackage(selectedTestIds.ToList(), eventCustomer.EventId, eventPackage);
                    testIdsInPackage = eventPackage.Package.Tests.Select(x => x.Id).ToList();
                }

                if (oldEventPackage != null)
                {
                    oldEventPackageId = oldEventPackage.Id;
                    if (eventPackage == null)
                    {
                        orderables.Add(oldEventPackage);
                        RemoveTestsAlreadyInPackage(selectedTestIds.ToList(), eventCustomer.EventId, oldEventPackage);
                        testIdsInPackage = oldEventPackage.Package.Tests.Select(x => x.Id).ToList();
                    }
                }

                var oldEventTests = _eventTestRepository.GetByEventAndTestIds(eventCustomer.EventId, orderedTestIds);
                if (oldEventTests != null)
                {
                    oldEventTestIds = oldEventTests.Select(x => x.Id).ToList();
                }

                var disqualifiedTestIds          = _disqualifiedTestRepository.GetLatestVersionTestId(eventCustomer.CustomerId, eventCustomer.EventId);
                var dependentDisqualifiedTestIds = _dependentDisqualifiedTestRepository.GetLatestVersionTestId(eventCustomer.CustomerId, eventCustomer.EventId);
                disqualifiedTestIds = (disqualifiedTestIds.Concat(dependentDisqualifiedTestIds)).Distinct();

                //removing disqualified test from new order
                selectedTestIds = selectedTestIds.Where(x => !disqualifiedTestIds.Contains(x)).ToList();

                //remove test which are already present in package test
                selectedTestIds = selectedTestIds.Where(x => !testIdsInPackage.Intersect(selectedTestIds).Contains(x)).ToList();

                if (!selectedTestIds.IsNullOrEmpty())
                {
                    var eventTests = _eventTestRepository.GetByEventAndTestIds(eventCustomer.EventId, selectedTestIds);
                    if (newPackageId > 0 || oldPackageId > 0)
                    {
                        foreach (var eventTest in eventTests)
                        {
                            eventTest.Price = eventTest.WithPackagePrice;
                        }
                    }

                    orderables.AddRange(eventTests);
                    newEventTestIds = eventTests.Select(x => x.Id).ToList();
                }

                if (((oldEventPackageId > 0 && newEventPackageId == 0) || (newEventPackageId == oldEventPackageId)) && (newEventTestIds.All(oldEventTestIds.Contains) && newEventTestIds.Count == oldEventTestIds.Count))
                {
                    return(false);
                }

                if (orderables.IsNullOrEmpty())
                {
                    return(false);
                }

                var insurancePayment = currentOrder.PaymentsApplied.Where(pi => pi.PaymentType == Falcon.App.Core.Finance.Enum.PaymentType.Insurance).Select(pi => pi).SingleOrDefault();
                if (insurancePayment != null)
                {
                    _insurancePaymentRepository.Delete(insurancePayment.Id);
                }

                bool indentedLineItemsAdded = false;

                foreach (var orderable in orderables)
                {
                    if (!indentedLineItemsAdded && (orderable.OrderItemType == OrderItemType.EventPackageItem || orderable.OrderItemType == OrderItemType.EventTestItem))
                    {
                        orderController.AddItem(orderable, 1, forOrganizationRoleUser.Id, createdByOrgRoleUserId,
                                                null,
                                                null, null, OrderStatusState.FinalSuccess);
                        indentedLineItemsAdded = true;
                    }
                    else
                    {
                        orderController.AddItem(orderable, 1, forOrganizationRoleUser.Id, createdByOrgRoleUserId,
                                                OrderStatusState.FinalSuccess);
                    }
                }

                Order newOrder = orderController.PlaceOrder(currentOrder);

                _customerOrderHistoryService.SaveCustomerOrderHistory(eventCustomer, corporateUploadId, oldEventPackageId, newEventPackageId, oldEventTestIds, newEventTestIds);
                return(true);
            }
            return(false);
        }
        public PatientWorksheet GetPatientWorksheetModel(Customer customer, Event theEvent, EventCustomer eventCustomer)
        {
            var customerId = customer.Id;
            var eventId    = theEvent.Id;

            var order                = _orderRepository.GetOrderByEventCustomerId(eventCustomer.Id);
            var eventPackage         = _eventPackageRepository.GetPackageForOrder(order.Id);
            var eventTest            = _eventTestRepository.GetTestsForOrder(order.Id);
            var products             = _electronicProductRepository.GetAllProductsForEvent(eventId);
            var purchasedProduct     = _electronicProductRepository.GetElectronicProductByOrderId(order.Id);
            var customerIcdCodes     = _customerIcdCodesRepository.GetIcdByCustomerId(customerId);
            var customerTags         = _corporateCustomerCustomTagRepository.GetByCustomerId(customerId);
            var preApporvedTestNames = _preApprovedTestRepository.GetPreApprovedTestNameByEventCustomerId(eventCustomer.Id);
            var testForTechnician    = _eventTestRepository.GetTestsForEventByRole(eventId, (long)Roles.Technician);

            string[] customerRecentTags = null;

            var isCorporateEvent = theEvent.EventType == EventType.Corporate;

            if (customerTags != null && customerTags.Any() && isCorporateEvent)
            {
                customerTags       = customerTags.OrderByDescending(x => x.DataRecorderMetaData.DateCreated).Take(4);
                customerRecentTags = customerTags.Select(x => x.Tag).ToArray();
            }

            var icdCodes = new List <string>();

            if (!customerIcdCodes.IsNullOrEmpty())
            {
                icdCodes = _icdCodesRepository.GetIcdByIds(customerIcdCodes.Select(x => x.IcdCodeId)).Select(x => x.CodeName.ToUpper()).ToList();
            }

            var labName = string.Empty;

            if (customer.LabId.HasValue)
            {
                var lab = _labRepository.GetById(customer.LabId.Value);
                labName = lab.Name;
            }

            return(new PatientWorksheet
            {
                Name = customer.Name,
                CustomerId = customer.CustomerId,
                Dob = customer.DateOfBirth,
                Height = customer.Height,
                Weight = customer.Weight,
                Gender = customer.Gender,
                Package = eventPackage,
                Tests = eventTest,
                Lab = labName,
                AlaCarteTest = testForTechnician,
                AllProducts = products,
                ProductId = purchasedProduct != null ? purchasedProduct.Id : 0,
                IcdCodes = icdCodes,
                PreApporvedTestNames = preApporvedTestNames,
                EventDate = theEvent.EventDate,
                CustomTags = customerRecentTags,
                IsCorporateEvent = theEvent.EventType == EventType.Corporate
            });
        }
Exemple #13
0
        public void SaveCustomerOrderHistory(EventCustomer eventCustomer, long corporateUploadId, long oldEventPackageId, long newEventPackageId,
                                             IEnumerable <long> oldEventTestIds, IEnumerable <long> newEventTestIds)
        {
            var customerOrderHistories = new List <CustomerOrderHistory>();

            if (oldEventPackageId > 0)
            {
                var model = new CustomerOrderHistory
                {
                    UploadId          = corporateUploadId,
                    EventCustomerId   = eventCustomer.Id,
                    EventId           = eventCustomer.EventId,
                    CustomerId        = eventCustomer.CustomerId,
                    EventPackageId    = oldEventPackageId,
                    OrderItemStatusId = (long)OrderItemStatus.Old,
                };
                customerOrderHistories.Add(model);
            }

            if (newEventPackageId > 0)
            {
                var model = new CustomerOrderHistory
                {
                    UploadId          = corporateUploadId,
                    EventCustomerId   = eventCustomer.Id,
                    EventId           = eventCustomer.EventId,
                    CustomerId        = eventCustomer.CustomerId,
                    EventPackageId    = newEventPackageId,
                    OrderItemStatusId = (long)OrderItemStatus.New,
                };
                customerOrderHistories.Add(model);
            }

            if (oldEventPackageId > 0 && newEventPackageId <= 0)
            {
                var model = new CustomerOrderHistory
                {
                    UploadId          = corporateUploadId,
                    EventCustomerId   = eventCustomer.Id,
                    EventId           = eventCustomer.EventId,
                    CustomerId        = eventCustomer.CustomerId,
                    EventPackageId    = oldEventPackageId,
                    OrderItemStatusId = (long)OrderItemStatus.Existing,
                };
                customerOrderHistories.Add(model);
            }

            if (oldEventTestIds != null && oldEventTestIds.Any())
            {
                foreach (var eventTestId in oldEventTestIds)
                {
                    var model = new CustomerOrderHistory
                    {
                        UploadId          = corporateUploadId,
                        EventCustomerId   = eventCustomer.Id,
                        EventId           = eventCustomer.EventId,
                        CustomerId        = eventCustomer.CustomerId,
                        EventTestId       = eventTestId,
                        OrderItemStatusId = (long)OrderItemStatus.Old,
                    };
                    customerOrderHistories.Add(model);
                }
            }

            if (newEventTestIds != null && newEventTestIds.Any())
            {
                foreach (var eventTestId in newEventTestIds)
                {
                    var model = new CustomerOrderHistory
                    {
                        UploadId          = corporateUploadId,
                        EventCustomerId   = eventCustomer.Id,
                        EventId           = eventCustomer.EventId,
                        CustomerId        = eventCustomer.CustomerId,
                        EventTestId       = eventTestId,
                        OrderItemStatusId = oldEventTestIds != null && oldEventTestIds.Any() && oldEventTestIds.Contains(eventTestId) ? (long)OrderItemStatus.Existing : (long)OrderItemStatus.New,
                    };
                    customerOrderHistories.Add(model);
                }
            }

            _customerOrderHistoryRepository.Save(customerOrderHistories);
        }
Exemple #14
0
        public EventCustomerAggregate CreateEventCustomerAggregate(EventCustomer eventCustomer)
        {
            // Collect all the required data from different repositories.
            var eventData         = _eventRepository.GetById(eventCustomer.EventId);
            var eventHost         = _hostRepository.GetHostForEvent(eventCustomer.EventId);
            var appointment       = _appointmentRepository.GetById(eventCustomer.AppointmentId.Value);
            var customer          = _customerRepository.GetCustomer(eventCustomer.CustomerId);
            var order             = _orderRepository.GetOrder(customer.CustomerId, eventData.Id);
            var activeOrderDetail = _orderController.GetActiveOrderDetail(order);

            if (eventHost == null || appointment == null || order == null || activeOrderDetail == null)
            {
                return(null);
            }

            var    package     = _packageRepository.GetById(activeOrderDetail.OrderItem.ItemId);
            string packageName = "";

            if (package != null)
            {
                packageName = package.Package.Name;
            }

            var sourceCode = activeOrderDetail.SourceCodeOrderDetail != null?_sourceCodeRepository.GetSourceCodeById(activeOrderDetail.SourceCodeOrderDetail.SourceCodeId) : null;

            var paymentTypes = string.Join(",", order.PaymentsApplied.Select(pa => pa.PaymentType.Name).ToArray());

            CustomerEventSignUpMode signUpMode = GetEventSignUpMode(eventCustomer);

            return(new EventCustomerAggregate
            {
                AppointmentId = eventCustomer.AppointmentId.Value,
                AppointmentTime = appointment.StartTime,
                CustomerAddress = customer.Address,
                CustomerId = customer.CustomerId,
                CustomerSignupDate = customer.DateCreated,
                EventAddress = eventHost.Address,
                EventCustomerId = eventCustomer.Id,
                EventDate = eventData.EventDate,
                EventId = eventData.Id,
                EventName = eventData.Name,
                EventSignupDate =
                    eventCustomer.DataRecorderMetaData != null
                                   ? eventCustomer.DataRecorderMetaData.DateCreated
                                   : default(DateTime),
                EventStatus = eventData.Status,
                FirstName = customer.Name != null ? customer.Name.FirstName : string.Empty,
                IsPaid = order.TotalAmountPaid >= order.DiscountedTotal,
                LastName = customer.Name != null ? customer.Name.LastName : string.Empty,
                MarketingSource = eventCustomer.MarketingSource,
                MiddleName = customer.Name != null ? customer.Name.MiddleName : string.Empty,
                PackageName = packageName,
                PackageCost = activeOrderDetail.Price,
                PaidAmount = order.TotalAmountPaid,
                PaymentAmount = order.UndiscountedTotal,
                PaymentNet = order.DiscountedTotal,
                PaymentType = paymentTypes,
                SignUpMarketingSource = eventCustomer.MarketingSource,
                SignUpMode = signUpMode,
                SourceCode = sourceCode != null ? sourceCode.CouponCode : string.Empty,
                UnpaidAmount = order.TotalAmountPaid - order.DiscountedTotal
            });
        }
Exemple #15
0
        private BioCheckJsonViewModel GenerateBioCheckResponseModel(EventCustomer eventCustomer, Customer customer,
                                                                    IEnumerable <HealthAssessmentAnswer> customerHealth, Event eventData, ILogger logger,
                                                                    IEnumerable <EventCustomerResultTrale> eventCustomerResultTrales, IEnumerable <CustomerTrale> customerTrales, CorporateAccount account)
        {
            var isNewResultFlow = eventData.EventDate >= _settings.ResultFlowChangeDate;

            var testResult    = _bioCheckAssessmentTestResultRepository.GetTestResults(customer.CustomerId, eventCustomer.EventId, isNewResultFlow);
            var kynLabValues  = _kynLabValuesRepository.Get(eventCustomer.Id, (long)TestType.MyBioCheckAssessment);
            var basicBioMeric = _basicBiometricRepository.Get(eventCustomer.EventId, eventCustomer.CustomerId);

            var traleResponse = eventCustomerResultTrales.FirstOrDefault(x => x.EventCustomerResultId == eventCustomer.Id);
            var traleUser     = customerTrales.FirstOrDefault(x => x.CustomerId == eventCustomer.CustomerId);

            var myBioCheck = testResult as MyBioAssessmentTestResult;

            if (myBioCheck != null && (myBioCheck.TestNotPerformed == null || myBioCheck.TestNotPerformed.TestNotPerformedReasonId <= 0) && (testResult.UnableScreenReason == null || testResult.UnableScreenReason.Count <= 0))
            {
                if (traleResponse == null)
                {
                    traleResponse = new EventCustomerResultTrale
                    {
                        EventCustomerResultId = eventCustomer.Id,
                        DateCreated           = DateTime.Now,
                        ResponseId            = Guid.NewGuid().ToString()
                    };

                    _eventCustomerResultTraleRepository.Save(traleResponse);
                }

                if (traleUser == null)
                {
                    traleUser = new CustomerTrale
                    {
                        CustomerId  = customer.CustomerId,
                        DateCreated = DateTime.Now,
                        UserId      = Guid.NewGuid().ToString()
                    };
                    _customerTraleRepository.Save(traleUser);
                }

                var biocheckResponse = new List <BioCheckResponseModel>();
                SetCustomerHafResponse(customerHealth, biocheckResponse);                         //Q1_1 to Q8_4
                SetCustomerBioMetricResponse(customer, biocheckResponse);                         //Q9 to Q10
                SetLabValus(biocheckResponse, myBioCheck, kynLabValues, basicBioMeric, customer); //Q11 to Q21
                SetA1CTestData(biocheckResponse, eventCustomer, isNewResultFlow);                 //Q22
                SetAwvBoneMassTestData(biocheckResponse, eventCustomer, isNewResultFlow);         // Q23
                SetPsaTestData(biocheckResponse, eventCustomer, isNewResultFlow);                 // Q24
                SetNicotineTestData(biocheckResponse);                                            // Q25-27
                SetBmiData(biocheckResponse, customer);                                           // Q28
                SetSmokerData(biocheckResponse, kynLabValues);                                    //Q60

                var bioCheckJsonViewModel = new BioCheckJsonViewModel
                {
                    ResponseId  = traleResponse.ResponseId,
                    UserId      = traleUser.UserId,
                    FirstName   = customer.Name.FirstName,
                    LastName    = customer.Name.LastName,
                    DoB         = customer.DateOfBirth,
                    CreatedAt   = DateTime.Now,
                    CompletedAt = eventData.EventDate,
                    Email       = (customer.Email == null || string.IsNullOrEmpty(customer.Email.ToString()))
                            ? string.Empty
                            : customer.Email.ToString(),

                    Gender = customer.Gender == Gender.Female
                            ? FemaleGender
                            : customer.Gender == Gender.Male ? MaleGender : string.Empty,
                    GroupId   = account != null ? account.Id : eventData.Id,
                    GroupName = account != null ? account.Name : eventData.Name,
                    Responses = biocheckResponse.ToArray(),
                    UniqueId  = customer.CustomerId.ToString(),
                    Exfld03   = "Kaiser"
                };

                return(bioCheckJsonViewModel);
            }
            //Todo: create XML for Customers JSON Not Created;
            logger.Info("Customer's My bio-check Result not Found");

            return(null);
        }
        public string Update([FromBody] EventCustomer customer)
        {
            var result = repository.Update(customer);

            return(result);
        }
        public string Add([FromBody] EventCustomer customer)
        {
            var result = repository.Add(customer);

            return(result);
        }
        public EventCustomerResultStatusListModel Create(Event theEvent, Host eventHost, IEnumerable <EventTest> eventTests, EventCustomer eventCustomer, Customer customer,
                                                         IEnumerable <EventPackage> packages, IEnumerable <OrderedPair <long, long> > ecIdPackageIdpairs, IEnumerable <OrderedPair <long, long> > ecIdTestIdPairs,
                                                         IEnumerable <ResultArchiveLog> parsingResults, CustomerResultStatusViewModel customerResult, EventCustomerResult eventCustomerResult, bool isNewResultFlow, CorporateAccount account, QuestionnaireType questionnaireType)
        {
            var model = new EventCustomerResultStatusListModel
            {
                EventId    = theEvent.Id,
                EventDate  = theEvent.EventDate,
                Address    = Mapper.Map <Address, AddressViewModel>(eventHost.Address),
                Host       = eventHost.OrganizationName,
                EventTests = eventTests.Where(et => et.Test.IsRecordable).Select(et => et.Test).ToArray()
            };
            var orderPurchased     = "";
            var packageIdPurchased = ecIdPackageIdpairs.Where(p => p.FirstValue == eventCustomer.Id).Select(p => p.SecondValue).SingleOrDefault();

            var customerTests = new List <Test>();

            if (packageIdPurchased > 0)
            {
                var package = packages.Where(p => p.Id == packageIdPurchased).Select(p => p.Package).SingleOrDefault();
                orderPurchased = package.Name;
                customerTests.AddRange(package.Tests);
            }

            var testIdsPurchased = ecIdTestIdPairs.Where(p => p.FirstValue == eventCustomer.Id).Select(p => p.SecondValue).ToArray();

            if (testIdsPurchased.Count() > 0)
            {
                if (!string.IsNullOrEmpty(orderPurchased))
                {
                    orderPurchased += " + ";
                }
                var addOnTests = eventTests.Where(et => testIdsPurchased.Contains(et.Id)).Select(et => et.Test).ToArray();
                orderPurchased += string.Join(" + ", addOnTests.Select(t => t.Name));
                customerTests.AddRange(addOnTests);
            }

            var isHraQuestionnaire  = questionnaireType == QuestionnaireType.HraQuestionnaire;
            var isChatQuestionnaire = questionnaireType == QuestionnaireType.ChatQuestionnaire;

            var hasPurchasedEawvTest = isHraQuestionnaire && customerTests.Any(x => x.Id == (long)TestType.eAWV);

            var hasPurchasedQVTest = isChatQuestionnaire && customerTests.Any(x => x.Id == (long)TestType.Qv);

            var newCustomerResults = new List <CustomerResultStatusViewModel>();


            if (customerResult == null)
            {
                customerResult = new CustomerResultStatusViewModel {
                    CustomerId = eventCustomer.CustomerId
                };
            }
            newCustomerResults.Add(customerResult);

            customerResult.CustomerName      = customer.NameAsString;
            customerResult.CustomerFirstName = customer.Name.FirstName;
            customerResult.CustomerLastName  = customer.Name.LastName;
            customerResult.OrderPurchased    = orderPurchased;

            var eventTestResults = customerTests.Select(ct => new TestResultStatusViewModel
            {
                TestId      = ct.Id,
                Label       = ct.Name,
                Alias       = ct.Alias,
                ResultState = (isNewResultFlow ? (int)NewTestResultStateNumber.NoResults : (int)TestResultStateNumber.NoResults),
                State       = TestResultStateLabel.NoResults
            }).ToArray();

            bool isClinicalFormGenerated = false;
            bool isResultPdfGenerarted   = false;
            var  isChartSignedOff        = false;
            var  isIpResultGenerated     = false;

            if (isChatQuestionnaire)
            {
                isChartSignedOff = hasPurchasedQVTest || (eventCustomerResult != null && eventCustomerResult.SignedOffBy.HasValue);
            }
            else
            {
                isChartSignedOff = eventCustomerResult.SignedOffBy.HasValue || !hasPurchasedEawvTest;
            }

            if (eventCustomerResult != null)
            {
                isClinicalFormGenerated = eventCustomerResult.IsClinicalFormGenerated;
                isResultPdfGenerarted   = eventCustomerResult.IsResultPdfGenerated;
                //isChartSignedOff = isChatQuestionnaire ? eventCustomerResult.SignedOffBy.HasValue : eventCustomerResult.SignedOffBy.HasValue || !hasPurchasedEawvTest;
                isIpResultGenerated = eventCustomerResult.IsIpResultGenerated;
            }

            customerResult.HipaaStatus    = eventCustomer.HIPAAStatus;
            customerResult.PartnerRelease = eventCustomer.PartnerRelease;

            customerResult.IsPremiumVersionPdfGenerated = isResultPdfGenerarted;
            customerResult.IsClinicalFormGenerated      = isClinicalFormGenerated;
            customerResult.IsChartSigned       = isChartSignedOff;
            customerResult.IsIpResultGenerated = isIpResultGenerated;
            customerResult.IsCodingCompleted   = eventCustomerResult != null && eventCustomerResult.CodedBy.HasValue;
            customerResult.InvoicingDate       = eventCustomerResult != null ? eventCustomerResult.AcesApprovedOn : null;

            customerResult.TestResults = CompareEventTestResults(customerResult.TestResults, eventTestResults, parsingResults, isNewResultFlow, customerResult.IsChartSigned);

            model.Customers = newCustomerResults;
            return(model);
        }
Exemple #19
0
        private void SetAwvBoneMassTestData(List <BioCheckResponseModel> bioCheckResponse, EventCustomer eventCustomer)
        {
            _testResultRepository = new AwvBoneMassTestRepository();

            var testResult = _testResultRepository.GetTestResults(eventCustomer.CustomerId, eventCustomer.EventId);

            if (testResult != null)
            {
                var awvBoneMassTestResult = testResult as AwvBoneMassTestResult;
                if (awvBoneMassTestResult.EstimatedTScore != null)
                {
                    if (awvBoneMassTestResult.EstimatedTScore.Reading != null)
                    {
                        bioCheckResponse.Add(new BioCheckResponseModel("Q23", awvBoneMassTestResult.EstimatedTScore.Reading.Value.ToString()));
                    }
                }
            }
            else
            {
                testResult            = _testResultRepository.GetTestResults(eventCustomer.CustomerId, eventCustomer.EventId);
                _testResultRepository = new OsteoporosisTestRepository();
                if (testResult != null)
                {
                    var osteoporosisTestResult = testResult as OsteoporosisTestResult;
                    if (osteoporosisTestResult.EstimatedTScore != null)
                    {
                        if (osteoporosisTestResult.EstimatedTScore.Reading != null)
                        {
                            bioCheckResponse.Add(new BioCheckResponseModel("Q23", osteoporosisTestResult.EstimatedTScore.Reading.Value.ToString()));
                        }
                    }
                }
            }
        }
        public CheckListFormEditModel GetCustomerCheckListEdtiModel(Customer customer, CorporateAccount account, EventCustomer eventCustomer)
        {
            var preApporvedTestNames = _eventCustomerPreApprovedTestRepository.GetPreApprovedTestNameByEventCustomerId(eventCustomer.Id);
            var result = _eventCustomerResultRepository.GetById(eventCustomer.Id);

            var template = _checkListTemplateRepository.GetTemplateByEventId(eventCustomer.EventId);

            if (template == null && account.CheckListTemplateId.HasValue)
            {
                template = _checkListTemplateRepository.GetById(account.CheckListTemplateId.Value);
            }
            else if (template == null)
            {
                template = _checkListTemplateRepository.GetDefaultTemplate();
            }

            var templateGroup           = _checkListGroupRepository.GetAllGroups();
            var checkListQuestion       = _checkListQuestionRepository.GetAllQuestionsForTemplateId(template.Id);
            var checklistGroupQuestions = _checkListTemplateRepository.GetAllGroupQuestionsForTemplateId(template.Id);

            var version    = _checkListAnswerRepository.GetLatestVersion(eventCustomer.Id);
            var answerList = new List <CheckListAnswer>();

            if (version > 0)
            {
                answerList = _checkListAnswerRepository.GetAllAnswerByEventCustomerId(eventCustomer.Id, version).ToList();
            }

            return(new CheckListFormEditModel
            {
                CustomerId = customer.CustomerId,
                PreApporvedTestNames = preApporvedTestNames,
                EventId = eventCustomer.EventId,
                Name = customer.Name,
                DoB = customer.DateOfBirth,
                //HealthPlanName = (template.HealthPlanId.HasValue && account != null) ? account.Name : string.Empty,
                EventCustomerId = eventCustomer.Id,
                CheckListQuestion = _checkListQuestionAnswerEditModelFactory.CheckListQuestionAnswerEditModel(checkListQuestion, answerList, templateGroup, checklistGroupQuestions),
                IsEditable = result == null || result.ResultState < (long)TestResultStateNumber.PreAudit,
                Gender = customer.Gender
            });
        }
Exemple #21
0
        public SurveyFormEditModel GetCustomerSurveyFormEditModel(Customer customer, CorporateAccount account, EventCustomer eventCustomer)
        {
            var template = _SurveyTemplateRepository.GetTemplateByEventId(eventCustomer.EventId);

            if (template == null && account.SurveyTemplateId.HasValue)
            {
                template = _SurveyTemplateRepository.GetById(account.SurveyTemplateId.Value);
            }
            else if (template == null)
            {
                template = _SurveyTemplateRepository.GetDefaultTemplate();
            }

            if (template == null)
            {
                return new SurveyFormEditModel {
                           SurveyQuestion = new List <SurveyQuestionAnswerEditModel>()
                }
            }
            ;

            var surveyQuestion = _SurveyQuestionRepository.GetAllQuestionsForTemplateId(template.Id);

            var answerList = _surveyAnswerRepository.GetSurveyAnswerByEventCustomerId(eventCustomer.Id).ToList();

            return(new SurveyFormEditModel
            {
                CustomerId = customer.CustomerId,
                EventId = eventCustomer.EventId,
                Name = customer.Name,
                DoB = customer.DateOfBirth,
                EventCustomerId = eventCustomer.Id,
                SurveyQuestion = _SurveyQuestionAnswerEditModelFactory.SurveyQuestionAnswerEditModel(surveyQuestion, answerList),
                IsEditable = false,
                Gender = customer.Gender
            });
        }
    }
        protected void Page_Load(object sender, EventArgs e)
        {
            // Initial Code just to hide left hand side panel for this page.
            var masterPage = (TecnicianManualEntry)Page.Master;

            if (masterPage != null)
            {
                masterPage.HideLeftContainer = true;
            }

            var accountRepository = IoC.Resolve <ICorporateAccountRepository>();
            var account           = accountRepository.GetbyEventId(EventId);

            CaptureHaf = (account == null || account.CaptureHaf);

            CapturePcpConsent = (account != null && account.CapturePcpConsent);
            IsHealthPlanEvent = (account != null && account.IsHealthPlan);


            //var communicationRepository = IoC.Resolve<ICommunicationRepository>();
            EventCustomer eventCustomer = null;

            //var lastCommentAdded = communicationRepository.GetCommentsforPhysician(CustomerId, EventId);

            if (!IsPostBack)
            {
                var setting          = IoC.Resolve <ISettings>();
                var eventsRepository = IoC.Resolve <IEventRepository>();
                var eventData        = eventsRepository.GetById(EventId);
                eventCustomer = IoC.Resolve <IEventCustomerRepository>().Get(EventId, CustomerId);
                var eventCustomerId = eventCustomer.Id;

                var purchasedTest       = IoC.Resolve <ITestResultService>().TestPurchasedByCustomer(eventCustomerId);
                var iseawvTestPurchased = IsEawvTestPurchased = purchasedTest != null?purchasedTest.Any(x => x.Id == (long)TestType.eAWV) : false;

                IsNewResultFlow = eventData.EventDate >= setting.ResultFlowChangeDate;
                if (IsNewResultFlow)
                {
                    ClientScript.RegisterHiddenField("IsNewResultFlowInputHidden", "true");
                }
                else
                {
                    ClientScript.RegisterHiddenField("IsNewResultFlowInputHidden", "false");
                }

                var questionnaireType = QuestionnaireType.None;
                if (account != null && account.IsHealthPlan && eventData != null)
                {
                    questionnaireType = IoC.Resolve <IAccountHraChatQuestionnaireHistoryServices>().QuestionnaireTypeByAccountIdandEventDate(account.Id, eventData.EventDate);
                }

                var isShowHraQuestioner = questionnaireType == QuestionnaireType.HraQuestionnaire;

                if (eventData.EventDate < setting.ChecklistChangeDate)
                {
                    ShowCheckList = (account != null && account.PrintCheckList);
                }

                var mediaLocation = IoC.Resolve <IMediaRepository>().GetResultMediaFileLocation(CustomerId, EventId);
                ClientScript.RegisterClientScriptBlock(Page.GetType(), "js_Location_Url", "function getLocationPrefix() { return '" + mediaLocation.PhysicalPath.Replace("\\", "\\\\") + "'; } function getUrlPrefix() { return '" + mediaLocation.Url + "'; }", true);

                GetConductedbyData(eventData);
                FillStates();

                var currentSession = IoC.Resolve <ISessionContext>();

                ClientScript.RegisterHiddenField("hfTechnicianId", currentSession.UserSession.CurrentOrganizationRole.OrganizationRoleUserId.ToString());
                ClientScript.RegisterHiddenField("hfOrganizationId", currentSession.UserSession.CurrentOrganizationRole.OrganizationId.ToString());

                string pageHeading = "";

                var basicBiometricCutOfDate = setting.BasicBiometricCutOfDate;
                var hideBasicBiometric      = (eventData.EventDate.Date >= basicBiometricCutOfDate);
                ShowHideFastingStatus           = (eventData.EventDate.Date >= setting.FastingStatusDate);
                BasicBiometric.ShowByCutOffDate = !hideBasicBiometric;

                TestSection.SetSectionShowHide(hideBasicBiometric);

                if (currentSession != null && currentSession.UserSession != null && currentSession.UserSession.CurrentOrganizationRole != null)
                {
                    RoleId = currentSession.UserSession.CurrentOrganizationRole.GetSystemRoleId;
                }


                if (Mode == EditResultMode.ResultCorrection)
                {
                    var result = new CommunicationRepository().GetPhysicianandCommentsforFranchisee(CustomerId, EventId);
                    if (!string.IsNullOrEmpty(result.SecondValue))
                    {
                        PhysicianCommentsDiv.Visible = true;
                        PhysicianCommentsMessageBox.ShowErrorMessage("<b><u>Physician Comments:</u> </b>" + result.SecondValue);
                    }

                    updateWithCorrectionDivTop.Visible = true;
                    saveDivTop.Visible    = false;
                    approveDivtop.Visible = false;

                    updateWithCorrectionsDivbottom.Visible = true;
                    saveDivbottom.Visible    = false;
                    approveDivbottom.Visible = false;

                    var physicianService = IoC.Resolve <IPhysicianAssignmentService>();
                    var physicianIds     = physicianService.GetPhysicianIdsAssignedtoaCustomer(EventId, CustomerId);
                    if (physicianIds != null && result.FirstValue > 0 && physicianIds.Count() == 2 && physicianIds.ElementAt(1) == result.FirstValue)
                    {
                        SendToOvereadPhysician = true;
                    }

                    ClientScript.RegisterHiddenField("ResultStatusInputHidden", "4");

                    pageHeading = "Results Update/Correction";
                }


                if (Mode == EditResultMode.ResultPreAudit) // && isTechTeamConfigured == true)
                {
                    ClientScript.RegisterHiddenField("ResultStatusInputHidden", "4");
                    pageHeading = "Results Pre Audit";

                    saveDivTop.Visible    = false;
                    saveDivbottom.Visible = false;

                    if (TestSection.ContainsReviewableTests && !IsNewResultFlow)
                    {
                        skipevaluationdivbottom.Visible = true;
                    }

                    var customerHealthInfo = IoC.Resolve <IHealthAssessmentRepository>().Get(CustomerId, EventId);
                    if (!CaptureHaf || (customerHealthInfo != null && customerHealthInfo.Any()))
                    {
                        ClientScript.RegisterStartupScript(Page.GetType(), "js_setmedicalhistory", "setMedicalHistory();", true);
                    }

                    var defaultPhysician = IoC.Resolve <IPhysicianRepository>().GetDefaultPhysicianforEvent(EventId);
                    ClientScript.RegisterHiddenField("DefaultPhysician", defaultPhysician.ToString());

                    //var eventCustomerId = IoC.Resolve<IEventCustomerRepository>().Get(EventId, CustomerId).Id;
                    var isCustomerSkipped = IoC.Resolve <IPhysicianEvaluationRepository>().IsMarkedReviewSkip(eventCustomerId);
                    if (isCustomerSkipped)
                    {
                        ClientScript.RegisterStartupScript(Page.GetType(), "js_markcustomerskipped", "$('#skipevaluationcheckbox').attr('checked', true);", true);
                    }
                }
                else if (Mode == EditResultMode.ResultEntry)
                {
                    if (IsNewResultFlow)
                    {
                        ClientScript.RegisterHiddenField("ResultStatusInputHidden", "2");
                    }
                    else
                    {
                        ClientScript.RegisterHiddenField("ResultStatusInputHidden", "3");
                    }

                    pageHeading = "Results Edit/Entry";

                    approveDivtop.Visible    = false;
                    approveDivbottom.Visible = false;
                }

                HeadingSpan.InnerHtml = pageHeading;

                if (Request.UrlReferrer.AbsolutePath.ToLower().IndexOf("auditresultentry.aspx") < 0)
                {
                    Session["ReferredUrlFirstTimeOpen"] = Request.UrlReferrer;
                }

                CreateIFJSArrays();
                CreateJsArrayforIfuCs();

                //var eventCustomerRepository = IoC.Resolve<IEventCustomerRepository>();
                var goBackToResultEnteryPage = false;

                EventCustomerResult eventCustomerResult = IoC.Resolve <IEventCustomerResultRepository>().GetByCustomerIdAndEventId(CustomerId, EventId);;

                if ((Mode == EditResultMode.ResultEntry))
                {
                    if (IsCustomerNoShowOrLeftWithoutScreening(eventCustomer))
                    {
                        ClientScript.RegisterStartupScript(Page.GetType(), "js_NextCustomer", "customerMarkNoShow();", true);
                        goBackToResultEnteryPage = true;
                    }
                    else
                    {
                        var nextCustomerId = new TestResultRepository().GetNextCustomerEntryandAudit(EventId, CustomerId, IsNewResultFlow);
                        ClientScript.RegisterStartupScript(Page.GetType(), "js_NextCustomer", "setnextCustomerId(" + nextCustomerId + ");", true);
                    }
                }
                else
                {
                    var isChartSignedOff  = true;
                    var isQvTestPurchased = purchasedTest != null?purchasedTest.Any(x => x.Id == (long)TestType.Qv) : false;

                    var isHraQuestionnaire = questionnaireType == QuestionnaireType.HraQuestionnaire;

                    if (questionnaireType == QuestionnaireType.ChatQuestionnaire)
                    {
                        isChartSignedOff = isQvTestPurchased || (eventCustomerResult != null && eventCustomerResult.SignedOffBy.HasValue);
                    }
                    else
                    {
                        var isEawvTestNotPerformed = IoC.Resolve <ITestNotPerformedRepository>().IsTestNotPerformed(eventCustomer.Id, (long)TestType.eAWV);
                        isChartSignedOff = (eventCustomerResult != null && eventCustomerResult.SignedOffBy.HasValue) || !isShowHraQuestioner || !iseawvTestPurchased || isEawvTestNotPerformed;
                    }
                    IsChartSignedOff = (eventCustomerResult != null && eventCustomerResult.SignedOffBy.HasValue);
                    if (!IsNewResultFlow || isChartSignedOff)
                    {
                        if (IsCustomerNoShowOrLeftWithoutScreening(eventCustomer))
                        {
                            ClientScript.RegisterStartupScript(Page.GetType(), "js_NextCustomer", "customerMarkNoShow();", true);
                            goBackToResultEnteryPage = true;
                        }
                        else
                        {
                            long nextCustomerId = 0;
                            if (IsNewResultFlow && account != null && (questionnaireType != QuestionnaireType.None))
                            {
                                nextCustomerId = new TestResultRepository().GetNextCustomerForPreAudit(EventId, CustomerId, isHraQuestionnaire);
                            }
                            else
                            {
                                nextCustomerId = new TestResultRepository().GetNextCustomerEntryandAudit(EventId, CustomerId, IsNewResultFlow);
                            }

                            ClientScript.RegisterStartupScript(Page.GetType(), "js_NextCustomer", "setnextCustomerId(" + nextCustomerId + ");", true);
                        }
                    }
                    else
                    {
                        ClientScript.RegisterStartupScript(Page.GetType(), "js_NextCustomer", "customerChartIsUnsigned();", true);
                    }

                    //if (eventCustomerResult != null && IsNewResultFlow)
                    //{
                    //    var notes = communicationRepository.GetNotesForReversal(eventCustomerResult.Id);
                    //    if (!string.IsNullOrWhiteSpace(notes))
                    //    {
                    //        revertBackNotes.Visible = true;
                    //        ReasonToRevert.InnerText = notes;
                    //    }
                    //}
                }

                if (!goBackToResultEnteryPage)
                {
                    if (eventCustomerResult != null)
                    {
                        //LogAudit(ModelType.View, eventCustomerResult);
                        var priorityInQueue =
                            IoC.Resolve <IPriorityInQueueRepository>().GetByEventCustomerResultId(eventCustomerResult.Id);
                        if (priorityInQueue != null && priorityInQueue.InQueuePriority > 0)
                        {
                            if (!CurrentOrgUser.CheckRole((long)Roles.Technician))
                            {
                                PriorityInQueueCheckbox.Checked = true;
                            }

                            if (priorityInQueue.NoteId == null)
                            {
                                return;
                            }
                            var noteText = IoC.Resolve <INotesRepository>().Get(priorityInQueue.NoteId.Value);
                            if (noteText != null && !string.IsNullOrEmpty(noteText.Text))
                            {
                                PriorityInQueueText.InnerText = noteText.Text;
                                PriorityInQueueReasonDisplayDiv.Style.Add(HtmlTextWriterStyle.Display, "block");
                            }
                            else if (!CurrentOrgUser.CheckRole((long)Roles.Technician))
                            {
                                PriorityInQueueReasonDisplayDiv.Style.Add(HtmlTextWriterStyle.Display, "block");
                            }
                        }
                        else
                        {
                            PriorityInQueueCheckbox.Checked = false;
                            PriorityInQueueReasonDisplayDiv.Style.Add(HtmlTextWriterStyle.Display, "none");
                        }
                    }
                    else
                    {
                        PriorityInQueueCheckbox.Checked = false;
                        PriorityInQueueReasonDisplayDiv.Style.Add(HtmlTextWriterStyle.Display, "none");
                    }
                }
            }
        }
 private bool IsCustomerNoShowOrLeftWithoutScreening(EventCustomer eventCustomer)
 {
     return(eventCustomer.NoShow || eventCustomer.LeftWithoutScreeningReasonId.HasValue);
 }
        public MemberStatusListModel Create(IEnumerable <Customer> customers, IEnumerable <EventCustomer> eventCustomers, EventVolumeListModel eventListModel, IEnumerable <Order> orders,
                                            IEnumerable <OrderedPair <long, string> > packages, IEnumerable <OrderedPair <long, string> > tests, IEnumerable <Core.CallCenter.Domain.Call> calls,
                                            IEnumerable <CorporateCustomerCustomTag> customTags, IEnumerable <PrimaryCarePhysician> primaryCarePhysicians, IEnumerable <Notes> doNotContactReasonNotes,
                                            IEnumerable <OrderedPair <long, string> > customersPreApprovedTests, IEnumerable <OrderedPair <long, string> > customersPreApprovedPackages,
                                            IEnumerable <DirectMail> directMails, IEnumerable <Appointment> appointments, IEnumerable <ShippingDetail> shipingDetails,
                                            IEnumerable <OrderedPair <long, long> > shippingDetailIdEventCustomerIdPairs, IEnumerable <ShippingOption> shippingOptions, ShippingOption pcpShippingOptions,
                                            IEnumerable <CorporateAccount> corporateAccounts, IEnumerable <AccountAdditionalFields> accountAdditionalFields, DateTime fromDate, DateTime toDate,
                                            IEnumerable <ProspectCustomer> prospectCustomers, IEnumerable <CustomerPredictedZip> customerPredictedZips, IEnumerable <CustomerEligibility> customerEligibilityList,
                                            IEnumerable <CustomerTargeted> customerTargetedList, IEnumerable <Core.Medical.Domain.ActivityType> activityTypes)
        {
            var model = new MemberStatusListModel();
            var memberStatusModels = new List <MemberStatusModel>();

            foreach (var customer in customers)
            {
                var customerCalls        = calls.Where(c => c.CalledCustomerId == customer.CustomerId);
                var callDetail           = customerCalls.OrderByDescending(x => x.CallDateTime).FirstOrDefault();
                var customerDirectMails  = directMails.Where(x => x.CustomerId == customer.CustomerId);
                var customerPredictedZip = customerPredictedZips != null?customerPredictedZips.Where(x => x.CustomerId == customer.CustomerId) : null;

                var customerEligibility = customerEligibilityList.FirstOrDefault(x => x.CustomerId == customer.CustomerId);
                var customerTargeted    = customerTargetedList.FirstOrDefault(x => x.CustomerId == customer.CustomerId);

                var isEligible = "N/A";

                var corporateCustomTags = "N/A";

                if (customerEligibility != null && customerEligibility.IsEligible.HasValue)
                {
                    isEligible = customerEligibility.IsEligible.Value ? "Yes" : "No";
                }

                var prospectCustomer = prospectCustomers.FirstOrDefault(p => p.CustomerId == customer.CustomerId);

                if (customTags != null && customTags.Any())
                {
                    var customerCustomTags = customTags.Where(ct => ct.CustomerId == customer.CustomerId).Select(ct => ct.Tag).ToArray();

                    if (customerCustomTags.Any())
                    {
                        corporateCustomTags = string.Join(", ", customerCustomTags);
                    }
                }

                var pcp = primaryCarePhysicians.Where(p => p.CustomerId == customer.CustomerId).Select(p => p).FirstOrDefault();

                var customerPreApprovedTest = "N/A";

                if (customersPreApprovedTests != null && customersPreApprovedTests.Any())
                {
                    var customerTests = customersPreApprovedTests.Where(x => x.FirstValue == customer.CustomerId);
                    if (customerTests != null && customerTests.Any())
                    {
                        var preApproveTestTemp = customerTests.Select(x => string.Format("\"{0}\"", x.SecondValue)).ToArray();

                        customerPreApprovedTest = string.Join(", ", preApproveTestTemp);
                    }
                }

                var customerPreApprovedPakages = "N/A";

                if (customersPreApprovedPackages != null && customersPreApprovedPackages.Any())
                {
                    var customerPackages = customersPreApprovedPackages.Where(x => x.FirstValue == customer.CustomerId);
                    if (customerPackages != null && customerPackages.Any())
                    {
                        var preApproveTestTemp = customerPackages.Select(x => string.Format("\"{0}\"", x.SecondValue)).ToArray();

                        customerPreApprovedPakages = string.Join(", ", preApproveTestTemp);
                    }
                }
                var displayFielAandAdditionalFieldsPairs = new List <OrderedPair <string, string> >();
                if (corporateAccounts != null && corporateAccounts.Any() && !string.IsNullOrEmpty(customer.Tag) && accountAdditionalFields != null && accountAdditionalFields.Any())
                {
                    var corporateAccount = corporateAccounts.FirstOrDefault(a => a.Tag == customer.Tag);

                    if (corporateAccount != null)
                    {
                        var additionalFields = accountAdditionalFields.Where(x => x.AccountId == corporateAccount.Id).ToArray();

                        foreach (var additionalField in additionalFields)
                        {
                            displayFielAandAdditionalFieldsPairs.Add(new OrderedPair <string, string>(additionalField.DisplayName, GetCustomersAdditionFiledValue(customer, (AdditionalFieldsEnum)additionalField.AdditionalFieldId)));
                        }
                    }
                }

                string activityType = "N/A";
                if (customer.ActivityId.HasValue && !activityTypes.IsNullOrEmpty())
                {
                    activityType = activityTypes.Single(x => x.Id == customer.ActivityId.Value).Name;
                }

                var isTargetedMember = "N/A";
                if (customerTargeted != null && customerTargeted.IsTargated.HasValue)
                {
                    isTargetedMember = customerTargeted.IsTargated.Value ? "Yes" : "No";
                }

                var customerExportModel = new MemberStatusModel
                {
                    CustomerId                                                                                                                                         = customer.CustomerId,
                    FirstName                                                                                                                                          = customer.Name.FirstName,
                    MiddleName                                                                                                                                         = customer.Name.MiddleName,
                    LastName                                                                                                                                           = customer.Name.LastName,
                    PhoneHome                                                                                                                                          = customer.HomePhoneNumber != null?customer.HomePhoneNumber.ToString() : string.Empty,
                                                                                 Gender                                                                                = customer.Gender.ToString(),
                                                                                 DateofBirth                                                                           = customer.DateOfBirth,
                                                                                 Address1                                                                              = customer.Address.StreetAddressLine1,
                                                                                 Address2                                                                              = customer.Address.StreetAddressLine2,
                                                                                 City                                                                                  = customer.Address.City,
                                                                                 State                                                                                 = customer.Address.State,
                                                                                 Zip                                                                                   = customer.Address.ZipCode.Zip,
                                                                                 Email                                                                                 = customer.Email != null?customer.Email.ToString() : string.Empty,
                                                                                                                              Tag                                      = string.IsNullOrEmpty(customer.Tag) ? "N/A" : customer.Tag,
                                                                                                                              MemberId                                 = string.IsNullOrEmpty(customer.InsuranceId) ? "N/A" : customer.InsuranceId,
                                                                                                                              IsEligible                               = isEligible,
                                                                                                                              IsTargetedMember                         = isTargetedMember,
                                                                                                                              CustomTag                                = corporateCustomTags,
                                                                                                                              MedicarePlanName                         = string.IsNullOrEmpty(customer.MedicareAdvantagePlanName) ? "N/A" : customer.MedicareAdvantagePlanName,
                                                                                                                              Hicn                                     = string.IsNullOrEmpty(customer.Hicn) ? "N/A" : customer.Hicn,
                                                                                                                              Mbi                                      = string.IsNullOrEmpty(customer.Mbi) ? "N/A" : customer.Mbi,
                                                                                                                              Market                                   = string.IsNullOrEmpty(customer.Market) ? "N/A" : customer.Market,
                                                                                                                              GroupName                                = string.IsNullOrEmpty(customer.GroupName) ? "N/A" : customer.GroupName,
                                                                                                                              PreApprovedTest                          = customerPreApprovedTest,
                                                                                                                              PreApprovedPackage                       = customerPreApprovedPakages,
                                                                                                                              AdditionalFields                         = displayFielAandAdditionalFieldsPairs,
                                                                                                                              Activity                                 = activityType,
                                                                                                                              PredictedZip                             = customerPredictedZip != null?string.Join(", ", customerPredictedZip.Select(x => x.PredictedZip)) : "N/A",
                                                                                                                                                               AcesId  = customer.AcesId,
                                                                                                                                                               Product = customer.ProductTypeId.HasValue && customer.ProductTypeId.Value > 0 ? ((ProductType)customer.ProductTypeId.Value).GetDescription() : "N/A"
                };

                GetRestrictionData(customerExportModel, customer, fromDate, toDate, doNotContactReasonNotes);

                if (pcp != null)
                {
                    customerExportModel.PcpFirstName = pcp.Name.FirstName;
                    customerExportModel.PcpLastName  = pcp.Name.LastName;
                    customerExportModel.PcpNpi       = string.IsNullOrEmpty(pcp.Npi) ? "N/A" : pcp.Npi;

                    if (pcp.Address != null && !pcp.Address.IsEmpty())
                    {
                        customerExportModel.PcpAddress1 = pcp.Address.StreetAddressLine1;
                        customerExportModel.PcpAddress2 = pcp.Address.StreetAddressLine2;
                        customerExportModel.PcpCity     = pcp.Address.City;
                        customerExportModel.PcpState    = pcp.Address.State;
                        customerExportModel.PcpZip      = pcp.Address.ZipCode.Zip;
                    }
                    customerExportModel.PcpFax = pcp.Fax != null?pcp.Fax.ToString() : string.Empty;

                    customerExportModel.PcpPhone = pcp.Primary != null?pcp.Primary.ToString() : string.Empty;
                }

                EventCustomer    eventCustomer     = null;
                EventVolumeModel eventModel        = null;
                EventVolumeModel lastScreeningDate = null;

                var scheduledStatus = ScheduledStatus.NotScheduled;
                if (eventCustomers != null && eventCustomers.Any())
                {
                    //var startDate = new DateTime(DateTime.Today.Year, 1, 1);
                    //var endDate = new DateTime(DateTime.Today.Year, 12, 31);

                    eventCustomer = (from ec in eventCustomers
                                     join e in eventListModel.Collection on ec.EventId equals e.EventCode
                                     where ec.CustomerId == customer.CustomerId
                                     orderby e.EventDate descending
                                     select ec).FirstOrDefault();

                    var appointmentIds = eventCustomers.Where(ec => ec.AppointmentId.HasValue && ec.CustomerId == customer.CustomerId).Select(x => x.AppointmentId.Value).ToArray();


                    var hasBeenScheduledForCurrentyear = (from ec in eventCustomers
                                                          join e in eventListModel.Collection on ec.EventId equals e.EventCode
                                                          where ec.CustomerId == customer.CustomerId
                                                          select ec).Any();

                    lastScreeningDate = (from a in appointments
                                         join e in eventListModel.Collection on a.EventId equals e.EventCode
                                         join ec in eventCustomers on e.EventCode equals ec.EventId
                                         where a.CheckInTime != null && a.CheckOutTime != null && appointmentIds.Contains(a.Id) && !ec.NoShow && !ec.LeftWithoutScreeningReasonId.HasValue
                                         orderby e.EventDate descending
                                         select e).FirstOrDefault();

                    if (hasBeenScheduledForCurrentyear)
                    {
                        scheduledStatus = ScheduledStatus.Scheduled;
                    }

                    if (eventCustomer != null)
                    {
                        if (shipingDetails != null && shipingDetails.Any())
                        {
                            var shipingIds = shippingDetailIdEventCustomerIdPairs.Where(m => m.SecondValue == eventCustomer.Id).Select(m => m.FirstValue);
                            if (shipingIds != null && shipingIds.Any())
                            {
                                var shipingDetail = shipingDetails.Where(m => shipingIds.Contains(m.Id) && m.Status == ShipmentStatus.Shipped);
                                if (shipingDetail != null && shipingDetail.Any())
                                {
                                    var customerResultShipDetail = (from s in shipingDetail
                                                                    join so in shippingOptions on s.ShippingOption.Id equals so.Id
                                                                    orderby s.ShipmentDate descending
                                                                    select s).FirstOrDefault();

                                    var pcpResultShipDetail = (from s in shipingDetail
                                                               where s.ShippingOption.Id == pcpShippingOptions.Id
                                                               select s).FirstOrDefault();
                                    if (pcpResultShipDetail != null)
                                    {
                                        customerExportModel.PCPResultShipedDate = pcpResultShipDetail.ShipmentDate;
                                    }

                                    if (customerResultShipDetail != null)
                                    {
                                        customerExportModel.CustomerResultShipedDate = customerResultShipDetail.ShipmentDate;
                                    }
                                }
                            }
                        }


                        var order = orders.FirstOrDefault(o => o.EventId == eventCustomer.EventId && o.CustomerId == eventCustomer.CustomerId);
                        if (order != null)
                        {
                            var package = packages.FirstOrDefault(p => p.FirstValue == order.Id);

                            var test = tests.Where(p => p.FirstValue == order.Id).ToList();

                            var productPurchased = string.Empty;

                            if (package != null && !test.IsNullOrEmpty())
                            {
                                productPurchased = package.SecondValue + " + " + string.Join(" + ", test.Select(t => t.SecondValue).ToArray());
                            }
                            else if (!test.IsNullOrEmpty())
                            {
                                productPurchased = string.Join(" + ", test.Select(t => t.SecondValue).ToArray());
                            }
                            else if (package != null)
                            {
                                productPurchased = package.SecondValue;
                            }

                            customerExportModel.Package = productPurchased;
                        }

                        eventModel = eventListModel.Collection.FirstOrDefault(e => e.EventCode == eventCustomer.EventId);
                        if (eventModel != null)
                        {
                            customerExportModel.EventId          = eventModel.EventCode;
                            customerExportModel.EventName        = eventModel.Location;
                            customerExportModel.EventDate        = eventModel.EventDate;
                            customerExportModel.EventAddress1    = eventModel.StreetAddressLine1;
                            customerExportModel.EventAddress2    = eventModel.StreetAddressLine2;
                            customerExportModel.EventCity        = eventModel.City;
                            customerExportModel.EventState       = eventModel.State;
                            customerExportModel.EventZip         = eventModel.Zip;
                            customerExportModel.Pod              = eventModel.Pod;
                            customerExportModel.CompletionStatus = GetCompletionStatus(eventCustomer, eventModel.EventDate, lastScreeningDate);
                            customerExportModel.RegistrationDate = eventCustomer.DataRecorderMetaData.DateCreated;
                        }
                    }
                }

                customerExportModel.CurrentStatus   = GetCurrentStatus(customer, customerDirectMails, eventCustomer, eventModel, lastScreeningDate, prospectCustomer, fromDate, toDate, customerEligibility);
                customerExportModel.ScheduledStatus = scheduledStatus;

                if (callDetail != null)
                {
                    int?dispositionId = null;
                    if (!string.IsNullOrEmpty(callDetail.Disposition))
                    {
                        ProspectCustomerTag tag;
                        Enum.TryParse(callDetail.Disposition, true, out tag);

                        dispositionId = (int)tag;
                    }

                    customerExportModel.CurrentOutboundCallOutcome = ((CallStatus)callDetail.Status).GetDescription();

                    if (dispositionId.HasValue)
                    {
                        customerExportModel.CurrentOutboundCallDisposition = ((ProspectCustomerTag)dispositionId.Value).GetDescription();
                    }

                    customerExportModel.CurrentOutboundCallCategory = GetCallCategoryByStatus(callDetail.Status, dispositionId);
                }

                SetReportModelOutReachType(customerExportModel, customerCalls, customerDirectMails, customer.CustomerId);

                memberStatusModels.Add(customerExportModel);
            }

            model.Collection = memberStatusModels;
            return(model);
        }
        public override async Task GetAllWorksAsync()
        {
            List <EventCustomer> eventCustomersList = new List <EventCustomer>();
            EventCustomer        eventCustomerSaved = null;
            Customer             customerSaved      = null;
            Event EventSaved = null;

            var options = new DbContextOptionsBuilder <Project15Context>()
                          .UseInMemoryDatabase("db_eventcustomer_test_getall").Options;

            using (var db = new Project15Context(options));

            using (var db = new Project15Context(options))
            {
                var customerRepo = new CustomerRepository(db);
                var eventRepo    = new EventRepository(db);
                var repo         = new EventCustomerRepository(db);

                //Create customer
                Customer customer = new Customer {
                    Name = "Axel", Address1 = "111 Address"
                };
                customer = await customerRepo.CreateAsync(customer);

                await customerRepo.SaveChangesAsync();

                Event Event = new Event {
                    Name = "Jazz Fest", Type = "Music", Cost = 40
                };
                Event = await eventRepo.CreateAsync(Event);

                await eventRepo.SaveChangesAsync();

                for (int i = 0; i < 5; i++)
                {
                    EventCustomer eventCustomer = new EventCustomer
                    {
                        CustomerId = customer.Id,
                        EventId    = Event.Id,
                    };
                    eventCustomerSaved = await repo.CreateAsync(eventCustomer);

                    await repo.SaveChangesAsync();

                    eventCustomersList.Add(eventCustomerSaved);
                }

                EventSaved    = Event;
                customerSaved = customer;
            }
            using (var db = new Project15Context(options))
            {
                var repo = new EventCustomerRepository(db);
                List <EventCustomer> list = (List <EventCustomer>) await repo.GetAllAsync();

                Assert.Equal(eventCustomersList.Count, list.Count);

                for (int i = 0; i < 5; i++)
                {
                    Assert.Equal(eventCustomersList[i].CustomerId, list[i].CustomerId);
                    Assert.Equal(eventCustomersList[i].EventId, list[i].EventId);
                    Assert.NotEqual(0, list[i].Id);
                }
            }
        }
        private string GetCurrentStatus(Customer customer, IEnumerable <DirectMail> directMails, EventCustomer eventCustomer,
                                        EventVolumeModel eventModel, EventVolumeModel lastScreeningEvent, ProspectCustomer prospectCustomer, DateTime fromDate, DateTime toDate, CustomerEligibility customerEligibility)
        {
            if (eventCustomer != null && eventCustomer.NoShow)
            {
                return(CurrentStatus.NoShow);
            }

            if (eventModel != null && eventModel.EventDate.Date >= DateTime.Today && (eventCustomer != null && eventCustomer.AppointmentId.HasValue))
            {
                return(CurrentStatus.ScheduledFutureAppointment);
            }

            //if (eventModel != null && eventModel.EventDate.Date == DateTime.Today && (eventCustomer != null && eventCustomer.AppointmentId.HasValue))
            //{
            //    return CompletionStatus.ScheduledForToday;
            //}

            if (lastScreeningEvent != null)
            {
                return(CurrentStatus.ScheduledTestingComplete);
            }

            if (eventCustomer != null && !eventCustomer.AppointmentId.HasValue)
            {
                return(CurrentStatus.ScheduledCancelled);
            }

            if (customer.IsIncorrectPhoneNumber)
            {
                return(CurrentStatus.InvalidData);
            }

            if (CheckCustomerUnableToSchedule(prospectCustomer, fromDate, toDate, customerEligibility))
            {
                return(CurrentStatus.UnableToSchedule);
            }

            if (CheckCustomerRefusal(prospectCustomer, fromDate, toDate) || IsCustomerMarkedDonotContact(customer, fromDate, toDate))
            {
                return(CurrentStatus.Refusal);
            }

            if (directMails != null && directMails.Count() > 4)
            {
                var customerDirectMail = directMails.OrderByDescending(dm => dm.MailDate).FirstOrDefault();
                if (customerDirectMail.MailDate.AddDays(28) < DateTime.Today)
                {
                    return(CurrentStatus.Exhausted);
                }
            }

            return(CurrentStatus.InProgress);
        }
        public override async Task UpdateWorksAsync()
        {
            int id      = 0;
            int wrongId = 10;

            EventCustomer eventCustomerSaved = null;
            Event         EventSaved         = null;
            Customer      customerSaved      = null;

            // arrange (use the context directly - we assume that works)
            var options = new DbContextOptionsBuilder <Project15Context>()
                          .UseInMemoryDatabase("db_eventcustomer_test_updatebyid").Options;

            // act (for act, only use the repo, to test it)
            using (var db = new Project15Context(options));

            using (var db = new Project15Context(options))
            {
                var customerRepo = new CustomerRepository(db);
                var eventRepo    = new EventRepository(db);
                var repo         = new EventCustomerRepository(db);

                Customer customer = new Customer {
                    Name = "Axel", Address1 = "111 Address"
                };
                customer = await customerRepo.CreateAsync(customer);

                await customerRepo.SaveChangesAsync();

                Event Event = new Event {
                    Name = "Jazz Fest", Type = "Music", Cost = 40
                };
                Event = await eventRepo.CreateAsync(Event);

                await eventRepo.SaveChangesAsync();

                EventCustomer eventCustomer = new EventCustomer
                {
                    CustomerId = customer.Id,
                    EventId    = Event.Id,
                    Paid       = true
                };

                eventCustomerSaved = await repo.CreateAsync(eventCustomer);

                await repo.SaveChangesAsync();

                EventSaved    = Event;
                customerSaved = customer;

                id = eventCustomerSaved.Id;
            }
            using (var db = new Project15Context(options))
            {
                var           repo          = new EventCustomerRepository(db);
                EventCustomer eventCustomer = await repo.GetByIdAsync(id);

                Assert.NotEqual(0, eventCustomer.Id); // should get some generated ID
                Assert.Equal(eventCustomerSaved.Id, eventCustomer.Id);
                Assert.Equal(EventSaved.Id, eventCustomer.EventId);

                eventCustomer.Paid = false;

                await repo.UpdateAsync(eventCustomer, id);

                await repo.SaveChangesAsync();

                eventCustomer = await repo.GetByIdAsync(eventCustomer.Id);

                Assert.NotEqual(wrongId, eventCustomer.Id); // should get some generated ID
                Assert.False(eventCustomer.Paid);
            }
        }
        public OrderDetail CreateNewOrderDetail(IOrderable orderable, int quantity,
                                                long forOrganizationRoleUserId, long dataRecorderCreatorId, SourceCode sourceCode,
                                                EventCustomer eventCustomer, ShippingDetail shippingDetail, long?sourceId = null)
        {
            if (orderable == null)
            {
                throw new ArgumentNullException("orderable");
            }
            if (orderable.Id == 0)
            {
                throw new InvalidOperationException("itemToOrder must already exist in the database.");
            }
            if (quantity < 1)
            {
                throw new ArgumentOutOfRangeException("quantity", "The quantity must be at least 1.");
            }
            DataRecorderMetaData dataRecorderMetaData = _dataRecorderMetaDataFactory.
                                                        CreateDataRecorderMetaData(dataRecorderCreatorId);
            OrderItemStatus orderItemStatus = _orderItemStatusFactory.CreateOrderItemStatus(orderable.
                                                                                            OrderItemType, (int)OrderStatusState.Initial);

            decimal price = orderable.Price;

            // TODO: Test source code logic.
            SourceCodeOrderDetail sourceCodeOrderDetail = null;

            if (sourceCode != null)
            {
                sourceCodeOrderDetail = new SourceCodeOrderDetail
                {
                    Amount       = sourceCode.CouponValue,
                    SourceCodeId = sourceCode.Id,
                    IsActive     = true,
                    OrganizationRoleUserCreatorId =
                        dataRecorderMetaData.DataRecorderCreator.Id
                };
            }

            EventCustomerOrderDetail eventCustomerOrderDetail = null;

            if (eventCustomer != null)
            {
                eventCustomerOrderDetail = new EventCustomerOrderDetail
                {
                    EventCustomerId = eventCustomer.Id,
                    IsActive        = true
                };
            }

            ShippingDetailOrderDetail shippingDetailOrderDetail = null;

            if (shippingDetail != null)
            {
                shippingDetailOrderDetail = new ShippingDetailOrderDetail
                {
                    ShippingDetailId = shippingDetail.Id,
                    IsActive         = true
                };
            }

            return(new OrderDetail
            {
                Description = orderable.Description,
                Price = price,
                Quantity = quantity,
                DetailType = orderable.OrderItemType,
                DataRecorderMetaData = dataRecorderMetaData,
                ForOrganizationRoleUserId = forOrganizationRoleUserId,
                OrderItemStatus = orderItemStatus,
                SourceCodeOrderDetail = sourceCodeOrderDetail,
                EventCustomerOrderDetail = eventCustomerOrderDetail,
                ShippingDetailOrderDetails = new List <ShippingDetailOrderDetail> {
                    shippingDetailOrderDetail
                },
                SourceId = sourceId
            });
        }
        public override async Task DeleteWorksAsync()
        {
            int id = 0;

            Customer      customerSaved      = null;
            Event         EventSaved         = null;
            EventCustomer eventCustomerSaved = null;

            // arrange (use the context directly - we assume that works)
            var options = new DbContextOptionsBuilder <Project15Context>()
                          .UseInMemoryDatabase("db_eventcustomer_test_delete_2").Options;

            using (var db = new Project15Context(options));

            // act (for act, only use the repo, to test it)
            using (var db = new Project15Context(options))
            {
                var customerRepo = new CustomerRepository(db);
                var eventRepo    = new EventRepository(db);
                var repo         = new EventCustomerRepository(db);

                //Create customer
                Customer customer = new Customer {
                    Name = "Axel", Address1 = "111 Address"
                };
                customer = await customerRepo.CreateAsync(customer);

                await customerRepo.SaveChangesAsync();

                Event Event = new Event {
                    Name = "Jazz Fest", Type = "Music", Cost = 40
                };
                Event = await eventRepo.CreateAsync(Event);

                await eventRepo.SaveChangesAsync();

                EventCustomer eventCustomer = new EventCustomer
                {
                    CustomerId = customer.Id,
                    EventId    = Event.Id,
                    Paid       = true
                };

                eventCustomerSaved = await repo.CreateAsync(eventCustomer);

                await repo.SaveChangesAsync();

                EventSaved    = Event;
                customerSaved = customer;

                id = eventCustomerSaved.Id;
            }

            // assert (for assert, once again use the context directly for verify.)
            using (var db = new Project15Context(options))
            {
                var           repo          = new EventCustomerRepository(db);
                EventCustomer eventCustomer = await repo.GetByIdAsync(id);

                Assert.NotEqual(0, eventCustomer.Id);
                Assert.Equal(eventCustomerSaved.Id, eventCustomer.Id);
                Assert.True(eventCustomer.Paid);

                await repo.DeleteAsync(id);

                await repo.SaveChangesAsync();

                eventCustomer = await repo.GetByIdAsync(id);

                Assert.Null(eventCustomer);
            }
        }
        public EventCustomerSummaryModel Create(EventCustomer eventCustomer, Order order, EventBasicInfoViewModel eventInfo, Customer customer, DateTime?apptTime, IEnumerable <OrderedPair <long, string> > orderPackageNamePair,
                                                IEnumerable <OrderedPair <long, string> > orderTestNamePair, IEnumerable <OrderedPair <long, string> > orderitemProductPair, IEnumerable <ShippingDetail> shippingDetails, IEnumerable <SourceCode> sourceCodes, IEnumerable <ChargeCard> cards)
        {
            string package = "";

            if (orderPackageNamePair != null && orderPackageNamePair.Count() > 0)
            {
                package = orderPackageNamePair.FirstOrDefault().SecondValue;
            }
            if (orderTestNamePair != null && orderTestNamePair.Count() > 0)
            {
                var tests = string.Join(",", orderTestNamePair.Select(ot => ot.SecondValue));
                package = !string.IsNullOrEmpty(package) ? package + ", " + tests : tests;
            }

            var getCardDetailstoDisplay = new Func <long, string>(cardId =>
            {
                return(cards.Where(c => c.Id == cardId).Select(
                           c =>
                           c.TypeId.ToString() + " " +
                           c.Number.Substring(c.Number.Length - 4, 4)).FirstOrDefault());
            });

            var payments = order.PaymentsApplied != null
                               ? order.PaymentsApplied.Select(
                pa => new OrderedPair <string, decimal>(pa.PaymentType == PaymentType.CreditCard ? getCardDetailstoDisplay(((ChargeCardPayment)pa).ChargeCardId) : pa.PaymentType.ToString(), pa.Amount))
                               : null;

            var sourceCodeOrderDetail =
                order.OrderDetails.Where(
                    od =>
                    od.SourceCodeOrderDetail != null &&
                    od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess).Select(od => od.SourceCodeOrderDetail).FirstOrDefault();

            var sourceCode = sourceCodes != null && sourceCodes.Count() > 0
                                 ? sourceCodes.FirstOrDefault() : null;

            return(new EventCustomerSummaryModel()
            {
                AdditionalProduct =
                    orderitemProductPair != null
                                   ? String.Join(", ", orderitemProductPair.Select(oip => oip.SecondValue))
                                   : "",
                Address = eventInfo.HostAddress,
                AmountDue = order.DiscountedTotal - order.TotalAmountPaid,
                AmountPaid = order.TotalAmountPaid,
                Cost = order.UndiscountedTotal,
                AppointmentTime = apptTime,
                CustomerId = eventCustomer.CustomerId,
                CustomerName = customer.NameAsString,
                HomePhoneNumber = customer.HomePhoneNumber != null?customer.HomePhoneNumber.ToString() : "",
                                      OfficePhoneNumber = customer.OfficePhoneNumber != null?customer.OfficePhoneNumber.ToString() : "",
                                                              CellPhoneNumber = customer.MobilePhoneNumber != null?customer.MobilePhoneNumber.ToString() : "",
                                                                                    Email = customer.Email != null?customer.Email.ToString() : "",
                                                                                                EventCustomerId = eventCustomer.Id,
                                                                                                EventDate = eventInfo.EventDate,
                                                                                                EventId = eventCustomer.EventId,
                                                                                                Host = eventInfo.HostName,
                                                                                                OrderId = order.Id,
                                                                                                Package = package,
                                                                                                Payments = payments,
                                                                                                ShippingOptions =
                                                                                                    shippingDetails != null
                                   ? shippingDetails.Select(
                                                                                                        sd => new OrderedPair <string, decimal>(sd.ShippingOption.Name, sd.ActualPrice))
                                   : null,
                                                                                                SourceCode = sourceCode != null ? sourceCode.CouponCode : "",
                                                                                                SourceCodeAmount = sourceCodeOrderDetail != null ? sourceCodeOrderDetail.Amount : 0,
                                                                                                EventStatus = eventInfo.Status
            });
        }