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 void SendCustomersOnCallQueue() { try { var callQueues = _callQueueRepository.GetAll().Where(x => x.IsActive && (x.IsQueueGenerated == false || (DateTime.Now >= (x.LastQueueGeneratedDate.HasValue ? x.LastQueueGeneratedDate.Value.AddMinutes(x.QueueGenerationInterval.Value) : DateTime.Now)))); foreach (CallQueue queue in callQueues) { var callAssignMents = _callQueueAssignmentRepository.GetByCallQueueId(queue.Id); _callQueueCustomerRepository.DeleteForInActiveCallQueueCriteria(queue.Id); var customerList = _outboundCallQueueService.GetCallQueueCustomers(queue); //int callsToInsert = customerList.Count > 1000 ? 1000 : customerList.Count;//only this number of calls to be inserted at a time if (!queue.IsQueueGenerated) { //var shortList = customerList.Take(callsToInsert); //customerList = shortList.ToList(); _outboundCallQueueService.ChangeAssignmentOfExistingQueue(queue, callAssignMents); } int totalRecords = customerList.Count; //assigning each call centre user with number of customer based on percentage var callDivision = (from ca in callAssignMents let count = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(totalRecords * ca.Percentage) / 100)) select new { AssignedTo = ca.AssignedOrgRoleUserId, callCount = count > 0 ? count : 1 }).ToList(); int startCount = 0; for (int i = 0; i < callDivision.Count; i++) { int endCount = callDivision[i].callCount; int thresholdCount = customerList.Count < (startCount + endCount) ? customerList.Count : (startCount + endCount); for (int j = startCount; j < thresholdCount; j++) { CallQueueCustomer callQueueCustomer = customerList[j]; if (_callQueueCustomerRepository.IsCallQueueExist(queue.Id, callQueueCustomer.ProspectCustomerId.HasValue ? callQueueCustomer.ProspectCustomerId.Value : 0, callQueueCustomer.CustomerId.HasValue ? callQueueCustomer.CustomerId.Value : 0, callQueueCustomer.EventId, _settings.NoOfDaysToIncludeRemovedFromQueue)) { continue; } callQueueCustomer.CallQueueId = queue.Id; callQueueCustomer.IsActive = true; callQueueCustomer.Attempts = 0; callQueueCustomer.DateCreated = DateTime.Now; callQueueCustomer.Status = CallQueueStatus.Initial; callQueueCustomer.AssignedToOrgRoleUserId = callDivision[i].AssignedTo; callQueueCustomer.CallDate = DateTime.Now; _callQueueCustomerRepository.Save(callQueueCustomer); } //Once the quota for 1 user is complete next user will start from that startCount = startCount + endCount; } queue.IsQueueGenerated = true; queue.LastQueueGeneratedDate = DateTime.Now; _callQueueRepository.Save(queue); } } catch (Exception ex) { _logger.Error(string.Format("Message:{0} \nStackTrace: {1}", ex.Message, ex.StackTrace)); } }