namespace BLL
{
    using System;
    using System.Collections;
    using System.Diagnostics.CodeAnalysis;
    using System.Globalization;
    using System.Linq;
    using System.Data.Linq;
    using System.Web.Security;
    using System.Web.UI.WebControls;
    using Model;
    using BLL;
    using System.Collections.Generic;

    public static class Base_UnitService
    {
        /// <summary>
        /// 根据单位id获取单位信息
        /// </summary>
        /// <param name="UnitId"></param>
        /// <returns></returns>
        public static Model.Base_Unit GetUnit(string unitId)
        {
            return Funs.DB.Base_Unit.FirstOrDefault(x => x.UnitId == unitId);
        }
        /// <summary>
        /// 获取单位名称
        /// </summary>
        /// <param name="UnitId"></param>
        /// <returns></returns>
        public static string GetUnitNameByUnitId(string unitId)
        {
            string name = string.Empty;
            var unit = Funs.DB.Base_Unit.FirstOrDefault(x => x.UnitId == unitId);
            if (unit != null)
            {
                name = unit.UnitName;
            }
            return name;
        }

        /// <summary>
        /// 判断单位编号是否存在
        /// </summary>
        /// <param name="unitId">单位ID</param>
        /// <param name="unitCode">单位编号</param>
        /// <param name="projectId">项目ID</param>
        /// <returns></returns>
        public static bool IsExistUnitCode(string unitId, string unitCode)
        {
            bool isExitCode = false;
            var q = from x in Funs.DB.Base_Unit where  x.UnitCode == unitCode && x.UnitId != unitId select x;
            if (q.Count() > 0)
            {
                isExitCode = true;
            }
            return isExitCode;
        }

        /// <summary>
        /// 判断单位名称是否存在
        /// </summary>
        /// <param name="unitId">单位ID</param>
        /// <param name="unitCode">单位编号</param>
        /// <param name="projectId">项目ID</param>
        /// <returns></returns>
        public static bool IsExistUnitName(string unitId, string unitName)
        {
            bool isExitName = false;
            var q = from x in Funs.DB.Base_Unit where x.UnitName == unitName && x.UnitId != unitId select x;
            if (q.Count() > 0)
            {
                isExitName = true;
            }
            return isExitName;
        }

        
        /// <summary>
        /// 添加单位信息
        /// </summary>
        /// <param name="unit"></param>
        public static void AddUnit(Model.Base_Unit newUnit)
        {
            Model.HJGLDB db = Funs.DB;
            db.Base_Unit.InsertOnSubmit(newUnit);
            db.SubmitChanges();
        }

        /// <summary>
        /// 修改单位信息
        /// </summary>
        /// <param name="unit"></param>
        public static void updateUnit(Model.Base_Unit unit)
        {
            Model.HJGLDB db = Funs.DB;
            Model.Base_Unit newUnit = db.Base_Unit.FirstOrDefault(e => e.UnitId == unit.UnitId);
            if (newUnit != null)
            {
                newUnit.UnitCode = unit.UnitCode;
                newUnit.UnitName = unit.UnitName;
                newUnit.Corporate = unit.Corporate;
                newUnit.Address = unit.Address;
                newUnit.Telephone = unit.Telephone;
                newUnit.Fax = unit.Fax;
                newUnit.ProjectRange = unit.ProjectRange;
                newUnit.UnitTypeId = unit.UnitTypeId;
                db.SubmitChanges();
            }
        }

        /// <summary>
        /// 根据单位ID删除单位信息
        /// </summary>
        /// <param name="unitId"></param>
        public static void DeleteUnitByUnitId(string unitId)
        {
            Model.HJGLDB db = Funs.DB;
            Model.Base_Unit newUnit = db.Base_Unit.FirstOrDefault(e => e.UnitId == unitId);
            if (newUnit != null)
            {

                db.Base_Unit.DeleteOnSubmit(newUnit);
                db.SubmitChanges();
            }
        }


        /// <summary>
        /// 根据单位id获取单位信息
        /// </summary>
        /// <param name="projectId">项目ID</param>
        /// <param name="unitTypeId">单位类型,如传null则为项目上所有单位</param>
        /// <returns></returns>
        public static List<Model.Base_Unit> GetUnitsByProjectUnitType(string unitTypeId)
        {
            var q = (from x in Funs.DB.Base_Unit
                     orderby x.UnitCode
                     select x).ToList();
            if (!string.IsNullOrEmpty(unitTypeId))
            {
                q = q.Where(e => e.UnitTypeId == unitTypeId).ToList();
            }
            return q;
        }

        public static IEnumerable GetUnitsByProjectUnitType(string projectType, string unitTypeId)
        {
            var q = (from x in Funs.DB.Project_Unit
                     join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId
                     join z in Funs.DB.Base_Project on x.ProjectId equals z.ProjectId
                     where y.UnitTypeId == unitTypeId && z.ProjectTypeId == projectType
                     select new { x.UnitId, y.UnitName }
                     ).ToList();
            if (q.Count() > 0)
            {
                q = q.Distinct().ToList();
            }
            return q;
        }

        #region 得到单位类型字符串
        /// <summary>
        /// 得到单位类型字符串
        /// </summary>
        /// <param name="bigType"></param>
        /// <returns></returns>
        public static string ConvertUnitTypeStr(object unitType)
        {
            string name = string.Empty;
            //if (unitType != null && unitType.ToString() != "")
            //{
            //    string[] typeList = unitType.ToString().Split(',');
            //    foreach (string type in typeList)
            //    {
            //        var q = BLL.DropListService.UnitTypeSearchList().FirstOrDefault(x => x.Value == type);
            //        if (q != null)
            //        {
            //            name = name + q.Text + ",";
            //        }
            //    }

            //    if (name != null)
            //    {
            //        name = name.Substring(0, name.LastIndexOf(",")); 
            //    }
            //}

            return name;
        }
        #endregion


        #region 单位信息下拉项
        /// <summary>
        /// 单位信息下拉项
        /// </summary>
        /// <param name="dropName">下拉框名称</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        /// <param name="projectId">项目</param>
        /// <param name="unitTypeId">类型是空为所有</param>
        public static void InitUnitDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease, string unitTypeId,string itemText)
        {
            dropName.DataValueField = "UnitId";
            dropName.DataTextField = "UnitName";
            dropName.DataSource = GetUnitsByProjectUnitType(unitTypeId);
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName,itemText);
            }
        }

        /// <summary>
        /// 单位信息下拉项
        /// </summary>
        /// <param name="dropName">下拉框名称</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        /// <param name="projectId">项目</param>
        /// <param name="unitTypeId">类型是空为所有</param>
        public static void InitProjectUnitDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease,string projectId, string unitTypeId,string itemText)
        {
            dropName.DataValueField = "UnitId";
            dropName.DataTextField = "UnitName";
            dropName.DataSource = from x in Funs.DB.Base_Unit
                                  join y in Funs.DB.Project_Unit on x.UnitId equals y.UnitId
                                  where y.ProjectId == projectId && y.UnitType.Contains(unitTypeId)
                                  select x;
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName,itemText);
            }
        }
        #endregion

        #region 单位类型下拉项
        /// <summary>
        /// 单位类型下拉项
        /// </summary>
        /// <param name="dropName">下拉框名称</param>
        /// <param name="isShowPlease">是否显示请选择</param>
        public static void UnitTypeDropDownList(FineUIPro.DropDownList dropName, bool isShowPlease,string itemText)
        {
            dropName.DataValueField = "UnitTypeId";
            dropName.DataTextField = "UnitTypeName";
            dropName.DataSource = (from x in Funs.DB.Base_UnitType select x).ToList();
            dropName.DataBind();
            if (isShowPlease)
            {
                Funs.FineUIPleaseSelect(dropName,itemText);
            }
        }
        #endregion

    }
}