using System;
using System.Collections;
using DeiNiu.Utils;
using DeiNiu.wms.Data.Model;
using System.Data;
using System.Transactions;
namespace DeiNiu.wms.Logical
{
    [Serializable]
    public class LProject
    {
        private Project _pjObj;
        private ProjectDetail _pdObj;
        private ProjectApproveList _paObj = new ProjectApproveList();
        public LProject()
        {
            Initialize();
        }
        /// 
        /// 根据项目明细的id初始化
        /// 不是根据项目的id
        /// 
        /// 
        /// 
        public void Initialize(int pjId, int pdId)
        {
            _pjObj = pjId != 0 ? new Project(pjId) : new Project();
            _pdObj = pdId != 0 ? new ProjectDetail(pdId) : new ProjectDetail();
        }
        /// 
        /// get a record by project detail id
        /// 
        public void Initialize(int pdId)
        {
            _pdObj = pdId != 0 ? new ProjectDetail(pdId) : new ProjectDetail();
            _pjObj = _pdObj.pd_project != 0 ? new Project(_pdObj.pd_project) : new Project();
        }
        /// 
        /// get a record by id 0
        /// 
        public void Initialize()
        {
            Initialize(0, 0);
        }
        public Project GetProject
        {
            get
            {
                return _pjObj;
            }
        }
        public ProjectDetail GetProjectDetail
        {
            get
            {
                return _pdObj;
            }
        }
        public ProjectApproveList PaObj
        {
            get { return _paObj; }
        }
        /// 
        /// get all data
        /// 
        public DataSet GetAllProject()
        {
            return _pjObj.Query();
        }
        /// 
        /// get all data
        /// 
        public DataTable GetAllProjectDetail(int prjId)
        {
            return _pdObj.GetProjectDetails(prjId);
        }
        /// 
        /// get all data
        /// 
        public DataSet GetAllActiveProjects()
        {
            return _pjObj.QueryActived();
        }
        /// 
        /// get all data
        /// 
        public DataTable GetAllProjectDetail(int emId, string year, string month)
        {
            switch (month)
            {
                case "0":
                    return GetAllProjectDetail(emId, year);
                default:
                    return _pjObj.GetProjects(emId, year, month);
            }
        }
        /// 
        /// get all data
        /// 
        public DataTable GetAllProjectDetail(int emId, string year)
        {
            return _pjObj.GetProjects(emId, year);
        }
        /// 
        /// 删除项目及明细,调用时需要事务支持
        /// 
        /// 
        public void Delete()
        {
            DataTable dt = GetAllProjectDetail(_pjObj.ID);
            ProjectDetail pd;
    //        using (TransactionScope trans = new TransactionScope())
            {
                try
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        pd = new ProjectDetail(Convert.ToInt32(dr["pk_projDetail"].ToString()));
                        pd.Delete();
                    }
                    _pjObj.Delete(); 
           //         trans.Complete();
                }
                catch (MyException)
                {
                    throw;
                }
                catch (Exception)
                {
                    throw new Exception("出现异常,项目删除失败。");
                }
            }
          
        }
        public void UpdateProject()
        {
//           using (TransactionScope trans = new TransactionScope())
            {
                try
                {
                    _pjObj.Update(); 
 //                   trans.Complete();
                }
                catch (MyException)
                {
                    throw;
                }
                catch (Exception)
                {
                    throw new Exception("出现异常,项目新增失败。");
                }
            }
        }
        /// 
        /// 新增项目及明细,调用时需要事务支持
        /// 
        /// 
        public void AddProject()
        {
//            using (TransactionScope trans = new TransactionScope())
            {
                try
                {
                    ProjectDetail pd;
                    _pjObj.Add();
                    DateTime dt = new DateTime();
                    DateTime dt1 = Convert.ToDateTime(_pjObj.pj_planStartDate);
                    DateTime dt2 = Convert.ToDateTime(_pjObj.pj_planEndDate);
                    TimeSpan ts = dt2 - dt1;
                    pd = new ProjectDetail();
                    pd.pd_project = _pjObj.ID;
                    pd.pd_year = dt1.Year.ToString();
                    pd.pd_month = dt1.Month.ToString();
                    pd.pd_status = ProjectDetailStatus.月度未提交;
                    pd.Add();
                 
                    while (true)
                    {
                        if (dt1.Year == dt2.Year && dt1.Month == dt2.Month)
                            break;
                        dt1 = dt1.AddMonths(1);
                        pd = new ProjectDetail();
                        pd.pd_project = _pjObj.ID;
                        pd.pd_year = dt1.Year.ToString();
                        pd.pd_month = dt1.Month.ToString();
                        pd.pd_status = DeiNiu.Utils.ProjectDetailStatus.月度未提交;
                        pd.Add();
                    }
//                    trans.Complete();
                }
                catch (MyException)
                {
                    throw;
                }
                catch (Exception)
                {
                    
                    throw new Exception("出现异常,项目新增失败。");
                }
            }
        }
        /// 
        /// 正负职可以查看本部门的数据
        /// 
        /// 
        /// 
        /// 
        public DataTable GetProjectsByDept(int depId, string year)
        {
            return _pjObj.GetProjectsByDept(depId, year);
        }
        /// 
        /// 考核小组可以查看 全部数据
        /// 
        /// 
        /// 
        /// 
        public DataTable GetProjectsByYearMonth(string year, string month)
        {
            //   
            switch (month)
            {
                case "0":
                    return GetProjectsByYear(year);
                default:
                    return _pjObj.GetProjectsByYearMonth(year, month);
            }
        }
        /// 
        /// 考核小组考核历史数据
        /// 
        /// 
        /// 
        /// 
        public DataTable GetKaoHeHistoryProjectsByYearMonth(string year, string month)
        {
            //   
            switch (month)
            {
                case "0":
                    return GetKaoHeHistoryProjectsByYear(year);
                default:
                    return _pjObj.GetKaoHeHistoryProjectsByYearMonth(year, month);
            }
        }
        /// 
        /// 考核小组考核历史数据
        /// 
        ///  
        /// 
        public DataTable GetKaoHeHistoryProjectsByYear(string year)
        {
            //    return _pjObj.GetProjectsByYearMonth(year, month); switch (month);
            return _pjObj.GetKaoHeHistoryProjectsByYear(year);
        }
        /// 
        /// 分管领导和考核小组可以查看 全部数据
        /// 
        ///  
        /// 
        public DataTable GetProjectsByYear(string year)
        {
            //    return _pjObj.GetProjectsByYearMonth(year, month); switch (month);
            return _pjObj.GetProjectsByYear(year);
        }
        /// 
        ///按 部门 获得需要其来 审批的项目列表
        /// 
        ///  部门列表
        /// 
        public DataTable Get4ApproveList(ArrayList deptList, string year, string month)
        {
            if (deptList.Count ==0) return new DataTable();
            switch (month)
            {
                case "0":
                    return _pjObj.Get4ApproveListYear(deptList, year);
                default:
                    return _pjObj.Get4ApproveListYearMonth(deptList, year, month);
            }
        }
        public DataTable GetSumProjectsByYearMonth(string year, string month)
        {
            switch (month)
            {
                case "0":
                    return GetSumProjectsByYear(year);
                default:
                    return _pjObj.GetSumProjectsByYearMonth(year, month);
            }
        }
        public DataTable GetSumProjectsByYear(string year)
        {
            return _pjObj.GetSumProjectsByYear(year);
        }
    }
}