using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace BLL
{
    public class SitePerson_CheckingService
    {
        public static Model.SGGLDB db = Funs.DB;
        /// 
        /// 根据人员考勤主键获取人员考勤管理信息
        /// 
        /// 人员考勤主键
        /// 人员考勤管理信息
        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)
        {
            Model.SGGLDB db = Funs.DB;
            Model.SitePerson_Checking newPersonInfo = new Model.SitePerson_Checking
            {
                CheckingId = personInfo.CheckingId,
                PersonId = personInfo.PersonId,
                CardNo = personInfo.CardNo,
                ProjectId = personInfo.ProjectId,
                WorkAreaId = personInfo.WorkAreaId,
                WorkAreaName = personInfo.WorkAreaName,
                IdentityCard = personInfo.IdentityCard,
                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.CardNo = personInfo.CardNo;
                newPersonInfo.PersonId = personInfo.PersonId;
                newPersonInfo.ProjectId = personInfo.ProjectId;
                newPersonInfo.WorkAreaId = personInfo.WorkAreaId;
                newPersonInfo.WorkAreaName = personInfo.WorkAreaName;
                newPersonInfo.IdentityCard = personInfo.IdentityCard;
                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();
            }
        }
    }
}