public IEnumerable <BloodworksLabelViewModel> GetBloodworksLabel(long eventId) { var eventCustomers = _eventCustomerRepository.GetbyEventId(eventId); eventCustomers = eventCustomers.Where(ec => ec.AppointmentId.HasValue).Select(ec => ec); if (eventCustomers.IsNullOrEmpty()) { return(null); } var orderIdEventCustomerIdPairs = _orderRepository.GetOrderEventCustomerIdPairforEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray()).ToArray(); var orderIdEventTestIdPairs = _eventTestRepository.GetEventTestIdForOrders(orderIdEventCustomerIdPairs.Select(pair => pair.FirstValue).ToArray()).ToArray(); var eventTests = _eventTestRepository.GetbyIds(orderIdEventTestIdPairs.Select(pair => pair.SecondValue).ToArray()); var eventTestIds = eventTests.Where(et => et.TestId == (long)TestType.Liver || et.TestId == (long)TestType.Lipid).Select(et => et.Id).ToArray(); var eventCustomerIdsFromTest = (from oet in orderIdEventTestIdPairs join oec in orderIdEventCustomerIdPairs on oet.FirstValue equals oec.FirstValue where eventTestIds.Contains(oet.SecondValue) select oec.SecondValue).ToArray(); var orderIdEventPackageIdPairs = _eventPackageRepository.GetEventPackageIdsForOrder(orderIdEventCustomerIdPairs.Select(pair => pair.FirstValue).ToArray()); var eventPackages = _eventPackageRepository.GetByIds(orderIdEventPackageIdPairs.Select(pair => pair.SecondValue).ToArray()).ToArray(); var eventPackageIds = eventPackages.Where(ep => ep.Tests.Where(t => t.TestId == (long)TestType.Liver || t.TestId == (long)TestType.Lipid || t.TestId == (long)TestType.Crp || t.TestId == (long)TestType.Thyroid || t.TestId == (long)TestType.Psa || t.TestId == (long)TestType.Testosterone).Count() > 0).Select(ep => ep.Id).ToArray(); var eventCustomerIdsFromPackage = (from oep in orderIdEventPackageIdPairs join oec in orderIdEventCustomerIdPairs on oep.FirstValue equals oec.FirstValue where eventPackageIds.Contains(oep.SecondValue) select oec.SecondValue).ToArray(); eventCustomers = eventCustomers.Where( ec => eventCustomerIdsFromTest.Contains(ec.Id) || eventCustomerIdsFromPackage.Contains(ec.Id)). Select(ec => ec).ToArray(); var customers = _customerRepository.GetCustomers(eventCustomers.Select(ec => ec.CustomerId).ToArray()); var eventData = _eventRepository.GetById(eventId); return(_bloodworksLabelViewModelFactory.Create(customers, eventData)); }
public EventScreeningAuthorizationEditModel GetCustomersForAuthorization(long physicianId) { var eventData = _eventRepository.GetEventForAuthorization(physicianId); if (eventData == null) { return(null); } var host = _hostRepository.GetHostForEvent(eventData.Id); var eventTests = _eventTestRepository.GetTestsForEvent(eventData.Id); var eventPackages = _eventPackageRepository.GetPackagesForEvent(eventData.Id); var eventCustomers = _eventCustomerRepository.GetEventCustomersForAuthorization(eventData.Id); if (eventCustomers == null || eventCustomers.Count() < 1) { return(null); } var eventCustomerIds = eventCustomers.Select(ec => ec.Id).ToArray(); var assignments = _physicianAssignmentService.GetPhysicianAssignmentsByEventcustomerIds(eventCustomerIds); if (!assignments.Any(a => a.Primary.PhysicianId == physicianId)) { return(null); } eventCustomerIds = assignments.Where(a => a.Primary.PhysicianId == physicianId).Select(a => a.EventCustomerId).ToArray(); eventCustomers = eventCustomers.Where(ec => eventCustomerIds.Contains(ec.Id)).ToArray(); var orderIdEventCustomerIdPairs = _orderRepository.GetOrderEventCustomerIdPairforEventCustomerIds(eventCustomerIds); var orderIds = orderIdEventCustomerIdPairs.Select(p => p.FirstValue).ToArray(); var orderIdTestIdPairs = _eventTestRepository.GetEventTestIdForOrders(orderIds); var orderIdpackageIdPairs = _eventPackageRepository.GetEventPackageIdsForOrder(orderIds); var ecIdTestIdPairs = (from ec in orderIdEventCustomerIdPairs join ot in orderIdTestIdPairs on ec.FirstValue equals ot.FirstValue select new OrderedPair <long, long>(ec.SecondValue, ot.SecondValue)).ToArray(); var ecIdpackageIdPairs = (from ec in orderIdEventCustomerIdPairs join op in orderIdpackageIdPairs on ec.FirstValue equals op.FirstValue select new OrderedPair <long, long>(ec.SecondValue, op.SecondValue)).ToArray(); var customers = _customerRepository.GetCustomers(eventCustomers.Select(ec => ec.CustomerId).ToArray()); return(_eventScreeningAuthorizationEditModelFactory.Create(eventData, eventTests, eventCustomers, customers, eventPackages, ecIdpackageIdPairs, ecIdTestIdPairs, host)); }