using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using FineUIPro;
namespace BLL
{
    public class SitePerson_CheckingService
    {
        public static Model.SGGLDB db = Funs.DB;
        #region 现场考勤列表
        /// 
        /// 记录数
        /// 
        public static int count
        {
            get;
            set;
        }
        /// 
        /// 定义变量
        /// 
        private static IQueryable getDataLists = from x in db.SitePerson_Checking
                                                                             select x;
        /// 
        ///  数据列表
        /// 
        /// 
        /// 
        /// 
        public static IEnumerable getListData(string projectId, string unitId, string personName, string startDate, string endDate, Grid Grid1)
        {
            IQueryable getDataList = getDataLists.Where(x => x.ProjectId == projectId);            
            if (!string.IsNullOrEmpty(unitId) && unitId != Const._Null)
            {
                getDataList = getDataList.Where(x => x.UnitId == unitId);
            }
            if (!string.IsNullOrEmpty(personName))
            {
                getDataList = getDataList.Where(x => x.PersonName.Contains(personName));
            }
            if (!string.IsNullOrEmpty(startDate))
            {
                DateTime? startDateD = Funs.GetNewDateTime(startDate);
                if (startDateD.HasValue)
                {
                    getDataList = getDataList.Where(x => x.IntoOutTime >= startDateD.Value);
                }
            }
            if (!string.IsNullOrEmpty(endDate))
            {
                DateTime? endDateD = Funs.GetNewDateTime(endDate);
                if (endDateD.HasValue)
                {
                    getDataList = getDataList.Where(x => x.IntoOutTime < endDateD.Value);
                }
            }
            count = getDataList.Count();
            if (count == 0)
            {
                return null;
            }
            getDataList = SortConditionHelper.SortingAndPaging(getDataList, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
            return from x in getDataList
                   select new
                   {
                       x.CheckingId, x.ProjectId, x.UnitId, x.UnitName, x.PersonId,
                       x.PersonName, x.CardNo, x.IdentityCard, x.WorkAreaId, x.WorkAreaName,
                       x.IntoOut, x.IntoOutTime, x.Address,
                   };
        }
        #endregion
        /// 
        /// 根据人员考勤主键获取人员考勤管理信息
        /// 
        /// 人员考勤主键
        /// 人员考勤管理信息
        public static Model.SitePerson_Checking GetPersonInfoByCheckingId(string checkingId)
        {
            return Funs.DB.SitePerson_Checking.FirstOrDefault(x=> x.CheckingId == checkingId);
        }
        /// 
        /// 增加人员考勤管理信息
        /// 
        /// 人员考勤管理实体
        public static void AddPersonInfo(Model.SitePerson_Checking personInfo)
        {
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
            {
                Model.SitePerson_Checking newPersonInfo = new Model.SitePerson_Checking
                {
                    CheckingId = personInfo.CheckingId,
                    ProjectId = personInfo.ProjectId,
                    UnitId = personInfo.UnitId,
                    UnitName = personInfo.UnitName,
                    PersonId = personInfo.PersonId,
                    PersonName = personInfo.PersonName,
                    IdentityCard = personInfo.IdentityCard,
                    CardNo = personInfo.CardNo,
                    WorkAreaId = personInfo.WorkAreaId,
                    WorkAreaName = personInfo.WorkAreaName,
                    IntoOutTime = personInfo.IntoOutTime,
                    IntoOut = personInfo.IntoOut,
                    Address = personInfo.Address,
                    States = BLL.Const.State_2
                };
                db.SitePerson_Checking.InsertOnSubmit(newPersonInfo);
                db.SubmitChanges();
            }
            if (!string.IsNullOrEmpty(personInfo.ProjectId) && !string.IsNullOrEmpty(personInfo.IdentityCard) && personInfo.IntoOutTime.HasValue)
            {
                int inOut = personInfo.IntoOut == "1" ? 1 : 0;
                APIDoorServerService.SaveDoorInOutRecord(personInfo.ProjectId, personInfo.IdentityCard, inOut, personInfo.IntoOutTime.Value, "手动");
            }
        }
        /// 
        /// 修改人员考勤管理信息
        /// 
        /// 人员考勤管理实体
        public static void UpdatePersonInfo(Model.SitePerson_Checking personInfo)
        {
            Model.SGGLDB db = Funs.DB;
            Model.SitePerson_Checking newPersonInfo = db.SitePerson_Checking.FirstOrDefault(e => e.CheckingId == personInfo.CheckingId);
            if (newPersonInfo != null)
            {
                newPersonInfo.UnitId = personInfo.UnitId;
                newPersonInfo.UnitName = personInfo.UnitName;
                newPersonInfo.PersonId = personInfo.PersonId;
                newPersonInfo.PersonName = personInfo.PersonName;
                newPersonInfo.CardNo = personInfo.CardNo;
                newPersonInfo.IdentityCard = personInfo.IdentityCard;
                newPersonInfo.WorkAreaId = personInfo.WorkAreaId;
                newPersonInfo.WorkAreaName = personInfo.WorkAreaName;        
                newPersonInfo.IntoOutTime = personInfo.IntoOutTime;
                newPersonInfo.IntoOut = personInfo.IntoOut;
                newPersonInfo.Address = personInfo.Address;
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据卡号和时间查询人员考勤信息
        /// 
        /// 卡号
        /// 人员实体
        public static Model.SitePerson_Checking GetPersonCheckByCardNo(string projectId, string cardNo, DateTime? intoOutTime)
        {
            return Funs.DB.SitePerson_Checking.FirstOrDefault(e => e.ProjectId == projectId && e.CardNo == cardNo && e.IntoOutTime == intoOutTime);
        }
        /// 
        /// 根据人员考勤主键删除一个人员考勤管理信息
        /// 
        /// 人员考勤主键
        public static void DeletePersonInfoByCheckingId(string checkingId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.SitePerson_Checking personInfo = db.SitePerson_Checking.FirstOrDefault(e => e.CheckingId == checkingId);
            if (personInfo != null)
            {
                db.SitePerson_Checking.DeleteOnSubmit(personInfo);
                db.SubmitChanges();
            }
        }
        /// 
        /// 根据作业区域Id查询所有人员考勤信息数量
        /// 
        /// 作业区域Id
        /// 人员考勤信息数量
        public static int GetCheckingCountByWorkAreaId(string workAreaId)
        {
            return (from x in Funs.DB.SitePerson_Checking where x.WorkAreaId == workAreaId select x).ToList().Count();
        }
        /// 
        /// 根据人员考勤主键删除一个人员考勤管理信息
        /// 
        /// 人员考勤主键
        public static void DeletePersonInOutByCheckingId(string PersonInOutId)
        {
            Model.SGGLDB db = Funs.DB;
            Model.SitePerson_PersonInOut personInOut = db.SitePerson_PersonInOut.FirstOrDefault(e => e.PersonInOutId == PersonInOutId);
            if (personInOut != null)
            {
                db.SitePerson_PersonInOut.DeleteOnSubmit(personInOut);
                db.SubmitChanges();
            }
        }
    }
}