using FineUIPro;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLL
{
    public static class SupervisecheckService
    {
        #region 获取列表
        /// 
        /// 记录数
        /// 
        public static int Count { get; set; }
        public static IQueryable GetZJ_SuperviseCheckByModle(Model.ZJ_SuperviseCheck table)
        {
            var q = from x in Funs.DB.ZJ_SuperviseCheck
                    where
                        (string.IsNullOrEmpty(table.SuperviseCheckId) ||
                         x.SuperviseCheckId.Contains(table.SuperviseCheckId)) &&
                        (string.IsNullOrEmpty(table.SuperviseCheckReportCode) ||
                         x.SuperviseCheckReportCode.Contains(table.SuperviseCheckReportCode)) &&
                        (string.IsNullOrEmpty(table.ProjectId) || x.ProjectId.Contains(table.ProjectId)) &&
                        (string.IsNullOrEmpty(table.CheckTeam) || x.CheckTeam.Contains(table.CheckTeam)) &&
                        (string.IsNullOrEmpty(table.RecUserId) || x.RecUserId.Contains(table.RecUserId))
                    select x
                ;
            return q;
        }
        /// 
        /// 获取分页列表
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable GetListData(Model.ZJ_SuperviseCheck table, Grid grid1)
        {
            var q = GetZJ_SuperviseCheckByModle(table);
            Count = q.Count();
            if (Count == 0)
            {
                return null;
            }
            q = q.Skip(grid1.PageSize * grid1.PageIndex).Take(grid1.PageSize);
            // q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
            return from x in q
                select new
                {
                    x.SuperviseCheckId,
                    x.SuperviseCheckReportCode,
                    x.CheckDate,
                    x.ProjectId,
                    x.CheckTeam,
                    x.State,
                    x.RecUserId,
                    x.CreateMan,
                    x.CreateDate
                };
        }
        #endregion
        public static Model.ZJ_SuperviseCheck GetZJ_SuperviseCheckById(string SuperviseCheckId)
        {
            return Funs.DB.ZJ_SuperviseCheck.FirstOrDefault(x => x.SuperviseCheckId == SuperviseCheckId);
        }
        public static Model.ZJ_SuperviseCheck GetZJ_SuperviseCheckByCode(string superviseCheckReportCode)
        {
            return Funs.DB.ZJ_SuperviseCheck.FirstOrDefault(x =>
                x.SuperviseCheckReportCode == superviseCheckReportCode);
        }
        public static void AddZJ_SuperviseCheck(Model.ZJ_SuperviseCheck newtable)
        {
            Model.ZJ_SuperviseCheck table = new Model.ZJ_SuperviseCheck
            {
                SuperviseCheckId = newtable.SuperviseCheckId,
                SuperviseCheckReportCode = newtable.SuperviseCheckReportCode,
                CheckDate = newtable.CheckDate,
                ProjectId = newtable.ProjectId,
                CheckTeam = newtable.CheckTeam,
                State = newtable.State,
                RecUserId = newtable.RecUserId,
                CreateMan = newtable.CreateMan,
                CreateDate = newtable.CreateDate
            };
            Funs.DB.ZJ_SuperviseCheck.InsertOnSubmit(table);
            Funs.DB.SubmitChanges();
        }
        public static void UpdateZJ_SuperviseCheck(Model.ZJ_SuperviseCheck newtable)
        {
            Model.ZJ_SuperviseCheck table =
                Funs.DB.ZJ_SuperviseCheck.FirstOrDefault(x => x.SuperviseCheckId == newtable.SuperviseCheckId);
            if (table != null)
            {
                table.SuperviseCheckId = newtable.SuperviseCheckId;
                table.SuperviseCheckReportCode = newtable.SuperviseCheckReportCode;
                table.CheckDate = newtable.CheckDate;
                table.ProjectId = newtable.ProjectId;
                table.CheckTeam = newtable.CheckTeam;
                table.State = newtable.State;
                table.RecUserId = newtable.RecUserId;
                table.CreateMan= newtable.CreateMan;
                table.CreateDate = newtable.CreateDate;
                Funs.DB.SubmitChanges();
            }
        }
        public static void DeleteZJ_SuperviseCheckById(string SuperviseCheckId)
        {
            Model.ZJ_SuperviseCheck table =
                Funs.DB.ZJ_SuperviseCheck.FirstOrDefault(x => x.SuperviseCheckId == SuperviseCheckId);
            if (table != null)
            {
                SupervisecheckDetailService.DeleteBySuperviseCheckId(table.SuperviseCheckId);
                Funs.DB.ZJ_SuperviseCheck.DeleteOnSubmit(table);
                Funs.DB.SubmitChanges();
            }
        }
        /// 
        /// 根据SuperviseCheckId验证状态
        /// 
        /// SuperviseCheckId
        public static void VerifyStateBySuperviseCheckId(string SuperviseCheckId)
        {
            // 获取给定SuperviseCheckId的ZJ_SuperviseCheck_Detail记录的数量
            int detailCount = Funs.DB.ZJ_SuperviseCheck_Detail
                .Count(x => x.SuperviseCheckId == SuperviseCheckId);
            // 获取每个ZJ_SuperviseCheck_Detail记录的AttachFile记录的数量
            int attachCount = Funs.DB.ZJ_SuperviseCheck_Detail
                .Where(x => x.SuperviseCheckId == SuperviseCheckId)
                .Sum(x => Funs.DB.AttachFile
                    .Count(y => y.ToKeyId == x.DetailId + "Ref"));
            // 如果detailCount为0,则返回
            if (detailCount == 0)
            {
                return;
            }
            // 根据计数确定状态
            int state;
            if (attachCount == 0)
            {
                state = 1; // 未完成一些更改
            }
            else if (attachCount == detailCount)
            {
                state = 3; // 所有更改已完成
            }
            else
            {
                state = 2; // 未完成一些更改
            }
            // 更新ZJ_SuperviseCheck记录的状态
            Model.ZJ_SuperviseCheck table =
                Funs.DB.ZJ_SuperviseCheck.FirstOrDefault(x => x.SuperviseCheckId == SuperviseCheckId);
            if (table != null)
            {
                table.State = state;
                Funs.DB.SubmitChanges();
            }
        }
    }
}