using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Web.UI.WebControls;
namespace BLL
{
    public class BreakdownProjectService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 记录数
        /// 
        public static int count
        {
            get;
            set;
        }
        /// 
        /// 记录数2
        /// 
        public static int count2
        {
            get;
            set;
        }
        /// 
        /// 记录数3
        /// 
        public static int count3
        {
            get;
            set;
        }
        /// 
        /// 定义变量
        ///                   
        private static IQueryable qq = from x in db.WBS_BreakdownProject orderby x.SortIndex select x;
        /// 
        /// 获取项目列表
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData(string projectId, string divisionProjectId, string name, int startRowIndex, int maximumRows)
        {
            IQueryable q = qq;
            if (!string.IsNullOrEmpty(projectId))
            {
                q = q.Where(e => e.ProjectId == projectId);
            }
            if (!string.IsNullOrEmpty(divisionProjectId))
            {
                q = q.Where(e => e.DivisionProjectId == divisionProjectId);
            }
            if (!string.IsNullOrEmpty(name))
            {
                q = q.Where(e => e.BreakdownName.Contains(name));
            }
            count = q.Count();
            if (count == 0)
            {
                return new object[] { "" };
            }
            return from x in q.Skip(startRowIndex).Take(maximumRows)
                   select new
                   {
                       x.BreakdownProjectId,
                       x.BreakdownCode,
                       x.BreakdownName,
                       x.DivisionProjectId,
                       x.Basis,
                       x.CheckPoints,
                       x.RecordAndCode,
                       x.Class,
                       x.Remark,
                       x.FenBao,
                       x.YeZhu,
                       x.WuHuan,
                       x.JianLi,
                       CheckPointsDef = Funs.GetSubStr(x.CheckPoints, 15),
                       RecordAndCodeDef = Funs.GetSubStr(x.RecordAndCode, 15),
                       x.AttachUrl,
                       x.ModelURL
                   };
        }
        /// 
        /// 获取列表数
        /// 
        /// 
        /// 
        /// 
        public static int getListCount(string projectId, string divisionProjectId, string name)
        {
            return count;
        }
        /// 
        /// 定义变量
        ///                   
        private static IQueryable qq2 = from x in db.View_WBS select x;
        /// 
        /// 获取项目已选择的WBS列表
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData2(string projectId, int startRowIndex, int maximumRows)
        {
            IQueryable q = qq2;
            if (!string.IsNullOrEmpty(projectId))
            {
                q = q.Where(e => e.ProjectId == projectId);
            }
            count2 = q.Count();
            if (count2 == 0)
            {
                return new object[] { "" };
            }
            return from x in q.Skip(startRowIndex).Take(maximumRows)
                   select new
                   {
                       x.ProfessionalName,
                       x.DivisionName3,
                       x.DivisionName2,
                       x.DivisionName1,
                       x.ProjectId,
                       x.BreakdownCode,
                       x.BreakdownName,
                       x.Basis,
                       x.CheckPoints,
                       x.RecordAndCode,
                       x.Class,
                       x.Remark,
                   };
        }
        /// 
        /// 获取列表数
        /// 
        /// 
        /// 
        /// 
        public static int getListCount2(string projectId)
        {
            return count2;
        }
        /// 
        /// 定义变量
        ///                   
        private static IQueryable qq3 = from x in db.View_WBS_BreakdownProject orderby x.SortIndex select x;
        /// 
        /// 获取项目列表
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData3(string projectId, string divisionProjectId, string name, int startRowIndex, int maximumRows)
        {
            IQueryable q = qq3;
            if (!string.IsNullOrEmpty(projectId))
            {
                q = q.Where(e => e.ProjectId == projectId);
            }
            if (!string.IsNullOrEmpty(divisionProjectId))
            {
                q = q.Where(e => e.DivisionProjectId == divisionProjectId);
            }
            if (!string.IsNullOrEmpty(name))
            {
                q = q.Where(e => e.BreakdownName.Contains(name));
            }
            count3 = q.Count();
            if (count3 == 0)
            {
                return new object[] { "" };
            }
            return from x in q.Skip(startRowIndex).Take(maximumRows)
                   select new
                   {
                       x.BreakdownProjectId,
                       x.BreakdownCode,
                       x.BreakdownName,
                       x.DivisionProjectId,
                       x.Basis,
                       x.CheckPoints,
                       x.RecordAndCode,
                       x.Class,
                       x.Remark,
                       x.FenBao,
                       x.YeZhu,
                       x.WuHuan,
                       x.JianLi,
                       CheckPointsDef = Funs.GetSubStr(x.CheckPoints, 15),
                       RecordAndCodeDef = Funs.GetSubStr(x.RecordAndCode, 15),
                       x.AttachUrl,
                   };
        }
        /// 
        /// 获取列表数
        /// 
        /// 
        /// 
        /// 
        public static int getListCount3(string projectId, string divisionProjectId, string name)
        {
            return count3;
        }
        /// 
        /// 添加分项
        /// 
        /// 
        public static void AddBreakdownProject(Model.WBS_BreakdownProject breakdownProject)
        {
            Model.SGGLDB db = Funs.DB;
            Model.WBS_BreakdownProject newBreakdownProject = new Model.WBS_BreakdownProject();
            newBreakdownProject.BreakdownProjectId = breakdownProject.BreakdownProjectId;
            newBreakdownProject.ProjectId = breakdownProject.ProjectId;
            newBreakdownProject.BreakdownCode = breakdownProject.BreakdownCode;
            newBreakdownProject.BreakdownName = breakdownProject.BreakdownName;
            newBreakdownProject.DivisionProjectId = breakdownProject.DivisionProjectId;
            newBreakdownProject.Basis = breakdownProject.Basis;
            newBreakdownProject.CheckPoints = breakdownProject.CheckPoints;
            newBreakdownProject.RecordAndCode = breakdownProject.RecordAndCode;
            newBreakdownProject.Class = breakdownProject.Class;
            newBreakdownProject.SortIndex = breakdownProject.SortIndex;
            newBreakdownProject.Remark = breakdownProject.Remark;
            newBreakdownProject.AttachUrl = breakdownProject.AttachUrl;
            newBreakdownProject.ModelURL = breakdownProject.ModelURL;
            newBreakdownProject.UnitWorkId = breakdownProject.UnitWorkId;
            newBreakdownProject.IsAcceptance = breakdownProject.IsAcceptance;
            newBreakdownProject.CompileMan = breakdownProject.CompileMan;
            newBreakdownProject.CompileDate = breakdownProject.CompileDate;
            newBreakdownProject.IsYellow = breakdownProject.IsYellow;
            newBreakdownProject.WuHuan = breakdownProject.WuHuan;
            newBreakdownProject.JianLi = breakdownProject.JianLi;
            newBreakdownProject.YeZhu = breakdownProject.YeZhu;
            newBreakdownProject.FenBao = breakdownProject.FenBao;
            newBreakdownProject.SourceBreakdownId = breakdownProject.SourceBreakdownId;
            newBreakdownProject.CheckAcceptType = breakdownProject.CheckAcceptType;
            db.WBS_BreakdownProject.InsertOnSubmit(newBreakdownProject);
            db.SubmitChanges();
        }
        /// 
        /// 修改分项
        /// 
        /// 
        public static void UpdateBreakdownProject(Model.WBS_BreakdownProject breakdownProject)
        {
            Model.SGGLDB db = Funs.DB;
            Model.WBS_BreakdownProject newBreakdownProject = db.WBS_BreakdownProject.First(e => e.BreakdownProjectId == breakdownProject.BreakdownProjectId);
            newBreakdownProject.BreakdownCode = breakdownProject.BreakdownCode;
            newBreakdownProject.BreakdownName = breakdownProject.BreakdownName;
            newBreakdownProject.DivisionProjectId = breakdownProject.DivisionProjectId;
            newBreakdownProject.Basis = breakdownProject.Basis;
            newBreakdownProject.CheckPoints = breakdownProject.CheckPoints;
            newBreakdownProject.RecordAndCode = breakdownProject.RecordAndCode;
            newBreakdownProject.Class = breakdownProject.Class;
            newBreakdownProject.SortIndex = breakdownProject.SortIndex;
            newBreakdownProject.Remark = breakdownProject.Remark;
            newBreakdownProject.AttachUrl = breakdownProject.AttachUrl;
            newBreakdownProject.IsSelected = breakdownProject.IsSelected;
            newBreakdownProject.WuHuan = breakdownProject.WuHuan;
            newBreakdownProject.JianLi = breakdownProject.JianLi;
            newBreakdownProject.YeZhu = breakdownProject.YeZhu;
            newBreakdownProject.FenBao = breakdownProject.FenBao;
            newBreakdownProject.CheckAcceptType = breakdownProject.CheckAcceptType;
            db.SubmitChanges();
        }
        /// 
        /// 根据一个分项信息
        /// 
        /// 
        public static void DeleteBreakdown(string breakdownProjectId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.WBS_BreakdownProject breakdownProject = db.WBS_BreakdownProject.First(e => e.BreakdownProjectId == breakdownProjectId);
            db.WBS_BreakdownProject.DeleteOnSubmit(breakdownProject);
            db.SubmitChanges();
        }
        /// 
        /// 根据一个子分部信息删除所有对应分项信息
        /// 
        /// 
        public static void DeleteAllBreakdown(string divisionProjectId)
        {
            Model.SGGLDB db = Funs.DB;
            var q = from x in db.WBS_BreakdownProject where x.DivisionProjectId == divisionProjectId select x;
            if (q.Count() > 0)
            {
                db.WBS_BreakdownProject.DeleteAllOnSubmit(q);
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据一个单位工程信息删除所有对应分项信息
        /// 
        /// 
        public static void DeleteAllBreakdownByUnitWorkId(string unitWorkId)
        {
            Model.SGGLDB db = Funs.DB;
            var q = from x in db.WBS_BreakdownProject where x.UnitWorkId == unitWorkId select x;
            db.WBS_BreakdownProject.DeleteAllOnSubmit(q);
            db.SubmitChanges();
        }
        /// 
        /// 获取施工分项项
        /// 
        /// 
        public static ListItem[] GetBreakdownNameList()
        {
            var q = (from x in Funs.DB.WBS_BreakdownProject orderby x.SortIndex select x).ToList();
            ListItem[] list = new ListItem[q.Count()];
            for (int i = 0; i < q.Count(); i++)
            {
                list[i] = new ListItem(q[i].BreakdownName ?? "", q[i].BreakdownProjectId.ToString());
            }
            return list;
        }
        /// 
        /// 根据主键返回一个分项信息
        /// 
        /// 分项编号
        /// 
        public static Model.WBS_BreakdownProject GetBreakdownProjectById(string breakdownProjectId)
        {
            return Funs.DB.WBS_BreakdownProject.FirstOrDefault(x => x.BreakdownProjectId == breakdownProjectId);
        }
        /// 
        /// 根据子分部Id返回所有分项信息
        /// 
        /// 分项编号
        /// 
        public static List GetBreakdownProjectsByDivisionProjectId(string divisionProjectId)
        {
            return (from x in Funs.DB.WBS_BreakdownProject where x.DivisionProjectId == divisionProjectId select x).ToList();
        }
        public static List GetBreakdownProjectsBySourceBreakdownId(string projectId, string unitWorkId, string sourceBreakdownId)
        {
            if (!string.IsNullOrEmpty(sourceBreakdownId))
            {
                string[] ids = sourceBreakdownId.Split(',');
                return (from x in Funs.DB.WBS_BreakdownProject where x.ProjectId == projectId && x.UnitWorkId == unitWorkId && ids.Contains(x.SourceBreakdownId) select x).ToList();
            }
            return (from x in Funs.DB.WBS_BreakdownProject where x.ProjectId == projectId && x.UnitWorkId == unitWorkId && x.SourceBreakdownId == sourceBreakdownId select x).ToList();
        }
        /// 
        /// 根据单元Id返回所有分项信息
        /// 
        /// 分项编号
        /// 
        public static List GetBreakdownProjectsByInstallationId(string unitWorkId)
        {
            return (from x in Funs.DB.WBS_BreakdownProject where x.UnitWorkId == unitWorkId select x).ToList();
        }
        /// 
        /// 判断分项编号是否存在
        /// 
        /// 
        /// 
        public static bool IsExistBreakdownCode(string breakdownCode, string breakdownProjectId)
        {
            Model.WBS_BreakdownProject m = Funs.DB.WBS_BreakdownProject.FirstOrDefault(e => e.BreakdownCode == breakdownCode && e.BreakdownProjectId != breakdownProjectId);
            if (m != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// 
        /// 判断分项名称是否存在
        /// 
        /// 
        /// 
        public static bool IsExistProfessionalName(string breakdownName, string breakdownProjectId)
        {
            Model.WBS_BreakdownProject m = Funs.DB.WBS_BreakdownProject.FirstOrDefault(e => e.BreakdownName == breakdownName && e.BreakdownProjectId != breakdownProjectId);
            if (m != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public static Model.WBS_BreakdownProject GetBreakdownProjectByName(string divisionProjectId, string breakdownName)
        {
            return Funs.DB.WBS_BreakdownProject.FirstOrDefault(x => x.DivisionProjectId == divisionProjectId && x.BreakdownName == breakdownName);
        }
    }
}