using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace BLL
{
    /// 
    /// 重大施工方案审批
    /// 
    public static class MajorPlanApprovalService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 记录数
        /// 
        private static int count
        {
            get;
            set;
        }
        /// 
        /// 获取分页列表
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable GetListData(string projectId, string unitId, string cNProfessionalId, string UnitWorkId, int startRowIndex, int maximumRows)
        {
            IQueryable q = from x in db.Comprehensive_MajorPlanApproval
                                                                  where x.ProjectId == projectId
                                                                  orderby x.ApprovalDate descending
                                                                  select x;
            if (unitId != "0")
            {
                q = q.Where(e => e.UnitId == unitId);
            }
            if (cNProfessionalId != "0")
            {
                q = q.Where(e => e.CNProfessionalId == cNProfessionalId);
            }
            if (UnitWorkId != "0")
            {
                q = q.Where(e => e.UnitWorkId.Contains(UnitWorkId));
            }
            count = q.Count();
            if (count == 0)
            {
                return new object[] { "" };
            }
            return from x in q.Skip(startRowIndex).Take(maximumRows)
                   select new
                   {
                       x.MajorPlanApprovalId,
                       x.ProjectId,
                       UnitName = (from y in db.Base_Unit where y.UnitId == x.UnitId select y.UnitName).FirstOrDefault(),
                       ProfessionalName = (from y in db.Base_CNProfessional where y.CNProfessionalId == x.CNProfessionalId select y.ProfessionalName).FirstOrDefault(),
                       x.PlanCode,
                       x.PlanName,
                       x.ReviewMan,
                       x.ApprovalDate,
                       x.AuditMan,
                       UnitWorkName = x.UnitWorkId != null ? BLL.UnitWorkService.GetUnitWorkName(x.UnitWorkId) : null,
                       x.ApprovalMan,
                       x.ImplementationDeviation,
                       x.AttachUrl
                   };
        }
        /// 
        /// 获取分页列表数
        /// 
        /// 
        /// 
        /// 
        /// 
        public static int GetListCount(string projectId, string unitId, string cNProfessionalId, string UnitWorkId)
        {
            return count;
        }
        /// 
        /// 根据主键获取重大施工方案审批
        /// 
        /// 
        /// 
        public static Model.Comprehensive_MajorPlanApproval GetMajorPlanApprovalById(string majorPlanApprovalId)
        {
            return Funs.DB.Comprehensive_MajorPlanApproval.FirstOrDefault(e => e.MajorPlanApprovalId == majorPlanApprovalId);
        }
        /// 
        /// 添加重大施工方案审批
        /// 
        /// 
        public static void AddMajorPlanApproval(Model.Comprehensive_MajorPlanApproval majorPlanApproval)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Comprehensive_MajorPlanApproval newMajorPlanApproval = new Model.Comprehensive_MajorPlanApproval();
            newMajorPlanApproval.MajorPlanApprovalId = majorPlanApproval.MajorPlanApprovalId;
            newMajorPlanApproval.ProjectId = majorPlanApproval.ProjectId;
            newMajorPlanApproval.UnitId = majorPlanApproval.UnitId;
            newMajorPlanApproval.CNProfessionalId = majorPlanApproval.CNProfessionalId;
            newMajorPlanApproval.PlanCode = majorPlanApproval.PlanCode;
            newMajorPlanApproval.PlanName = majorPlanApproval.PlanName;
            newMajorPlanApproval.ReviewMan = majorPlanApproval.ReviewMan;
            newMajorPlanApproval.ApprovalDate = majorPlanApproval.ApprovalDate;
            newMajorPlanApproval.ApprovalMan = majorPlanApproval.ApprovalMan;
            newMajorPlanApproval.AuditMan = majorPlanApproval.AuditMan;
            newMajorPlanApproval.ImplementationDeviation = majorPlanApproval.ImplementationDeviation;
            newMajorPlanApproval.AttachUrl = majorPlanApproval.AttachUrl;
            newMajorPlanApproval.CompileMan = majorPlanApproval.CompileMan;
            newMajorPlanApproval.CompileDate = majorPlanApproval.CompileDate;
            newMajorPlanApproval.UnitWorkId = majorPlanApproval.UnitWorkId;
            newMajorPlanApproval.ExpertReviewMan = majorPlanApproval.ExpertReviewMan;
            newMajorPlanApproval.IsReview = majorPlanApproval.IsReview;
            newMajorPlanApproval.RemarkCode = majorPlanApproval.RemarkCode;
            newMajorPlanApproval.SchemeType = majorPlanApproval.SchemeType;
            newMajorPlanApproval.HazardType = majorPlanApproval.HazardType;
            newMajorPlanApproval.ExpectedTime = majorPlanApproval.ExpectedTime;
            newMajorPlanApproval.TrainPersonNum = majorPlanApproval.TrainPersonNum;
            newMajorPlanApproval.OperativesNum = majorPlanApproval.OperativesNum;
            newMajorPlanApproval.States = majorPlanApproval.States;
            db.Comprehensive_MajorPlanApproval.InsertOnSubmit(newMajorPlanApproval);
            db.SubmitChanges();
            //查询是否有数据 有则更新 没有则新增
            var largerHazard = BLL.LargerHazardService.GetLargerHazardByHazardId(majorPlanApproval.MajorPlanApprovalId);
            if (largerHazard != null)
            {
                UpdateLargerHazard(majorPlanApproval);
            }
            else
            {
                AddLargerHazard(majorPlanApproval);
            }
        }
        /// 
        /// 修改重大施工方案审批
        /// 
        /// 
        public static void UpdateMajorPlanApproval(Model.Comprehensive_MajorPlanApproval majorPlanApproval)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Comprehensive_MajorPlanApproval newMajorPlanApproval = db.Comprehensive_MajorPlanApproval.FirstOrDefault(e => e.MajorPlanApprovalId == majorPlanApproval.MajorPlanApprovalId);
            if (newMajorPlanApproval != null)
            {
                newMajorPlanApproval.ProjectId = majorPlanApproval.ProjectId;
                newMajorPlanApproval.UnitId = majorPlanApproval.UnitId;
                newMajorPlanApproval.CNProfessionalId = majorPlanApproval.CNProfessionalId;
                newMajorPlanApproval.PlanCode = majorPlanApproval.PlanCode;
                newMajorPlanApproval.PlanName = majorPlanApproval.PlanName;
                newMajorPlanApproval.ReviewMan = majorPlanApproval.ReviewMan;
                newMajorPlanApproval.ApprovalDate = majorPlanApproval.ApprovalDate;
                newMajorPlanApproval.ApprovalMan = majorPlanApproval.ApprovalMan;
                newMajorPlanApproval.AuditMan = majorPlanApproval.AuditMan;
                newMajorPlanApproval.ImplementationDeviation = majorPlanApproval.ImplementationDeviation;
                newMajorPlanApproval.AttachUrl = majorPlanApproval.AttachUrl;
                newMajorPlanApproval.UnitWorkId = majorPlanApproval.UnitWorkId;
                newMajorPlanApproval.ExpertReviewMan = majorPlanApproval.ExpertReviewMan;
                newMajorPlanApproval.RemarkCode = majorPlanApproval.RemarkCode;
                newMajorPlanApproval.SchemeType = majorPlanApproval.SchemeType;
                newMajorPlanApproval.HazardType = majorPlanApproval.HazardType;
                newMajorPlanApproval.ExpectedTime = majorPlanApproval.ExpectedTime;
                newMajorPlanApproval.TrainPersonNum = majorPlanApproval.TrainPersonNum;
                newMajorPlanApproval.OperativesNum = majorPlanApproval.OperativesNum;
                newMajorPlanApproval.States = majorPlanApproval.States;
                newMajorPlanApproval.IsReview = majorPlanApproval.IsReview;
                db.SubmitChanges();
                //查询是否有数据 有则更新 没有则新增
                var largerHazard = BLL.LargerHazardService.GetLargerHazardByHazardId(majorPlanApproval.MajorPlanApprovalId);
                if (largerHazard != null)
                {
                    UpdateLargerHazard(majorPlanApproval);
                }
                else
                {
                    AddLargerHazard(majorPlanApproval);
                }
            }
        }
        /// 
        /// 根据主键删除重大施工方案审批
        /// 
        /// 
        public static void DeleteMajorPlanApproval(string majorPlanApprovalId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Comprehensive_MajorPlanApproval majorPlanApproval = db.Comprehensive_MajorPlanApproval.FirstOrDefault(e => e.MajorPlanApprovalId == majorPlanApprovalId);
            if (majorPlanApproval != null)
            {
                if (!string.IsNullOrEmpty(majorPlanApproval.AttachUrl))
                {
                    BLL.UploadAttachmentService.DeleteFile(Funs.RootPath, majorPlanApproval.AttachUrl);//删除附件
                }
                db.Comprehensive_MajorPlanApproval.DeleteOnSubmit(majorPlanApproval);
                db.SubmitChanges();
            }
        }
        
        #region 同时新增一条到安全管理中的“危大工程施工方案清单”
        public static void AddLargerHazard(Model.Comprehensive_MajorPlanApproval majorPlanApproval)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Solution_LargerHazard newLargerHazard = new Model.Solution_LargerHazard
            {
                HazardId = majorPlanApproval.MajorPlanApprovalId,
                HazardCode = majorPlanApproval.PlanCode,
                HazardName = majorPlanApproval.PlanName,
                HazardType = majorPlanApproval.HazardType,
                ProjectId = majorPlanApproval.ProjectId,
                Address = majorPlanApproval.UnitWorkId,
                ExpectedTime = majorPlanApproval.ExpectedTime,
                IsArgument = majorPlanApproval.IsReview,
                RecordTime = majorPlanApproval.ApprovalDate,
                RecardMan = majorPlanApproval.CompileMan,
                States = majorPlanApproval.States,
                TrainPersonNum = majorPlanApproval.TrainPersonNum,
                OperativesNum = majorPlanApproval.OperativesNum,
                IsSuperLargerHazard = majorPlanApproval.SchemeType == "超危大工程" ? true : false,
            };
            db.Solution_LargerHazard.InsertOnSubmit(newLargerHazard);
            db.SubmitChanges();
            ////增加一条编码记录
            BLL.CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(BLL.Const.ProjectLargerHazardListMenuId, newLargerHazard.ProjectId, null, newLargerHazard.HazardId, newLargerHazard.RecordTime);
        }
        
        
        public static void UpdateLargerHazard(Model.Comprehensive_MajorPlanApproval majorPlanApproval)
        {
            Model.SGGLDB db = Funs.DB;
            Model.Solution_LargerHazard newLargerHazard = db.Solution_LargerHazard.FirstOrDefault(e => e.HazardId == majorPlanApproval.MajorPlanApprovalId);
            if (newLargerHazard != null)
            {
                newLargerHazard.HazardCode = majorPlanApproval.PlanCode;
                newLargerHazard.HazardName = majorPlanApproval.PlanName;
                newLargerHazard.HazardType = majorPlanApproval.HazardType;
                newLargerHazard.ProjectId = majorPlanApproval.ProjectId;
                newLargerHazard.Address = majorPlanApproval.UnitWorkId;
                newLargerHazard.ExpectedTime = majorPlanApproval.ExpectedTime;
                newLargerHazard.IsArgument = majorPlanApproval.IsReview;
                newLargerHazard.RecordTime = majorPlanApproval.ApprovalDate;
                newLargerHazard.States = majorPlanApproval.States;
                newLargerHazard.TrainPersonNum = majorPlanApproval.TrainPersonNum;
                newLargerHazard.OperativesNum = majorPlanApproval.OperativesNum;
                newLargerHazard.IsSuperLargerHazard = majorPlanApproval.SchemeType == "超危大工程" ? true : false;
                db.SubmitChanges();
            }
        }
        
        
        #endregion
    }
}