public CallQueueEditModel GetCallQueue(long callQueueId) { var callQueue = _callQueueRepository.GetById(callQueueId); var callQueueEditModel = Mapper.Map <CallQueue, CallQueueEditModel>(callQueue); if (callQueueEditModel.ScriptId > 0) { var script = _scriptRepository.GetById(callQueueEditModel.ScriptId); callQueueEditModel.ScriptText = script.ScriptText; } var callQueueCriterias = _callQueueCriteriaRepository.GetByCallQueueId(callQueueId); var criteriaEditModels = Mapper.Map <IEnumerable <CallQueueCriteria>, IEnumerable <CallQueueCriteriaEditModel> >(callQueueCriterias); var criterias = _criteriaRepository.GetAll(); foreach (var callQueueCriteriaEditModel in criteriaEditModels) { callQueueCriteriaEditModel.Name = criterias.Where(c => c.Id == callQueueCriteriaEditModel.CriteriaId).Select(c => c.Name).Single(); } callQueueEditModel.Criterias = criteriaEditModels; var assginments = _callQueueAssignmentRepository.GetByCallQueueId(callQueueId); var assignmentEditModels = Mapper.Map <IEnumerable <CallQueueAssignment>, IEnumerable <CallQueueAssignmentEditModel> >(assginments); var idNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(assignmentEditModels.Select(a => a.AssignedOrgRoleUserId).ToArray()); foreach (var callQueueAssignmentEditModel in assignmentEditModels) { callQueueAssignmentEditModel.Name = idNamePairs.Where(inp => inp.FirstValue == callQueueAssignmentEditModel.AssignedOrgRoleUserId).Select(inp => inp.SecondValue).Single(); } callQueueEditModel.Assignments = assignmentEditModels; return(callQueueEditModel); }
public List <CallQueueCustomer> GetCallQueueCustomers(CallQueue queue) { var callQueuesCriterias = _callQueueCriteriaRepository.GetByCallQueueId(queue.Id); var callCriterias = (from qc in callQueuesCriterias orderby qc.Sequence select new { Id = qc.Id, CriteriaId = qc.CriteriaId, CallQueueId = qc.CallQueueId, qc.Condition, qc.Radius, qc.Zipcode, CustomerTempList = new List <CallQueueCustomer>() }).ToList(); var customerList = new List <CallQueueCustomer>(); for (int i = 0; i < callCriterias.Count(); i++) { if (callCriterias[i].CriteriaId == (long)QueueCriteria.AllCustomers) { var customers = _customerRepository.GetCustomerBasedOnGeography(callCriterias[i].Zipcode, callCriterias[i].Radius, false); if (customers == null || !customers.Any()) { continue; } foreach (long customerId in customers) { callCriterias[i].CustomerTempList.Add(new CallQueueCustomer { CallQueueId = queue.Id, CustomerId = customerId, CallQueueCriteriaId = callCriterias[i].Id }); } } else if (callCriterias[i].CriteriaId == (long)QueueCriteria.AllCustomersOlderThanOneYear) { var customers = _customerRepository.GetCustomerBasedOnGeography(callCriterias[i].Zipcode, callCriterias[i].Radius, true); if (customers == null || !customers.Any()) { continue; } foreach (long customerId in customers) { callCriterias[i].CustomerTempList.Add(new CallQueueCustomer { CallQueueId = queue.Id, CustomerId = customerId, CallQueueCriteriaId = callCriterias[i].Id }); } } else if (callCriterias[i].CriteriaId == (long)QueueCriteria.PhysicianPartner) { var customers = _customerRepository.GetPhysicianPartnerCustomerBasedOnGeography(callCriterias[i].Zipcode, callCriterias[i].Radius, _settings.PhysicianPartnerAccountId); if (customers == null || !customers.Any()) { continue; } foreach (long customerId in customers) { callCriterias[i].CustomerTempList.Add(new CallQueueCustomer { CallQueueId = queue.Id, CustomerId = customerId, CallQueueCriteriaId = callCriterias[i].Id }); } } else { var prospects = _prospectCustomerRepository.GetProspectsBasedOnGeography(callCriterias[i].Zipcode, callCriterias[i].Radius, ((QueueCriteria)callCriterias[i].CriteriaId).ToString()); if (prospects == null || !prospects.Any()) { continue; } foreach (var pc in prospects) { callCriterias[i].CustomerTempList.Add(new CallQueueCustomer { CallQueueId = queue.Id, CustomerId = pc.SecondValue, ProspectCustomerId = pc.FirstValue, CallQueueCriteriaId = callCriterias[i].Id }); } } } //creating master list from individual call criterias for (int i = 0; i < callCriterias.Count(); i++) { if (callCriterias.Count() == 1) { customerList = callCriterias[0].CustomerTempList; } else { //putting list in 0th element in the master list if (i == 0) { customerList = callCriterias[0].CustomerTempList; } else { //comparing condition between (AND/Or) current and previows element if (!callCriterias[i].Condition) { customerList.AddRange(callCriterias[i - 1].CustomerTempList.AsEnumerable().Intersect(callCriterias[i].CustomerTempList.AsEnumerable(), new CallQueueCustomerEqualityComparer()).ToList()); } else { customerList.AddRange(callCriterias[i].CustomerTempList); } } } } var finalList = (from c in customerList group c by new { c.CallQueueId, c.CustomerId, c.ProspectCustomerId } into g select new CallQueueCustomer { CallQueueId = g.Key.CallQueueId, CustomerId = g.Key.CustomerId, ProspectCustomerId = g.Key.ProspectCustomerId, CallQueueCriteriaId = g.Min(c => c.CallQueueCriteriaId) }).ToList(); return(finalList); }