public IEnumerable <TestUnabletoScreenViewModel> GetUnabletoScreenView(IEnumerable <long> eventCustomerResultIds)
        {
            using (var adapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(adapter);
                var entities     = (from cest in linqMetaData.CustomerEventScreeningTests
                                    join ceus in linqMetaData.CustomerEventUnableScreenReason on cest.CustomerEventScreeningTestId equals ceus.CustomerEventScreeningTestId
                                    join cets in linqMetaData.CustomerEventTestState on cest.CustomerEventScreeningTestId equals cets.CustomerEventScreeningTestId
                                    where eventCustomerResultIds.Contains(cest.EventCustomerResultId)
                                    select new { cest.EventCustomerResultId, cest.TestId, cets.TechnicianNotes, cets.ConductedByOrgRoleUserId, ceus.TestUnableScreenReasonId }).ToArray();

                var orgRoleUserIds = entities.Where(e => e.ConductedByOrgRoleUserId.HasValue).Select(e => e.ConductedByOrgRoleUserId.Value).ToArray();

                var userNameIdpairs       = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);
                var unableToScreenReasons = (from tus in linqMetaData.TestUnableScreenReason
                                             join l in linqMetaData.Lookup on tus.UnableScreenReasonId equals l.LookupId
                                             select new { tus.TestUnableScreenReasonId, l.DisplayName }).ToArray();

                return(entities.Select(e => new TestUnabletoScreenViewModel
                {
                    EventCustomerResultId = e.EventCustomerResultId,
                    TechnicianNotes = e.TechnicianNotes,
                    TestId = e.TestId,
                    ConductedBy = e.ConductedByOrgRoleUserId.HasValue ? userNameIdpairs.Where(p => p.FirstValue == e.ConductedByOrgRoleUserId.Value).Select(p => p.SecondValue).Single() : "",
                    Reason = e.TestUnableScreenReasonId.HasValue ? unableToScreenReasons.Where(usr => usr.TestUnableScreenReasonId == e.TestUnableScreenReasonId).Select(usr => usr.DisplayName).Single() : ""
                }));
            }
        }
示例#2
0
        //Should this method be part of IEventReportingService.
        private EventVolumeListModel GetEventVolumeModel(IEnumerable <Event> events)
        {
            if (events.IsNullOrEmpty())
            {
                return(null);
            }
            var eventIds = events.Select(e => e.Id).ToList();
            var hosts    = _hostRepository.GetEventHosts(eventIds);

            var eventAppointmentStatsModels = _eventAppointmentStatsService.Get(events);

            var pods = _podRepository.GetPodsForEvents(eventIds);

            var primaryPhysicians  = _physicianEventAssignmentRepository.GetPrimaryPhysicianForEvents(eventIds);
            var overReadPhysicians = _physicianEventAssignmentRepository.GetOverReadPhysicianForEvents(eventIds);

            var eventIdHospitalPartnerIdPairs = _hospitalPartnerRepository.GetEventAndHospitalPartnerOrderedPair(eventIds);
            //var eventIdCorporateAccountPairs = _corporateAccountRepository.GetEventIdCorporateAccountPairForSponsoredBy(eventIds);

            var organizationIds = new List <long>();

            organizationIds.AddRange(eventIdHospitalPartnerIdPairs.Select(ehp => ehp.SecondValue).Distinct().ToArray());
            //organizationIds.AddRange(eventIdCorporateAccountPairs.Select(ehp => ehp.SecondValue).Distinct().ToArray());

            var organizations = _organizationRepository.GetOrganizations(organizationIds.ToArray());

            var eventIdHospitalPartnerNamePairs = (from ehp in eventIdHospitalPartnerIdPairs
                                                   join org in organizations on ehp.SecondValue equals org.Id
                                                   select new OrderedPair <long, string>(ehp.FirstValue, org.Name)).ToArray();

            var eventIdCorporateNamePairs = _corporateAccountRepository.GetEventIdCorporateAccountNamePair(eventIds);

            var customersAttended = _eventRepository.GetAttendedCustomers(eventIds);

            var eventStaffCollection = _eventStaffAssignmentRepository.GetForEvents(eventIds);

            IEnumerable <OrderedPair <long, string> > staffIdNamePairs = null;

            if (eventStaffCollection != null && eventStaffCollection.Any())
            {
                var orgRoleUserIds = eventStaffCollection.Select(esc => (esc.ActualStaffOrgRoleUserId != null ? esc.ActualStaffOrgRoleUserId.Value : esc.ScheduledStaffOrgRoleUserId)).ToArray();
                staffIdNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);
            }

            return(_eventVolumeFactory.Create(events, hosts, pods, eventAppointmentStatsModels, primaryPhysicians, overReadPhysicians, eventIdHospitalPartnerNamePairs, customersAttended,
                                              eventIdCorporateNamePairs, eventStaffCollection, staffIdNamePairs));
        }
示例#3
0
        public ListModelBase <RefundRequestBasicInfoModel, RefundRequestListModelFilter> GetPendingRequests(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var refundRequestFilter = filter as RefundRequestListModelFilter;
            var requests            = _refundRequestRepository.Get(pageNumber, pageSize, refundRequestFilter, out totalRecords);

            if (requests == null || requests.Count() < 1)
            {
                return(null);
            }

            var customerIds = requests.Select(r => r.CustomerId).ToArray();
            var customers   = _customerRepository.GetCustomers(customerIds);

            var eventIds = requests.Select(r => r.EventId).Distinct().ToArray();

            var eventCustomers             = _eventCustomerRepository.GetEventCustomersByEventIdsCustomerIds(eventIds, customerIds);
            var appointmentCancellationLog = new List <EventAppointmentCancellationLog>();

            if (!eventCustomers.IsNullOrEmpty())
            {
                var cancellationLog = _eventAppointmentCancellationLogRepository.GetByEventCustomerIds(eventCustomers.Select(x => x.Id));
                if (!cancellationLog.IsNullOrEmpty())
                {
                    appointmentCancellationLog.AddRange(cancellationLog);
                }
            }

            var events = _eventRepository.GetEventswithPodbyIds(eventIds);
            var hosts  = _hostRepository.GetEventHosts(eventIds);

            var orders = _orderRepository.GetOrderByOrderIds(requests.Select(r => r.OrderId));

            var orgRoleUserIds = requests.Select(r => r.RequestedByOrgRoleUserId).Distinct().ToArray();

            if (refundRequestFilter.RefundRequestStatus < 0 || refundRequestFilter.RefundRequestStatus == (int)RequestStatus.Resolved || refundRequestFilter.RefundRequestStatus == (int)RequestStatus.Reverted)
            {
                var processedbyOrgRoleUserIds = requests.Where(r => r.RefundRequestResult != null).Select(r => r.RefundRequestResult.ProcessedByOrgRoleUserId).Distinct().ToArray();
                if (processedbyOrgRoleUserIds.Count() > 0)
                {
                    orgRoleUserIds = orgRoleUserIds.Concat(processedbyOrgRoleUserIds).ToArray();
                }
            }

            var bookedByOrgRoleUserIds = orders.Select(o => o.DataRecorderMetaData.DataRecorderCreator.Id).ToArray();

            orgRoleUserIds = orgRoleUserIds.Concat(bookedByOrgRoleUserIds).ToArray();

            var idNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);

            var organizationRoleUsers = _organizationRoleUserRepository.GetOrganizationRoleUsers(orgRoleUserIds);
            var roles = _roleRepository.GetAll();

            return(_refundRequestListFactory.Create(requests, customers, events, hosts, idNamePairs, organizationRoleUsers, roles, orders, eventCustomers, appointmentCancellationLog));
        }
示例#4
0
        private IEnumerable <CampaignActivityAssignmentEditModel> GetActivityAssignment(IEnumerable <CampaignActivityAssignment> activityAssignments, IEnumerable <CampaignActivityAssignment> campaignActivityAssignment, CampaignActivity activity)
        {
            var activityAssigmentList = new List <CampaignActivityAssignmentEditModel>();

            if (activityAssignments != null && campaignActivityAssignment.Any())
            {
                var assignedUserNamePair =
                    _organizationRoleUserRepository.GetNameIdPairofUsers(
                        activityAssignments.Select(x => x.AssignedToOrgRoleUserId).ToArray());

                activityAssigmentList.AddRange(assignedUserNamePair.Select(assignment => new CampaignActivityAssignmentEditModel
                {
                    AssignedOrgRoleUserId = assignment.FirstValue,
                    Name = assignment.SecondValue,
                    CampaignActivityId = activity.Id
                }));
            }

            return(activityAssigmentList);
        }
示例#5
0
        private IEnumerable <EventStaffBasicInfoModel> GetStaffBasicModels(IEnumerable <OrderedPair <long, long> > orgRoleUserIdEventRoles, IEnumerable <StaffEventRole> eventRoles, long podId)
        {
            IEnumerable <OrderedPair <long, string> > nameIdPairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIdEventRoles.Select(x => x.FirstValue).ToArray());

            IEnumerable <OrderedPair <long, string> > idEmployeeIdPairs = _systemUserInfoRepository.GetIdEmployeeIdPairofUsers(orgRoleUserIdEventRoles.Select(x => x.FirstValue).ToArray());

            return(orgRoleUserIdEventRoles.Select(oru =>
            {
                var fullName = nameIdPairs.Where(x => x.FirstValue == oru.FirstValue).First().SecondValue;
                var idEmployeeIdPair = idEmployeeIdPairs.FirstOrDefault(x => x.FirstValue == oru.FirstValue);
                return new EventStaffBasicInfoModel
                {
                    PodId = podId,
                    ScheduledStaffOrgRoleUserId = oru.FirstValue,
                    FullName = fullName,
                    EventRoleId = oru.SecondValue,
                    EventRole = eventRoles.Where(er => er.Id == oru.SecondValue).Select(er => er.Name).First(),
                    EmployeeId = idEmployeeIdPair != null ? idEmployeeIdPair.SecondValue : ""
                };
            }).ToArray());
        }
示例#6
0
        public ActionResult Edit(long id)
        {
            Session[RefundRequest.ProcessRequestId] = null; // Used for gift certificate

            var request = ((IRefundRequestRepository)_repository).Get(id);
            var model   = Mapper.Map <RefundRequest, RefundRequestResultEditModel>(request);

            var order           = _orderRepository.GetOrder(request.OrderId);
            var productsInOrder = _electronicProductRepository.GetProductIdsForOrderItems(order.OrderDetails
                                                                                          .Where(od => od.OrderItemStatus.OrderStatusState == OrderStatusState.FinalSuccess && od.DetailType == OrderItemType.ProductItem)
                                                                                          .Select(od => od.OrderItemId).ToArray());

            var cancellationReason = "N/A";

            if (model.RefundType == RefundRequestType.CustomerCancellation)
            {
                var appointmentCancellationLogs = _eventAppointmentCancellationLogRepository.GetByEventIdCustomerId(model.EventId, model.CustomerId);
                if (!appointmentCancellationLogs.IsNullOrEmpty())
                {
                    var appointmentCancellationLog = appointmentCancellationLogs.FirstOrDefault(x => x.DateCreated > request.RequestedOn.AddMinutes(-3) && x.DateCreated < request.RequestedOn.AddMinutes(3));
                    if (appointmentCancellationLog != null)
                    {
                        cancellationReason = ((CancelAppointmentReason)appointmentCancellationLog.ReasonId).GetDescription();
                    }
                }
            }

            model.CancellationReason = cancellationReason;

            var products = _electronicProductRepository.GetAllProducts();

            model.OfferFreeProduct = Mapper.Map <IEnumerable <Product>, IEnumerable <ProductstoOfferModel> >(products);
            if (productsInOrder != null && productsInOrder.Count() > 0)
            {
                foreach (var product in productsInOrder)
                {
                    var temp        = model.OfferFreeProduct.Where(p => p.ProductId == product.SecondValue).FirstOrDefault();
                    var orderDetail =
                        order.OrderDetails.Where(od => od.OrderItemId == product.FirstValue).FirstOrDefault();
                    temp.ProductPriceinOrder = orderDetail.Price;
                    temp.OrderItemId         = orderDetail.OrderItemId;
                }
            }
            CompleteEditModel(model, request.CustomerId);
            model.PaymentEditModel.Amount = model.RequestedRefundAmount;
            var nameIdpair = _orgRoleUserRepository.GetNameIdPairofUsers(new[] { request.RequestedByOrgRoleUserId }).FirstOrDefault();

            model.RequestedBy = nameIdpair != null ? nameIdpair.SecondValue : string.Empty;
            return(View(model));
        }
示例#7
0
        public ListModelBase <CustomAppointmentsBookedModel, CustomAppointmentsBookedListModelFilter> GetCustomAppointmentsBooked(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var customFilter = filter as CustomAppointmentsBookedListModelFilter;

            customFilter = customFilter ?? new CustomAppointmentsBookedListModelFilter();

            var appFilter = new AppointmentsBookedListModelFilter
            {
                AccountId = customFilter.AccountId,
                FromDate  = customFilter.FromDate,
                ToDate    = customFilter.ToDate,
                Tag       = customFilter.Tag
            };
            var eventCustomers = _eventCustomerRepository.GetEventCustomersbyRegisterationDate(pageNumber, pageSize, appFilter, out totalRecords);

            if (eventCustomers.IsNullOrEmpty())
            {
                return(null);
            }

            var appointments = _appointmentRepository.GetByIds(eventCustomers.Where(ec => ec.AppointmentId.HasValue).Select(ec => ec.AppointmentId.Value).ToList());
            var eventIds     = eventCustomers.Select(ec => ec.EventId).Distinct().ToArray();
            var model        = _eventReportingService.GetEventVolumeModel(eventCustomers.Select(ec => ec.EventId).Distinct().ToArray());

            var customers   = _customerRepository.GetCustomers(eventCustomers.Select(ec => ec.CustomerId).Distinct().ToArray());
            var customerIds = customers.Select(x => x.CustomerId);
            var orders      = _orderRepository.GetAllOrdersByEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray(), true);

            var eventPackages = _eventPackageRepository.GetbyEventIds(eventIds);
            var eventTests    = _eventTestRepository.GetByEventIds(eventIds);


            var orgRoleUserIds = eventCustomers.Where(ec => ec.DataRecorderMetaData != null && ec.DataRecorderMetaData.DataRecorderCreator != null).Select(ec => ec.DataRecorderMetaData.DataRecorderCreator.Id).ToList();

            var eventAppointmentChangeLogs = _eventAppointmentChangeLogRepository.GetByEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray()).ToArray();

            orgRoleUserIds.AddRange(eventAppointmentChangeLogs.Select(eacl => eacl.CreatedByOrgRoleUserId));

            var registeredbyAgent = _organizationRoleUserRepository.GetOrganizationRoleUsers(orgRoleUserIds);

            var roles = _roleRepository.GetAll();

            var registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray()).ToArray();

            var primaryCarePhysicians = _primaryCarePhysicianRepository.GetByCustomerIds(eventCustomers.Select(ec => ec.CustomerId).Distinct().ToArray());
            var languages             = _languageRepository.GetAll();

            return(_customAppointmentsBookedModelFactory.Create(eventCustomers, appointments, orders, model, customers, registeredbyAgent,
                                                                roles, registeredbyAgentNameIdPair, eventAppointmentChangeLogs, primaryCarePhysicians, eventPackages, eventTests, languages));
        }
        public ListModelBase <CallQueueSchedulingReportModel, CallQueueSchedulingReportFilter> GetHealthPlanCallQueueReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var callDetails = _callQueueCustomerCallRepository.GetHealthPlanCallQueueCallReports(filter as CallQueueSchedulingReportFilter, pageNumber, pageSize, out totalRecords);

            if (callDetails == null || !callDetails.Any())
            {
                return(null);
            }

            var customerIds = callDetails.Select(c => c.CalledCustomerId).ToArray();

            var customers = _customerRepository.GetCustomers(customerIds);

            var customerTags = _corporateCustomerCustomTagRepository.GetByCustomerIds(customerIds);

            var eventIds = callDetails.Where(x => x.EventId > 0).Select(x => x.EventId);

            var events = _eventRepository.GetEventswithPodbyIds(eventIds);

            var organisationRoleIds = callDetails.Select(c => c.CreatedByOrgRoleUserId).ToArray();

            IEnumerable <OrderedPair <long, string> > registeredbyAgentNameIdPair = null;

            if (organisationRoleIds != null && !organisationRoleIds.IsNullOrEmpty())
            {
                registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(organisationRoleIds).ToArray();
            }

            var healthPlanIds = callDetails.Select(x => x.HealthPlanId).ToArray();

            var organizations = _organizationRepository.GetOrganizations(healthPlanIds);

            var callQueue = _callQueueRepository.GetByIds(callDetails.Select(x => x.CallQueueId), isManual: false, isHealthPlan: true);

            return(_healthPlanCallQueueReportListModelFactory.Create(callDetails, customers, customerTags, registeredbyAgentNameIdPair, events, organizations, callQueue));
        }
示例#9
0
        public ListModelBase <KynCustomerModel, KynCustomerModelFilter> GetKynCustomerReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var kynfilter      = filter as KynCustomerModelFilter;
            var eventCustomers = _eventCustomerRepository.GetKynEventCustomers(pageNumber, pageSize, kynfilter, out totalRecords);

            if (eventCustomers.IsNullOrEmpty())
            {
                return(new KynCustomerListModel());
            }
            var eventIds          = eventCustomers.Select(ec => ec.EventId).Distinct().ToArray();
            var eventCustomerIds  = eventCustomers.Select(ec => ec.Id).Distinct().ToArray();
            var healthAssessments = _healthAssessmentRepository.GetCustomerHealthInfoByEventCustomerIds(eventCustomerIds);

            var healthAssessmentsOrgRoleUserIds    = healthAssessments.Where(ha => ha.DataRecorderMetaData != null && ha.DataRecorderMetaData.DataRecorderCreator != null).Select(ha => ha.DataRecorderMetaData.DataRecorderCreator.Id).ToList();
            var healthAssessmentsbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(healthAssessmentsOrgRoleUserIds.ToArray()).ToArray();
            var healthAssessmentModifiedByAgent    = _organizationRoleUserRepository.GetOrganizationRoleUsers(healthAssessmentsOrgRoleUserIds.ToArray()).ToArray();
            var customers = _customerRepository.GetCustomers(eventCustomers.Select(ec => ec.CustomerId).Distinct().ToArray());

            var events       = _eventRepository.GetEventswithPodbyIds(eventIds);
            var pods         = _podRepository.GetPodsForEvents(eventIds);
            var appointments = _appointmentRepository.GetAppointmentsForEvents(eventIds);
            var showKyn      = kynfilter != null && kynfilter.ShowOnlyKyn;

            var orgRoleUserIds    = eventCustomers.Where(ec => ec.DataRecorderMetaData != null && ec.DataRecorderMetaData.DataRecorderCreator != null).Select(ec => ec.DataRecorderMetaData.DataRecorderCreator.Id).ToList();
            var registeredbyAgent = _organizationRoleUserRepository.GetOrganizationRoleUsers(orgRoleUserIds);
            var roles             = _roleRepository.GetAll();

            var registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray()).ToArray();
            var customerIds           = customers.Select(c => c.CustomerId).ToArray();
            var customTags            = _customTagRepository.GetByCustomerIds(customerIds);
            var corporateAccountNames = _corporateAccountRepository.GetEventIdCorporateAccountNamePair(eventIds);
            var hospitalPartnerNames  = _hospitalPartnerRepository.GetEventIdHospitalPartnerNamePair(eventIds);

            return(_kynCustomerReportingFactory.Create(eventCustomers, events, customers, appointments, pods, showKyn, registeredbyAgent, roles, registeredbyAgentNameIdPair, customTags, corporateAccountNames, hospitalPartnerNames,
                                                       healthAssessments, healthAssessmentsbyAgentNameIdPair, healthAssessmentModifiedByAgent));
        }
示例#10
0
        public IEnumerable <ShippingDetailViewModel> GetShippingDetailsForPopup(long orderDetailId)
        {
            var shippingDetails = _shippingDetailRepository.GetShippingDetailsForOrder(orderDetailId);

            var nameOrgRoleUserIdPairForShippedByName = _organizationRoleUserRepository.GetNameIdPairofUsers(shippingDetails.Where(x => x.ShippedByOrgRoleUserId.HasValue).Select(x => x.ShippedByOrgRoleUserId.Value).ToArray());

            return((from shippingDetail in shippingDetails
                    let shippedByName = nameOrgRoleUserIdPairForShippedByName.FirstOrDefault(x => x.FirstValue == shippingDetail.ShippedByOrgRoleUserId)
                                        select new ShippingDetailViewModel
            {
                Status = shippingDetail.Status,
                ShipmentDate = shippingDetail.ShipmentDate,
                ActualPrice = shippingDetail.ActualPrice,
                ShippingOption = shippingDetail.ShippingOption,
                ShippedByName = shippedByName == null ? null : shippedByName.SecondValue
            }).ToList());
        }
        public ActionResult EditHospitalPartnerCustomer(long eventId, long customerId)
        {
            var customerName = _organizationRoleUserRepository.GetNameIdPairofUsers(new[] { customerId }).First().SecondValue;

            var model = new HospitalPartnerCustomerEditModel {
                CustomerName = customerName, CustomerId = customerId, EventId = eventId
            };

            var pcp = _primaryCarePhysicianRepository.Get(customerId);

            if (pcp != null)
            {
                model.PrimaryCarePhysicianName = pcp.Name.FullName;
            }

            return(View(model));
        }
示例#12
0
        public IEnumerable <MedicationUploadViewModel> GetUploadList(int pageNumber, int pageSize, MedicationUploadListModelFilter filter, out int totalRecords)
        {
            var list        = _medicationUploadRepository.GetUploadList(pageNumber, pageSize, filter, out totalRecords).ToArray();
            var uploadByIds = list.Select(c => c.UploadedBy).Distinct().ToArray();

            IEnumerable <OrderedPair <long, string> > uploadedbyAgentNameIdPair = null;

            if (uploadByIds != null && uploadByIds.Any())
            {
                uploadedbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(uploadByIds).ToArray();
            }
            foreach (var rapsUploadModel in list)
            {
                if (uploadedbyAgentNameIdPair != null && uploadedbyAgentNameIdPair.Any())
                {
                    rapsUploadModel.UploadedName = uploadedbyAgentNameIdPair.Single(ap => ap.FirstValue == rapsUploadModel.UploadedBy).SecondValue;
                }
            }
            return(list);
        }
示例#13
0
        public PayPeriodListModel Get(PayPeriodFilter filter, int pageNumber, int pageSize, out int totalRecords)
        {
            var payPeriod           = _payPeriodRepository.GetByFilter(filter, pageNumber, pageSize, out totalRecords);
            var payPeriodCritirieas = _payPeriodCriteriaRepository.GetByPayPeriodId(payPeriod.Select(x => x.Id).ToArray());
            var list = new List <long>();

            list.AddRange(payPeriod.Select(x => x.CreatedBy));
            list.AddRange(payPeriod.Where(x => x.ModifiedBy.HasValue).Select(x => x.ModifiedBy.Value));
            var userNamePair = _organizationRoleUserRepository.GetNameIdPairofUsers(list.ToArray());

            var listModel = new PayPeriodListModel();

            var collection = _payPeriodFactory.CreateViewModel(payPeriod, payPeriodCritirieas, userNamePair);

            collection = SetActivePayPeriod(collection);

            listModel.Collection = collection;
            listModel.Filter     = filter;

            return(listModel);
        }
        public ListModelBase <EventArchiveStatsViewModel, EventArchiveStatsFilter> GetEventArchiveStats(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            filter = filter ?? new EventArchiveStatsFilter();
            var resultArchives = _resultArchiveUploadRepository.GetForEventArchiveStatsReport(filter as EventArchiveStatsFilter, pageNumber, pageSize, out totalRecords);

            if (resultArchives == null || !resultArchives.Any())
            {
                return(null);
            }

            var fileIds = resultArchives.Where(r => r.FileId.HasValue).Select(r => r.FileId.Value).ToArray();
            var files   = _fileRepository.GetByIds(fileIds);

            var events = _eventRepository.GetEventswithPodbyIds(resultArchives.Select(r => r.EventId).ToArray());

            var orgRoleUserIds  = resultArchives.Select(r => r.UploadedByOrgRoleUserId).ToArray();
            var userIdNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);

            var pods = _podRepository.GetPodsForEvents(events.Select(e => e.Id).ToArray());

            return(_eventArchiveStatsFactory.Create(resultArchives, events, files, pods, userIdNamePairs));
        }
示例#15
0
        public CallUploadListModel GetCallUploadDetails(int pageNumber, int pageSize, CallUploadListModelFilter filter, out int totalRecords)
        {
            var callUploads = _callUploadRepository.GetByFilter(pageNumber, pageSize, filter, out totalRecords);

            if (callUploads == null || !callUploads.Any())
            {
                return(null);
            }

            var successfileIds = callUploads.Select(s => s.FileId).ToArray();

            var failedfileIds = callUploads.Where(x => x.LogFileId.HasValue).Select(s => s.LogFileId.Value).ToArray();

            var fileIds = successfileIds.Concat(failedfileIds).ToArray();

            IEnumerable <FileModel> fileModels = null;

            if (fileIds != null && fileIds.Any())
            {
                var files = _fileRepository.GetByIds(fileIds);

                if (files != null && files.Any())
                {
                    fileModels = GetFileModelFromFile(files, _mediaRepository.GetCallUploadMediaFileLocation());
                }
            }

            var callUploadByIds = callUploads.Select(c => c.UploadedBy).ToArray();

            IEnumerable <OrderedPair <long, string> > uploadedbyAgentNameIdPair = null;

            if (callUploadByIds != null && callUploadByIds.Any())
            {
                uploadedbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(callUploadByIds).ToArray();
            }

            return(_callUploadListModelFactory.Create(fileModels, callUploads, uploadedbyAgentNameIdPair));
        }
        public ListModelBase <HealthPlanCallQueueViewModel, HealthPlanCallQueueListModelFilter> GetHealthPlanCallQueueList(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var assignmentFilter = filter as HealthPlanCallQueueListModelFilter ??
                                   new HealthPlanCallQueueListModelFilter();

            var healthPlanCallQueuesCriteria = _healthPlanCallQueueCriteriaRepository.GetHealthPlanCallQueueCriteria(filter as HealthPlanCallQueueListModelFilter, pageNumber, pageSize, out totalRecords);

            if (healthPlanCallQueuesCriteria == null && !healthPlanCallQueuesCriteria.Any())
            {
                totalRecords = 0;
                return(null);
            }

            var callQueueIds = healthPlanCallQueuesCriteria.Select(cq => cq.CallQueueId).ToArray();

            var healthPlanIds = healthPlanCallQueuesCriteria.Where(x => x.HealthPlanId.HasValue).Select(s => s.HealthPlanId.Value).ToArray();

            IEnumerable <CorporateAccount> healthPlans = null;

            if (healthPlanIds != null && healthPlanIds.Any())
            {
                healthPlans = _corporateAccountRepository.GetByIds(healthPlanIds);
            }

            IEnumerable <CallQueue> healthPlanCallQueues = null;

            if (callQueueIds != null && callQueueIds.Any())
            {
                healthPlanCallQueues = _callQueueRepository.GetByIds(callQueueIds, false, true);
            }

            var assignOrgRoleIds = healthPlanCallQueuesCriteria.Select(a => a.DataRecorderMetaData.DataRecorderCreator.Id).Distinct().ToArray();

            var modifiedBy = healthPlanCallQueuesCriteria.Where(x => x.DataRecorderMetaData.DataRecorderModifier != null).Select(a => a.DataRecorderMetaData.DataRecorderModifier.Id).Distinct().ToArray();

            if (modifiedBy != null && modifiedBy.Any())
            {
                assignOrgRoleIds = assignOrgRoleIds.Concat(modifiedBy).ToArray();
            }

            var criteriaIds = healthPlanCallQueuesCriteria.Select(s => s.Id).ToArray();

            IEnumerable <HealthPlanCriteriaAssignment>     healthPlanCriteriaAssignment     = null;
            IEnumerable <HealthPlanCriteriaTeamAssignment> healthPlanCriteriaTeamAssignment = null;

            var campaignIds = healthPlanCallQueuesCriteria.Where(s => s.CampaignId.HasValue).Select(x => x.CampaignId.Value).ToArray();

            var campaigns = _campaignRepository.GetByIds(campaignIds);

            if (criteriaIds != null && criteriaIds.Any())
            {
                healthPlanCriteriaAssignment     = _healthPlanCriteriaAssignmentRepository.GetByCriteriaIds(criteriaIds);
                healthPlanCriteriaTeamAssignment = _healthPlanCriteriaTeamAssignmentRepository.GetByCriteriaIds(criteriaIds);

                if (healthPlanCriteriaAssignment != null && healthPlanCriteriaAssignment.Any())
                {
                    var assignAssignmentRoleUserIds = healthPlanCriteriaAssignment.Select(s => s.AssignedToOrgRoleUserId).Distinct().ToArray();

                    if (assignAssignmentRoleUserIds != null && assignAssignmentRoleUserIds.Any())
                    {
                        assignOrgRoleIds = assignOrgRoleIds.Concat(assignAssignmentRoleUserIds).ToArray();
                    }

                    var assignmentBy = healthPlanCriteriaAssignment.Select(s => s.CreatedBy).Distinct().ToArray();

                    if (assignmentBy.Any())
                    {
                        assignOrgRoleIds = assignOrgRoleIds.Concat(assignmentBy).ToArray();
                    }
                }
            }

            IEnumerable <OrderedPair <long, string> > teamIdNamePairs = null;

            if (!healthPlanCriteriaTeamAssignment.IsNullOrEmpty())
            {
                teamIdNamePairs = _callCenterTeamRepository.GetIdNamePairOfTeams(healthPlanCriteriaTeamAssignment.Select(x => x.TeamId).ToArray());

                var assignmentBy = healthPlanCriteriaTeamAssignment.Select(s => s.CreatedBy).Distinct().ToArray();

                if (assignmentBy.Any())
                {
                    assignOrgRoleIds = assignOrgRoleIds.Concat(assignmentBy).ToArray();
                }
            }

            assignOrgRoleIds = assignOrgRoleIds.Distinct().ToArray();

            var agentIdNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(assignOrgRoleIds);

            var criteriaCustomerCountPairs = new List <OrderedPair <long, long> >();

            if (assignmentFilter.ShowAssignmentMetaData)
            {
                foreach (var criteria in healthPlanCallQueuesCriteria)
                {
                    var count = _customerCallQueueCallAttemptService.CustomerCountForHealthPlanCriteria(criteria, healthPlanCallQueues);
                    criteriaCustomerCountPairs.Add(new OrderedPair <long, long>(criteria.Id, count));
                }
            }

            var criteriaDirectMailDates = _healthPlanCriteriaDirectMailService.GetDirectMailDatesByCriteriaIds(criteriaIds);

            return(_callQueueListModelFactory.CreateHealthPlanCallQueueList(healthPlanCallQueuesCriteria, agentIdNamePairs, healthPlanCallQueues, healthPlans, healthPlanCriteriaAssignment, campaigns, healthPlanCriteriaTeamAssignment,
                                                                            teamIdNamePairs, criteriaCustomerCountPairs, criteriaDirectMailDates, assignmentFilter.ShowAssignmentMetaData));
        }
示例#17
0
        public ActionResult Index(ResultArchiveUploadListModelFilter filter, int pageNumber = 1)
        {
            var model = new ResultArchiveUploadListModel();

            try
            {
                int totalRecords;
                var resultArchives = _resultArchiveUploadRepository.GetByFilter(filter, pageNumber, _pageSize, out totalRecords);
                if (resultArchives != null && resultArchives.Count() > 0)
                {
                    var fileIds = resultArchives.Where(r => r.FileId.HasValue).Select(r => r.FileId.Value).ToArray();
                    var files   = _fileRepository.GetByIds(fileIds);

                    var events = _eventRepository.GetEventswithPodbyIds(resultArchives.Select(r => r.EventId).ToArray());

                    var orgRoleUserIds  = resultArchives.Select(r => r.UploadedByOrgRoleUserId).ToArray();
                    var userIdNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);

                    var pods = _podRepository.GetPodsForEvents(events.Select(e => e.Id).ToArray());

                    model.ResultUploads = AutoMapper.Mapper.Map <IEnumerable <ResultArchive>, IEnumerable <ResultArchiveUploadViewModel> >(resultArchives);

                    foreach (var upload in model.ResultUploads)
                    {
                        var theEvent  = events.Where(e => e.Id == upload.EventId).SingleOrDefault();
                        var eventPods = pods.Where(p => theEvent.PodIds.Contains(p.Id)).ToArray();

                        upload.EventDate = theEvent.EventDate;
                        upload.EventName = theEvent.Name;
                        upload.PodName   = string.Join(", ", eventPods.Select(ep => ep.Name));

                        var userIdNamepair =
                            userIdNamePairs.Where(p => p.FirstValue == resultArchives.Where(r => r.Id == upload.Id).Select(r => r.UploadedByOrgRoleUserId).SingleOrDefault()).SingleOrDefault();

                        if (userIdNamepair != null)
                        {
                            upload.UploadedBy = userIdNamepair.SecondValue;
                        }

                        if (upload.File == null)
                        {
                            continue;
                        }

                        var file = files.Where(f => f.Id == upload.File.Id).SingleOrDefault();
                        if (file != null)
                        {
                            upload.File = file;
                        }
                    }
                }

                if (filter == null)
                {
                    filter = new ResultArchiveUploadListModelFilter();
                }
                model.Filter = filter;

                var currentAction          = ControllerContext.RouteData.Values["action"].ToString();
                Func <int, string> urlFunc =
                    pn =>
                    Url.Action(currentAction,
                               new
                {
                    pageNumber = pn,
                    filter.EventId,
                    filter.FromEventDate,
                    filter.FromUploadDate,
                    filter.ToEventDate,
                    filter.ToUploadDate,
                    filter.ResultArchiveUploadStatus,
                    filter.UploadedBy,
                    filter.Pod
                });

                model.PagingModel = new PagingModel(pageNumber, _pageSize, totalRecords, urlFunc);

                return(View(model));
            }
            catch (Exception)
            {
                return(View(model));
            }
        }
示例#18
0
        public ListModelBase <ProspectCustomerBasicInfoModel, ProspectCustomerListModelFilter> GetAbandonedCustomers(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var modelFilter = filter as ProspectCustomerListModelFilter;

            if (modelFilter.AgentOrganizationId > 0 && !modelFilter.FromDate.HasValue && !modelFilter.ToDate.HasValue)
            {
                modelFilter.FromDate = DateTime.Today.AddDays(-90);
                modelFilter.DateType = (int)ProspectCustomerDateTypeFilter.CreatedDate;
            }

            var prospectCustomers = _prospectCustomerRepository.GetAbandonedProspectCustomer(pageNumber, pageSize, modelFilter, out totalRecords);
            var model             = new ProspectCustomerListModel();

            if (prospectCustomers != null && prospectCustomers.Any())
            {
                var prospectCustomerNotes = _customerCallNotesRepository.GetProspectCustomerNotes(prospectCustomers.Select(pc => pc.Id).ToArray());

                var orgRoleUserIds = prospectCustomers.Where(pc => pc.ContactedBy.HasValue).Select(pc => pc.ContactedBy.Value).ToList();

                if (prospectCustomerNotes != null && prospectCustomerNotes.Any())
                {
                    orgRoleUserIds.AddRange(prospectCustomerNotes.Select(pcn => pcn.DataRecorderMetaData.DataRecorderCreator.Id));
                }

                orgRoleUserIds = orgRoleUserIds.Distinct().ToList();
                var idNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray());

                var customerIds = prospectCustomers.Where(x => x.CustomerId.HasValue && x.CustomerId.Value > 0).Select(x => x.CustomerId.Value);
                var customers   = new List <Customer>();

                if (!customerIds.IsNullOrEmpty())
                {
                    customers = _customerRepository.GetCustomers(customerIds.ToArray());
                }

                var customTags = _corporateCustomerCustomTagRepository.GetByCustomerIds(customerIds);

                var corportateAccounts = new List <CorporateAccount>();

                if (!customers.IsNullOrEmpty())
                {
                    var cutomerTags = customers.Where(x => !string.IsNullOrEmpty(x.Tag) && x.Tag.Trim().Length > 1).Select(x => x.Tag);

                    if (customTags.Any())
                    {
                        corportateAccounts.AddRange(_corporateAccountRepository.GetByTags(cutomerTags.ToArray()));
                    }
                }

                var pcBasicmodels = new ProspectCustomerBasicInfoModel[prospectCustomers.Count()];
                int index         = 0;
                foreach (var prospectCustomer in prospectCustomers)
                {
                    SourceCode sourceCode = null;
                    if (prospectCustomer.SourceCodeId.HasValue)
                    {
                        sourceCode = _sourceCodeRepository.GetSourceCodeById(prospectCustomer.SourceCodeId.Value);
                    }

                    pcBasicmodels[index] = Mapper.Map <ProspectCustomer, ProspectCustomerBasicInfoModel>(prospectCustomer);

                    if (prospectCustomer.CustomerId.HasValue)
                    {
                        if (customers.Any())
                        {
                            var customer = customers.First(x => x.CustomerId == prospectCustomer.CustomerId);

                            pcBasicmodels[index].CorporateTag = string.IsNullOrEmpty(customer.Tag) ? "" : customer.Tag;
                            pcBasicmodels[index].MemberId     = string.IsNullOrEmpty(customer.InsuranceId) ? "" : customer.InsuranceId;


                            if (corportateAccounts.Any() && !string.IsNullOrEmpty(customer.Tag))
                            {
                                var corportateAccount = corportateAccounts.First(x => x.Tag == customer.Tag);
                                pcBasicmodels[index].CorporateSponsor = corportateAccount.Name;
                            }
                        }

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

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

                        pcBasicmodels[index].CustomTags = corporateCustomTags;
                        if (!string.IsNullOrEmpty(pcBasicmodels[index].CorporateTag) && string.IsNullOrEmpty(pcBasicmodels[index].CustomTags))
                        {
                            pcBasicmodels[index].CustomTags = "None";
                        }
                    }

                    var notesVieModel = new List <NotesViewModel>();

                    var prospectNotes = _notesViewModelFactory.GetProspectCustomerNotes(prospectCustomer.Id, prospectCustomerNotes, idNamePairs);

                    if (prospectNotes != null)
                    {
                        notesVieModel.AddRange(prospectNotes);
                    }

                    if (prospectCustomer.Tag == ProspectCustomerTag.Cancellation && prospectCustomer.CustomerId.HasValue && _settings.IsRefundQueueEnabled)
                    {
                        var eventCustomers = _eventCustomerRepository.GetbyCustomerId(prospectCustomer.CustomerId.Value);
                        eventCustomers = eventCustomers.Where(ec => !ec.AppointmentId.HasValue);

                        if (eventCustomers.Any())
                        {
                            var eventCustomerId = eventCustomers.Select(ec => ec.Id).Max();
                            if (eventCustomerId > 0)
                            {
                                var orderId        = _orderRepository.GetOrderIdByEventCustomerId(eventCustomerId);
                                var refundRequests = _refundRequestRepository.GetbyOrderId(orderId, true);
                                if (refundRequests != null && refundRequests.Any() && refundRequests.Count(rr => rr.RefundRequestType == RefundRequestType.CustomerCancellation) > 0)
                                {
                                    var refundRequest = refundRequests.LastOrDefault(rr => rr.RefundRequestType == RefundRequestType.CustomerCancellation && rr.RefundRequestResult != null &&
                                                                                     (rr.RefundRequestResult.RequestResultType == RequestResultType.IssueRefund || rr.RefundRequestResult.RequestResultType == RequestResultType.IssueGiftCertificate));

                                    if (refundRequest != null)
                                    {
                                        notesVieModel.Add(new NotesViewModel()
                                        {
                                            Note = refundRequest.RefundRequestResult.Notes
                                        });
                                    }
                                }
                            }
                        }
                    }

                    pcBasicmodels[index].Notes = notesVieModel;

                    if (sourceCode != null)
                    {
                        pcBasicmodels[index].SourceCode = sourceCode.CouponCode;
                    }

                    if (prospectCustomer.ContactedBy.HasValue)
                    {
                        pcBasicmodels[index].ContactedBy =
                            idNamePairs.Where(nip => nip.FirstValue == prospectCustomer.ContactedBy.Value).Select(nip => nip.SecondValue).SingleOrDefault();
                    }
                    index++;
                }
                model.Collection = pcBasicmodels;
            }
            return(model);
        }
        public ListModelBase <CallSkippedReportViewModel, CallSkippedReportFilter> GetCallSkippedReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var callSkippedFilter = filter as CallSkippedReportFilter ?? new CallSkippedReportFilter();
            var model             = (IReadOnlyCollection <CallSkippedReportEditModel>)_customerCallQueueCallAttemptRepository.GetForCallSkippedReport(pageNumber, pageSize, callSkippedFilter, out totalRecords);

            List <long> orgRoleUserIds = model.Select(x => x.CustomerId).ToList();

            orgRoleUserIds.AddRange(model.Select(x => x.AgentId));

            var agentAndCustomerDetailsIdNamePair = (IReadOnlyCollection <OrderedPair <long, string> >)_organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray());
            var callQueues = (IReadOnlyCollection <CallQueue>)_callQueueRepository.GetAll(isManual: false, isHealthPlan: true);
            var accounts   = (IReadOnlyCollection <CorporateAccount>)_corporateAccountRepository.GetAllHealthPlan();

            var collection = _callSkippedReportFactory.Create(agentAndCustomerDetailsIdNamePair, callQueues, accounts, model);

            return(new CallSkippedReportListModel
            {
                Collection = collection,
                Filter = callSkippedFilter
            });
        }
示例#20
0
        private HospitalPartnerCustomerListModel GetCustomers(IEnumerable <EventCustomer> eventCustomers, HospitalPartner hospitalPartner)
        {
            var eventCustomerIds = eventCustomers.Select(ec => ec.Id).ToArray();
            var eventIds         = eventCustomers.Select(ec => ec.EventId).Distinct().ToArray();

            var customers = _customerRepository.GetCustomers(eventCustomers.Select(ec => ec.CustomerId).ToArray());

            var orders = _orderRepository.GetAllOrdersByEventCustomerIds(eventCustomerIds, true);
            var orderPackageIdNamePair = _eventPackageRepository.GetPackageNamesForOrder(orders.Select(o => o.Id).ToList());
            var orderTestIdNamePair    = _eventTestRepository.GetTestNamesForOrders(orders.Select(o => o.Id).ToList());

            var hospitalPartnerCustomers = _hospitalPartnerCustomerRepository.GetHospitalPartnerCustomers(eventIds);

            var orgRoleUserIds = new List <long>();

            orgRoleUserIds.AddRange(hospitalPartnerCustomers.Select(hpc => hpc.CareCoordinatorOrgRoleUserId).ToArray());
            orgRoleUserIds.AddRange(hospitalPartnerCustomers.Select(hpc => hpc.DataRecorderMetaData.DataRecorderCreator.Id).ToArray());
            orgRoleUserIds.AddRange(hospitalPartnerCustomers.Where(hpc => hpc.DataRecorderMetaData.DataRecorderModifier != null).Select(hpc => hpc.DataRecorderMetaData.DataRecorderModifier.Id).ToArray());
            orgRoleUserIds = orgRoleUserIds.Select(oru => oru).Distinct().ToList();

            var idNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray());

            var eventCustomerResults = _eventCustomerResultRepository.GetByIds(eventCustomerIds);

            eventCustomerResults = eventCustomerResults.Where(ecr => ecr.ResultState >= (long)TestResultStateNumber.Evaluated).ToArray();

            var pods = _podRepository.GetPodsForEvents(eventIds);

            var events            = _eventRepository.GetEventswithPodbyIds(eventIds);
            var shippingDetailIds = orders.SelectMany(o => o.OrderDetails.SelectMany(od => od.ShippingDetailOrderDetails.Select(sdod => sdod.ShippingDetailId))).ToArray();

            var resultStatuses = _eventCustomerResultRepository.GetTestResultStatus(eventCustomerIds);

            var shippingDetails  = _shippingDetailRepository.GetByIds(shippingDetailIds);
            var cdShippingOption = _shippingOptionRepository.GetShippingOptionByProductId((long)Product.UltraSoundImages);

            //var eventIdHospitalPartnerIdPairs = _hospitalPartnerRepository.GetEventAndHospitalPartnerOrderedPair(eventIds);

            var eventHospitalPartners = _hospitalPartnerRepository.GetEventHospitalPartnersByEventIds(eventIds).ToArray();

            var organizationIds     = eventHospitalPartners.Select(ehp => ehp.HospitalPartnerId).Distinct().ToArray();
            var hospitalFacilityIds = eventCustomers.Where(ec => ec.HospitalFacilityId.HasValue && ec.HospitalFacilityId.Value > 0).Select(ec => ec.HospitalFacilityId.Value).ToArray();

            organizationIds = organizationIds.Concat(hospitalFacilityIds).ToArray();

            var organizations = _organizationRepository.GetOrganizations(organizationIds);
            var eventIdHospitalPartnerNamePairs = (from ehp in eventHospitalPartners
                                                   join org in organizations on ehp.HospitalPartnerId equals org.Id
                                                   select new OrderedPair <long, string>(ehp.EventId, org.Name)).ToArray();

            var eventIdCorporateAccounrNamePairs = _corporateAccountRepository.GetEventIdCorporateAccountNamePair(eventIds);

            var primaryCarePhysicians = _primaryCarePhysicianRepository.GetByCustomerIds(eventCustomers.Select(ec => ec.CustomerId).ToArray());

            var healthAssessmentQuestions = _healthAssessmentRepository.GetAllQuestions();

            var healthAssessmentAnswers = _healthAssessmentRepository.GetByCustomerIds(eventCustomers.Select(ec => ec.CustomerId).ToArray());

            var notes = _customerCallNotesRepository.GetNotes(eventCustomers.Select(ec => ec.CustomerId).ToArray(), CustomerRegistrationNotesType.PostScreeningFollowUpNotes);

            var eventCustomerNotifications = _eventCustomerNotificationRepository.GetByEventCustomerIds(eventCustomerIds, NotificationTypeAlias.CannedMessageNotification);

            var hospitalFacilities = hospitalFacilityIds.Any() ? _hospitalFacilityRepository.GetByIds(hospitalFacilityIds) : null;

            var eventCustomerIdHospitalFacilityNamePairs = (from ec in eventCustomers
                                                            join org in organizations on ec.HospitalFacilityId equals org.Id
                                                            select new OrderedPair <long, string>(ec.Id, org.Name)).ToArray();

            var showScannedDocumentHospitalPartnerIds = _settings.ShowScannedDocumentHospitalPartnerIds;

            var languages = _languageRepository.GetAll();

            return(_hospitalPartnerCustomerViewModelFactory.Create(eventCustomers, orders, customers, orderPackageIdNamePair, orderTestIdNamePair, hospitalPartnerCustomers, idNamePairs, events, shippingDetails,
                                                                   resultStatuses, cdShippingOption, pods, eventIdHospitalPartnerNamePairs, eventIdCorporateAccounrNamePairs, primaryCarePhysicians,
                                                                   healthAssessmentQuestions, healthAssessmentAnswers, eventCustomerResults, hospitalPartner, notes, eventCustomerNotifications, eventHospitalPartners,
                                                                   eventCustomerIdHospitalFacilityNamePairs, hospitalFacilities, showScannedDocumentHospitalPartnerIds, languages));
        }
示例#21
0
        /// <summary>
        /// This can be rerun any time. The service updates the last run time and will continue
        /// </summary>
        public void Sync()
        {
            try
            {
                if (!_settings.SyncWithHra)
                {
                    _logger.Info("Syncing with HRA is off ");
                    return;
                }
                //get all tags for IsHealthPlan is true
                var tags = _organizationRepository.GetMedicareSites().Where(x => x.ShowHraQuestionnaire);
                if (tags != null && tags.Any())
                {
                    foreach (var tag in tags)
                    {
                        var newLastTransactionDate = DateTime.Now; //   use the time when exporting for this tag starts, as start date for next day.
                        _logger.Info("Medicare CustomerResult Sync for tag : " + tag.Alias);
                        var path           = _medicareSyncCustomSettingsPath + "MedicareCustomerResultSync" + tag.Alias + ".xml";
                        var customSettings = _customSettingManager.Deserialize(path);

                        if (customSettings == null || !customSettings.LastTransactionDate.HasValue)
                        {
                            customSettings = new CustomSettings {
                                LastTransactionDate = DateTime.Now.AddHours(-2)
                            };
                        }

                        if (customSettings.LastTransactionDate != null)
                        {
                            var exportFromTime = customSettings.LastTransactionDate.Value;
                            var customerIds    = _customerRepository.GetRecentResultUpdatedForMedicareSync(exportFromTime, tag.Alias).ToArray();
                            if (customerIds.Any())
                            {
                                var events = customerIds.Select(x => x.EventId).Distinct().ToArray();
                                var eventIdsWithMammogramTest       = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.Mammogram).ToArray();
                                var eventIdsWithEchocardiogram      = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvEcho).ToArray();
                                var eventIdsWithAwvLipid            = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvLipid).ToArray();
                                var eventIdsWithAwvSpiro            = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvSpiro).ToArray();
                                var eventIdsWithDiabeticRetinopathy = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.DiabeticRetinopathy).ToArray();
                                var eventIdsWithUrineMicroalbumin   = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.UrineMicroalbumin).ToArray();
                                var eventIdsWithAwvEkg       = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvEkg).ToArray();
                                var eventIdsWithAwvHba1C     = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvHBA1C).ToArray();
                                var eventIdsWithAwvAaa       = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvAAA).ToArray();
                                var eventIdsWithAwvAbi       = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.AwvABI).ToArray();
                                var eventIdsWithQuantaFloAbi = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.QuantaFloABI).ToArray();
                                var eventIdsWithLead         = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.Lead).ToArray();
                                var eventIdsWithBp           = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.Hypertension).ToArray();
                                var eventList = _eventRepository.GetEvents(events).ToArray();
                                //var eventIdsWithMonoFilament = _customerRepository.GetEventWithTest(events, tag.Alias, (long)TestType.Monofilament).ToArray();
                                const int pageSize   = 25;
                                var       totalPages = Math.Ceiling((double)(customerIds.Count()) / pageSize);
                                for (int i = 0; i < totalPages; i++)
                                {
                                    var currentList = customerIds.Skip(i * pageSize).Take(pageSize).ToArray();
                                    try
                                    {
                                        foreach (var medicareResultEditModel in currentList)
                                        {
                                            var eventData       = eventList.First(e => e.Id == medicareResultEditModel.EventId);
                                            var isNewResultFlow = eventData.EventDate >= _settings.ResultFlowChangeDate;

                                            var evaluatingPhysicians = _physicianEvaluationRepsoitory.GetPhysicianEvaluation(medicareResultEditModel.EventCustomerId);
                                            if (evaluatingPhysicians != null)
                                            {
                                                var primaryEvalRecord = evaluatingPhysicians != null?evaluatingPhysicians.Where(p => p.IsPrimaryEvaluator).OrderByDescending(p => p.EvaluationEndTime ?? p.EvaluationStartTime).FirstOrDefault() : null;

                                                var primaryPhysicianId  = primaryEvalRecord != null ? primaryEvalRecord.PhysicianId : 0;
                                                var overreadPhysicianId = primaryEvalRecord != null?evaluatingPhysicians.Where(p => !p.IsPrimaryEvaluator && p.EvaluationStartTime > primaryEvalRecord.EvaluationStartTime).OrderByDescending(
                                                    p => p.EvaluationEndTime ?? p.EvaluationStartTime).Select(p => p.PhysicianId).FirstOrDefault() : 0;

                                                medicareResultEditModel.PhysicianOruId = overreadPhysicianId > 0 ? overreadPhysicianId : primaryPhysicianId;
                                            }



                                            if (eventIdsWithBp.Contains(medicareResultEditModel.EventId)) //1
                                            {
                                                // Blood Pressure Evaluation Test or  Hypertension
                                                var testResultRepository = new HypertensionTestRepository();
                                                var aaaTestResult        = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                var aaaTest = ((Core.Medical.Domain.HypertensionTestResult)aaaTestResult);
                                                if (aaaTest != null && aaaTest.TestNotPerformed == null &&
                                                    aaaTest.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.BpReading           = new MedicareResultEditModel.Bp();
                                                    medicareResultEditModel.BpReading.Systolic  = aaaTest.Systolic != null ? aaaTest.Systolic.Reading : null;
                                                    medicareResultEditModel.BpReading.Diastolic = aaaTest.Diastolic != null ? aaaTest.Diastolic.Reading : null;
                                                }
                                            }
                                            if (eventIdsWithAwvAaa.Contains(medicareResultEditModel.EventId)) //1
                                            {
                                                // Update the AAA result
                                                var testResultRepository = new AwvAaaTestRepository();
                                                var aaaTestResult        = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                var aaaTest = ((Core.Medical.Domain.AwvAaaTestResult)aaaTestResult);
                                                if (aaaTest != null && aaaTest.Finding != null && aaaTest.TestNotPerformed == null &&
                                                    aaaTest.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.AaaResult                  = new MedicareResultEditModel.AaaReadings();
                                                    medicareResultEditModel.AaaResult.AortaSize        = aaaTest.Finding != null ? aaaTest.Finding.Label : null;
                                                    medicareResultEditModel.AaaResult.AorticDissection = aaaTest.AorticDissection != null && aaaTest.AorticDissection.Reading;
                                                    medicareResultEditModel.AaaResult.Plaque           = aaaTest.Plaque != null && aaaTest.Plaque.Reading;
                                                    medicareResultEditModel.AaaResult.Thrombus         = aaaTest.Thrombus != null && aaaTest.Thrombus.Reading;

                                                    if (aaaTest.IncidentalFindings != null)
                                                    {
                                                        foreach (var standardFinding in aaaTest.IncidentalFindings)
                                                        {
                                                            if (standardFinding.Label == "Aortic Stenosis")
                                                            {
                                                                medicareResultEditModel.AaaResult.AorticStenosis = true;
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            if (eventIdsWithAwvAbi.Contains(medicareResultEditModel.EventId))//2
                                            {
                                                // AwvAbi
                                                var testResultRepository = new AwvAbiTestRepository();
                                                var padTestResult        = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                var aaaTest = ((Core.Medical.Domain.AwvAbiTestResult)padTestResult);
                                                if (aaaTest != null && aaaTest.Finding != null && aaaTest.TestNotPerformed == null &&
                                                    aaaTest.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.PadReading         = new MedicareResultEditModel.PadTestReadings();
                                                    medicareResultEditModel.PadReading.Finding = aaaTest.Finding.Label;
                                                }
                                            }
                                            if (eventIdsWithQuantaFloAbi.Contains(medicareResultEditModel.EventId))//3
                                            {
                                                // QuantaFlo Abi
                                                var testResultRepository = new QuantaFloABITestRepository();
                                                var padTestResult        = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                var aaaTest = ((Core.Medical.Domain.QuantaFloABITestResult)padTestResult);
                                                if (aaaTest != null && aaaTest.Finding != null && aaaTest.TestNotPerformed == null &&
                                                    aaaTest.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.QuantaFloReading         = new MedicareResultEditModel.QuantaFloReadings();
                                                    medicareResultEditModel.QuantaFloReading.Finding = aaaTest.Finding.Label;
                                                }
                                            }
                                            if (eventIdsWithLead.Contains(medicareResultEditModel.EventId))//5
                                            {
                                                // Lead
                                                var testResultRepository = new LeadTestRepository();
                                                var leadTestResult       = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                var leadTest             = ((Core.Medical.Domain.LeadTestResult)leadTestResult);
                                                if (leadTest != null && leadTest.TestNotPerformed == null &&
                                                    leadTest.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.LeadReading = new MedicareResultEditModel.LeadReadings();
                                                    if (leadTest.LeftResultReadings != null)
                                                    {
                                                        medicareResultEditModel.LeadReading.LNoVisualPlaque             = leadTest.LeftResultReadings.NoVisualPlaque != null && leadTest.LeftResultReadings.NoVisualPlaque.Reading.HasValue && leadTest.LeftResultReadings.NoVisualPlaque.Reading.Value;
                                                        medicareResultEditModel.LeadReading.LVisuallyDemonstratedPlaque = leadTest.LeftResultReadings.VisuallyDemonstratedPlaque != null && leadTest.LeftResultReadings.VisuallyDemonstratedPlaque.Reading.HasValue && leadTest.LeftResultReadings.VisuallyDemonstratedPlaque.Reading.Value;
                                                        medicareResultEditModel.LeadReading.LModerateStenosis           = leadTest.LeftResultReadings.ModerateStenosis != null && leadTest.LeftResultReadings.ModerateStenosis.Reading.HasValue && leadTest.LeftResultReadings.ModerateStenosis.Reading.Value;
                                                        medicareResultEditModel.LeadReading.LPossibleOcclusion          = leadTest.LeftResultReadings.PossibleOcclusion != null && leadTest.LeftResultReadings.PossibleOcclusion.Reading.HasValue && leadTest.LeftResultReadings.PossibleOcclusion.Reading.Value;
                                                    }
                                                    if (leadTest.LowVelocityLeft != null)
                                                    {
                                                        medicareResultEditModel.LeadReading.LowVelocityLeft = true;
                                                    }
                                                    if (leadTest.RightResultReadings != null)
                                                    {
                                                        medicareResultEditModel.LeadReading.RNoVisualPlaque             = leadTest.RightResultReadings.NoVisualPlaque != null && leadTest.RightResultReadings.NoVisualPlaque.Reading.HasValue && leadTest.RightResultReadings.NoVisualPlaque.Reading.Value;
                                                        medicareResultEditModel.LeadReading.RVisuallyDemonstratedPlaque = leadTest.RightResultReadings.VisuallyDemonstratedPlaque != null && leadTest.RightResultReadings.VisuallyDemonstratedPlaque.Reading.HasValue && leadTest.RightResultReadings.VisuallyDemonstratedPlaque.Reading.Value;
                                                        medicareResultEditModel.LeadReading.RModerateStenosis           = leadTest.RightResultReadings.ModerateStenosis != null && leadTest.RightResultReadings.ModerateStenosis.Reading.HasValue && leadTest.RightResultReadings.ModerateStenosis.Reading.Value;
                                                        medicareResultEditModel.LeadReading.RPossibleOcclusion          = leadTest.RightResultReadings.PossibleOcclusion != null && leadTest.RightResultReadings.PossibleOcclusion.Reading.HasValue && leadTest.RightResultReadings.PossibleOcclusion.Reading.Value;
                                                    }
                                                    if (leadTest.LowVelocityRight != null)
                                                    {
                                                        medicareResultEditModel.LeadReading.LowVelocityRight = true;
                                                    }
                                                }
                                            }

                                            if (eventIdsWithMammogramTest.Contains(medicareResultEditModel.EventId))
                                            {
                                                // Update the mammogram result
                                                var testResultRepository = new MammogramTestRepository();
                                                var mammogramTestResult  = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                var mamoTest             = ((Core.Medical.Domain.MammogramTestResult)mammogramTestResult);
                                                if (mamoTest != null && mamoTest.Finding != null && mamoTest.TestNotPerformed == null && mamoTest.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.MammogramReading = mamoTest.Finding.Label;
                                                }
                                            }
                                            if (eventIdsWithAwvSpiro.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new AwvSpiroTestRepository();
                                                var awvSpiroTestResult   = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvSpiroTestResult != null && awvSpiroTestResult.TestNotPerformed == null && awvSpiroTestResult.UnableScreenReason == null)
                                                {
                                                    if (awvSpiroTestResult.ResultStatus != null)
                                                    {
                                                        medicareResultEditModel.AwvSpiroStateNumber = (int)awvSpiroTestResult.ResultStatus.StateNumber;
                                                    }
                                                    var spirotest = ((Core.Medical.Domain.AwvSpiroTestResult)awvSpiroTestResult);
                                                    if (spirotest.Finding != null)
                                                    {
                                                        medicareResultEditModel.AwvSpiroFindingLabel = spirotest.Finding.Label;
                                                    }
                                                    if (spirotest.Obstructive != null)
                                                    {
                                                        medicareResultEditModel.AwvSpiroObstructiveLabel = spirotest.Obstructive.Label.ToString();
                                                    }
                                                }
                                            }
                                            //if (eventIdsWithMonoFilament.Contains(medicareResultEditModel.EventId))
                                            //{
                                            //    var testResultRepository = new MonofilamentTestRepository();
                                            //    var monoTestResult = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId);
                                            //    if (monoTestResult != null && monoTestResult.ResultStatus != null)
                                            //    {
                                            //        medicareResultEditModel.MonoFilamentStateNumber = (int)monoTestResult.ResultStatus.StateNumber;
                                            //    }
                                            //}
                                            if (eventIdsWithEchocardiogram.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new AwvEchocardiogramTestRepository();
                                                var awvEchoTestResult    = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvEchoTestResult != null && awvEchoTestResult.TestNotPerformed == null && awvEchoTestResult.UnableScreenReason == null)
                                                {
                                                    try
                                                    {
                                                        if (awvEchoTestResult != null && awvEchoTestResult.ResultStatus != null)
                                                        {
                                                            medicareResultEditModel.AwvEchoStateNumber = (int)awvEchoTestResult.ResultStatus.StateNumber;
                                                        }
                                                        var echocartest = ((Core.Medical.Domain.AwvEchocardiogramTestResult)awvEchoTestResult);

                                                        medicareResultEditModel.AwvEchoFindingLabel   = echocartest.EstimatedEjactionFraction != null ? echocartest.EstimatedEjactionFraction.Label : null;
                                                        medicareResultEditModel.EchocardiogramReading = new MedicareResultEditModel.EchocardiogramReadings();

                                                        if (echocartest.EstimatedEjactionFraction != null)
                                                        {
                                                            medicareResultEditModel.EchocardiogramReading.EstimatedEjactionFractionMin = echocartest.EstimatedEjactionFraction.MinValue;
                                                            medicareResultEditModel.EchocardiogramReading.EstimatedEjactionFractionMax = echocartest.EstimatedEjactionFraction.MaxValue;
                                                        }
                                                        //Aortic
                                                        medicareResultEditModel.EchocardiogramReading.Aortic = echocartest.Aortic != null && echocartest.Aortic.Reading;
                                                        if (echocartest.AorticMorphology != null)
                                                        {
                                                            foreach (var standardFinding in echocartest.AorticMorphology)
                                                            {
                                                                if (standardFinding.Label == "Stenosis")
                                                                {
                                                                    medicareResultEditModel.EchocardiogramReading.AorticStenosis = true;
                                                                }
                                                            }
                                                        }
                                                        var aorticRegurgitation = echocartest.AorticRegurgitation != null ? echocartest.AorticRegurgitation.Label : null;
                                                        medicareResultEditModel.EchocardiogramReading.AorticRegurgitation = aorticRegurgitation != null ? (aorticRegurgitation == "Mod" ? "Moderate" : aorticRegurgitation) : null;

                                                        //Mitral
                                                        medicareResultEditModel.EchocardiogramReading.Mitral = echocartest.Mitral != null && echocartest.Mitral.Reading;
                                                        if (echocartest.MitralMorphology != null)
                                                        {
                                                            foreach (var standardFinding in echocartest.MitralMorphology)
                                                            {
                                                                if (standardFinding.Label == "Stenosis")
                                                                {
                                                                    medicareResultEditModel.EchocardiogramReading.MitralStenosis = true;
                                                                }
                                                                if (standardFinding.Label == "Mitral Prolapse")
                                                                {
                                                                    medicareResultEditModel.EchocardiogramReading.MitralProlapse = true;
                                                                }
                                                            }
                                                        }
                                                        var mitralRegurgitation = echocartest.MitralRegurgitation != null ? echocartest.MitralRegurgitation.Label : null;
                                                        medicareResultEditModel.EchocardiogramReading.MitralRegurgitation = mitralRegurgitation != null ? (mitralRegurgitation == "Mod" ? "Moderate" : mitralRegurgitation) : null;

                                                        //Pulmonic
                                                        medicareResultEditModel.EchocardiogramReading.Pulmonic = echocartest.Pulmonic != null && echocartest.Pulmonic.Reading;
                                                        var pulmonicRegurgitation = echocartest.PulmonicRegurgitation != null ? echocartest.PulmonicRegurgitation.Label : null;
                                                        medicareResultEditModel.EchocardiogramReading.PulmonicRegurgitation = pulmonicRegurgitation != null ? (pulmonicRegurgitation == "Mod" ? "Moderate" : pulmonicRegurgitation) : null;


                                                        //Tricuspid
                                                        medicareResultEditModel.EchocardiogramReading.Tricuspid     = echocartest.Tricuspid != null && echocartest.Tricuspid.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.HighOrGreater = echocartest.MorphologyTricuspidHighOrGreater != null && echocartest.MorphologyTricuspidHighOrGreater.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.TricuspidPap  = echocartest.TricuspidPap != null ? echocartest.TricuspidPap.Reading : null;
                                                        var tricuspidRegurgitation = echocartest.TricuspidRegurgitation != null ? echocartest.TricuspidRegurgitation.Label : null;
                                                        medicareResultEditModel.EchocardiogramReading.TricuspidRegurgitation = tricuspidRegurgitation != null ? (tricuspidRegurgitation == "Mod" ? "Moderate" : tricuspidRegurgitation) : null;

                                                        //DiastolicDysfunction
                                                        medicareResultEditModel.EchocardiogramReading.DiastolicDysfunction        = echocartest.DiastolicDysfunction != null && echocartest.DiastolicDysfunction.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.DistolicDysfunctionFinding  = echocartest.DistolicDysfunctionFinding != null ? echocartest.DistolicDysfunctionFinding.Label : null;
                                                        medicareResultEditModel.EchocardiogramReading.DiastolicDysfunctionEeRatio = echocartest.DiastolicDysfunctionEeRatio != null ? echocartest.DiastolicDysfunctionEeRatio.Reading : null;

                                                        medicareResultEditModel.EchocardiogramReading.AorticRoot             = echocartest.AorticRoot != null && echocartest.AorticRoot.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.Sclerotic              = echocartest.Sclerotic != null && echocartest.Sclerotic.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.Atherosclerosis        = echocartest.Atherosclerosis != null && echocartest.Atherosclerosis.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.VentricularHypertrophy = echocartest.VentricularHypertrophy != null && echocartest.VentricularHypertrophy.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.Arrythmia              = echocartest.Arrythmia != null && echocartest.Arrythmia.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.AFib     = echocartest.AFib != null && echocartest.AFib.Reading;
                                                        medicareResultEditModel.EchocardiogramReading.AFlutter = echocartest.AFlutter != null && echocartest.AFlutter.Reading;
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        _logger.Error(" error EchocardiogramReading   Customer : " + medicareResultEditModel.CustomerId + " Message: " + ex.Message + "\n stack Trace: " + ex.StackTrace);
                                                    }
                                                }
                                            }
                                            if (eventIdsWithUrineMicroalbumin.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new UrineMicroalbuminTestRepository();
                                                var awvUrinTestResult    = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvUrinTestResult != null && awvUrinTestResult.ResultStatus != null && awvUrinTestResult.TestNotPerformed == null && awvUrinTestResult.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.AwvUrinStateNumber = (int)awvUrinTestResult.ResultStatus.StateNumber;
                                                    var urintest = ((Core.Medical.Domain.UrineMicroalbuminTestResult)awvUrinTestResult);
                                                    if (urintest != null && urintest.Finding != null)
                                                    {
                                                        medicareResultEditModel.AwvUrinFindingLabel = urintest.Finding.Label;
                                                    }
                                                }
                                            }


                                            if (eventIdsWithAwvLipid.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new AwvLipidTestRepository();
                                                var awvLipidTestResult   = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvLipidTestResult != null && awvLipidTestResult.ResultStatus != null && awvLipidTestResult.TestNotPerformed == null &&
                                                    awvLipidTestResult.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.AwvLipidStateNumber = (int)awvLipidTestResult.ResultStatus.StateNumber;
                                                    var awvLipid = ((Core.Medical.Domain.AwvLipidTestResult)awvLipidTestResult);
                                                    if (awvLipid != null)
                                                    {
                                                        medicareResultEditModel.LipidReading = new MedicareResultEditModel.Lipid();
                                                        if (awvLipid.TotalCholestrol != null &&
                                                            awvLipid.TotalCholestrol.Finding != null)
                                                        {
                                                            medicareResultEditModel.AwvLipidTotalCholestrol = awvLipid.TotalCholestrol.Reading;
                                                            medicareResultEditModel.LipidReading.Tc         = awvLipid.TotalCholestrol.Reading;
                                                        }
                                                        if (awvLipid.HDL != null && awvLipid.HDL.Finding != null)
                                                        {
                                                            medicareResultEditModel.LipidReading.Hdl = awvLipid.HDL.Reading;
                                                        }
                                                        if (awvLipid.LDL != null && awvLipid.LDL.Finding != null)
                                                        {
                                                            medicareResultEditModel.LipidReading.Ldl = awvLipid.LDL.Reading;
                                                        }
                                                        if (awvLipid.TriGlycerides != null && awvLipid.TriGlycerides.Finding != null)
                                                        {
                                                            medicareResultEditModel.LipidReading.Trig = awvLipid.TriGlycerides.Reading;
                                                        }
                                                    }
                                                }
                                            }
                                            if (eventIdsWithDiabeticRetinopathy.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new DiabeticRetinopathyTestRepository();
                                                var awvDrsTestResult     = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvDrsTestResult != null && awvDrsTestResult.ResultStatus != null && awvDrsTestResult.TestNotPerformed == null && awvDrsTestResult.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.AwvDrsStateNumber = (int)awvDrsTestResult.ResultStatus.StateNumber;
                                                }
                                            }
                                            if (eventIdsWithAwvEkg.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new AwvEkgTestRepository();
                                                var awvEkgTestResult     = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvEkgTestResult != null && awvEkgTestResult.ResultStatus != null && awvEkgTestResult.TestNotPerformed == null && awvEkgTestResult.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.AwvEkgStateNumber = (int)awvEkgTestResult.ResultStatus.StateNumber;
                                                }
                                            }
                                            if (eventIdsWithAwvHba1C.Contains(medicareResultEditModel.EventId))
                                            {
                                                var testResultRepository = new AwvHemaglobinTestRepository();
                                                var awvHba1CTestResult   = testResultRepository.GetTestResults(medicareResultEditModel.CustomerId, medicareResultEditModel.EventId, isNewResultFlow);
                                                if (awvHba1CTestResult != null && awvHba1CTestResult.ResultStatus != null && awvHba1CTestResult.TestNotPerformed == null && awvHba1CTestResult.UnableScreenReason == null)
                                                {
                                                    medicareResultEditModel.AwvHbA1CStateNumber = (int)awvHba1CTestResult.ResultStatus.StateNumber;
                                                }
                                            }
                                        }
                                        _logger.Info("Medicare Customer Sync Starting  for tag: " + tag.Alias + " Page : " + (i + 1));

                                        var phyids = currentList.Where(x => x.PhysicianOruId > 0).Select(x => x.PhysicianOruId).ToArray();
                                        var names  = _organizationRoleUserRepository.GetNameIdPairofUsers(phyids);
                                        if (names.Any())
                                        {
                                            foreach (var medicareResultEditModel in currentList.Where(x => x.PhysicianOruId > 0))
                                            {
                                                var n = names.FirstOrDefault(x => x.FirstValue == medicareResultEditModel.PhysicianOruId);
                                                if (n != null)
                                                {
                                                    medicareResultEditModel.PhysicianName = n.SecondValue;
                                                }
                                            }
                                        }

                                        var model = new MedicareResultListmodel {
                                            EhrResultEditmodels = currentList.ToList()
                                        };

                                        var result = _medicareApiService.PostAnonymous <bool>(_settings.MedicareApiUrl + MedicareApiUrl.UpdateCustomerResult, model);
                                        if (result)
                                        {
                                            _logger.Info("Medicare Customer Sync for tag: " + tag.Alias + " Page : " + (i + 1));
                                        }
                                    }
                                    catch (Exception exception)
                                    {
                                        _logger.Error(" error occur Medicare Customer Sync for tag: " + tag.Alias + " Customer : " + (i + 1) + " Message: " + exception.Message + "\n stack Trace: " + exception.StackTrace);
                                    }
                                }
                            }

                            var kynCustomerIds = _kyaLabValuesRepository.GetRecentKynLabValuesForMedicareSync(exportFromTime, tag.Alias).ToArray();
                            if (kynCustomerIds.Any())
                            {
                                const int pageSize   = 25;
                                var       totalPages = Math.Ceiling((double)(kynCustomerIds.Count()) / pageSize);
                                for (var i = 0; i < totalPages; i++)
                                {
                                    var currentList = kynCustomerIds.Skip(i * pageSize).Take(pageSize).ToArray();
                                    try
                                    {
                                        _logger.Info("Medicare Customer Sync Starting  for tag: " + tag.Alias + " Page : " + (i + 1));

                                        var model = new MedicareKynResultListmodel()
                                        {
                                            EhrResultEditmodels = currentList.ToList()
                                        };
                                        var result = _medicareApiService.PostAnonymous <bool>(_settings.MedicareApiUrl + MedicareApiUrl.UpdateCustomerKynResult, model);
                                        if (result)
                                        {
                                            _logger.Info("Medicare Customer Sync for tag: " + tag.Alias + " Page : " + (i + 1));
                                        }
                                    }
                                    catch (Exception exception)
                                    {
                                        _logger.Error(" error occur Medicare Customer Sync for tag: " + tag.Alias + " Customer : " + (i + 1) + " Message: " + exception.Message + "\n stack Trace: " + exception.StackTrace);
                                    }
                                }
                            }
                        }


                        _customSettingManager.SerializeandSave(path, new CustomSettings {
                            LastTransactionDate = newLastTransactionDate
                        });
                    }
                }
            }
            catch (Exception exception)
            {
                _logger.Error("Error occurred for SyncCustomerResultPollingAgent Message: " + exception.Message + "\n stack Trace: " + exception.StackTrace);
            }
        }
        public ActionResult EditTeam(CallCenterTeamEditModel model)
        {
            try
            {
                model.AgentsMasterList = _organizationRoleUserRepository.GetIdNamePairofUsersByRole(Roles.CallCenterRep).Sort(OrderByDirection.Ascending, x => x.SecondValue);
                if (!model.Assignments.IsNullOrEmpty())
                {
                    model.AgentsMasterList = model.AgentsMasterList.Where(x => !model.Assignments.Select(y => y.FirstValue).Contains(x.FirstValue)).Select(x => x);
                }

                #region Validations
                model.Name                        = model.Name.Trim();
                model.FeedbackMessage             = new FeedbackMessageModel();
                model.FeedbackMessage.MessageType = UserInterfaceMessageType.Error;

                if (string.IsNullOrEmpty(model.Name))
                {
                    model.FeedbackMessage.MessageType = UserInterfaceMessageType.Warning;
                    model.FeedbackMessage.Message     = "Team name cannot be empty.";
                    return(View(model));
                }
                if (model.Name.Trim().Length < 5)
                {
                    model.FeedbackMessage.MessageType = UserInterfaceMessageType.Warning;
                    model.FeedbackMessage.Message     = "Team name must be at least 5 characters long.";
                    return(View(model));
                }

                var domain = _callCenterTeamRepository.GetById(model.Id);
                if (domain == null)
                {
                    model.FeedbackMessage.Message = "No such team present in our records";
                    return(View(model));
                }


                if (!string.Equals(domain.Name.ToLower(), model.Name.ToLower()))
                {
                    if (!_callCenterTeamRepository.IsTeamNameUnique(model.Name))
                    {
                        model.FeedbackMessage.Message = "Team name already in use";
                        return(View(model));
                    }
                }

                if (model.Assignments == null || (model.Assignments != null && !model.Assignments.Any()))
                {
                    model.FeedbackMessage.Message = "Add some agents to be in team";
                    return(View(model));
                }

                if (model.TypeId <= 0)
                {
                    model.FeedbackMessage.Message = "Invalid team type";
                    return(View(model));
                }
                #endregion

                #region Save Team Data
                domain.Name        = model.Name;
                domain.Description = model.Description;
                domain.TypeId      = model.TypeId;
                domain.DataRecorderMetaData.DataRecorderModifier = new OrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);
                domain.DataRecorderMetaData.DateModified         = DateTime.Now;
                _callCenterTeamRepository.Save(domain);
                #endregion

                #region Updating CallCenterAgentTeamLog
                var previousAgentsAssigned = _organizationRoleUserRepository.GetNameIdPairofUsers(_callCenterTeamRepository.GetTeamAgents(model.Id).ToArray());
                if (previousAgentsAssigned != null)
                {
                    var removedAgents = previousAgentsAssigned.Select(x => x.FirstValue).Except(model.Assignments.Select(x => x.FirstValue));
                    var newAgents     = model.Assignments.Select(x => x.FirstValue).Except(previousAgentsAssigned.Select(x => x.FirstValue));

                    if (removedAgents.Any())
                    {
                        var removedAgentslog = _callCenterAgentTeamLogRepository.GetAgentTeamLogForTeam(model.Id, removedAgents.ToArray());
                        foreach (var agent in removedAgentslog)
                        {
                            agent.DateRemoved            = DateTime.Now;
                            agent.RemovedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId;
                            agent.IsActive = false;
                        }
                        _callCenterAgentTeamLogRepository.SaveAll(removedAgentslog);
                    }

                    if (newAgents.Any())
                    {
                        var callCenterAgentTeamLogList = newAgents.Select(newAgent => new CallCenterAgentTeamLog
                        {
                            TeamId  = domain.Id,
                            AgentId = newAgent,
                            AssignedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId,
                            DateAssigned            = DateTime.Now,
                            DateRemoved             = null,
                            IsActive = true,
                            RemovedByOrgRoleUserId = null
                        }).ToList();
                        _callCenterAgentTeamLogRepository.SaveAll(callCenterAgentTeamLogList);
                    }
                }
                #endregion

                //Save current team and agent mapping
                _callCenterTeamRepository.SaveAgentTeamAssignment(domain.Id, model.Assignments.Select(x => x.FirstValue).ToList());

                model.FeedbackMessage.MessageType = UserInterfaceMessageType.Success;
                model.FeedbackMessage.Message     = "Team updated successfully";
                return(View(model));
            }
            catch (Exception ex)
            {
                IoC.Resolve <ILogManager>().GetLogger <Global>().Error(ex.Message);
                IoC.Resolve <ILogManager>().GetLogger <Global>().Error("Call Center Team EditTeam[Post] Stack Trace :" + ex.StackTrace);
                model.FeedbackMessage             = new FeedbackMessageModel();
                model.FeedbackMessage.MessageType = UserInterfaceMessageType.Error;
                model.FeedbackMessage.Message     = ex.Message;
                return(View(model));
            }
        }
示例#23
0
        public ListModelBase <HourlyAppointmentBookedModel, HourlyAppointmentsBookedListModelFilter> GetHourlyAppointmentsBooked(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var customFilter = filter as HourlyAppointmentsBookedListModelFilter;

            customFilter = customFilter ?? new HourlyAppointmentsBookedListModelFilter();

            var appFilter = new AppointmentsBookedListModelFilter
            {
                AccountId = customFilter.AccountId,
                FromDate  = customFilter.FromDate,
                ToDate    = customFilter.ToDate,
                ShowCustomersWithAppointment = customFilter.ShowCustomersWithAppointment,
                IsHealthPlanEvent            = true
            };

            var eventCustomers = _eventCustomerRepository.GetEventCustomersbyRegisterationDate(pageNumber, pageSize, appFilter, out totalRecords);

            if (eventCustomers.IsNullOrEmpty())
            {
                return(null);
            }

            var appointments = _appointmentRepository.GetByIds(eventCustomers.Where(ec => ec.AppointmentId.HasValue).Select(ec => ec.AppointmentId.Value).ToList());
            var eventIds     = eventCustomers.Select(ec => ec.EventId).Distinct().ToArray();
            var model        = _eventReportingService.GetEventVolumeModel(eventCustomers.Select(ec => ec.EventId).Distinct().ToArray());

            var customers             = _customerRepository.GetCustomers(eventCustomers.Select(ec => ec.CustomerId).Distinct().ToArray());
            var customerIds           = customers.Select(x => x.CustomerId);
            var orders                = _orderRepository.GetAllOrdersByEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray(), true);
            var customerEligibilities = _customerEligibilityRepository.GetCustomerEligibilityByCustomerIdsAndYear(customerIds, DateTime.Today.Year);

            if (customerEligibilities.IsNullOrEmpty())
            {
                customerEligibilities = new List <CustomerEligibility>();
            }

            var eventPackages = _eventPackageRepository.GetbyEventIds(eventIds);
            var eventTests    = _eventTestRepository.GetByEventIds(eventIds);

            var sourceCodes = _sourceCodeRepository.GetSourceCodeByIds(orders.SelectMany(o => o.OrderDetails.Where(od => od.SourceCodeOrderDetail != null && od.SourceCodeOrderDetail.IsActive)
                                                                                         .Select(od => od.SourceCodeOrderDetail.SourceCodeId)).Distinct().ToArray());

            var orgRoleUserIds = eventCustomers.Where(ec => ec.DataRecorderMetaData != null && ec.DataRecorderMetaData.DataRecorderCreator != null).Select(ec => ec.DataRecorderMetaData.DataRecorderCreator.Id).ToList();

            var eventAppointmentChangeLogs = _eventAppointmentChangeLogRepository.GetByEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray()).ToArray();

            orgRoleUserIds.AddRange(eventAppointmentChangeLogs.Select(eacl => eacl.CreatedByOrgRoleUserId));

            var registeredbyAgent = _organizationRoleUserRepository.GetOrganizationRoleUsers(orgRoleUserIds);

            var roles = _roleRepository.GetAll();

            var registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray()).ToArray();

            var callDetails = _callCenterCallRepository.GetCallDetails(customers);

            var shippingDetailIds = orders.SelectMany(o => o.OrderDetails.SelectMany(od => od.ShippingDetailOrderDetails.Select(sdod => sdod.ShippingDetailId))).ToArray();
            var shippingDetails   = _shippingDetailRepository.GetByIds(shippingDetailIds);
            var cdShippingOption  = _shippingOptionRepository.GetShippingOptionByProductId((long)Product.UltraSoundImages);
            var shippingOptions   = _shippingOptionRepository.GetAllShippingOptions();

            var customTags = _customTagRepository.GetByCustomerIds(customerIds);

            var tagNames               = customers.Where(x => !string.IsNullOrEmpty(x.Tag)).Select(x => x.Tag).ToArray();
            var corporateAccount       = _corporateAccountRepository.GetByTags(tagNames);
            var corporateAccountIds    = corporateAccount.Select(x => x.Id).ToArray();
            var accountAdditionalField = _accountAdditionalFieldRepository.GetAccountAdditionalFieldsByAccountIds(corporateAccountIds);

            var primaryCarePhysicians = _primaryCarePhysicianRepository.GetByCustomerIds(eventCustomers.Select(ec => ec.CustomerId).Distinct().ToArray());
            var languages             = _languageRepository.GetAll();
            var pcpAppointments       = _pcpAppointmentRepository.GetByEventCustomerIds(eventCustomers.Select(ec => ec.Id).ToArray());

            return(_customAppointmentsBookedModelFactory.CreateHourlyModel(eventCustomers, appointments, orders, model, customers, registeredbyAgent, roles, registeredbyAgentNameIdPair, sourceCodes, callDetails,
                                                                           shippingDetails, cdShippingOption, shippingOptions, eventAppointmentChangeLogs, primaryCarePhysicians, eventPackages, eventTests, languages, customTags, corporateAccount,
                                                                           accountAdditionalField, pcpAppointments, customerEligibilities));
        }
示例#24
0
        public ListModelBase <TestNotPerformedViewModel, TestNotPerformedListModelFilter> GetTestNotPerformed(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var testNotPerformFilter = filter as TestNotPerformedListModelFilter;
            var testNotPerformed     = _testNotPerformedRepository.GetTestNotPerformedForHealthPlan(testNotPerformFilter, pageNumber, pageSize, out totalRecords);

            if (testNotPerformed == null || !testNotPerformed.Any())
            {
                return(null);
            }

            var customerEventScreeningTestIds = testNotPerformed.Select(x => x.CustomerEventScreeningTestId).ToArray();

            var customerEventScreeningTests = _eventCustomerResultRepository.GetCustomerEventScreeningTestsByIds(customerEventScreeningTestIds);

            var customerEventTestStates = _customerEventTestStateRepository.GetCustomerEventTestState(customerEventScreeningTestIds);

            var orgRoleUserIds = customerEventTestStates.Where(cets => cets.ConductedByOrgRoleUserId.HasValue).Select(cets => cets.ConductedByOrgRoleUserId.Value).Distinct().ToArray();
            var idNamePairs    = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);

            var eventCustomerResults = _eventCustomerResultRepository.GetByIds(customerEventScreeningTests.Select(ces => ces.EventCustomerResultId).Distinct().ToArray());
            var eventIds             = eventCustomerResults.Select(ecr => ecr.EventId).Distinct().ToArray();

            var events = _eventRepository.GetEventswithPodbyIds(eventIds);
            var hosts  = _hostRepository.GetEventHosts(events.Select(x => x.Id));
            IEnumerable <OrderedPair <long, long> >   staffOrgRoleUserEventsPair = null;
            IEnumerable <OrderedPair <long, string> > staffNamePair = null;

            var npRoles = _eventRoleRepository.GetByName(_awvNpEventStaffRole);

            if (npRoles != null && npRoles.Any())
            {
                var eventStaffs = _eventStaffAssignmentRepository.GetForEvents(eventIds);
                var npRoleIds   = npRoles.Select(x => x.Id);

                if (eventStaffs != null && eventStaffs.Any())
                {
                    eventStaffs = eventStaffs.Where(x => npRoleIds.Contains(x.StaffEventRoleId)).ToArray();
                }

                staffOrgRoleUserEventsPair = eventStaffs.Select(p => new OrderedPair <long, long>(p.ScheduledStaffOrgRoleUserId, p.EventId)).ToArray();

                staffNamePair = _organizationRoleUserRepository.GetNameIdPairofUsers(staffOrgRoleUserEventsPair.Select(x => x.FirstValue).ToArray());
            }

            var customers = _customerRepository.GetCustomers(eventCustomerResults.Select(ecr => ecr.CustomerId).Distinct().ToArray());

            //var tags = customers.Select(x => x.Tag).Distinct().ToArray();

            //var corporateAccount = _corporateAccountRepository.GetByTags(tags);

            var accountIds = events.Where(x => x.AccountId.HasValue && x.AccountId > 0).Select(x => x.AccountId.Value).Distinct().ToArray();

            var corporateAccount = _corporateAccountRepository.GetByIds(accountIds);

            if (corporateAccount != null && corporateAccount.Any())
            {
                corporateAccount = corporateAccount.Where(x => x.IsHealthPlan);
            }

            var tests = ((IUniqueItemRepository <Test>)_testRepository).GetByIds(customerEventScreeningTests.Select(ces => ces.TestId).Distinct().ToArray());

            var customersPreApprovedTest = _preApprovedTestRepository.GetPreApprovedTestIdsByCustomerIds(eventCustomerResults.Select(x => x.Id));
            var pods = _podRepository.GetByIds(events.SelectMany(e => e.PodIds).Distinct());

            var eventCustomers = _eventCustomerRepository.GetByIds(customerEventScreeningTests.Select(ces => ces.EventCustomerResultId).Distinct().ToArray());

            return(_testNotPerformedFactory.Create(testNotPerformed, customerEventScreeningTests, eventCustomerResults, events, customers, tests,
                                                   customersPreApprovedTest, corporateAccount, pods, customerEventTestStates, idNamePairs, staffOrgRoleUserEventsPair, staffNamePair, hosts, eventCustomers));
        }
示例#25
0
        public ActionResult CustomerCallNotes(long customerId, long eventId = 0)
        {
            var customerCallNotes = _customerCallNotesRepository.GetCustomerNotes(customerId, true);

            customerCallNotes = customerCallNotes.Where(m => (m.NotesType == CustomerRegistrationNotesType.CancellationNote || m.NotesType == CustomerRegistrationNotesType.LeftWithoutScreeningNotes) || !string.IsNullOrWhiteSpace(m.Notes));

            var cancelledCustomerNotes = customerCallNotes.Where(m => m.NotesType == CustomerRegistrationNotesType.CancellationNote);
            var eventCustomers         = _eventCustomerRepository.GetbyCustomerId(customerId);

            var cancellationLogByEventCustomers = _eventAppointmentCancellationLogRepository.GetByEventCustomerIds(eventCustomers.Select(x => x.Id));

            if (cancelledCustomerNotes.Any())
            {
                foreach (var customerCallNote in cancelledCustomerNotes)
                {
                    var cancellationNote = cancellationLogByEventCustomers.FirstOrDefault(x => x.NoteId == customerCallNote.Id);
                    customerCallNote.ReasonName = cancellationNote != null ? ((CancelAppointmentReason)cancellationNote.ReasonId).GetDescription() : "N/A";
                    //var createdBy = customerCallNote.DataRecorderMetaData != null && customerCallNote.DataRecorderMetaData.DataRecorderCreator != null ?
                    //    orgRoleUsers.FirstOrDefault(x => x.FirstValue == customerCallNote.DataRecorderMetaData.DataRecorderCreator.Id) : null;
                    //customerCallNote.CreatedBy = createdBy != null ? createdBy.SecondValue : string.Empty;
                }
            }

            if (eventId > 0)
            {
                customerCallNotes = customerCallNotes.Where(ccn => !ccn.EventId.HasValue || (ccn.EventId.HasValue && ccn.EventId.Value == eventId)).ToArray();
            }

            var orders = _orderRepository.GetAllOrdersForCustomer(customerId);

            if (orders != null && orders.Any())
            {
                var refundRequests = _refundRequestRepository.GeRefundRequestByOrderIds(orders.Select(oec => oec.Id).ToArray(), RefundRequestType.CustomerCancellation);

                if (refundRequests != null && refundRequests.Any())
                {
                    var refundRequestNotes = new List <CustomerCallNotes>();
                    foreach (var refundRequest in refundRequests)
                    {
                        var cancellationLog = cancellationLogByEventCustomers.FirstOrDefault(x => x.RefundRequestId.HasValue && x.RefundRequestId.Value == refundRequest.Id);

                        refundRequestNotes.Add(new CustomerCallNotes
                        {
                            CustomerId           = customerId,
                            Notes                = refundRequest.Reason,
                            EventId              = cancellationLog != null ? cancellationLog.EventId : (long?)null,
                            ReasonName           = cancellationLog != null ? ((CancelAppointmentReason)cancellationLog.ReasonId).GetDescription() : string.Empty,
                            NotesType            = CustomerRegistrationNotesType.CancellationNote,
                            DataRecorderMetaData = new DataRecorderMetaData(refundRequest.RequestedByOrgRoleUserId, refundRequest.RequestedOn, null),
                        });
                    }

                    customerCallNotes = customerCallNotes.Concat(refundRequestNotes);
                }
            }

            cancellationLogByEventCustomers = cancellationLogByEventCustomers.Where(x => x.NoteId == null && x.RefundRequestId == null);

            if (cancellationLogByEventCustomers != null && cancellationLogByEventCustomers.Any())
            {
                var cancellationNotesLog = new List <CustomerCallNotes>();

                foreach (var cancellationLog in cancellationLogByEventCustomers)
                {
                    cancellationNotesLog.Add(new CustomerCallNotes
                    {
                        CustomerId           = customerId,
                        EventId              = cancellationLog.EventId,
                        Notes                = string.Empty,
                        NotesType            = CustomerRegistrationNotesType.CancellationNote,
                        ReasonName           = ((CancelAppointmentReason)cancellationLog.ReasonId).GetDescription(),
                        DataRecorderMetaData = new DataRecorderMetaData(cancellationLog.CreatedBy, cancellationLog.DateCreated, null),
                    });
                }

                customerCallNotes = customerCallNotes.Concat(cancellationNotesLog);
            }

            if (!customerCallNotes.IsNullOrEmpty())
            {
                customerCallNotes = customerCallNotes.OrderByDescending(x => x.DataRecorderMetaData.DateCreated);
            }

            var patientLeftNotes = customerCallNotes.Where(x => x.NotesType == CustomerRegistrationNotesType.LeftWithoutScreeningNotes);

            if (!patientLeftNotes.IsNullOrEmpty())
            {
                foreach (var patientLeftNote in patientLeftNotes)
                {
                    patientLeftNote.ReasonName = patientLeftNote.ReasonId.HasValue ? ((LeftWithoutScreeningReason)patientLeftNote.ReasonId.Value).GetDescription() : "";
                    //var createdBy = patientLeftNote.DataRecorderMetaData != null && patientLeftNote.DataRecorderMetaData.DataRecorderCreator != null ?
                    //    orgRoleUsers.FirstOrDefault(x => x.FirstValue == patientLeftNote.DataRecorderMetaData.DataRecorderCreator.Id) : null;
                    //patientLeftNote.CreatedBy = createdBy != null ? createdBy.SecondValue : string.Empty;
                }
            }

            var orgRoleUserIds = customerCallNotes.Where(x => x.DataRecorderMetaData != null && x.DataRecorderMetaData.DataRecorderCreator != null).Select(x => x.DataRecorderMetaData.DataRecorderCreator.Id).ToArray();
            var orgRoleUsers   = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds);

            foreach (var customerCallNote in customerCallNotes)
            {
                var createdBy = customerCallNote.DataRecorderMetaData != null && customerCallNote.DataRecorderMetaData.DataRecorderCreator != null?
                                orgRoleUsers.FirstOrDefault(x => x.FirstValue == customerCallNote.DataRecorderMetaData.DataRecorderCreator.Id) : null;

                customerCallNote.CreatedBy = createdBy != null ? createdBy.SecondValue : string.Empty;
            }

            return(View(customerCallNotes));
        }
示例#26
0
        public ListModelBase <HourlyOutreachCallReportModel, HourlyOutreachCallReportModelFilter> GetOutreachCallReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var calls = _callCenterCallRepository.GetOutreachCallQueueCustomer(filter as OutreachCallReportModelFilter, pageNumber, pageSize, out totalRecords);

            if (calls == null || !calls.Any())
            {
                return(null);
            }

            var customerIds = calls.Select(c => c.CalledCustomerId).ToArray();

            var customerEligibilities = _customerEligibilityRepository.GetCustomerEligibilityByCustomerIdsAndYear(customerIds, DateTime.Today.Year);

            if (customerEligibilities.IsNullOrEmpty())
            {
                customerEligibilities = new List <CustomerEligibility>();
            }

            var callQueueIds = calls.Where(x => x.CallQueueId.HasValue).Select(x => x.CallQueueId.Value).ToArray();

            var callQueues = _callQueueRepository.GetByIds(callQueueIds, false, true);

            var customers = _customerRepository.GetCustomers(customerIds);

            var customerTags = _corporateCustomerCustomTagRepository.GetByCustomerIds(customerIds);

            var eventIds = calls.Where(x => x.EventId > 0).Select(x => x.EventId);

            var events = _eventRepository.GetEventswithPodbyIds(eventIds);

            var organisationRoleIds = calls.Select(c => c.CreatedByOrgRoleUserId).ToArray();

            var callIds = calls.Select(c => c.Id).ToArray();

            EventBasicInfoListModel eventBasicInfoListModel = null;
            List <EventCustomer>    eventCusomters          = null;
            List <Appointment>      appointments            = null;
            IEnumerable <OrderedPair <long, string> > registeredbyAgentNameIdPair = null;

            if (events != null)
            {
                eventBasicInfoListModel = _eventBasicInfoListHelper.EventBasicInfoListForCallQueue(events);
            }

            if (events != null && !customerIds.IsNullOrEmpty())
            {
                eventCusomters = _eventCustomerRepository.GetByCustomerIds(customerIds).Where(s => eventIds.Contains(s.EventId)).ToList();
            }

            if (!eventCusomters.IsNullOrEmpty())
            {
                var appointmentIds = eventCusomters.Where(x => x.AppointmentId.HasValue).Select(x => x.AppointmentId.Value);
                appointments = _appointmentRepository.GetByIds(appointmentIds).ToList();
            }

            if (organisationRoleIds != null && !organisationRoleIds.IsNullOrEmpty())
            {
                registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(organisationRoleIds).ToArray();
            }

            var dispositionNotes = _callCenterNotesRepository.GetByCallIds(callIds.ToArray());

            var orderedPairsCustomersShippingDetails = _shippingDetailRepository.GetShippingDetailsIdCustomerId(customerIds);

            var customersShippingDetails   = _shippingDetailRepository.GetShippingDetailsForCustomerIds(customerIds);
            var customerShippingAddressIds = customersShippingDetails.Select(x => x.ShippingAddress.Id).ToList();
            var customerAddress            = _addressRepository.GetAddresses(customerShippingAddressIds);

            return(_outreachCallReportListModelFactory.CreateHourlyModel(customers, customerTags, calls, eventCusomters, eventBasicInfoListModel, appointments, registeredbyAgentNameIdPair, dispositionNotes, orderedPairsCustomersShippingDetails,
                                                                         customersShippingDetails, customerAddress, callQueues, customerEligibilities));
        }