using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLL
{
    /// <summary>
    /// 班组
    /// </summary>
    public static class WorkAreaService
    {
        public static Model.SGGLDB db = Funs.DB;

        /// <summary>
        /// 根据主键获取班组信息
        /// </summary>
        /// <param name="WorkAreaId"></param>
        /// <returns></returns>
        public static Model.ProjectData_WorkArea getWorkAreaByWorkAreaId(string WorkAreaId)
        {
            return Funs.DB.ProjectData_WorkArea.FirstOrDefault(e => e.WorkAreaId == WorkAreaId);
        }

        /// <summary>
        /// 添加班组信息
        /// </summary>
        /// <param name="WorkArea"></param>
        public static void AddWorkArea(Model.ProjectData_WorkArea WorkArea)
        {
            Model.SGGLDB db = Funs.DB;
            Model.ProjectData_WorkArea newWorkArea = new Model.ProjectData_WorkArea
            {
                WorkAreaId = SQLHelper.GetNewID(),
                ProjectId = WorkArea.ProjectId,
                InstallationId = WorkArea.InstallationId,
                UnitId = WorkArea.UnitId,
                SupervisorUnitId = WorkArea.SupervisorUnitId,
                WorkAreaCode = WorkArea.WorkAreaCode,
                WorkAreaName = WorkArea.WorkAreaName,
                Remark = WorkArea.Remark,
            };

            db.ProjectData_WorkArea.InsertOnSubmit(newWorkArea);
            db.SubmitChanges();
        }

        /// <summary>
        /// 修改班组信息
        /// </summary>
        /// <param name="WorkArea"></param>
        public static void UpdateWorkArea(Model.ProjectData_WorkArea WorkArea)
        {
            Model.SGGLDB db = Funs.DB;
            Model.ProjectData_WorkArea newWorkArea = db.ProjectData_WorkArea.FirstOrDefault(e => e.WorkAreaId == WorkArea.WorkAreaId);
            if (newWorkArea != null)
            {
                newWorkArea.ProjectId = WorkArea.ProjectId;
                newWorkArea.UnitId = WorkArea.UnitId;
                newWorkArea.WorkAreaCode = WorkArea.WorkAreaCode;
                newWorkArea.WorkAreaName = WorkArea.WorkAreaName;
                newWorkArea.InstallationId = WorkArea.InstallationId;
                newWorkArea.SupervisorUnitId = WorkArea.SupervisorUnitId;
                db.SubmitChanges();
            }
        }

        /// <summary>
        /// 根据主键删除班组信息
        /// </summary>
        /// <param name="WorkAreaId"></param>
        public static void DeleteWorkAreaById(string WorkAreaId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.ProjectData_WorkArea WorkArea = db.ProjectData_WorkArea.FirstOrDefault(e => e.WorkAreaId == WorkAreaId);
            if (WorkArea != null)
            {
                db.ProjectData_WorkArea.DeleteOnSubmit(WorkArea);
                db.SubmitChanges();
            }
        }

        /// <summary>
        /// 根据项目Id获取班组下拉选择项
        /// </summary>
        /// <param name="projectId"></param>
        /// <returns></returns>
        public static List<Model.ProjectData_WorkArea> GetWorkAreaList(string projectId)
        {
            return (from x in Funs.DB.ProjectData_WorkArea where x.ProjectId == projectId
                    orderby x.WorkAreaCode select x).ToList();
        }

        /// <summary>
        /// 根据项目ID、单位ID获取班组下拉选择项
        /// </summary>
        /// <param name="p"></param>
        /// <param name="p_2"></param>
        /// <returns></returns>
        public static object GetWorkAreaListByUnitId(string projectId, string unitId)
        {
            return (from x in Funs.DB.ProjectData_WorkArea
                    where x.ProjectId == projectId && x.UnitId == unitId
                    orderby x.WorkAreaCode select x).ToList();
        }
        public static object GetWorkAreaListByUnitIdForDrop(string projectId, string unitId)
        {
            return (from x in Funs.DB.ProjectData_WorkArea
                    where x.ProjectId == projectId && x.UnitId == unitId
                    orderby x.WorkAreaCode
                    select new { x .WorkAreaId, WorkAreaName = x.WorkAreaCode+"-"+x.WorkAreaName    }).ToList();
        }
        #region 表下拉框
        /// <summary>
        ///  表下拉框
        /// </summary>
        /// <param name="dropName">下拉框名字</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        public static void InitWorkAreaProjectUnitDropDownList(FineUIPro.DropDownList dropName, string projectId, string unitId, bool isShowPlease)
        {
            dropName.DataValueField = "WorkAreaId";
            dropName.DataTextField = "WorkAreaName";
            dropName.DataSource = GetWorkAreaListByUnitIdForDrop(projectId, unitId);
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        #endregion

        #region 表下拉框
        /// <summary>
        ///  表下拉框
        /// </summary>
        /// <param name="dropName">下拉框名字</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        public static void InitWorkAreaProjectUnitsDropDownList(FineUIPro.DropDownList dropName, string projectId, string unitId, bool isShowPlease)
        {
            List<string> units = Funs.GetStrListByStr(unitId, ',');
            dropName.DataValueField = "WorkAreaId";
            dropName.DataTextField = "WorkAreaName";
            if (units.Count() > 0)
            {
                dropName.DataSource = (from x in Funs.DB.ProjectData_WorkArea
                                       where x.ProjectId == projectId && units.Contains(x.UnitId)
                                       orderby x.WorkAreaCode
                                       select new { x.WorkAreaId, WorkAreaName = x.WorkAreaCode + "-" + x.WorkAreaName }).ToList();
            }
            else
            {
                dropName.DataSource = null;
            }
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        #endregion

        /// <summary>
        /// 获取区域名称
        /// </summary>
        /// <param name="UnitId"></param>
        /// <returns></returns>
        public static string GetWorkAreaNameByWorkAreaId(string WorkAreaId)
        {
            string name = string.Empty;
            var WorkArea = Funs.DB.ProjectData_WorkArea.FirstOrDefault(x => x.WorkAreaId == WorkAreaId);
            if (WorkArea != null)
            {
                name = WorkArea.WorkAreaName;
            }
            return name;
        }

        /// <summary>
        /// 根据区域Code获取区域信息
        /// </summary>
        /// <param name="workAreaName"></param>
        /// <returns></returns>
        public static bool IsExistWorkAreaCode(string projectId, string workAreaCode, string workAreaId, string installationId)
        {
            var q = Funs.DB.ProjectData_WorkArea.FirstOrDefault(x => x.ProjectId == projectId && x.WorkAreaCode == workAreaCode && x.InstallationId == installationId &&( x.WorkAreaId != workAreaId || workAreaId == null));
            if (q != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 获取当前单位是否监理单位
        /// </summary>
        /// <param name="unitId"></param>
        /// <returns></returns>
        public static bool IsSupervisor(string unitId, string projectId)
        {
            bool isSup = false;
            var unit = Funs.DB.Project_ProjectUnit.FirstOrDefault(x=>x.UnitId==unitId);
            if (unit != null && unit.UnitType == BLL.Const.ProjectUnitType_3)
            {
                var sysSet = BLL.Project_SysSetService.GetSysSetBySetId("4", projectId);
                if (sysSet != null && sysSet.IsAuto == true)
                {
                    isSup = true;
                }
            }
            return isSup;
        }

        /// <summary>
        /// 根据项目、装置、单位、当前单位获取工区号
        /// </summary>
        /// <param name="dropName"></param>
        /// <param name="projectId"></param>
        /// <param name="installationId"></param>
        /// <param name="unitId"></param>
        /// <param name="supervisorUnitId"></param>
        /// <param name="isShowPlease"></param>
        public static void GetWorkAreaListByInstallSupervisorUnit(FineUIPro.DropDownList dropName, string projectId,string installationId, string unitId, string supervisorUnitId, bool isShowPlease)
        {
            dropName.DataValueField = "WorkAreaId";
            dropName.DataTextField = "WorkAreaName";
            dropName.DataSource = (from x in Funs.DB.ProjectData_WorkArea
                                   where x.InstallationId == installationId
                                   && x.UnitId == unitId && x.SupervisorUnitId == supervisorUnitId
                                   && x.ProjectId == projectId
                                   orderby x.WorkAreaCode
                                   select new { x.WorkAreaId, WorkAreaName = x.WorkAreaCode + "-" + x.WorkAreaName }).ToList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }

        /// <summary>
        /// 根据项目、装置、单位获取工区号
        /// </summary>
        /// <param name="dropName"></param>
        /// <param name="projectId"></param>
        /// <param name="installationId"></param>
        /// <param name="unitId"></param>
        /// <param name="isShowPlease"></param>
        public static void GetWorkAreaListByInstallUnit(FineUIPro.DropDownList dropName, string projectId, string installationId, string unitId, bool isShowPlease)
        {
            dropName.DataValueField = "WorkAreaId";
            dropName.DataTextField = "WorkAreaName";
            dropName.DataSource = (from x in Funs.DB.ProjectData_WorkArea
                                   where x.InstallationId == installationId
                                   && x.UnitId == unitId 
                                   && x.ProjectId == projectId
                                   orderby x.WorkAreaCode
                                   select new { x.WorkAreaId, WorkAreaName = x.WorkAreaCode + "-" + x.WorkAreaName }).ToList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
        public static Model.ProjectData_WorkArea GetWorkAreaByProjectIdAndInstalltionIdAndUnitId(string projectId, string installation, string unitId)
        {
            return Funs.DB.ProjectData_WorkArea.FirstOrDefault(e => e.ProjectId == projectId && e.InstallationId == installation && e.UnitId == unitId);

        }
        /// <summary>
        /// 获取区域编号
        /// </summary>
        /// <param name="workAreaId"></param>
        /// <returns></returns>
        public static string GetWorkAreaCodeByWorkAreaId(string workAreaId)
        {
            string name = string.Empty;
            var WorkArea = Funs.DB.ProjectData_WorkArea.FirstOrDefault(x => x.WorkAreaId == workAreaId);
            if (WorkArea != null)
            {
                name = WorkArea.WorkAreaCode;
            }
            return name;
        }

        /// <summary>
        /// 根据项目ID、装置Id、单位ID获取班组下拉选择项
        /// </summary>
        /// <param name="p"></param>
        /// <param name="p_2"></param>
        /// <returns></returns>
        public static object GetWorkAreaListByInstallUnitId(string projectId, string installId, string unitId)
        {
            return (from x in Funs.DB.ProjectData_WorkArea
                    where x.ProjectId == projectId && x.InstallationId == installId && x.UnitId == unitId
                    orderby x.WorkAreaCode
                    select x).ToList();
        }
        public static object GetWorkAreaListByInstallUnitIdForDrop(string projectId, string installId, string unitId)
        {
            return (from x in Funs.DB.ProjectData_WorkArea
                    where x.ProjectId == projectId && x.InstallationId == installId && x.UnitId == unitId
                    orderby x.WorkAreaCode
                    select new { x.WorkAreaId, WorkAreaName = x.WorkAreaCode + "-" + x.WorkAreaName }).ToList();
        }
        /// <summary>
        ///  表下拉框
        /// </summary>
        /// <param name="dropName">下拉框名字</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        public static void InitWorkAreaProjectInstallUnitDropDownList(FineUIPro.DropDownList dropName, string projectId, string installId, string unitId, bool isShowPlease)
        {
            dropName.DataValueField = "WorkAreaId";
            dropName.DataTextField = "WorkAreaName";
            dropName.DataSource = GetWorkAreaListByInstallUnitIdForDrop(projectId, installId, unitId);
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }/// <summary>
         /// 根据项目Id获取区域下拉选项值
         /// </summary>
         /// <param name="dropName"></param>
         /// <param name="projectId"></param>
         /// <param name="isShowPlease"></param>
        public static void InitWorkAreaByProjectId(FineUIPro.DropDownList dropName, string projectId, bool isShowPlease)
        {
            dropName.DataValueField = "WorkAreaId";
            dropName.DataTextField = "WorkAreaName";
            dropName.DataSource = (from x in Funs.DB.ProjectData_WorkArea where x.ProjectId == projectId orderby x.WorkAreaCode select new { x.WorkAreaId, WorkAreaName = x.WorkAreaCode + "-" + x.WorkAreaName }).ToList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName);
            }
        }
    }
}