using System;
using DeiNiu.wms.Data.Model;
using System.Data;
using System.Collections;
using System.Collections.Generic;
namespace DeiNiu.wms.Logical
{
    [Serializable]
    public class LAuthority
    {
        Authority _obj;
        public LAuthority()
        {
           
            Initialize();
        }
        public Authority GetAuthority
        {
            get
            {
                return _obj;
            }
        }
		
		/// 
		/// get all data
		/// 
        public DataSet GetAllData()
        {
           return _obj.Query();
        }
        /// 
        /// get all data
        /// 
        public DataSet getAllActiveData()
        {
            return _obj.QueryActived();
        }
/*
        private void leavetypeDsConstruct()
        {
            return;
        }
*/
		
		/// 
		/// get a record by id
		/// 
        public void Initialize(int id)
		{
            _obj = id != 0 ? new Authority(id) : new Authority();
		}
        /// 
		/// get a record by id 0
		/// 
        public void Initialize()
        {
            Initialize(0);
        }
        public List getAuthorities()
        {
            List auths = new List();
            DataTable dt = getAllActiveData().Tables[0];
            foreach (DataRow row in dt.Rows)
            {
                int id = Convert.ToInt32(row["id"].ToString());
                Authority ath = new Authority(id);
                auths.Add(ath);
            }
            return auths;
        }
        public List getAuthorities(int empId,int warehouse)
        {
            
            List auths = new List();
            LRoleAuthority ll = new LRoleAuthority();
            DataTable dt = ll.GetAuthByEm(empId , warehouse);
            foreach (DataRow row in dt.Rows)
            {  
                Authority ath = new Authority(row);
                auths.Add(ath);
            }
            return auths;
        }
        public Dictionary> getCatedAuthorities(int empId,int warehouse=-1)
        {
            Dictionary> auths = new Dictionary>();
            DataView dv = new DataView(getAllActiveData().Tables[0]);
            dv.Sort = "[auth_order]";
            List subAuths = getAuthorities(empId, warehouse);
            foreach (Authority a in subAuths)
            {
                dv.RowFilter = "id =" + a.auth_uplevel;
                string key;
                foreach (DataRowView dr in dv)
                {
                    key = dr["auth_name"].ToString();
                    if (auths.ContainsKey(key))
                    {
                        auths[key].Add(a);
                    }
                    else
                    {
                        List sa = new List();
                        sa.Add(a);
                        auths.Add(key, sa);
                    }
                }
            }
             
            return auths;
        }
    }
   
}