public ListModelBase <InterviewInboundViewModel, InterviewInboundFilter> GetInterviewInboundReportList(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            filter = filter ?? new InterviewInboundFilter();
            var interviewInboundFilter = filter as InterviewInboundFilter ?? new InterviewInboundFilter();

            var responseVendorReportFilter = new ResponseVendorReportFilter
            {
                StartDate  = interviewInboundFilter.StartDate,
                EndDate    = interviewInboundFilter.EndDate,
                AccountId  = interviewInboundFilter.AccountId,
                CustomTags = interviewInboundFilter.CustomTags
            };

            var customerIds = _customerRepository.GetCustomersByCustomTag(responseVendorReportFilter, pageNumber, pageSize, out totalRecords);

            //var customerIds = _callRepository.GetForInterviewReport(filter as InterviewInboundFilter, pageNumber, pageSize, out totalRecords);
            if (customerIds.IsNullOrEmpty())
            {
                return(null);
            }

            var calls = _callRepository.GetCallsForInterviewReport(filter as InterviewInboundFilter, customerIds);

            var customers = customerIds.Any() ? _customerRepository.GetCustomers(customerIds.ToArray()) : new List <Customer>();

            //var eventCustomers = _eventCustomerRepository.GetEventCustomersByEventIdsCustomerIds(eventIds, customerIds) ?? new List<EventCustomer>();
            var eventCustomers   = _eventCustomerRepository.GetByEventIdsOrCustomerIds(interviewInboundFilter.StartDate, customerIds) ?? new List <EventCustomer>();
            var eventCustomerIds = eventCustomers.Select(x => x.Id);

            var eventIds = eventCustomers.Select(x => x.EventId).ToArray();
            var events   = _eventRepository.GetEvents(eventIds);

            var chaseOutbounds = _chaseOutboundRepository.GetByCustomerIds(customerIds);

            var customerChaseCampaigns = _chaseCampaignRepository.GetCustomerChaseCampaignsByCustomerIds(customerIds.ToArray());
            var chaseCampaignIds       = customerChaseCampaigns.Select(x => x.ChaseCampaignId).Distinct();
            var chaseCampaigns         = _chaseCampaignRepository.GetByIds(chaseCampaignIds);

            var appointmentIds = eventCustomers.Where(x => x.AppointmentId.HasValue).Select(x => x.AppointmentId.Value);
            var appointments   = _appointmentRepository.GetByIds(appointmentIds);

            var eventAppointmentCancellatonLogs = _eventAppointmentCancellationLogRepository.GetByEventCustomerIds(eventCustomerIds);

            var noteIds           = eventAppointmentCancellatonLogs.Where(x => x.NoteId.HasValue).Select(x => x.NoteId.Value);
            var customerCallNotes = _customerCallNotesRepository.GetByIds(noteIds);

            var eventIdStaffIdPairs = _eventRepository.GetEventStaffPairs(eventIds);

            var orgRoleUserIds        = eventIdStaffIdPairs.Select(x => x.SecondValue).Distinct().ToArray();
            var organizationRoleUsers = _organizationRoleUserRepository.GetOrganizationRoleUsers(orgRoleUserIds);

            var userIds = organizationRoleUsers.Select(x => x.UserId).Distinct().ToList();
            var users   = _userRepository.GetUsers(userIds);

            return(_interviewInboundReportFactory.Create(eventCustomers, customers, chaseOutbounds, customerChaseCampaigns, chaseCampaigns, calls, appointments, events, eventAppointmentCancellatonLogs, customerCallNotes, eventIdStaffIdPairs,
                                                         organizationRoleUsers, users));
        }
示例#2
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));
        }
示例#3
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));
        }
        public ListModelBase <ResponseVendorReportViewModel, ResponseVendorReportFilter> GetResponseVendorReportList(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            filter = filter ?? new ResponseVendorReportFilter();
            var responseVendorReportFilter = filter as ResponseVendorReportFilter ?? new ResponseVendorReportFilter();

            var customerIds = _customerRepository.GetCustomersByCustomTag(filter as ResponseVendorReportFilter, pageNumber, pageSize, out totalRecords);

            //var customerIds = _callRepository.GetForResponseVendorReport(filter as ResponseVendorReportFilter, pageNumber, pageSize, out totalRecords);
            if (customerIds.IsNullOrEmpty())
            {
                return(null);
            }

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

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

            var corporateAccount = _corporateAccountRepository.GetById(((ResponseVendorReportFilter)filter).AccountId);

            var calls = _callRepository.GetCallsForResponseVendorReport(filter as ResponseVendorReportFilter, customerIds);

            var customers = customerIds.Any() ? _customerRepository.GetCustomers(customerIds.ToArray()) : new List <Customer>();

            var eventCustomers = _eventCustomerRepository.GetByEventIdsOrCustomerIds(responseVendorReportFilter.StartDate, customerIds) ?? new List <EventCustomer>();

            var eventIds = eventCustomers.Select(x => x.EventId).ToArray();
            var events   = _eventRepository.GetByIds(eventIds);

            var languages = _languageRepository.GetAll();

            var appointmentIds = eventCustomers.Where(x => x.AppointmentId.HasValue).Select(x => x.AppointmentId.Value);
            var appointments   = _appointmentRepository.GetByIds(appointmentIds);

            var eventCustomerIds = eventCustomers.Select(x => x.Id);
            var pcpAppointments  = _pcpAppointmentRepository.GetByEventCustomerIds(eventCustomerIds);
            var pcpDispositions  = _pcpDispositionRepository.GetByEventCustomerIds(eventCustomerIds);

            var eventCustomerBarriers = _barrierRepository.GetCustomerBarrierByEventCustomerIds(eventCustomerIds);

            var barrierIds = eventCustomerBarriers.Select(x => x.BarrierId).ToArray();
            var barriers   = _barrierRepository.GetByIds(barrierIds);

            var chaseOutbounds = _chaseOutboundRepository.GetByCustomerIds(customerIds);

            var customerChaseCampaigns = _chaseCampaignRepository.GetCustomerChaseCampaignsByCustomerIds(customerIds.ToArray());
            var chaseCampaignIds       = customerChaseCampaigns.Select(x => x.ChaseCampaignId).Distinct();
            var chaseCampaigns         = _chaseCampaignRepository.GetByIds(chaseCampaignIds);

            var campaignTypeIds = chaseCampaigns.Select(x => x.ChaseCampaignTypeId).ToArray();
            var campaignTypes   = _chaseCampaignTypeRepository.GetByIds(campaignTypeIds);

            var eventAppointmentCancellatonLogs = _eventAppointmentCancellationLogRepository.GetByEventCustomerIds(eventCustomerIds);

            var resultPostedToPlanFileName = Path.Combine(_settings.ResultPostedToPlanPath, string.Format("resultPostedto_{0}.xml", corporateAccount.Tag));
            var resultPosted = _resultPdfPostedSerializer.Deserialize(resultPostedToPlanFileName);

            var resultPostedCustomers = resultPosted != null ? resultPosted.Customer : new List <CustomerInfo>();

            return(_responseVendorReportFactory.Create(customers, languages, eventCustomers, appointments, events, calls, pcpAppointments, pcpDispositions, eventCustomerBarriers, barriers, chaseOutbounds, customerChaseCampaigns,
                                                       chaseCampaigns, campaignTypes, eventAppointmentCancellatonLogs, resultPostedCustomers, customerEligibilities));
        }