using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLL
{
    /// 
    /// 处罚通知单
    /// 
    public static class PunishNoticeService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 根据主键获取处罚通知单
        /// 
        /// 
        /// 
        public static Model.Check_PunishNotice GetPunishNoticeById(string punishNoticeId)
        {
            return Funs.DB.Check_PunishNotice.FirstOrDefault(e => e.PunishNoticeId == punishNoticeId);
        }
        /// 
        /// 根据日期获取HSE奖励通知单集合
        /// 
        /// 开始时间
        /// 结束时间
        /// 项目号
        /// HSE奖励通知单集合
        public static List GetPunishNoticeListsByDate(DateTime startTime, DateTime endTime, string projectId)
        {
            return (from x in Funs.DB.Check_PunishNotice where x.PunishNoticeDate >= startTime && x.PunishNoticeDate <= endTime && x.ProjectId == projectId orderby x.PunishNoticeDate select x).ToList();
        }
        /// 
        /// 根据时间段获取HSE处罚通知单集合
        /// 
        /// 开始时间
        /// 结束时间
        /// 项目Id
        /// 时间段内的HSE处罚通知单集合
        public static int GetCountByDate(DateTime startTime, DateTime endTime, string projectId)
        {
            return (from x in Funs.DB.Check_PunishNotice where x.PunishNoticeDate >= startTime && x.PunishNoticeDate <= endTime && x.ProjectId == projectId select x).Count();
        }
        /// 
        /// 根据时间段获取HSE处罚通知单处罚总金额
        /// 
        /// 开始时间
        /// 结束时间
        /// 项目Id
        /// 时间段内的HSE处罚通知单处罚总金额
        public static decimal GetSumMoneyByDate(DateTime startTime, DateTime endTime, string projectId)
        {
            var q = (from x in Funs.DB.Check_PunishNotice where x.PunishNoticeDate >= startTime && x.PunishNoticeDate <= endTime && x.ProjectId == projectId select x).ToList();
            if (q.Count > 0)
            {
                return (from x in q select x.PunishMoney ?? 0).Sum();
            }
            return 0;
        }
        /// 
        /// 获取处罚金额总和
        /// 
        /// 
        /// 
        /// 
        /// 
        public static decimal? GetSumMoney(string projectId)
        {
            Model.SGGLDB db = Funs.DB;
            decimal? sumRewardMoney = (from x in db.Check_PunishNotice
                                       where x.ProjectId == projectId && x.States == BLL.Const.State_2
                                       select x.PunishMoney).Sum();
            if (sumRewardMoney == null)
            {
                return 0;
            }
            return sumRewardMoney;
        }
        /// 
        /// 根据日期获取处罚金额总和
        /// 
        /// 
        /// 
        /// 
        /// 
        public static decimal? GetSumMoneyByTime(DateTime startTime, DateTime endTime, string projectId)
        {
            Model.SGGLDB db = Funs.DB;
            decimal? sumRewardMoney = (from x in db.Check_PunishNotice
                                       where x.PunishNoticeDate >= startTime && x.PunishNoticeDate < endTime && x.ProjectId == projectId && x.States == BLL.Const.State_2
                                       select x.PunishMoney).Sum();
            if (sumRewardMoney == null)
            {
                return 0;
            }
            return sumRewardMoney;
        }
        /// 
        /// 添加处罚通知单
        /// 
        /// 
        public static void AddPunishNotice(Model.Check_PunishNotice punishNotice)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Check_PunishNotice newPunishNotice = new Model.Check_PunishNotice
            {
                PunishNoticeId = punishNotice.PunishNoticeId,
                ProjectId = punishNotice.ProjectId,
                PunishNoticeCode = punishNotice.PunishNoticeCode,
                UnitId = punishNotice.UnitId,
                PunishNoticeDate = punishNotice.PunishNoticeDate,
                BasicItem = punishNotice.BasicItem,
                PunishMoney = punishNotice.PunishMoney,
                FileContents = punishNotice.FileContents,
                AttachUrl = punishNotice.AttachUrl,
                CompileMan = punishNotice.CompileMan,
                CompileDate = punishNotice.CompileDate,
                States = punishNotice.States,
                PunishStates = punishNotice.PunishStates,
                SignMan = punishNotice.SignMan,
                ApproveMan = punishNotice.ApproveMan,
                ContractNum = punishNotice.ContractNum,
                IncentiveReason = punishNotice.IncentiveReason,
                Currency = punishNotice.Currency,
                PunishName = punishNotice.PunishName,
            };
            db.Check_PunishNotice.InsertOnSubmit(newPunishNotice);
            db.SubmitChanges();
            CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(Const.ProjectPunishNoticeMenuId, punishNotice.ProjectId, null, punishNotice.PunishNoticeId, punishNotice.CompileDate);
        }
        /// 
        /// 修改处罚通知单
        /// 
        /// 
        public static void UpdatePunishNotice(Model.Check_PunishNotice punishNotice)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Check_PunishNotice newPunishNotice = db.Check_PunishNotice.FirstOrDefault(e => e.PunishNoticeId == punishNotice.PunishNoticeId);
            if (newPunishNotice != null)
            {
                //newPunishNotice.ProjectId = punishNotice.ProjectId;
                //newPunishNotice.PunishNoticeCode = punishNotice.PunishNoticeCode;
                newPunishNotice.UnitId = punishNotice.UnitId;
                newPunishNotice.PunishNoticeDate = punishNotice.PunishNoticeDate;
                newPunishNotice.BasicItem = punishNotice.BasicItem;
                newPunishNotice.PunishMoney = punishNotice.PunishMoney;
                newPunishNotice.FileContents = punishNotice.FileContents;
                newPunishNotice.AttachUrl = punishNotice.AttachUrl;
                newPunishNotice.CompileMan = punishNotice.CompileMan;
                newPunishNotice.CompileDate = punishNotice.CompileDate;
                newPunishNotice.States = punishNotice.States;
                newPunishNotice.PunishStates = punishNotice.PunishStates;
                newPunishNotice.SignMan = punishNotice.SignMan;
                newPunishNotice.ApproveMan = punishNotice.ApproveMan;
                newPunishNotice.ContractNum = punishNotice.ContractNum;
                newPunishNotice.IncentiveReason = punishNotice.IncentiveReason;
                newPunishNotice.Currency = punishNotice.Currency;
                newPunishNotice.PunishName = punishNotice.PunishName;
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据主键删除处罚通知单
        /// 
        /// 
        public static void DeletePunishNoticeById(string punishNoticeId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Check_PunishNotice punishNotice = db.Check_PunishNotice.FirstOrDefault(e => e.PunishNoticeId == punishNoticeId);
            if (punishNotice != null)
            {
                CodeRecordsService.DeleteCodeRecordsByDataId(punishNoticeId);
                UploadFileService.DeleteFile(Funs.RootPath, punishNotice.AttachUrl);
                ////删除审核流程表
                var getFlow = db.Check_PunishNoticeFlowOperate.Where(x => x.PunishNoticeId == punishNoticeId);
                if (getFlow.Count() > 0)
                {
                    db.Check_PunishNoticeFlowOperate.DeleteAllOnSubmit(getFlow);
                }
                var PunishItem = db.Check_PunishNoticeItem.Where(x => x.PunishNoticeId == punishNoticeId);
                if (PunishItem.Count() > 0)
                {
                    db.Check_PunishNoticeItem.DeleteAllOnSubmit(PunishItem);
                }
                db.Check_PunishNotice.DeleteOnSubmit(punishNotice);
                db.SubmitChanges();
            }
        }
    }
}