示例#1
0
 public Workgroup()
 {
     id            = string.Empty;
     DisplayName   = string.Empty;
     Agents        = new List <Agent>();
     configuration = null;
 }
示例#2
0
 public Workgroup(WorkgroupConfiguration ic_configuration, bool resolve_members = true)
 {
     id = ic_configuration.ConfigurationId.Id;
     DisplayName = ic_configuration.ConfigurationId.DisplayName;
     Agents = new List<Agent>();
     if (resolve_members)
     {
         foreach(var ic_member in ic_configuration.Members.Value)
         {
             try
             {
                 Agents.Add(Agent.find(ic_member));
             }
             catch(KeyNotFoundException)
             {
                 //TODO: Trace/Warn?
             }
         }
     }
 }
示例#3
0
 public Workgroup(WorkgroupConfiguration ic_configuration, bool resolve_members = true)
 {
     id          = ic_configuration.ConfigurationId.Id;
     DisplayName = ic_configuration.ConfigurationId.DisplayName;
     Agents      = new List <Agent>();
     if (resolve_members)
     {
         foreach (var ic_member in ic_configuration.Members.Value)
         {
             try
             {
                 Agents.Add(Agent.find(ic_member));
             }
             catch (KeyNotFoundException)
             {
                 //TODO: Trace/Warn?
             }
         }
     }
 }
        private void CreateWorkgroup(WorkgroupConfiguration workgroupConfiguration, bool hasChanges = false)
        {
            //_logging.LogNote("CreateWorkgroup");
            try
            {
                using (var repository = Repository)
                {
                    var exist = repository.Workgroups.Any(w => w.ConfigId == workgroupConfiguration.ConfigurationId.Id);
                    if (!exist)
                    {
                        //_logging.LogNote("No Workgroups Exists");
                        var isActive = workgroupConfiguration.IsActive.Value;
                        var isAcd    = workgroupConfiguration.QueueType.Value == WorkgroupQueueType.Acd ||
                                       workgroupConfiguration.QueueType.Value == WorkgroupQueueType.Custom;
                        var hasQueue     = workgroupConfiguration.HasQueue.Value;
                        var utilizations = workgroupConfiguration.Utilizations;
                        var val          = String.Join(",", utilizations.Value.Select(i => "MediaType:" + i.MediaType + " Percent:" + i.Utilization + " Max:" + i.MaxAssignable));
                        //_logging.LogNote(String.Format("Workgroup: {0} {1}", workgroupConfiguration.ConfigurationId.DisplayName, val));
                        var utils = utilizations.Value;
                        var u     = utils.Select(utilizationSettings => new Utilization
                        {
                            MediaType          = GetMediaType(utilizationSettings.MediaType),
                            MaxAssignable      = utilizationSettings.MaxAssignable,
                            UtilizationPercent = utilizationSettings.Utilization
                        }).ToList();

                        var workgroup = new Workgroup()
                        {
                            ConfigId          = workgroupConfiguration.ConfigurationId.Id,
                            DisplayName       = workgroupConfiguration.ConfigurationId.DisplayName,
                            IsAcd             = isAcd,
                            IsActive          = isActive,
                            HasQueue          = hasQueue,
                            MarkedForDeletion = false,
                            IsAssignable      = false,
                            Utilizations      = u
                        };
                        repository.Workgroups.Add(workgroup);
                        repository.SaveChanges();
                    }
                    else
                    {
                        if (_firstRunAfterStart || hasChanges)
                        {
                            //_logging.LogNote("First Run After Start");
                            var workgroup =
                                repository.Workgroups.FirstOrDefault(
                                    w => w.ConfigId == workgroupConfiguration.ConfigurationId.Id);
                            var utilizations = workgroupConfiguration.Utilizations;
                            var val          = String.Join(",", utilizations.Value.Select(i => "MediaType:" + i.MediaType + " Percent:" + i.Utilization + " Max:" + i.MaxAssignable));
                            //_logging.LogNote(String.Format("Workgroup: {0} {1}", workgroupConfiguration.ConfigurationId.DisplayName, val));
                            var utils = utilizations.Value;
                            var u     = utils.Select(utilizationSettings => new Utilization
                            {
                                MediaType          = GetMediaType(utilizationSettings.MediaType),
                                MaxAssignable      = utilizationSettings.MaxAssignable,
                                UtilizationPercent = utilizationSettings.Utilization
                            }).ToList();

                            if (workgroup != null)
                            {
                                var isActive = workgroupConfiguration.IsActive.Value;
                                var isAcd    = workgroupConfiguration.QueueType.Value == WorkgroupQueueType.Acd ||
                                               workgroupConfiguration.QueueType.Value == WorkgroupQueueType.Custom;
                                var hasQueue = workgroupConfiguration.HasQueue.Value;

                                workgroup.ConfigId          = workgroupConfiguration.ConfigurationId.Id;
                                workgroup.DisplayName       = workgroupConfiguration.ConfigurationId.DisplayName;
                                workgroup.IsAcd             = isAcd;
                                workgroup.IsActive          = isActive;
                                workgroup.HasQueue          = hasQueue;
                                workgroup.MarkedForDeletion = false;
                                var utilList = workgroup.Utilizations.ToList();
                                workgroup.Utilizations.Clear();
                                foreach (var utilization in utilList)
                                {
                                    repository.Utilizations.Remove(utilization);
                                }
                                workgroup.Utilizations = u;
                                //workgroup.IsAssignable = true;
                                repository.SaveChanges();
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                _logging.LogException(e);
                _logging.TraceException(e, "WorkgroupConfigurations Error");
            }
        }