using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
   public static class MonthReportBService
    {
        /// 
        /// 根据时间获取最近时间的月报
        /// 
        /// 日期
        /// 
        public static bool GetMonthReportByDate(DateTime date, string projectId)
        {
            var a = from x in Funs.DB.Manager_MonthReportB where x.ProjectId == projectId && (x.Months.Value.Year.ToString() + x.Months.Value.Month.ToString()).Contains(date.Year.ToString() + date.Month.ToString()) select x;
            return a.Count() > 0;
        }
        /// 
        /// 获取项目时间段内的月报
        /// 
        /// 开始时间
        /// 结束时间
        /// 项目号
        /// 
        public static List GetMonthReportsByStartAndEndTimeAndProjectId(DateTime startTime, DateTime endTime, string projectId)
        {
            return (from x in Funs.DB.Manager_MonthReportB where x.Months >= startTime && x.Months < endTime && x.ProjectId == projectId select x).ToList();
        }
        /// 
        /// 获取所有项目时间段内的月报
        /// 
        /// 开始时间
        /// 结束时间
        /// 
        public static List GetMonthReportsByStartAndEndTime(DateTime startTime, DateTime endTime)
        {
            return (from x in Funs.DB.Manager_MonthReportB where x.Months >= startTime && x.Months < endTime select x).ToList();
        }
        /// 
        /// 获取所有项目当月的月报
        /// 
        /// 
        /// 
        public static List GetMonthReportsByMonths(DateTime months)
        {
            return (from x in Funs.DB.Manager_MonthReportB where x.Months == months select x).ToList();
        }
        /// 
        /// 根据时间获取最近时间的月报
        /// 
        /// 日期
        /// 
        public static bool GetFreezeMonthReportByDate(DateTime date, string projectId, int day)
        {
            var a = from x in Funs.DB.Manager_MonthReportB where x.ProjectId == projectId && (x.Months.Value.Year.ToString() + x.Months.Value.AddMonths(1).Month.ToString()).Contains(date.Year.ToString() + date.Month.ToString()) && date.Day < (day + 1) select x;
            return a.Count() > 0;
        }
        /// 
        /// 根据日期获得月报告信息
        /// 
        /// 日期
        /// 
        public static Model.Manager_MonthReportB GetMonthReportByMonth(DateTime month, string projectId)
        {
            return (from x in Funs.DB.Manager_MonthReportB where x.Months == month && x.ProjectId == projectId select x).FirstOrDefault();
        }
        ///// 
        ///// 根据日期获得最近的一条月报告信息
        ///// 
        ///// 日期
        ///// 
        //public static Model.Manager_MonthReportB GetLastMonthReportByDate(DateTime date, int freezeDay, string projectId)
        //{
        //    Model.Manager_MonthReportB LastMonth = null;
        //    if (date.Day < freezeDay)
        //    {
        //        LastMonth = (from x in Funs.DB.Manager_MonthReportB where x.Months <= date.AddMonths(-2) && x.ProjectId == projectId orderby x.MonthReportDate descending select x).FirstOrDefault();
        //    }
        //    else
        //    {
        //        LastMonth = (from x in Funs.DB.Manager_MonthReportB where x.Months < date.AddMonths(-1) && x.ProjectId == projectId orderby x.MonthReportDate descending select x).FirstOrDefault();
        //    }
        //    return LastMonth;
        //}
        /// 
        /// 根据日期获得最近的一条月报告信息
        /// 
        /// 日期
        /// 
        public static Model.Manager_MonthReportB GetLastMonthReportByDate(DateTime date, int freezeDay, string projectId)
        {
            Model.Manager_MonthReportB LastMonth = null;
            DateTime? monthDate = null;
            var q = from x in Funs.DB.Manager_MonthReportB where x.ProjectId == projectId && x.Months < date orderby x.Months descending select x;
            if (q.Count() > 0)
            {
                if (date.Day <= freezeDay)
                {
                    DateTime c = date.AddMonths(-1).Date;
                    monthDate = Convert.ToDateTime(c.Year + "-" + c.Month + "-01");  //当月
                }
                else
                {
                    monthDate = Convert.ToDateTime(date.Year + "-" + date.Month + "-01");  //当月
                }
                var month = from x in q where x.Months == monthDate select x;
                if (month.Count() > 0)  // 表示存在当月记录
                {
                    if (q.Count() > 1)
                    {
                        LastMonth = q.ToList()[1];
                    }
                }
                else    // 表示不存在当月记录
                {
                    LastMonth = q.ToList()[0];
                }
            }
            return LastMonth;
        }
        /// 
        /// 根据月报告主键获取月报告信息
        /// 
        /// 月报告主键
        /// 月报告信息
        public static Model.Manager_MonthReportB GetMonthReportByMonthReportId(string monthReportId)
        {
            return Funs.DB.Manager_MonthReportB.FirstOrDefault(x => x.MonthReportId == monthReportId);
        }
        /// 
        /// 根据月报告编号获取月报告信息
        /// 
        /// 月报告编号
        /// 月报告信息
        public static Model.Manager_MonthReportB GetMonthReportByMonthReportCode(string monthReportCode)
        {
            return Funs.DB.Manager_MonthReportB.FirstOrDefault(x => x.MonthReportCode == monthReportCode);
        }
        /// 
        /// 增加月报告信息
        /// 
        /// 月报告实体
        public static void AddMonthReport(Model.Manager_MonthReportB monthReport)
        {
            string newKeyID = SQLHelper.GetNewID(typeof(Model.Manager_MonthReportB));
            Model.Manager_MonthReportB newMonthReport = new Model.Manager_MonthReportB
            {
                MonthReportId = monthReport.MonthReportId,
                MonthReportCode = monthReport.MonthReportCode,
                ProjectId = monthReport.ProjectId,
                Months = monthReport.Months,
                MonthReportDate = monthReport.MonthReportDate,
                ReportMan = monthReport.ReportMan,
                Manhours = monthReport.Manhours,
                TotalManhours = monthReport.TotalManhours,
                HseManhours = monthReport.HseManhours,
                TotalHseManhours = monthReport.TotalHseManhours,
                NoStartDate = monthReport.NoStartDate,
                NoEndDate = monthReport.NoEndDate,
                SafetyManhours = monthReport.SafetyManhours,
                AccidentReview = monthReport.AccidentReview,
                AccidentNum = monthReport.AccidentNum,
                AccidentRateA = monthReport.AccidentRateA,
                AccidentRateB = monthReport.AccidentRateB,
                AccidentRateC = monthReport.AccidentRateC,
                AccidentRateD = monthReport.AccidentRateD,
                AccidentRateE = monthReport.AccidentRateE,
                LargerHazardNun = monthReport.LargerHazardNun,
                TotalLargerHazardNun = monthReport.TotalLargerHazardNun,
                IsArgumentLargerHazardNun = monthReport.IsArgumentLargerHazardNun,
                TotalIsArgumentLargerHazardNun = monthReport.TotalIsArgumentLargerHazardNun,
                HseActiveReview = monthReport.HseActiveReview,
                HseActiveKey = monthReport.HseActiveKey,
                TotalManNum = monthReport.TotalManNum
            };
            Funs.DB.Manager_MonthReportB.InsertOnSubmit(newMonthReport);
            Funs.DB.SubmitChanges();
            ////增加一条编码记录
            BLL.CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(BLL.Const.ProjectManagerMonthBMenuId, monthReport.ProjectId, null, monthReport.MonthReportId, monthReport.MonthReportDate);
        }
        /// 
        /// 修改月报告信息
        /// 
        /// 月报告实体
        public static void UpdateMonthReport(Model.Manager_MonthReportB monthReport)
        {
            Model.Manager_MonthReportB newMonthReport = Funs.DB.Manager_MonthReportB.FirstOrDefault(e => e.MonthReportId == monthReport.MonthReportId);
            newMonthReport.MonthReportCode = monthReport.MonthReportCode;
            newMonthReport.ProjectId = monthReport.ProjectId;
            newMonthReport.Months = monthReport.Months;
            newMonthReport.MonthReportDate = monthReport.MonthReportDate;
            newMonthReport.ReportMan = monthReport.ReportMan;
            newMonthReport.Manhours = monthReport.Manhours;
            newMonthReport.TotalManhours = monthReport.TotalManhours;
            newMonthReport.HseManhours = monthReport.HseManhours;
            newMonthReport.TotalHseManhours = monthReport.TotalHseManhours;
            newMonthReport.NoStartDate = monthReport.NoStartDate;
            newMonthReport.NoEndDate = monthReport.NoEndDate;
            newMonthReport.SafetyManhours = monthReport.SafetyManhours;
            newMonthReport.AccidentReview = monthReport.AccidentReview;
            newMonthReport.AccidentNum = monthReport.AccidentNum;
            newMonthReport.AccidentRateA = monthReport.AccidentRateA;
            newMonthReport.AccidentRateB = monthReport.AccidentRateB;
            newMonthReport.AccidentRateC = monthReport.AccidentRateC;
            newMonthReport.AccidentRateD = monthReport.AccidentRateD;
            newMonthReport.AccidentRateE = monthReport.AccidentRateE;
            newMonthReport.LargerHazardNun = monthReport.LargerHazardNun;
            newMonthReport.TotalLargerHazardNun = monthReport.TotalLargerHazardNun;
            newMonthReport.IsArgumentLargerHazardNun = monthReport.IsArgumentLargerHazardNun;
            newMonthReport.TotalIsArgumentLargerHazardNun = monthReport.TotalIsArgumentLargerHazardNun;
            newMonthReport.HseActiveReview = monthReport.HseActiveReview;
            newMonthReport.HseActiveKey = monthReport.HseActiveKey;
            newMonthReport.TotalManNum = monthReport.TotalManNum;
            newMonthReport.PlanCost = monthReport.PlanCost;
            newMonthReport.RealCost = monthReport.RealCost;
            newMonthReport.TotalRealCost = monthReport.TotalRealCost;
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 根据月报告主键删除一个月报告信息
        /// 
        /// 月报告主键
        public static void DeleteMonthReportByMonthReportId(string monthReportId)
        {
            Model.Manager_MonthReportB monthReport = Funs.DB.Manager_MonthReportB.FirstOrDefault(e => e.MonthReportId == monthReportId);
            ///删除编码表记录
            BLL.CodeRecordsService.DeleteCodeRecordsByDataId(monthReportId);
            BLL.CommonService.DeleteAttachFileById(monthReportId);//删除附件
            Funs.DB.Manager_MonthReportB.DeleteOnSubmit(monthReport);
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 获取项目当月的月报
        /// 
        /// 
        /// 
        /// 
        public static Model.Manager_MonthReportB GetMonthReportsByMonthsAndProjectId(DateTime months, string projectId)
        {
            return (from x in Funs.DB.Manager_MonthReportB where x.Months == months && x.ProjectId == projectId select x).FirstOrDefault();
        }
        /// 
        /// 获取项目最近的的月报
        /// 
        /// 
        /// 
        /// 
        public static Model.Manager_MonthReportB GetLateMonthReportByMonths(DateTime months, string projectId)
        {
            var q = from x in Funs.DB.Manager_MonthReportB where x.Months < months && x.ProjectId == projectId orderby x.Months descending select x;
            if (q.Count() > 0)
            {
                return q.First();
            }
            else
            {
                return null;
            }
        }
    }
}