using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
    public class CheckEquipmentApproveService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 获取设计变更模板列表
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData(string CheckEquipmentId)
        {
            return from x in db.Check_CheckEquipmentApprove
                   where x.CheckEquipmentId == CheckEquipmentId && x.ApproveDate != null
                   orderby x.ApproveDate
                   select new
                   {
                       x.CheckEquipmentApproveId,
                       x.CheckEquipmentId,
                       ApproveMan = (from y in db.Sys_User where y.UserId == x.ApproveMan select y.UserName).First(),
                       x.ApproveDate,
                       x.IsAgree,
                       x.ApproveIdea,
                       x.ApproveType,
                   };
        }
        /// 
        /// 根据设计变更编号获取一个设计变更审批信息
        /// 
        /// 设计变更编号
        /// 一个设计变更审批实体
        public static Model.Check_CheckEquipmentApprove GetCheckEquipmentApproveByCheckEquipmentId(string CheckEquipmentId)
        {
            return db.Check_CheckEquipmentApprove.FirstOrDefault(x => x.CheckEquipmentId == CheckEquipmentId && x.ApproveDate == null);
        }
        /// 
        /// 根据设计变更审批编号获取一个设计变更审批信息
        /// 
        /// 设计变更编号
        /// 一个设计变更审批实体
        public static Model.Check_CheckEquipmentApprove GetCheckEquipmentApproveByApproveId(string approveId)
        {
            return db.Check_CheckEquipmentApprove.FirstOrDefault(x => x.CheckEquipmentApproveId == approveId);
        }
        public static Model.Check_CheckEquipmentApprove GetComplie(string CheckEquipmentId)
        {
            return db.Check_CheckEquipmentApprove.FirstOrDefault(x => x.CheckEquipmentId == CheckEquipmentId && x.ApproveType == BLL.Const.CheckEquipment_Compile);
        }
        public static Model.Check_CheckEquipmentApprove GetApprove(string CheckEquipmentId)
        {
            return db.Check_CheckEquipmentApprove.FirstOrDefault(x => x.CheckEquipmentId == CheckEquipmentId && x.ApproveType == BLL.Const.CheckEquipment_Approve);
        }
        /// 
        /// 根据设计变更发布Id获取所以对应设计变更审批信息
        /// 
        /// 设计变更发布Id
        /// 设计变更审批集合
        public static List GetCheckEquipmentApprovesByCheckEquipmentId(string CheckEquipmentId)
        {
            return (from x in db.Check_CheckEquipmentApprove where x.CheckEquipmentId == CheckEquipmentId select x).ToList();
        }
        /// 
        /// 增加设计变更审批信息
        /// 
        /// 设计变更审批实体
        public static string AddCheckEquipmentApprove(Model.Check_CheckEquipmentApprove approve)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                string newKeyID = SQLHelper.GetNewID(typeof(Model.Check_CheckEquipmentApprove));
                Model.Check_CheckEquipmentApprove newApprove = new Model.Check_CheckEquipmentApprove();
                newApprove.CheckEquipmentApproveId = newKeyID;
                newApprove.CheckEquipmentId = approve.CheckEquipmentId;
                newApprove.ApproveMan = approve.ApproveMan;
                newApprove.ApproveDate = approve.ApproveDate;
                newApprove.ApproveIdea = approve.ApproveIdea;
                newApprove.IsAgree = approve.IsAgree;
                newApprove.ApproveType = approve.ApproveType;
                db.Check_CheckEquipmentApprove.InsertOnSubmit(newApprove);
                db.SubmitChanges();
                return newKeyID;
            }
                
        }
        /// 
        /// 增加检实验设备审批信息
        /// 
        /// 检实验设备批实体
        public static string AddCheckEquipmentApproveApi(Model.Check_CheckEquipmentApprove approve)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                string newKeyID = SQLHelper.GetNewID(typeof(Model.Check_CheckEquipmentApprove));
                Model.Check_CheckEquipmentApprove newApprove = new Model.Check_CheckEquipmentApprove();
                newApprove.CheckEquipmentApproveId = newKeyID;
                newApprove.CheckEquipmentId = approve.CheckEquipmentId;
                newApprove.ApproveMan = approve.ApproveMan;
                newApprove.ApproveDate = approve.ApproveDate;
                newApprove.ApproveIdea = approve.ApproveIdea;
                newApprove.IsAgree = approve.IsAgree;
                newApprove.ApproveType = approve.ApproveType;
                db.Check_CheckEquipmentApprove.InsertOnSubmit(newApprove);
                db.SubmitChanges();
                return newKeyID;
            }
        }
        /// 
        /// 修改检实验设备信息
        /// 
        /// 检实验设备实体
        public static void UpdateCheckEquipmentApproveApi(Model.Check_CheckEquipmentApprove approve)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.Check_CheckEquipmentApprove newApprove = db.Check_CheckEquipmentApprove.FirstOrDefault(e => e.CheckEquipmentApproveId == approve.CheckEquipmentApproveId && e.ApproveDate == null);
                //newApprove.CheckEquipmentId = approve.CheckEquipmentId;
                if (!string.IsNullOrEmpty(approve.ApproveMan))
                    newApprove.ApproveMan = approve.ApproveMan;
                newApprove.ApproveDate = approve.ApproveDate;
                newApprove.ApproveIdea = approve.ApproveIdea;
                newApprove.IsAgree = approve.IsAgree;
                newApprove.ApproveType = approve.ApproveType;
                db.SubmitChanges();
            }
            
        }
        /// 
        /// 修改设计变更审批信息
        /// 
        /// 设计变更审批实体
        public static void UpdateCheckEquipmentApprove(Model.Check_CheckEquipmentApprove approve)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.Check_CheckEquipmentApprove newApprove = db.Check_CheckEquipmentApprove.First(e => e.CheckEquipmentApproveId == approve.CheckEquipmentApproveId && e.ApproveDate == null);
                newApprove.CheckEquipmentId = approve.CheckEquipmentId;
                newApprove.ApproveMan = approve.ApproveMan;
                newApprove.ApproveDate = approve.ApproveDate;
                newApprove.ApproveIdea = approve.ApproveIdea;
                newApprove.IsAgree = approve.IsAgree;
                newApprove.ApproveType = approve.ApproveType;
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据设计变更编号删除对应的所有设计变更审批信息
        /// 
        /// 设计变更编号
        public static void DeleteCheckEquipmentApprovesByCheckEquipmentId(string CheckEquipmentId)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                var q = (from x in db.Check_CheckEquipmentApprove where x.CheckEquipmentId == CheckEquipmentId select x).ToList();
                db.Check_CheckEquipmentApprove.DeleteAllOnSubmit(q);
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据用户主键获得设计变更审批的数量
        /// 
        /// 角色
        /// 
        public static int GetManagerRuleApproveCountByUserId(string userId)
        {
            var q = (from x in Funs.DB.Check_CheckEquipmentApprove where x.ApproveMan == userId select x).ToList();
            return q.Count();
        }
        public static List getListDataByEid(string CheckEquipmentId)
        {
            var q = from x in db.Check_CheckEquipmentApprove
                    where x.CheckEquipmentId == CheckEquipmentId && x.ApproveDate != null && x.ApproveType != "S"
                    orderby x.ApproveDate
                    select new
                    {
                        x.CheckEquipmentApproveId,
                        x.CheckEquipmentId,
                        ApproveMan = (from y in db.Sys_User where y.UserId == x.ApproveMan select y.UserName).First(),
                        x.ApproveDate,
                        x.IsAgree,
                        x.ApproveIdea,
                        x.ApproveType,
                    };
            var list = q.ToList();
            List res = new List();
            foreach (var item in list)
            {
                Model.Check_CheckEquipmentApprove x = new Model.Check_CheckEquipmentApprove();
                x.CheckEquipmentApproveId = item.CheckEquipmentApproveId;
                x.CheckEquipmentId = item.CheckEquipmentId;
                x.ApproveMan = item.ApproveMan;
                x.ApproveDate = item.ApproveDate;
                x.IsAgree = item.IsAgree;
                x.ApproveIdea = item.ApproveIdea;
                x.ApproveType = item.ApproveType;
                res.Add(x);
            }
            return res;
        }
        // 当前办理状态
        public static Model.Check_CheckEquipmentApprove CurrentApproveType(string code)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.Check_CheckEquipmentApprove newApprove = db.Check_CheckEquipmentApprove.FirstOrDefault(e => e.CheckEquipmentId == code 
                && e.ApproveType != "S" && e.ApproveDate == null);
                if (newApprove != null)
                {
                    Model.Sys_User user = BLL.UserService.GetUserByUserId(newApprove.ApproveMan);
                    if (user != null)
                    {
                        newApprove.ApproveIdea = user.UserName;
                    }
                }
                return newApprove;
            }
        }
    }
}