using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
namespace BLL
{
    public class CostControlDetailService
    {
        /// 
        /// 根据Id获取一个费控项明细信息
        /// 
        /// 费控项明细Id
        public static Model.WBS_CostControlDetail GetCostControlDetailByCostControlDetailId(string costControlDetailId)
        {
            return Funs.DB.WBS_CostControlDetail.FirstOrDefault(e => e.CostControlDetailId == costControlDetailId);
        }
        /// 
        /// 根据项目Id获取有对应月份的周计划的费控项明细id
        /// 
        /// 费控项明细Id
        public static string GetHasWeekPlanCostControlIdByProjectIdAndMonth(string projectId, DateTime months)
        {
            Model.SGGLDB db = Funs.DB;
            return (from x in db.WBS_CostControl
                    join y in db.Wbs_WbsSet
                    on x.WbsSetId equals y.WbsSetId
                    where y.ProjectId == projectId && y.IsApprove == true &&
                    (from a in db.WBS_CostControlDetail where a.CostControlId == x.CostControlId && a.Months == months && a.StartDate != null select a).Count() > 0
                    select x.CostControlId).FirstOrDefault();
        }
        /// 
        /// 根据CostControlId判断是否存在费控项明细信息
        /// 
        /// costControlId
        public static bool IsExitCostControlDetailByCostControlId(string costControlId)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId select x).Count() > 0;
        }
        /// 
        /// 根据costControlId和年及月获取对应费控项明细信息
        /// 
        /// 对应wbsId
        /// 对应标志
        /// 年
        /// 月
        public static Model.WBS_CostControlDetail GetCostControlDetailByCostControlIdAndMonths(string costControlId, DateTime months)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId && x.Months == months && x.StartDate == null select x).FirstOrDefault();
        }
        /// 
        /// 根据costControlId和年及月获取对应费控项明细信息
        /// 
        /// 对应wbsId
        /// 对应标志
        /// 年
        /// 月
        public static Model.WBS_CostControlDetail GetCostControlDetailByCostControlIdAndMonthsWeek(string costControlId, DateTime months, DateTime startDate)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId && x.Months == months && x.StartDate == startDate select x).FirstOrDefault();
        }
        /// 
        /// 根据costControlId和年及月获取对应费控项明细视图信息
        /// 
        /// 对应wbsId
        /// 对应标志
        /// 年
        /// 月
        public static Model.View_WBS_CostControlDetail GetCostControlDetailViewByCostControlIdAndMonths(string costControlId, DateTime months)
        {
            return (from x in Funs.DB.View_WBS_CostControlDetail where x.CostControlId == costControlId && x.Months == months select x).FirstOrDefault();
        }
        /// 
        /// 根据costControlId和年及月获取对应费控项明细信息
        /// 
        /// 对应wbsId
        /// 对应标志
        /// 年
        /// 月
        public static Model.View_WBS_CostControlDetail GetViewCostControlDetailByCostControlIdAndMonth(string costControlId, DateTime months)
        {
            return (from x in Funs.DB.View_WBS_CostControlDetail where x.CostControlId == costControlId && x.Months == months && x.StartDate == null select x).FirstOrDefault();
        }
        /// 
        /// 根据costControlId和年及月获取对应费控项明细信息
        /// 
        /// 对应wbsId
        /// 对应标志
        /// 年
        /// 月
        public static Model.View_WBS_CostControlDetail GetViewCostControlDetailByCostControlIdAndMonthWeek(string costControlId, DateTime months, DateTime startDate)
        {
            return (from x in Funs.DB.View_WBS_CostControlDetail where x.CostControlId == costControlId && x.Months == months && x.StartDate == startDate select x).FirstOrDefault();
        }
        public static Model.WBS_CostControlDetail GetWBS_CostControlDetailByCostControlId(string costControlId)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId select x).FirstOrDefault();
        }
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static bool IsExitWeekCostControlDetailByCostControlIdAndMonth(string costControlId, DateTime months)
        {
            bool result = false;
            var q = Funs.DB.WBS_CostControlDetail.FirstOrDefault(e => e.CostControlId == costControlId && e.Months == months);
            if (q != null)
            {
                result = true;
            }
            return result;
        }
        /// 
        /// 根据年及月获取之前月份的对应费控项明细信息集合(含当月)
        /// 
        /// 年
        /// 月
        public static List GetTotalWBS_CostControlDetailsByYearMonth2(string costControlId, DateTime months)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId && x.Months <= months select x).ToList();
        }
        /// 
        /// 根据CostControlId月获取所有月份的对应费控项明细信息集合
        /// 
        /// costControlId
        public static List GetMonthCostControlDetailsByCostControlId(string costControlId)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId && x.StartDate == null orderby x.Months select x).ToList();
        }
        /// 
        /// 根据CostControlId月获取对应月份的对应费控项周明细信息集合
        /// 
        /// costControlId
        public static List GetWeekCostControlDetailsByCostControlId(string costControlId, DateTime months)
        {
            return (from x in Funs.DB.WBS_CostControlDetail where x.CostControlId == costControlId && x.Months == months && x.StartDate != null orderby x.StartDate select x).ToList();
        }
        /// 
        /// 增加费控项明细
        /// 
        /// 费控项明细
        public static void AddCostControlDetail(Model.WBS_CostControlDetail costControlDetail)
        {
            Model.SGGLDB db = Funs.DB;
            Model.WBS_CostControlDetail newWBS_CostControlDetail = new Model.WBS_CostControlDetail();
            newWBS_CostControlDetail.CostControlDetailId = costControlDetail.CostControlDetailId;
            newWBS_CostControlDetail.CostControlId = costControlDetail.CostControlId;
            newWBS_CostControlDetail.Months = costControlDetail.Months;
            newWBS_CostControlDetail.StartDate = costControlDetail.StartDate;
            newWBS_CostControlDetail.EndDate = costControlDetail.EndDate;
            if (costControlDetail.PlanNum == 0)
            {
                newWBS_CostControlDetail.PlanNum = null;
            }
            else
            {
                newWBS_CostControlDetail.PlanNum = costControlDetail.PlanNum;
            }
            if (costControlDetail.ThisNum == 0)
            {
                newWBS_CostControlDetail.ThisNum = null;
            }
            else
            {
                newWBS_CostControlDetail.ThisNum = costControlDetail.ThisNum;
            }
            db.WBS_CostControlDetail.InsertOnSubmit(newWBS_CostControlDetail);
            db.SubmitChanges();
        }
        /// 
        /// 修改费控项明细
        /// 
        /// 费控项明细
        public static void UpdateCostControlDetail(Model.WBS_CostControlDetail costControlDetail)
        {
            Model.SGGLDB db = Funs.DB;
            Model.WBS_CostControlDetail newWBS_CostControlDetail = db.WBS_CostControlDetail.First(e => e.CostControlDetailId == costControlDetail.CostControlDetailId);
            newWBS_CostControlDetail.StartDate = costControlDetail.StartDate;
            newWBS_CostControlDetail.EndDate = costControlDetail.EndDate;
            if (costControlDetail.PlanNum == 0)
            {
                newWBS_CostControlDetail.PlanNum = null;
            }
            else
            {
                newWBS_CostControlDetail.PlanNum = costControlDetail.PlanNum;
            }
            if (costControlDetail.ThisNum == 0)
            {
                newWBS_CostControlDetail.ThisNum = null;
            }
            else
            {
                newWBS_CostControlDetail.ThisNum = costControlDetail.ThisNum;
            }
            db.SubmitChanges();
        }
        /// 
        /// 根据Id删除费控项明细信息
        /// 
        /// 
        public static void DeleteCostControlDetail(string costControlDetailId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.WBS_CostControlDetail ins = db.WBS_CostControlDetail.First(e => e.CostControlDetailId == costControlDetailId);
            db.WBS_CostControlDetail.DeleteOnSubmit(ins);
            db.SubmitChanges();
        }
        /// 
        /// 根据costControlId删除费控项明细信息
        /// 
        /// 
        public static void DeleteCostControlDetailByCostControlId(string costControlId)
        {
            Model.SGGLDB db = Funs.DB;
            var details = from x in db.WBS_CostControlDetail where x.CostControlId == costControlId select x;
            if (details.Count() > 0)
            {
                db.WBS_CostControlDetail.DeleteAllOnSubmit(details);
                db.SubmitChanges();
            }
        }
        /// 
        ///  周计划下拉框
        /// 
        /// 下拉框名字
        /// 是否显示请选择
        public static void InitWeekPlanList(FineUIPro.DropDownList dropName, string costControlId, DateTime months, bool isShowPlease)
        {
            dropName.DataValueField = "Value";
            dropName.DataTextField = "Text";
            dropName.DataSource = GetWeekPlanList(costControlId, months);
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        /// 
        ///  根据费控项Id和月份获取对应月份的周计划记录
        /// 
        /// 项目Id
        /// 
        public static ListItem[] GetWeekPlanList(string costControlId, DateTime months)
        {
            var q = (from x in Funs.DB.WBS_CostControlDetail
                     where x.CostControlId == costControlId && x.Months == months && x.StartDate != null
                     orderby x.StartDate
                     select x).ToList();
            ListItem[] list = new ListItem[q.Count()];
            string dateStr = string.Empty, date = string.Empty;
            for (int i = 0; i < list.Count(); i++)
            {
                date = string.Empty;
                dateStr = string.Empty;
                if (q[i].StartDate != null)
                {
                    dateStr = string.Format("{0:yyyy-MM-dd}", q[i].StartDate);
                    date = string.Format("{0:yyyy-MM-dd}", q[i].StartDate);
                }
                if (q[i].EndDate != null)
                {
                    dateStr += "至" + string.Format("{0:yyyy-MM-dd}", q[i].EndDate);
                    date += "," + string.Format("{0:yyyy-MM-dd}", q[i].EndDate);
                }
                list[i] = new ListItem(dateStr, date);
            }
            return list;
        }
    }
}