using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
   public static class CheckNoticeService
    {
        /// 
        /// 根据主键获取检查通知单
        /// 
        /// 
        /// 
        public static Model.ProjectSupervision_CheckNotice GetCheckNoticeById(string checkNoticeId)
        {
            return Funs.DB.ProjectSupervision_CheckNotice.FirstOrDefault(e => e.CheckNoticeId == checkNoticeId);
        }
        /// 
        /// 添加检查通知单
        /// 
        /// 
        public static void AddCheckNotice(Model.ProjectSupervision_CheckNotice checkNotice)
        {
            Model.ProjectSupervision_CheckNotice newCheckNotice = new Model.ProjectSupervision_CheckNotice();
            newCheckNotice.CheckNoticeId = checkNotice.CheckNoticeId;
            //newCheckNotice.SubjectUnitId = checkNotice.SubjectUnitId;
            newCheckNotice.SubjectUnitAdd = checkNotice.SubjectUnitAdd;
            newCheckNotice.SubjectUnitMan = checkNotice.SubjectUnitMan;
            newCheckNotice.SubjectUnitTel = checkNotice.SubjectUnitTel;
            newCheckNotice.CheckStartTime = checkNotice.CheckStartTime;
            newCheckNotice.CheckEndTime = checkNotice.CheckEndTime;
            //newCheckNotice.SubjectObject = checkNotice.SubjectObject;
            newCheckNotice.CheckTeamLeader = checkNotice.CheckTeamLeader;
            newCheckNotice.CompileMan = checkNotice.CompileMan;
            newCheckNotice.CompileDate = checkNotice.CompileDate;
            newCheckNotice.CheckTeamLeaderName = checkNotice.CheckTeamLeaderName;
            newCheckNotice.UnitId = checkNotice.UnitId;
            newCheckNotice.SexName = checkNotice.SexName;
            newCheckNotice.SubjectProjectId = checkNotice.SubjectProjectId;
            Funs.DB.ProjectSupervision_CheckNotice.InsertOnSubmit(newCheckNotice);
            Funs.DB.SubmitChanges();
            ////组长不为空时 自动将组长添加到检查组
            if (!string.IsNullOrEmpty(newCheckNotice.CheckTeamLeader))
            {
                Model.ProjectSupervision_CheckTeam newCheckTeam = new Model.ProjectSupervision_CheckTeam
                {
                    CheckTeamId = SQLHelper.GetNewID(typeof(Model.ProjectSupervision_CheckTeam))
                };
                ;
                newCheckTeam.CheckNoticeId = newCheckNotice.CheckNoticeId;
                newCheckTeam.UserId = newCheckNotice.CheckTeamLeader;
                newCheckTeam.SortIndex = 1;
                newCheckTeam.CheckPostName = "组长";
                newCheckTeam.CheckDate = newCheckNotice.CheckStartTime;
                newCheckTeam.UserName = newCheckNotice.CheckTeamLeaderName;
                newCheckTeam.UnitId = newCheckNotice.UnitId;
                newCheckTeam.SexName = newCheckNotice.SexName;
                BLL.CheckTeamService.AddCheckTeam(newCheckTeam);
            }
        }
        /// 
        /// 修改检查通知单
        /// 
        /// 
        public static void UpdateCheckNotice(Model.ProjectSupervision_CheckNotice checkNotice)
        {
            Model.ProjectSupervision_CheckNotice newCheckNotice = Funs.DB.ProjectSupervision_CheckNotice.FirstOrDefault(e => e.CheckNoticeId == checkNotice.CheckNoticeId);
            if (newCheckNotice != null)
            {
                //newCheckNotice.SubjectUnitId = checkNotice.SubjectUnitId;
                newCheckNotice.SubjectUnitAdd = checkNotice.SubjectUnitAdd;
                newCheckNotice.SubjectUnitMan = checkNotice.SubjectUnitMan;
                newCheckNotice.SubjectUnitTel = checkNotice.SubjectUnitTel;
                newCheckNotice.CheckStartTime = checkNotice.CheckStartTime;
                newCheckNotice.CheckEndTime = checkNotice.CheckEndTime;
                //newCheckNotice.SubjectObject = checkNotice.SubjectObject;
                newCheckNotice.CheckTeamLeader = checkNotice.CheckTeamLeader;
                newCheckNotice.CompileMan = checkNotice.CompileMan;
                newCheckNotice.CompileDate = checkNotice.CompileDate;
                newCheckNotice.CheckTeamLeaderName = checkNotice.CheckTeamLeaderName;
                newCheckNotice.UnitId = checkNotice.UnitId;
                newCheckNotice.SexName = checkNotice.SexName;
                newCheckNotice.SubjectProjectId = checkNotice.SubjectProjectId;
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 根据检查通知Id删除检查通知信息
        /// 
        /// 
        public static void DeleteCheckNoticeByCheckNoticeId(string checkNoticeId)
        {
            Model.ProjectSupervision_CheckNotice checkNotice = Funs.DB.ProjectSupervision_CheckNotice.FirstOrDefault(e => e.CheckNoticeId == checkNoticeId);
            if (checkNotice != null)
            {
                //var checkFiles = from x in db.Check_CheckInfo_CheckFile where x.CheckInfoId == checkInfoId select x;
                //if (checkFiles.Count() > 0)
                //{
                //    foreach (var item in checkFiles)
                //    {
                //        BLL.CheckFileService.DeleteCheckFileByCheckFileId(item.CheckFileId);
                //    }
                //}
                var checkTeams = from x in Funs.DB.ProjectSupervision_CheckTeam where x.CheckNoticeId == checkNoticeId select x;
                if (checkTeams.Count() > 0)
                {
                    foreach (var item in checkTeams)
                    {
                        BLL.CheckTeamService.DeleteCheckTeamByCheckTeamId(item.CheckTeamId);
                    }
                }
                Funs.DB.ProjectSupervision_CheckNotice.DeleteOnSubmit(checkNotice);
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 获取监督检查信息
        /// 
        /// 
        /// 
        public static List GetCheckInfoList(string unitId, string userId, string roleId)
        {
            List checkInfoLists = new List();
            var role = BLL.RoleService.GetRoleByRoleId(roleId);
            if (userId == BLL.Const.sysglyId || (BLL.CommonService.IsMainUnitOrAdmin(unitId) && role != null))
            {
                checkInfoLists = (from x in Funs.DB.ProjectSupervision_CheckNotice orderby x.CheckStartTime select x).ToList();
            }
            else
            {
                var sysUser = BLL.UserService.GetUserByUserId(userId);
                if (sysUser != null)
                {
                    var checkInfoIdList = (from x in Funs.DB.ProjectSupervision_CheckTeam
                                           where x.UserName == sysUser.UserName && x.UnitId == sysUser.UnitId
                                           select x.CheckNoticeId).Distinct().ToList();
                    if (checkInfoIdList.Count() > 0)
                    {
                        checkInfoLists = (from x in Funs.DB.ProjectSupervision_CheckNotice
                                          where checkInfoIdList.Contains(x.CheckNoticeId)
                                          orderby x.CheckStartTime
                                          select x).ToList();
                    }
                    var checkInfoIdList1 = (from x in Funs.DB.ProjectSupervision_CheckNotice
                                            where x.CompileMan == userId
                                            orderby x.CheckStartTime
                                            select x).ToList();
                    if (checkInfoIdList1.Count() > 0)
                    {
                        if (checkInfoLists.Count() > 0)
                        {
                            checkInfoLists.AddRange(checkInfoIdList1);
                        }
                        else
                        {
                            checkInfoLists = checkInfoIdList1;
                        }
                    }
                    checkInfoLists = checkInfoLists.Distinct().ToList();
                }
            }
            return checkInfoLists;
        }        
    }
}