using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Web.UI.WebControls;
using Model;
namespace BLL
{
    public class TrustManageEditService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 记录数
        /// 
        private static int count
        {
            get;
            set;
        }
        /// 
        /// 定义变量
        /// 
        private static IQueryable qq = from x in db.View_CH_TrustItem
                                                                orderby x.ISO_IsoNo, x.JOT_JointNo
                                                                select x;
        /// 
        /// 获取分页列表
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData(string projectId, string startTime, string endTime, string CH_TrustID, int startRowIndex, int maximumRows)
        {
            IQueryable q = qq;
            if (!string.IsNullOrEmpty(projectId))
            {
                q = q.Where(e => e.ProjectId == projectId);
            }
            if (!String.IsNullOrEmpty(startTime))
            {
                q = q.Where(e => e.CH_TrustDate >= Convert.ToDateTime(startTime));
            }
            if (!String.IsNullOrEmpty(endTime))
            {
                q = q.Where(e => e.CH_TrustDate <= Convert.ToDateTime(endTime));
            }
            if (!string.IsNullOrEmpty(CH_TrustID))
            {
                q = q.Where(e => e.CH_TrustID.Contains(CH_TrustID));
            }
            count = q.Count();
            if (count == 0)
            {
                return new object[] { "" };
            }
            return from x in q.Skip(startRowIndex).Take(maximumRows)
                   select new
                   {
                       x.CH_TrustItemID,
                       x.CH_TrustID,
                       x.JOT_ID,
                       x.WorkAreaId,
                       x.InstallationId,
                       x.ProjectId,
                       x.CH_TrustDate,
                       x.ISO_IsoNo,
                       x.JOT_JointNo,
                       x.CH_Remark,
                       x.JOT_Dia,
                       x.JOT_Sch,
                       x.WLO_Code,
                       x.WME_Name
                   };
        }
        /// 
        /// 获取列表数
        /// 
        /// 
        public static int getListCount(string projectId, string startTime, string endTime, string DReportID)
        {
            return count;
        }
        /// 
        /// 根据委托Id获取用于委托的委托信息
        /// 
        /// 
        /// 
        public static Model.CH_Trust GetCH_TrustByID(string CH_TrustID)
        {
            Model.SGGLDB db = Funs.DB;
            var view = db.CH_Trust.FirstOrDefault(e => e.CH_TrustID == CH_TrustID);
            return view;
        }
        /// 
        /// 委托单号是否存在
        /// 
        /// 
        /// 
        /// 
        public static bool IsExistTrustCode(string projectId, string trustCode)
        {
            Model.SGGLDB db = Funs.DB;
            var q = from x in db.CH_Trust where x.ProjectId == projectId && x.CH_TrustCode == trustCode select x;
            if (q.Count() > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// 
        /// 根据委托Id获取用于委托的焊口视图信息
        /// 
        /// 
        /// 
        public static List GetView_CH_TrustItemByCH_TrustID(string CH_TrustID)
        {
            Model.SGGLDB db = Funs.DB;
            var view = (from x in db.View_CH_TrustItem where x.CH_TrustID == CH_TrustID && x.JOT_JointStatus != "104" select x).ToList();
            return view;
        }
        /// 
        /// 根据焊口Id获取用于委托的焊口视图信息
        /// 
        /// 
        /// 
        public static List GetCH_TrustItemByJOT_ID(string jot_id)
        {
            Model.SGGLDB db = Funs.DB;
            var view = (from x in db.CH_TrustItem where x.JOT_ID == jot_id select x).ToList();
            return view;
        }
        public static List GetCH_TrustItemByISO_ID(string ISO_ID)
        {
            Model.SGGLDB db = Funs.DB;
            var view = (from x in db.CH_TrustItem  join  j in db.PW_JointInfo on x.JOT_ID equals j.JOT_ID where j.ISO_ID == ISO_ID select x).ToList();
            return view;
        }
        /// 
        /// 根据焊口Id和委托id获取用于委托明细是否存在
        /// 
        /// 
        /// 
        public static Model.CH_TrustItem GetCH_TrustItemByJOT_IDAndJotId(string CH_TrustID, string jot_id)
        {
            Model.SGGLDB db = Funs.DB;
            var view = db.CH_TrustItem.FirstOrDefault(x => x.CH_TrustID == CH_TrustID && x.JOT_ID == jot_id);
            return view;
        }
        /// 
        /// 根据委托Id获取用于委托的焊口视图信息
        /// 
        /// 
        /// 
        public static List GetCH_TrustItemByCH_TrustID(string CH_TrustID)
        {
            Model.SGGLDB db = Funs.DB;
            var view = (from x in db.CH_TrustItem where x.CH_TrustID == CH_TrustID select x).ToList();
            return view;
        }
        /// 
        /// 根据焊口Id获取用于委托的焊口信息
        /// 
        /// 
        /// 
        public static Model.View_CH_TrustItem GetView_CH_TrustItemByJotID(string jot_id, string projectId)
        {
            var view = Funs.DB.View_CH_TrustItem.FirstOrDefault(e => e.JOT_ID == jot_id && e.ProjectId == projectId);
            return view;
        }
        /// 
        /// 增加委托信息
        /// 
        /// 委托实体
        public static void AddCH_Trust(Model.CH_Trust cH_Trust)
        {
            Model.SGGLDB db = Funs.DB;
            Model.CH_Trust newCH_Trust = new Model.CH_Trust();
            newCH_Trust.CH_TrustID = cH_Trust.CH_TrustID;
            newCH_Trust.CH_TrustCode = cH_Trust.CH_TrustCode;
            newCH_Trust.CH_TrustUnit = cH_Trust.CH_TrustUnit;
            newCH_Trust.CH_TrustDate = cH_Trust.CH_TrustDate;
            newCH_Trust.CH_TrustType = cH_Trust.CH_TrustType;
            newCH_Trust.CH_TrustMan = cH_Trust.CH_TrustMan;
            newCH_Trust.CH_Tabler = cH_Trust.CH_Tabler;
            newCH_Trust.CH_TableDate = cH_Trust.CH_TableDate;
            newCH_Trust.CH_UnitName = cH_Trust.CH_UnitName;
            newCH_Trust.CH_WorkNo = cH_Trust.CH_WorkNo;
            newCH_Trust.CH_ItemName = cH_Trust.CH_ItemName;
            newCH_Trust.CH_SlopeType = cH_Trust.CH_SlopeType;
            newCH_Trust.CH_ServiceTemp = cH_Trust.CH_ServiceTemp;
            newCH_Trust.CH_Press = cH_Trust.CH_Press;
            newCH_Trust.CH_WeldMethod = cH_Trust.CH_WeldMethod;
            newCH_Trust.CH_NDTRate = cH_Trust.CH_NDTRate;
            newCH_Trust.CH_NDTMethod = cH_Trust.CH_NDTMethod;
            newCH_Trust.CH_NDTCriteria = cH_Trust.CH_NDTCriteria;
            newCH_Trust.CH_AcceptGrade = cH_Trust.CH_AcceptGrade;
            newCH_Trust.CH_Remark = cH_Trust.CH_Remark;
            newCH_Trust.CH_CheckUnit = cH_Trust.CH_CheckUnit;
            newCH_Trust.ProjectId = cH_Trust.ProjectId;
            newCH_Trust.InstallationId = cH_Trust.InstallationId;
            newCH_Trust.CH_RequestDate = cH_Trust.CH_RequestDate;
            newCH_Trust.ToIso_Id = cH_Trust.ToIso_Id;
            db.CH_Trust.InsertOnSubmit(newCH_Trust);
            db.SubmitChanges();
        }
        /// 
        /// 修改焊接信息
        /// 
        /// 焊接实体
        public static void UpdateCH_Trust(Model.CH_Trust cH_Trust)
        {
            Model.SGGLDB db = Funs.DB;
            Model.CH_Trust newCH_Trust = db.CH_Trust.First(e => e.CH_TrustID == cH_Trust.CH_TrustID);
            newCH_Trust.CH_TrustID = cH_Trust.CH_TrustID;
            newCH_Trust.CH_TrustCode = cH_Trust.CH_TrustCode;
            newCH_Trust.CH_TrustUnit = cH_Trust.CH_TrustUnit;
            newCH_Trust.CH_TrustDate = cH_Trust.CH_TrustDate;
            newCH_Trust.CH_TrustType = cH_Trust.CH_TrustType;
            newCH_Trust.CH_TrustMan = cH_Trust.CH_TrustMan;
            newCH_Trust.CH_Tabler = cH_Trust.CH_Tabler;
            newCH_Trust.CH_TableDate = cH_Trust.CH_TableDate;
            newCH_Trust.CH_UnitName = cH_Trust.CH_UnitName;
            newCH_Trust.CH_WorkNo = cH_Trust.CH_WorkNo;
            newCH_Trust.CH_ItemName = cH_Trust.CH_ItemName;
            newCH_Trust.CH_SlopeType = cH_Trust.CH_SlopeType;
            newCH_Trust.CH_ServiceTemp = cH_Trust.CH_ServiceTemp;
            newCH_Trust.CH_Press = cH_Trust.CH_Press;
            newCH_Trust.CH_WeldMethod = cH_Trust.CH_WeldMethod;
            newCH_Trust.CH_NDTRate = cH_Trust.CH_NDTRate;
            newCH_Trust.CH_NDTMethod = cH_Trust.CH_NDTMethod;
            newCH_Trust.CH_NDTCriteria = cH_Trust.CH_NDTCriteria;
            newCH_Trust.CH_AcceptGrade = cH_Trust.CH_AcceptGrade;
            newCH_Trust.CH_Remark = cH_Trust.CH_Remark;
            newCH_Trust.CH_CheckUnit = cH_Trust.CH_CheckUnit;
            newCH_Trust.ProjectId = cH_Trust.ProjectId;
            newCH_Trust.InstallationId = cH_Trust.InstallationId;
            newCH_Trust.CH_RequestDate = cH_Trust.CH_RequestDate;
            newCH_Trust.ToIso_Id = cH_Trust.ToIso_Id;
            db.SubmitChanges();
        }
        /// 
        /// 根据主键删除委托信息
        /// 
        /// 委托主键
        public static void DeleteCH_TrustByCH_TrustID(string cH_TrustID)
        {
            Model.SGGLDB db = Funs.DB;
            Model.CH_Trust cH_Trust = db.CH_Trust.First(e => e.CH_TrustID == cH_TrustID);
            db.CH_Trust.DeleteOnSubmit(cH_Trust);
            db.SubmitChanges();
        }
        /// 
        /// 根据主键删除委托信息明细
        /// 
        /// 委托主键
        public static void DeleteCH_TrustItemByCH_TrustID(string cH_TrustID)
        {
            Model.SGGLDB db = Funs.DB;
            var cH_Trust = from x in db.CH_TrustItem where x.CH_TrustID == cH_TrustID select x;
            if (cH_Trust != null)
            {
                foreach (var item in cH_Trust)
                {
                    var jo = Funs.DB.PW_JointInfo.FirstOrDefault(x => x.JOT_ID == item.JOT_ID);
                    if (jo != null && jo.JOT_JointStatus == "102")
                    {
                        var ch = Funs.DB.CH_CheckItem.FirstOrDefault(x => x.JOT_ID == jo.JOT_ID);
                        if (ch == null)
                        {
                            jo.JOT_JointStatus = "100";
                            BLL.PW_JointInfoService.UpdateJointPoint(jo);
                        }
                    }
                }
                db.CH_TrustItem.DeleteAllOnSubmit(cH_Trust);
                db.SubmitChanges();
            }
        }
        /// 
        /// 增加委托信息明细
        /// 
        /// 委托明细实体
        public static void AddCH_TrustItem(Model.CH_TrustItem trustItem)
        {
            Model.SGGLDB db = Funs.DB;
            Model.CH_TrustItem newTrustItem = new Model.CH_TrustItem();
            newTrustItem.CH_TrustItemID = SQLHelper.GetNewID(typeof(Model.CH_TrustItem));
            newTrustItem.CH_TrustID = trustItem.CH_TrustID;
            newTrustItem.JOT_ID = trustItem.JOT_ID;
            newTrustItem.CH_Remark = trustItem.CH_Remark;
            db.CH_TrustItem.InsertOnSubmit(newTrustItem);
            db.SubmitChanges();
        }
        public static void upDataCH_TrustItem(string cH_TrustID, List trusts)
        {
            Model.SGGLDB db = Funs.DB;
            var cH_Trust = from x in db.CH_TrustItem where x.CH_TrustID == cH_TrustID select x;
            List needRemove = new List();
            if (cH_Trust != null)//
            {
                if (trusts != null)//判断需要删除的
                {
                    foreach (var item in cH_Trust)
                    {
                        bool hasFind = false;
                        foreach (var trustItem in trusts)
                        {
                            if (trustItem.JOT_ID == item.JOT_ID)
                            {
                                hasFind = true;
                            }
                        }
                        if (!hasFind)
                        {
                            needRemove.Add(item);
                        }
                    }
                }
                else
                {
                    needRemove.AddRange(cH_Trust);
                }
            }
            if (trusts != null)
            {
                foreach (var trustItem in trusts)
                {
                    bool hasFind = false;
                    foreach (var item in cH_Trust)
                    {
                        if (trustItem.JOT_ID == item.JOT_ID)
                        {
                            hasFind = true;
                        }
                    }
                    if (!hasFind)
                    {
                        Model.CH_TrustItem newTrustItem = new Model.CH_TrustItem();
                        newTrustItem.CH_TrustItemID = SQLHelper.GetNewID(typeof(Model.CH_TrustItem));
                        newTrustItem.CH_TrustID = cH_TrustID;
                        newTrustItem.JOT_ID = trustItem.JOT_ID;
                        newTrustItem.CH_Remark = trustItem.CH_Remark;
                        db.CH_TrustItem.InsertOnSubmit(newTrustItem);
                        BLL.TrustManageEditService.UpdateJOT_TrustFlag(trustItem.JOT_ID, "1");
                    }
                }
            }
            db.CH_TrustItem.DeleteAllOnSubmit(needRemove);
            foreach (var item in needRemove)
            {
                var jo = Funs.DB.PW_JointInfo.FirstOrDefault(x => x.JOT_ID == item.JOT_ID);
                if (jo != null && jo.JOT_JointStatus == "102")
                {
                    var ch = Funs.DB.CH_CheckItem.FirstOrDefault(x => x.JOT_ID == jo.JOT_ID);
                    if (ch == null)
                    {
                        jo.JOT_JointStatus = "100";
                        BLL.PW_JointInfoService.UpdateJointPoint(jo);
                    }
                }
            }
            db.SubmitChanges();
        }
        /// 
        /// 审核委托信息
        /// 
        /// 焊接实体
        public static void AuditCH_Trust(Model.CH_Trust cH_Trust)
        {
            Model.SGGLDB db = Funs.DB;
            Model.CH_Trust newCH_Trust = db.CH_Trust.First(e => e.CH_TrustID == cH_Trust.CH_TrustID);
            newCH_Trust.CH_TrustID = cH_Trust.CH_TrustID;
            newCH_Trust.CH_AuditMan = cH_Trust.CH_AuditMan;
            newCH_Trust.CH_AuditDate = cH_Trust.CH_AuditDate;
            db.SubmitChanges();
        }
        /// 
        /// 合格等级下拉列表值
        /// 
        /// 
        public static ListItem[] GetAcceptGradeList()
        {
            ListItem[] list = new ListItem[5];
            list[0] = new ListItem("Ⅰ", "1");
            list[1] = new ListItem("Ⅱ", "2");
            list[2] = new ListItem("Ⅲ", "3");
            list[3] = new ListItem("Ⅳ", "4");
            list[4] = new ListItem("Ⅴ", "5");
            return list;
        }
        /// 
        /// 更新焊口委托情况
        /// 
        /// type1-录入审核2取消删除
        public static void UpdateJOT_TrustFlag(string JOT_ID, string type)
        {
            var jointInfo = Funs.DB.PW_JointInfo.FirstOrDefault(x => x.JOT_ID == JOT_ID);
            if (jointInfo != null)
            {
                if (type == "1")
                {
                    if (String.IsNullOrEmpty(jointInfo.JOT_TrustFlag) || jointInfo.JOT_TrustFlag == "00")//未下委托
                    {
                        jointInfo.JOT_TrustFlag = "01";
                    }
                    else if (jointInfo.JOT_TrustFlag == "01")//一次委托,未审核
                    {
                        jointInfo.JOT_TrustFlag = "02";
                    }
                    else if (jointInfo.JOT_TrustFlag == "02")//一次委托,已审核
                    {
                        jointInfo.JOT_TrustFlag = "11";
                    }
                    else if (jointInfo.JOT_TrustFlag == "11")//二次委托,未审核
                    {
                        jointInfo.JOT_TrustFlag = "12";
                    }
                    else if (jointInfo.JOT_TrustFlag == "12")//二次委托,已审核
                    {
                        jointInfo.JOT_TrustFlag = "21";
                    }
                    else if (jointInfo.JOT_TrustFlag == "21")//三次委托,未审核
                    {
                        jointInfo.JOT_TrustFlag = "22";//三次委托,已审核
                    }
                }
                else
                {
                    if (jointInfo.JOT_TrustFlag == "22")
                    {
                        jointInfo.JOT_TrustFlag = "21";
                    }
                    else if (jointInfo.JOT_TrustFlag == "21")
                    {
                        jointInfo.JOT_TrustFlag = "12";
                    }
                    else if (jointInfo.JOT_TrustFlag == "12")
                    {
                        jointInfo.JOT_TrustFlag = "11";
                    }
                    else if (jointInfo.JOT_TrustFlag == "11")
                    {
                        jointInfo.JOT_TrustFlag = "02";
                    }
                    else if (jointInfo.JOT_TrustFlag == "02")
                    {
                        jointInfo.JOT_TrustFlag = "01";
                    }
                    else
                    {
                        jointInfo.JOT_TrustFlag = "00";
                    }
                }
            }
            Funs.DB.SubmitChanges();
        }
        /// 
        /// 根据装置Id获取委托数
        /// 
        /// 
        /// 
        public static int GetTrustByInstallationId(string installationId)
        {
            var q = (from x in Funs.DB.CH_Trust where x.InstallationId == installationId select x).ToList();
            return q.Count();
        }
        /// 
        /// 根据焊口ID获取委托明细信息
        /// 
        /// 
        /// 
        public static Model.CH_TrustItem GetTrustItemByJotId(string jotId)
        {
            return Funs.DB.CH_TrustItem.FirstOrDefault(e => e.JOT_ID == jotId);
        }
        /// 
        /// 查找后返回集合增加到列表集团中
        /// 
        /// 
        /// 
        public static List GetTrustAddItem(string hdItemsString)
        {
            List returnViewMatch = new List(); //= getWeldReportItem;
            if (!string.IsNullOrEmpty(hdItemsString))
            {
                List jotIds = Funs.GetStrListByStr(hdItemsString, '|');
                returnViewMatch = (from x in Funs.DB.View_CH_TrustItem
                                  where jotIds.Contains(x.JOT_ID)
                                  select x).ToList();
            }
            return returnViewMatch;
        }
        /// 
        /// 根据委托Id获取委托明细视图
        /// 
        /// 
        /// 
        public static List GetTrustItemViewByTrustId(string trustId)
        {
            var q = (from x in Funs.DB.View_CH_TrustItem where x.CH_TrustID == trustId && x.JOT_JointStatus != "104" select x).ToList();
            List res = new List();
            res.AddRange(q.Where(x => x.JOT_JointStatus != "102" && x.JOT_JointStatus != "100").ToList());
            res.AddRange(q.Where(x => x.JOT_JointStatus == "100").ToList());
            res.AddRange(q.Where(x => x.JOT_JointStatus == "102").ToList());
            return res;
        }
    }
}