private bool IsCriteriaIsSameAsPerious(HealthPlanCallQueueCriteriaEditModel model, HealthPlanCallQueueCriteria domain)
        {
            switch (model.CallQueue)
            {
            case HealthPlanCallQueueCategory.CallRound:
                return(domain.NoOfDays == model.NoOfDays && domain.RoundOfCalls == model.RoundOfCalls);

            case HealthPlanCallQueueCategory.ZipRadius:
                return(domain.Radius.HasValue && domain.ZipCode == model.Zipcode && domain.Radius.Value == model.Radius);

            case HealthPlanCallQueueCategory.FillEventsHealthPlan:
                return(domain.NoOfDays == model.NoOfDaysOfEvents && domain.Percentage == model.Percentage);

            case HealthPlanCallQueueCategory.NoShows:
                return(domain.StartDate == model.StartDate && domain.EndDate == model.EndDate);

            case HealthPlanCallQueueCategory.AppointmentConfirmation:
                return(domain.StartDate == model.StartDate && domain.EndDate == model.EndDate);

            case HealthPlanCallQueueCategory.LanguageBarrier:
                return(true);
            }

            return(false);
        }
        private void SaveFileInfoForCsvUpload(HealthPlanCallQueueCriteriaEditModel model, HealthPlanCallQueueCriteria criteria)
        {
            if (!model.UploadFileName.IsNullOrEmpty())
            {
                var file  = new FileInfo(_mediaRepository.GetTempMediaFileLocation().PhysicalPath + model.UploadFileName);
                var files = new File
                {
                    Path       = file.Name,
                    FileSize   = file.Length,
                    Type       = FileType.Csv,
                    UploadedBy = new OrganizationRoleUser(_sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                    UploadedOn = file.CreationTime,
                    IsArchived = false
                };
                files = _fileRepository.Save(files);

                var healthPlanCriteriaAssignmentUpload = new HealthPlanCriteriaAssignmentUpload
                {
                    FileId     = files.Id,
                    UploadTime = file.CreationTime,
                    UploadedByOrgRoleUserId = _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId,
                    CriteriaId = criteria.Id
                };
                _healthPlanCriteriaAssignmentUploadRepository.Save(healthPlanCriteriaAssignmentUpload);
                model.UploadFileName = null;
                System.IO.File.Copy(_mediaRepository.GetTempMediaFileLocation().PhysicalPath + file.Name, _mediaRepository.GetMassAgentAssignmentUploadMediaFileLocation().PhysicalPath + file.Name);
            }
        }
        private bool CheckHealthPlanCallQueueCriteriaAlreadyExists(HealthPlanCallQueueCriteriaEditModel model, IEnumerable <HealthPlanCallQueueCriteria> healthPlanCriterias)
        {
            bool isCriteriaExist = false;

            if (healthPlanCriterias != null && healthPlanCriterias.Any())
            {
                healthPlanCriterias = healthPlanCriterias.Where(x => x.Id != model.Id);

                if (model.CallQueue == HealthPlanCallQueueCategory.CallRound)
                {
                    isCriteriaExist = healthPlanCriterias.Any(x => x.NoOfDays == model.NoOfDays && x.RoundOfCalls == model.RoundOfCalls);
                }
                else if (model.CallQueue == HealthPlanCallQueueCategory.NoShows)
                {
                    isCriteriaExist = healthPlanCriterias.Any(x => x.StartDate == model.StartDate && x.EndDate == model.EndDate);
                }
                else if (model.CallQueue == HealthPlanCallQueueCategory.FillEventsHealthPlan)
                {
                    isCriteriaExist = healthPlanCriterias.Any(x => x.Percentage == model.Percentage && x.NoOfDays == model.NoOfDaysOfEvents);
                }
                else if (model.CallQueue == HealthPlanCallQueueCategory.ZipRadius)
                {
                    isCriteriaExist = healthPlanCriterias.Any(x => x.ZipCode == model.Zipcode && x.Radius == model.Radius);
                }
            }

            return(isCriteriaExist);
        }
 public HealthPlanCallQueueCriteria GetHealthPlanCallQueueCriteriaForNoShow(HealthPlanCallQueueCriteriaEditModel model, long orgRoleId)
 {
     return(new HealthPlanCallQueueCriteria
     {
         CallQueueId = model.CallQueueId,
         DataRecorderMetaData = new DataRecorderMetaData(orgRoleId, DateTime.Now, DateTime.Now),
         HealthPlanId = model.HealthPlanId,
         IsQueueGenerated = false,
         StartDate = model.StartDate,
         EndDate = model.EndDate,
         CriteriaName = model.CriteriaName
     });
 }
        public HealthPlanCallQueueCriteriaEditModel GetCriteriaEditModel(long criteriaId = 0)
        {
            bool isTeamAssignment = false;
            IEnumerable <HealthPlanCriteriaAssignment>     criteriaAssignments = null;
            IEnumerable <HealthPlanCriteriaTeamAssignment> teamAssignments     = null;

            if (criteriaId <= 0)
            {
                var defaultLanguageForConfirmation = _languageRepository.GetByName(DefaultLanguageForConfirmation);
                var emptyModel = new HealthPlanCallQueueCriteriaEditModel();
                if (defaultLanguageForConfirmation != null)
                {
                    emptyModel.LanguageId = defaultLanguageForConfirmation.Id;
                }
                return(emptyModel);
            }

            var criteria  = _healthPlanCallQueueCriteriaRepository.GetById(criteriaId);
            var callQueue = _callQueueRepository.GetById(criteria.CallQueueId);

            var model = _healthPlanCallQueueCriteriaEditModelFactory.DomainToModel(criteria);

            criteriaAssignments = _healthPlanCriteriaAssignmentRepository.GetByCriteriaId(model.Id);
            if (!criteriaAssignments.Any())
            {
                teamAssignments = _healthPlanCriteriaTeamAssignmentRepository.GetTeamAssignments(model.Id);

                isTeamAssignment = teamAssignments.Any();
            }

            if (!isTeamAssignment)
            {
                var callQueueAssignmentEditModel = new List <CallQueueAssignmentEditModel>();

                if (criteriaAssignments != null && criteriaAssignments.Any())
                {
                    var assignedToIds = criteriaAssignments.Select(x => x.AssignedToOrgRoleUserId).ToArray();
                    var nameIdPairs   = _organizationRoleUserRepository.GetNameIdPairofUsers(assignedToIds);
                    foreach (var assignedTo in assignedToIds)
                    {
                        var criteriaAssignment = criteriaAssignments.First(x => x.AssignedToOrgRoleUserId == assignedTo);
                        callQueueAssignmentEditModel.Add(new CallQueueAssignmentEditModel
                        {
                            Name = nameIdPairs.First(x => x.FirstValue == assignedTo).SecondValue,
                            AssignedOrgRoleUserId = assignedTo,
                            StartDate             = criteriaAssignment.StartDate,
                            EndDate = criteriaAssignment.EndDate
                        });
                    }
                }
                model.Assignments = callQueueAssignmentEditModel;
                model.CallCenterTeamAssignments = null;
                model.IsTeamAssignment          = false;
            }
            else
            {
                var teamAssignmentEditModel = new List <HealthPlanCriteriaTeamAssignmentEditModel>();
                var idnamePairOfTeams       = _callCenterTeamRepository.GetIdNamePairOfTeams(teamAssignments.Select(x => x.TeamId).ToArray());

                foreach (var healthPlanCriteriaTeamAssignment in teamAssignments)
                {
                    var idnamePairOfTeam = idnamePairOfTeams.FirstOrDefault(x => x.FirstValue == healthPlanCriteriaTeamAssignment.TeamId);
                    if (idnamePairOfTeam == null)
                    {
                        continue;
                    }
                    var assignmentEditModel = new HealthPlanCriteriaTeamAssignmentEditModel
                    {
                        TeamId    = healthPlanCriteriaTeamAssignment.TeamId,
                        Name      = idnamePairOfTeam.SecondValue,
                        StartDate = healthPlanCriteriaTeamAssignment.StartDate,
                        EndDate   = healthPlanCriteriaTeamAssignment.EndDate
                    };
                    teamAssignmentEditModel.Add(assignmentEditModel);
                }

                model.CallCenterTeamAssignments = teamAssignmentEditModel;
                model.Assignments      = null;
                model.IsTeamAssignment = true;
            }

            model.CallQueue   = callQueue.Category;
            model.CallQueueId = callQueue.Id;

            if (callQueue.Category == HealthPlanCallQueueCategory.MailRound)
            {
                //var healthPlanCallQueueCriterias = _healthPlanCallQueueCriteriaRepository.GetCriteriaByHealthPlanCallQueue(model.HealthPlanId, HealthPlanCallQueueCategory.MailRound);
                var healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaRepository.GetById(criteriaId);
                //var campaigns = _campaignRepository.GetByIds(healthPlanCallQueueCriterias.Where(x => x.CampaignId.HasValue).Select(x => x.CampaignId.Value));
                //var campaignIds = new List<long>();

                //campaignIds.Add(healthPlanCallQueueCriteria.CampaignId.Value);
                //foreach (var campaign in campaigns)
                //{
                //    campaignIds.Add(campaign.Id);
                //}
                //model.Campaigns = campaignIds;
                var campaignDirectMailDates = new List <CampaignDirectMailDatesEditModel>();

                var directMailDates = _healthPlanCriteriaDirectMailService.GetDirectMailDateEditModel(criteriaId);
                campaignDirectMailDates.Add(new CampaignDirectMailDatesEditModel
                {
                    CampaignId = healthPlanCallQueueCriteria.CampaignId.Value,
                    DirectMailDateActivities = directMailDates
                });
                model.CampaignDirectMailDates = campaignDirectMailDates;
            }

            return(model);
        }
        public HealthPlanCallQueueCriteriaEditModel SaveHealthPlanCallQueueCriteria(HealthPlanCallQueueCriteriaEditModel model, long orgRoleId, bool isCriteriaSameAsPervious)
        {
            var callQueue = _callQueueRepository.GetCallQueueByCategory(model.CallQueue);

            model.CallQueueId = callQueue.Id;

            model.IsCriteriaSameAsPervious = isCriteriaSameAsPervious;

            if (model.CallQueue == HealthPlanCallQueueCategory.MailRound)
            {
                model.IsCriteriaSameAsPervious = true;
                var healthPlanCallQueueCriterias = new List <HealthPlanCallQueueCriteria>();

                HealthPlanCallQueueCriteria existingCriteria = model.Id > 0 ? _healthPlanCallQueueCriteriaRepository.GetById(model.Id) : null;

                foreach (var campaign in model.CampaignDirectMailDates)
                {
                    var criteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForMailRound(model, campaign.CampaignId, orgRoleId);

                    if (existingCriteria != null)
                    {
                        if (existingCriteria.CampaignId.HasValue && model.CampaignDirectMailDates.Any(x => x.CampaignId == existingCriteria.CampaignId.Value))
                        {
                            if (campaign.CampaignId == existingCriteria.CampaignId.Value)
                            {
                                criteria.Id = model.Id;
                                criteria.IsQueueGenerated = existingCriteria.IsQueueGenerated;
                            }
                        }
                        else
                        {
                            if (campaign.CampaignId == model.CampaignDirectMailDates.First().CampaignId)
                            {
                                criteria.Id = model.Id;
                            }
                        }
                    }
                    if (criteria.Id > 0)
                    {
                        var directmailActivities = _healthPlanCriteriaDirectMailRepository.GetByCriteriaId(criteria.Id);

                        if (directmailActivities.IsNullOrEmpty() && !campaign.DirectMailDateActivities.IsNullOrEmpty())
                        {
                            criteria.IsQueueGenerated      = false;
                            model.IsCriteriaSameAsPervious = false;
                        }
                        else if (!directmailActivities.IsNullOrEmpty() && campaign.DirectMailDateActivities.IsNullOrEmpty())
                        {
                            criteria.IsQueueGenerated      = false;
                            model.IsCriteriaSameAsPervious = false;
                        }
                        else if (!directmailActivities.IsNullOrEmpty() && !campaign.DirectMailDateActivities.IsNullOrEmpty())
                        {
                            if (directmailActivities.Count() != campaign.DirectMailDateActivities.Count())
                            {
                                criteria.IsQueueGenerated      = false;
                                model.IsCriteriaSameAsPervious = false;
                            }
                            else
                            {
                                var activtyIdsInDB     = directmailActivities.Select(x => x.CampaignActivityId);
                                var activityIdsInModel = campaign.DirectMailDateActivities.Select(x => x.ActivityId);

                                if (!(activtyIdsInDB.All(activityIdsInModel.Contains) && activityIdsInModel.All(activtyIdsInDB.Contains)))
                                {
                                    criteria.IsQueueGenerated      = false;
                                    model.IsCriteriaSameAsPervious = false;
                                }
                            }
                        }
                    }
                    else
                    {
                        criteria.IsQueueGenerated      = false;
                        model.IsCriteriaSameAsPervious = false;
                    }


                    criteria = _healthPlanCallQueueCriteriaRepository.Save(criteria);

                    if (!campaign.DirectMailDateActivities.IsNullOrEmpty())
                    {
                        var activityIds = campaign.DirectMailDateActivities.Select(x => x.ActivityId);
                        _healthPlanCriteriaDirectMailRepository.Save(activityIds, criteria.Id);
                    }

                    healthPlanCallQueueCriterias.Add(criteria);
                }

                if (!model.IsTeamAssignment)
                {
                    foreach (var healthPlanCallQueueCriteria in healthPlanCallQueueCriterias)
                    {
                        SaveFileInfoForCsvUpload(model, healthPlanCallQueueCriteria);
                    }
                    if (!model.Assignments.IsNullOrEmpty())
                    {
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaAssignmentForMailRound(model.Assignments, healthPlanCallQueueCriterias, orgRoleId);
                        _healthPlanCriteriaAssignmentRepository.Save(model.HealthPlanId, model.CallQueueId, model.Id, assignments);
                    }
                }
                else
                {
                    if (!model.CallCenterTeamAssignments.IsNullOrEmpty())
                    {
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaTeamAssignmentForMailRound(model.CallCenterTeamAssignments, healthPlanCallQueueCriterias, orgRoleId);
                        _healthPlanCriteriaTeamAssignmentRepository.Save(assignments);
                    }
                }
            }
            else if (model.CallQueue == HealthPlanCallQueueCategory.LanguageBarrier)
            {
                var healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaRepository.GetQueueCriteriaForQueue(model.CallQueueId, model.HealthPlanId);

                if (!model.IsTeamAssignment)
                {
                    if (!model.Assignments.IsNullOrEmpty())
                    {
                        SaveFileInfoForCsvUpload(model, healthPlanCallQueueCriteria);
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaAssignment(model.Assignments, healthPlanCallQueueCriteria.Id, orgRoleId);
                        _healthPlanCriteriaAssignmentRepository.Save(model.HealthPlanId, model.CallQueueId, model.Id, assignments);
                    }
                }
                else
                {
                    if (!model.CallCenterTeamAssignments.IsNullOrEmpty())
                    {
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaTeamAssignment(model.CallCenterTeamAssignments, healthPlanCallQueueCriteria, orgRoleId);
                        _healthPlanCriteriaTeamAssignmentRepository.Save(assignments);
                    }
                }
            }
            else if (model.CallQueue == HealthPlanCallQueueCategory.AppointmentConfirmation)
            {
                var healthPlanCallQueueCriteria = model.Id > 0 ? _healthPlanCallQueueCriteriaRepository.GetById(model.Id) : _healthPlanCallQueueCriteriaRepository.GetQueueCriteriaForQueueByLanguage(model.CallQueue, model.HealthPlanId, model.LanguageId);

                var organization = _organizationRepository.GetOrganizationbyId(model.HealthPlanId);
                var language     = model.LanguageId.HasValue ? _languageRepository.GetById(model.LanguageId.Value) : null;
                model.CriteriaName = organization.Name + " Confirmation" + (language != null ? " for " + language.Name : "");
                if (healthPlanCallQueueCriteria == null)
                {
                    healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForConfirmation(model, orgRoleId);
                    healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaRepository.Save(healthPlanCallQueueCriteria);
                }
                else
                {
                    /*if (healthPlanCallQueueCriteria.LanguageId != model.LanguageId)
                     *  healthPlanCallQueueCriteria.IsQueueGenerated = false;*/
                    healthPlanCallQueueCriteria.LanguageId   = model.LanguageId;
                    healthPlanCallQueueCriteria.CriteriaName = model.CriteriaName;
                    healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaRepository.Save(healthPlanCallQueueCriteria);
                }

                if (!model.IsTeamAssignment)
                {
                    if (!model.Assignments.IsNullOrEmpty())
                    {
                        SaveFileInfoForCsvUpload(model, healthPlanCallQueueCriteria);
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaAssignment(model.Assignments, healthPlanCallQueueCriteria.Id, orgRoleId);
                        _healthPlanCriteriaAssignmentRepository.Save(model.HealthPlanId, model.CallQueueId, model.Id, assignments);
                    }
                }
                else
                {
                    if (!model.CallCenterTeamAssignments.IsNullOrEmpty())
                    {
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaTeamAssignment(model.CallCenterTeamAssignments, healthPlanCallQueueCriteria, orgRoleId);
                        _healthPlanCriteriaTeamAssignmentRepository.Save(assignments);
                    }
                }
            }
            else
            {
                HealthPlanCallQueueCriteria criteria = null;

                if (!isCriteriaSameAsPervious)
                {
                    if (model.CallQueue == HealthPlanCallQueueCategory.FillEventsHealthPlan)
                    {
                        criteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForFillEvent(model, orgRoleId);
                    }
                    #region not in use
                    //switch (model.CallQueue)
                    //{
                    //    //case HealthPlanCallQueueCategory.CallRound:
                    //    //    criteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForCallRound(model, orgRoleId);
                    //    //    break;
                    //    case HealthPlanCallQueueCategory.FillEventsHealthPlan:
                    //        criteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForFillEvent(model, orgRoleId);
                    //        break;
                    //    //case HealthPlanCallQueueCategory.NoShows:
                    //    //    criteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForNoShow(model, orgRoleId);
                    //    //    break;
                    //    //case HealthPlanCallQueueCategory.ZipRadius:
                    //    //    criteria = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCallQueueCriteriaForZipRadius(model, orgRoleId);
                    //    //    break;
                    //}
                    #endregion
                    _healthPlanCallQueueCriteriaRepository.MarkForDelete(model.Id, true);
                    criteria = _healthPlanCallQueueCriteriaRepository.Save(criteria);
                    model.Id = criteria.Id;
                }
                else if (model.Id > 0)
                {
                    criteria = _healthPlanCallQueueCriteriaRepository.GetById(model.Id);
                    criteria.DataRecorderMetaData.DateModified         = DateTime.Now;
                    criteria.DataRecorderMetaData.DataRecorderModifier = new OrganizationRoleUser(orgRoleId);
                    criteria.CriteriaName = model.CriteriaName;
                    criteria = _healthPlanCallQueueCriteriaRepository.Save(criteria);
                }

                if (!model.IsTeamAssignment)
                {
                    SaveFileInfoForCsvUpload(model, criteria);

                    if (!model.Assignments.IsNullOrEmpty())
                    {
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaAssignment(model.Assignments, model.Id, orgRoleId);
                        _healthPlanCriteriaAssignmentRepository.Save(model.HealthPlanId, model.CallQueueId, model.Id, assignments);
                    }
                }
                else
                {
                    if (!model.CallCenterTeamAssignments.IsNullOrEmpty())
                    {
                        var assignments = _healthPlanCallQueueCriteriaEditModelFactory.GetHealthPlanCriteriaTeamAssignment(model.CallCenterTeamAssignments, criteria, orgRoleId);
                        _healthPlanCriteriaTeamAssignmentRepository.Save(assignments);
                    }
                }
            }

            if (!model.IsTeamAssignment)
            {
                if (model.Assignments != null && model.Assignments.Any())
                {
                    var list = new List <CallQueueAssignmentEditModel>();
                    foreach (var assignment in model.Assignments)
                    {
                        assignment.IsExistInOtherCriteria = false;
                        list.Add(assignment);
                    }
                    model.Assignments = list;
                }
                return(model);
            }
            else
            {
                model.IsTeamAssignment = true;
                model.Assignments      = null;
                return(model);
            }
        }
 public HealthPlanCallQueueCriteria GetHealthPlanCallQueueCriteriaForZipRadius(HealthPlanCallQueueCriteriaEditModel model, long orgRoleId)
 {
     return(new HealthPlanCallQueueCriteria
     {
         CallQueueId = model.CallQueueId,
         DataRecorderMetaData = new DataRecorderMetaData(orgRoleId, DateTime.Now, DateTime.Now),
         HealthPlanId = model.HealthPlanId,
         IsQueueGenerated = false,
         Radius = model.Radius,
         ZipCode = model.Zipcode,
         CriteriaName = model.CriteriaName
     });
 }
 public HealthPlanCallQueueCriteria GetHealthPlanCallQueueCriteriaForCallRound(HealthPlanCallQueueCriteriaEditModel model, long orgRoleId)
 {
     return(new HealthPlanCallQueueCriteria
     {
         CallQueueId = model.CallQueueId,
         DataRecorderMetaData = new DataRecorderMetaData(orgRoleId, DateTime.Now, DateTime.Now),
         HealthPlanId = model.HealthPlanId,
         IsQueueGenerated = false,
         NoOfDays = model.NoOfDays.HasValue ? model.NoOfDays.Value : 0,
         RoundOfCalls = model.RoundOfCalls.HasValue ? model.RoundOfCalls.Value : -1,
         CriteriaName = model.CriteriaName
     });
 }
 public HealthPlanCallQueueCriteria GetHealthPlanCallQueueCriteriaForFillEvent(HealthPlanCallQueueCriteriaEditModel model, long orgRoleId)
 {
     return(new HealthPlanCallQueueCriteria
     {
         CallQueueId = model.CallQueueId,
         DataRecorderMetaData = new DataRecorderMetaData(orgRoleId, DateTime.Now, DateTime.Now),
         HealthPlanId = model.HealthPlanId,
         IsQueueGenerated = false,
         NoOfDays = model.NoOfDaysOfEvents.HasValue ? model.NoOfDaysOfEvents.Value : -1,
         Percentage = model.Percentage.HasValue ? model.Percentage.Value : 0,
         CriteriaName = model.CriteriaName
     });
 }
 public HealthPlanCallQueueCriteria GetHealthPlanCallQueueCriteriaForMailRound(HealthPlanCallQueueCriteriaEditModel model, long campaignId, long orgRoleId)
 {
     return(new HealthPlanCallQueueCriteria
     {
         CallQueueId = model.CallQueueId,
         DataRecorderMetaData = new DataRecorderMetaData(orgRoleId, DateTime.Now, DateTime.Now),
         HealthPlanId = model.HealthPlanId,
         IsQueueGenerated = true,
         CampaignId = campaignId
     });
 }
 public HealthPlanCallQueueCriteria GetHealthPlanCallQueueCriteriaForConfirmation(HealthPlanCallQueueCriteriaEditModel model, long orgRoleId)
 {
     return(new HealthPlanCallQueueCriteria
     {
         CallQueueId = model.CallQueueId,
         DataRecorderMetaData = new DataRecorderMetaData(orgRoleId, DateTime.Now, DateTime.Now),
         HealthPlanId = model.HealthPlanId,
         IsQueueGenerated = false,
         CriteriaName = model.CriteriaName,
         LanguageId = model.LanguageId
     });
 }
        public ActionResult Edit(HealthPlanCallQueueCriteriaEditModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(View(model));
                }
                else
                {
                    //if ((model.Assignments == null && model.CallCenterTeamAssignments == null)
                    //    ||
                    //    ((model.Assignments != null && !model.Assignments.Any()) && (model.CallCenterTeamAssignments != null && !model.CallCenterTeamAssignments.Any())))
                    //{
                    //    model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Assignment must exist");
                    //    return View(model);
                    //}

                    var healthPlanCriteria = _healthPlanCallQueueCriteriaRepository.GetCriteriaByHealthPlanCallQueue(model.HealthPlanId, model.CallQueue);

                    if (!string.IsNullOrWhiteSpace(model.CriteriaName))
                    {
                        model.CriteriaName = model.CriteriaName.Trim();
                        var currentCriteria = healthPlanCriteria.FirstOrDefault(x => x.Id == model.Id);

                        //if we are Modifying Criteria Name then check for Uniqueness
                        if (currentCriteria.CriteriaName.ToLower() != model.CriteriaName.ToLower())
                        {
                            var criteriaNameList = _healthPlanCallQueueCriteriaRepository.GetAllHealthPlanCallQueueCriteriaNames();
                            if (criteriaNameList.Any(x => x.ToLower() == model.CriteriaName.ToLower()))
                            {
                                model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Name already exists");
                                return(View(model));
                            }
                        }
                        if (model.CallQueue == HealthPlanCallQueueCategory.AppointmentConfirmation && currentCriteria.LanguageId != model.LanguageId)
                        {
                            var healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaRepository.GetQueueCriteriaForQueueByLanguage(model.CallQueue, model.HealthPlanId, model.LanguageId);
                            if (healthPlanCallQueueCriteria != null)
                            {
                                model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Criteria already exists for selected language.");
                                return(View(model));
                            }
                        }
                    }
                    bool isCriteriaExist = CheckHealthPlanCallQueueCriteriaAlreadyExists(model, healthPlanCriteria);

                    if (isCriteriaExist)
                    {
                        model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Criteria for same healthplan and call queue exist");
                        return(View(model));
                    }
                    else
                    {
                        var criteria = healthPlanCriteria.First(x => x.Id == model.Id);
                        var isCriteriaSameAsPervious = IsCriteriaIsSameAsPerious(model, criteria);

                        if (isCriteriaSameAsPervious)
                        {
                            isCriteriaSameAsPervious = CheckCustomerDataHasBeenUploaded(criteria);
                        }

                        //check if user has changed mode of assignment (agent assignment or team assignment)
                        var isTeamAssignmentOld  = _healthPlanCriteriaTeamAssignmentRepository.GetTeamAssignments(criteria.Id).Any();
                        var isAgentAssignmentOld = _healthPlanCriteriaAssignmentRepository.GetByCriteriaId(criteria.Id).Any();

                        if (model.IsTeamAssignment && isAgentAssignmentOld) //delete old agent assignments
                        {
                            _healthPlanCriteriaAssignmentRepository.DeleteByCriteriaId(criteria.Id);
                        }
                        else if (!model.IsTeamAssignment && isTeamAssignmentOld)     //delete old team assignments
                        {
                            _healthPlanCriteriaTeamAssignmentRepository.DeleteAssignmentsForCriteria(criteria.Id);
                        }
                        else if (model.IsTeamAssignment && isTeamAssignmentOld && model.CallCenterTeamAssignments.IsNullOrEmpty())
                        {
                            _healthPlanCriteriaTeamAssignmentRepository.DeleteAssignmentsForCriteria(criteria.Id);
                        }
                        else if (!model.IsTeamAssignment && isAgentAssignmentOld && model.Assignments.IsNullOrEmpty())
                        {
                            _healthPlanCriteriaAssignmentRepository.DeleteByCriteriaId(criteria.Id);
                        }

                        _healthPlanCallQueueCriteriaService.SaveHealthPlanCallQueueCriteria(model, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId, isCriteriaSameAsPervious);
                        if (model.IsCriteriaSameAsPervious)
                        {
                            model.FeedbackMessage = FeedbackMessageModel.CreateSuccessMessage("Criteria Updated");
                            return(View(model));
                        }
                        else
                        {
                            return(RedirectToAction("Edit", new { criteriaId = model.Id, isSuccessfull = true }));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("System Error:" + ex.Message);
                return(View(model));
            }
        }
        public ActionResult Create(HealthPlanCallQueueCriteriaEditModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(View(model));
                }
                else
                {
                    //if ((model.Assignments == null && model.CallCenterTeamAssignments == null)
                    //    ||
                    //    ((model.Assignments != null && !model.Assignments.Any()) && (model.CallCenterTeamAssignments != null && !model.CallCenterTeamAssignments.Any())))
                    //{
                    //    model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Assignment must exist");
                    //    return View(model);
                    //}

                    var healthPlanCriteria = _healthPlanCallQueueCriteriaRepository.GetCriteriaByHealthPlanCallQueue(model.HealthPlanId, model.CallQueue);

                    if (!string.IsNullOrWhiteSpace(model.CriteriaName))
                    {
                        model.CriteriaName = model.CriteriaName.Trim();
                        var criteriaNameList = _healthPlanCallQueueCriteriaRepository.GetAllHealthPlanCallQueueCriteriaNames();

                        if (criteriaNameList.Any(x => x.ToLower() == model.CriteriaName.ToLower()))
                        {
                            model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Name already exists");
                            return(View(model));
                        }
                    }
                    if (model.CallQueue == HealthPlanCallQueueCategory.AppointmentConfirmation)
                    {
                        var healthPlanCallQueueCriteria = _healthPlanCallQueueCriteriaRepository.GetQueueCriteriaForQueueByLanguage(model.CallQueue, model.HealthPlanId, model.LanguageId);
                        if (healthPlanCallQueueCriteria != null)
                        {
                            model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Criteria already exists for selected language.");
                            return(View(model));
                        }
                    }

                    bool isCriteriaExist = CheckHealthPlanCallQueueCriteriaAlreadyExists(model, healthPlanCriteria);

                    if (isCriteriaExist)
                    {
                        model.FeedbackMessage = FeedbackMessageModel.CreateWarningMessage("Criteria for same healthplan and call queue exist");
                        return(View(model));
                    }
                    else
                    {
                        //if (model.Id > 0)
                        //{
                        //    //check if user has changed mode of assignment (agent assignment or team assignment)
                        //    var isTeamAssignmentOld =
                        //        _healthPlanCriteriaTeamAssignmentRepository.GetTeamAssignments(model.Id).Any();
                        //    var isAgentAssignmentOld =
                        //        _healthPlanCriteriaAssignmentRepository.GetByCriteriaId(model.Id).Any();

                        //    if (model.IsTeamAssignment && isAgentAssignmentOld) //delete old agent assignments
                        //    {
                        //        _healthPlanCriteriaAssignmentRepository.DeleteByCriteriaId(model.Id);
                        //    }
                        //    else if (!model.IsTeamAssignment && isTeamAssignmentOld) //delete old team assignments
                        //    {
                        //        _healthPlanCriteriaTeamAssignmentRepository.DeleteAssignmentsForCriteria(model.Id);
                        //    }
                        //}
                        _healthPlanCallQueueCriteriaService.SaveHealthPlanCallQueueCriteria(model, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId, false);

                        ModelState.Clear();

                        model.FeedbackMessage = FeedbackMessageModel.CreateSuccessMessage("Criteria for healthplan and call queue created successfully");
                    }
                }
                return(RedirectToAction("ManageCriteria"));
            }
            catch (Exception ex)
            {
                model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("System Error:" + ex.Message);
                return(View(model));
            }
        }