/// <summary>
        ///
        /// </summary>
        /// <param name="objDepartmentAgentInfo"></param>
        public void UpdateDepartmentAgent(DepartmentAgentInfo objDepartmentAgentInfo)
        {
            Requires.PropertyNotNegative(objDepartmentAgentInfo, "DepartmentID");
            Requires.PropertyNotNegative(objDepartmentAgentInfo, "AgentID");
            Requires.PropertyNotNegative(objDepartmentAgentInfo, "UserID");

            using (IDataContext ctx = DataContext.Instance())
            {
                var rep = ctx.GetRepository <DepartmentAgentInfo>();
                rep.Update(objDepartmentAgentInfo);
            }

            DataCache.ClearCache();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="DepartmentAgentID"></param>
        public void DeleteDepartmentAgent(int departmentID, int departmentAgentID)
        {
            Requires.NotNegative("departmentAgentID", departmentAgentID);

            DepartmentAgentInfo objDepartmentAgentInfo = GetDepartmentAgent(departmentID, departmentAgentID);

            Requires.NotNull(objDepartmentAgentInfo);

            using (IDataContext ctx = DataContext.Instance())
            {
                var rep = ctx.GetRepository <DepartmentAgentInfo>();
                rep.Delete(objDepartmentAgentInfo);
            }

            DataCache.ClearCache();
        }
        public HttpResponseMessage UpdateAgent(AgentViewModel agent)
        {
            try
            {
                var objAgentInfo = AgentManager.Instance.GetAgent(PortalSettings.PortalId, agent.AgentID);
                objAgentInfo.PortalID = PortalSettings.PortalId;
                objAgentInfo.Priority = agent.Priority;
                objAgentInfo.Enabled  = agent.Enabled;
                AgentManager.Instance.UpdateAgent(objAgentInfo);

                DepartmentAgentManager.Instance.DeleteAgentDepartments(agent.AgentID);
                var departments = DepartmentManager.Instance.GetDepartments(PortalSettings.PortalId);
                foreach (var item in agent.Departments)
                {
                    var department = departments.FirstOrDefault(d => d.DepartmentName == item);
                    if (department == null)
                    {
                        continue;
                    }
                    var objDepartmentAgentInfo = new DepartmentAgentInfo()
                    {
                        DepartmentID = department.DepartmentID,
                        AgentID      = agent.AgentID,
                        UserID       = agent.UserID
                    };
                    DepartmentAgentManager.Instance.AddDepartmentAgent(objDepartmentAgentInfo);
                }

                return(Request.CreateResponse(HttpStatusCode.OK, new { Success = true }));
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public HttpResponseMessage AddAgent(AgentViewModel agent)
        {
            try
            {
                if (agent.UserID == 0)
                {
                    throw new Exception();
                }

                Requires.NotNegative("agent.UserID", agent.UserID);

                var user = DotNetNuke.Entities.Users.UserController.GetUserById(PortalSettings.PortalId, agent.UserID);

                var objAgentInfo = new AgentInfo()
                {
                    PortalID     = PortalSettings.PortalId,
                    UserID       = agent.UserID,
                    Priority     = agent.Priority,
                    Enabled      = agent.Enabled,
                    CreateByUser = UserInfo.UserID,
                    CreateDate   = DateTime.Now
                };
                int agentID = AgentManager.Instance.AddAgent(objAgentInfo);
                agent.AgentID = agentID;

                if (!user.IsInRole("MyDnnSupportAgent"))
                {
                    var role = RoleController.Instance.GetRoleByName(PortalSettings.PortalId, "MyDnnSupportAgent");
                    RoleController.AddUserRole(user, role, PortalSettings, DotNetNuke.Security.Roles.RoleStatus.Approved, Null.NullDate, Null.NullDate, true, false);
                }

                var departments = DepartmentManager.Instance.GetDepartments(PortalSettings.PortalId);
                foreach (var item in agent.Departments)
                {
                    var department = departments.FirstOrDefault(d => d.DepartmentName == item);
                    if (department == null)
                    {
                        continue;
                    }
                    var objDepartmentAgentInfo = new DepartmentAgentInfo()
                    {
                        DepartmentID = department.DepartmentID,
                        AgentID      = agentID,
                        UserID       = agent.UserID
                    };
                    DepartmentAgentManager.Instance.AddDepartmentAgent(objDepartmentAgentInfo);
                }

                agent.Email = user.Email;

                return(Request.CreateResponse(HttpStatusCode.OK, new { Success = true, Agent = agent }));
            }
            catch (Exception ex)
            {
                Logger.Error(ex);

                string msg = ex.Message;

                if (((System.Data.SqlClient.SqlException)(ex)).Number == 2627) // user entekhab shode ghablan dar system be onvane agent sabt shode ast
                {
                    msg = string.Format(Localization.Instance.GetString(DotNetNuke.Common.Globals.ResolveUrl("~/MyDnnPackage/dnn8contest/Website/DesktopModules/MVC/MyDnnSupport/LiveChat/App_LocalResources/SharedResources"), PortalSettings.CultureCode, "DuplicateAgent.Text"), agent.DisplayName);
                }

                return(Request.CreateResponse(HttpStatusCode.InternalServerError, msg));
            }
        }