using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using Mesnac.Action.Base;
using Mesnac.Basic;
using Mesnac.Codd.Session;
using Mesnac.Controls.Base;

namespace Mesnac.Action.Default.Purview
{
    /// <summary>
    /// 窗体控件的用户权限处理类
    /// 创建人:郑立兵
    /// 创建时间:2013-7-24
    /// 说明:根据登录用户的权限处理窗体内的控件是否可用
    /// </summary>
    public class CheckPurviewControl : DatabaseAction, IAction
    {
        public void Run(RuntimeParameter runtime)
        {
            base.RunIni(runtime);//必须调用
            ICSharpCode.Core.LoggingService<CheckPurviewControl>.Debug("通用方法——窗体中权限控件的处理");
            if (runtime.Sender == null || !runtime.Sender.GetType().IsSubclassOf(typeof(Form)))
            {
                return;//sender不是功能Form
            }
            if (!(runtime.Sender as IPurviewControl).MCPurview)
            {
                return;//窗体不验证权限
            }
            if (UserInfo.Instance.RoleGUID == "-99")
            {
                return;//超级用户
            }
            
            DbHelper dbHelper = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
            if (dbHelper == null)
            {
                return;
            }
            dbHelper.ClearParameter();
            dbHelper.CommandType = CommandType.Text;
            string strSql = "SELECT TA.GUID, TA.PermissionItemGUID, TA.PermissionType,tb.formname,formtext,tc.functionname FROM BasRolePermission TA INNER JOIN BasFormFunction TC ON TA.PermissionItemGUID=TC.GUID AND TA.PermissionType=TC.FunctionType left join BasForm TB on tc.FormGUID=tb.GUID WHERE TC.DeleteFlag='0' AND TC.DeleteFlag='0' AND TA.RoleGUID=@RoleGUID;";
            dbHelper.AddParameter("@RoleGUID", UserInfo.Instance.RoleGUID);
            dbHelper.CommandText = strSql;
            DataTable dt = dbHelper.ToDataTable();
            string Formname = string.Empty;
            if (base.GetThisOwer() is Form)
            {
                Formname = (base.GetThisOwer() as Form).Name;
            }
            List<IPurviewControl> listPC = GetAllMCPurviewControls();
            foreach (IPurviewControl control in listPC)
            {
                if (control.MCPurview && !control.GetType().IsSubclassOf(typeof(Form)))
                {
                    control.MCEnabled = false;
                    if (dt.Select(string.Format("formname='{0}' AND functionname='{1}'", Formname, (control as Control).Name)).Length > 0)
                    {
                        control.MCEnabled = true;
                    }
                }
            }
        }
    }
}