using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ease.CoreV35.Caching; using Ease.CoreV35.Model; using System.Data; namespace Payroll.BO { #region BuyerDailyAttProcess [Serializable] public class BuyerDailyAttProcess : AuditTrailBase { #region Cache Store private static Cache _cache = new Cache(typeof(BuyerDailyAttProcess)); #endregion #region Constructor public BuyerDailyAttProcess() { _employeeID = null; _attnDate = DateTime.MinValue; _shiftID = ID.FromInteger(0); _inTime = DateTime.MinValue; _outTime = DateTime.MinValue; _attenType = 0; _comments = string.Empty; _isManualEntry = false; _referenceID = null; _employee = null; _buyerID = null; } #endregion #region Properties #region employeeID : ID private ID _employeeID; public ID EmployeeID { get { return _employeeID; } set { base.OnPropertyChange("employeeID", _employeeID, value); _employeeID = value; } } #endregion #region attnDate : DateTime private DateTime _attnDate; public DateTime AttnDate { get { return _attnDate; } set { base.OnPropertyChange("attnDate", _attnDate, value); _attnDate = value; } } #endregion #region shiftID : ID private ID _shiftID; public ID ShiftID { get { return _shiftID; } set { base.OnPropertyChange("shiftID", _shiftID, value); _shiftID = value; } } #endregion #region inTime : DateTime private DateTime _inTime; public DateTime InTime { get { return _inTime; } set { base.OnPropertyChange("inTime", _inTime, value); _inTime = value; } } #endregion #region outTime : DateTime private DateTime _outTime; public DateTime OutTime { get { return _outTime; } set { base.OnPropertyChange("outTime", _outTime, value); _outTime = value; } } #endregion #region attenType : EnumAttendanceType private EnumAttendanceType _attenType; public EnumAttendanceType AttenType { get { return _attenType; } set { base.OnPropertyChange("attenType", (short)_attenType, (short)value); _attenType = value; } } #endregion #region comments : string private string _comments; public string Comments { get { return _comments; } set { base.OnPropertyChange("comments", _comments, value); _comments = value; } } #endregion #region isManualEntry : bool private bool _isManualEntry; public bool IsManualEntry { get { return _isManualEntry; } set { base.OnPropertyChange("isManualEntry", _isManualEntry, value); _isManualEntry = value; } } #endregion #region LateHour : double private double _lateHour; public double LateHour { get { return _lateHour; } set { base.OnPropertyChange("LateHour", _lateHour, value); _lateHour = value; } } #endregion #region EarlyHour : double private double _earlyHour; public double EarlyHour { get { return _earlyHour; } set { base.OnPropertyChange("EarlyHour", _earlyHour, value); _earlyHour = value; } } #endregion #region OTHour : double private double _oTHour; public double OTHour { get { return _oTHour; } set { base.OnPropertyChange("OTHour", _oTHour, value); _oTHour = value; } } #endregion #region referenceID : ID private ID _referenceID; public ID ReferenceID { get { return _referenceID; } set { base.OnPropertyChange("referenceID", _referenceID, value); _referenceID = value; } } #endregion #region employeeID : ID private ID _buyerID; public ID BuyerID { get { return _buyerID; } set { base.OnPropertyChange("BuyerID", _buyerID, value); _buyerID = value; } } #endregion #region employee : Employee private Employee _employee; public Employee Employee { get { if (_employeeID.Integer > 0 && _employee == null) { _employee = new Employee(); _employee = Employee.Get(_employeeID); } return this._employee; } set { _employee = value; } } #endregion #region Shift : Shift private Shift _shift; public Shift Shift { get { if (_shiftID.Integer > 0 && _shift == null) { _shift = new Shift(); _shift = Shift.Get(_shiftID); } return this._shift; } set { _shift = value; } } #endregion #region Service Factory IBuyerDailyAttProcessService : IBuyerDailyAttProcessService internal static IBuyerDailyAttProcessService Service { get { return Services.Factory.CreateService(typeof(IBuyerDailyAttProcessService)); } } #endregion #endregion #region Functions public static BuyerDailyAttProcess Get(ID nID) { BuyerDailyAttProcess oBuyerDailyAttProcess = null; #region Cache Header oBuyerDailyAttProcess = (BuyerDailyAttProcess)_cache["Get", nID]; if (oBuyerDailyAttProcess != null) return oBuyerDailyAttProcess; #endregion oBuyerDailyAttProcess = BuyerDailyAttProcess.Service.Get(nID); #region Cache Footer _cache.Add(oBuyerDailyAttProcess, "Get", nID); #endregion return oBuyerDailyAttProcess; } public static BuyerDailyAttProcess GetDailyEmployeeAbsent(ID empID, DateTime dateTime, ID buyerID) { BuyerDailyAttProcess oBuyerDailyAttProcess = null; #region Cache Header oBuyerDailyAttProcess = (BuyerDailyAttProcess)_cache["GetDailyEmployeeAbsent", empID, dateTime, buyerID]; if (oBuyerDailyAttProcess != null) return oBuyerDailyAttProcess; #endregion oBuyerDailyAttProcess = BuyerDailyAttProcess.Service.GetDailyEmployeeAbsent(empID, dateTime, buyerID); #region Cache Footer _cache.Add(oBuyerDailyAttProcess, "Get", "GetDailyEmployeeAbsent", empID, dateTime, buyerID); #endregion return oBuyerDailyAttProcess; } public static ObjectsTemplate Get() { #region Cache Header ObjectsTemplate buyerDailyAttnProcesses = _cache["Get"] as ObjectsTemplate; if (buyerDailyAttnProcesses != null) return buyerDailyAttnProcesses; #endregion try { buyerDailyAttnProcesses = Service.Get(); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(buyerDailyAttnProcesses, "Get"); #endregion return buyerDailyAttnProcesses; } public static ObjectsTemplate Get(DateTime attnDate) { #region Cache Header ObjectsTemplate buyerDailyAttnProcesses = _cache["Get", attnDate] as ObjectsTemplate; if (buyerDailyAttnProcesses != null) return buyerDailyAttnProcesses; #endregion try { buyerDailyAttnProcesses = Service.Get(attnDate); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(buyerDailyAttnProcesses, "Get", attnDate); #endregion return buyerDailyAttnProcesses; } public static ObjectsTemplate GetManualEntry(DateTime attnDate) { #region Cache Header ObjectsTemplate buyerDailyAttnProcesses = _cache["GetManualEntry", attnDate] as ObjectsTemplate; if (buyerDailyAttnProcesses != null) return buyerDailyAttnProcesses; #endregion try { buyerDailyAttnProcesses = Service.GetManualEntry(attnDate); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(buyerDailyAttnProcesses, "GetManualEntry", attnDate); #endregion return buyerDailyAttnProcesses; } public static ObjectsTemplate Get(ID empID, DateTime fromDate, DateTime toDate, ID buyerID) { #region Cache Header ObjectsTemplate buyerDailyAttnProcesses = _cache["Get", empID, fromDate, toDate, buyerID] as ObjectsTemplate; if (buyerDailyAttnProcesses != null) return buyerDailyAttnProcesses; #endregion try { buyerDailyAttnProcesses = Service.Get(empID, fromDate, toDate, buyerID); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(buyerDailyAttnProcesses, "Get", empID, fromDate, toDate, buyerID); #endregion return buyerDailyAttnProcesses; } public static ObjectsTemplate Get(DateTime attnDate, ID shiftID, EnumAttendanceType attnType) { #region Cache Header ObjectsTemplate buyerDailyAttnProcesses = _cache["Get", attnDate, shiftID, attnType] as ObjectsTemplate; if (buyerDailyAttnProcesses != null) return buyerDailyAttnProcesses; #endregion try { buyerDailyAttnProcesses = Service.Get(attnDate, shiftID, attnType); } catch (ServiceException e) { throw new Exception(e.Message, e); } #region Cache Footer _cache.Add(buyerDailyAttnProcesses, "Get", attnDate, shiftID, attnType); #endregion return buyerDailyAttnProcesses; } public ID Save() { this.SetAuditTrailProperties(); return BuyerDailyAttProcess.Service.Save(this); } public static void Save(ObjectsTemplate _dAttnProcessess, bool IsCounterClock) { foreach (BuyerDailyAttProcess dAttnProcess in _dAttnProcessess) { dAttnProcess.SetAuditTrailProperties(); } BuyerDailyAttProcess.Service.Save(_dAttnProcessess, IsCounterClock); } //public void Process(DateTime Attdate) //{ // ObjectsTemplate employees = Employee.Get(); // //ObjectsTemplate attRawdatas = AttnRawData.Get(Attdate);// get raw data by a date and order by date, employee, punchTime // ObjectsTemplate dailyattProcesses = new ObjectsTemplate(); // ObjectsTemplate outSideDuties = EmployeeOutsideDuty.Get(Attdate); // get transaction by the a rate // ObjectsTemplate monthlyWorkPlans = MonthlyWorkPlan.Get(Attdate); // get workplans by the date // ObjectsTemplate leaves = LeaveEntry.Get(Attdate); // workplans by the date // ObjectsTemplate buyers = BuyerSetup.Get(); // #region BuyerWiseProcess // foreach (BuyerSetup buyer in buyers) // { // ObjectsTemplate bDailyattProcesses = new ObjectsTemplate(); // foreach (Employee emp in employees) // { // BuyerDailyAttProcess bAttnProcess = new BuyerDailyAttProcess(); // bAttnProcess.BuyerID = buyer.ID; // bAttnProcess.AttnDate = Attdate; // bAttnProcess.EmployeeID = emp.ID; // bAttnProcess.IsManualEntry = false; // List empAttnDatas = null; // EmployeeOutsideDuty empOutsideDuty = null; // LeaveEntry empLeaveEntry = null; // if (attRawdatas != null && attRawdatas.Count > 0) // { // var attnDatas = from AttnRawData item in attRawdatas // where item.EmployeeID == emp.ID // select item; // if (attnDatas.ToList().Count > 0) // { // empAttnDatas = attnDatas.ToList(); // } // } // if (outSideDuties != null && outSideDuties.Count > 0) // { // var outSideDuty = from EmployeeOutsideDuty item in outSideDuties // where item.EmployeeID == emp.ID // select item; // if (outSideDuty.ToList().Count > 0) // { // empOutsideDuty = outSideDuty.FirstOrDefault(); // } // } // if (leaves != null && leaves.Count > 0) // { // var leave = from LeaveEntry item in leaves // where item.EmpID == emp.ID.Integer // select item; // if (leave.ToList().Count > 0) // { // empLeaveEntry = leave.FirstOrDefault(); // } // } // if (empAttnDatas != null) // { // bAttnProcess.InTime = empAttnDatas[0].PunchTime; // bAttnProcess.OutTime = empAttnDatas[empAttnDatas.Count - 1].PunchTime; // if (monthlyWorkPlans != null && monthlyWorkPlans.Count > 0) // { // var monthlyWorkPlan = from MonthlyWorkPlan item in monthlyWorkPlans // where item.EmployeeID == emp.ID // select item; // if (monthlyWorkPlan != null) // { // MonthlyWorkPlan empMonthlyWorkPlan = monthlyWorkPlan.FirstOrDefault(); // if (empMonthlyWorkPlan.ShiftID.Integer != 0) // { // bAttnProcess.ShiftID = empMonthlyWorkPlan.ShiftID; // bAttnProcess.AttenType = GetAttnType(bAttnProcess.InTime, bAttnProcess.OutTime, bAttnProcess.ShiftID); // if (bAttnProcess.AttenType == EnumAttendanceType.Late) // { // bAttnProcess.LateHour = _lateHour; // } // } // else if (empMonthlyWorkPlan.HolidayID.Integer != 0) // { // bAttnProcess.AttenType = EnumAttendanceType.Holiday; // bAttnProcess.ReferenceID = empMonthlyWorkPlan.HolidayID; // } // else // { // bAttnProcess.AttenType = EnumAttendanceType.Present; // } // } // } // } // else if (empOutsideDuty != null) // { // bAttnProcess.AttenType = EnumAttendanceType.OutSideDuty; // bAttnProcess.ReferenceID = empOutsideDuty.ID; // } // else if (empLeaveEntry != null) // { // bAttnProcess.AttenType = EnumAttendanceType.Leave; // bAttnProcess.ReferenceID = empLeaveEntry.ID; // } // else // { // bAttnProcess.AttenType = EnumAttendanceType.Absent; // } // bDailyattProcesses.Add(bAttnProcess); // } // BuyerDailyAttProcess.Save(bDailyattProcesses); // } // #endregion //} public EnumAttendanceType GetAttnType(DateTime empInTime, DateTime empOutTime, ID ShiftID) { TimeSpan EmpInTime = empInTime.TimeOfDay; Shift shift = Shift.Get(ShiftID); TimeSpan shiftInTime = shift.InTime.TimeOfDay; TimeSpan shiftInTimeWithLatehour = shift.InTime.TimeOfDay.Add(TimeSpan.FromMinutes(shift.LateCalcualtion)); TimeSpan EmpOutTime = empOutTime.TimeOfDay; TimeSpan shiftIOutTimeWithEarlyExit = shift.OutTime.TimeOfDay.Subtract(TimeSpan.FromMinutes(shift.EarlyExitBefore)); if (EmpInTime >= shiftInTime && EmpInTime <= shiftInTimeWithLatehour) { return EnumAttendanceType.Delay; } else if (EmpInTime >= shiftInTimeWithLatehour) { TimeSpan lateBy = EmpInTime - shiftInTimeWithLatehour; _lateHour = Convert.ToDouble(lateBy.Hours + "." + lateBy.Minutes); return EnumAttendanceType.Late; } else if (EmpOutTime >= shiftIOutTimeWithEarlyExit) { TimeSpan earlyBy = shift.OutTime.TimeOfDay - EmpOutTime; _earlyHour = Convert.ToDouble(earlyBy.Hours + "." + earlyBy.Minutes); return EnumAttendanceType.Early; } return EnumAttendanceType.Present; } public void Delete() { BuyerDailyAttProcess.Service.Delete(ID); } public static DataSet GetMonthlyAttn(DateTime dFromDate, DateTime dToDate, ID buyerID, string sEmpID) { DataSet monthlyAttn = null; try { monthlyAttn = Service.GetMonthlyAttn(dFromDate, dToDate, buyerID, sEmpID); } catch (ServiceException e) { throw new Exception(e.Message, e); } return monthlyAttn; } public static DataSet GetDailyInOut(DateTime attndate, ID buyerID, string sEmpID) { DataSet dailyInOut = null; try { dailyInOut = Service.GetDailyInOut(attndate, buyerID, sEmpID); } catch (ServiceException e) { throw new Exception(e.Message, e); } return dailyInOut; } public static DataSet GetMonthlyDetail(DateTime dFromDate, DateTime dToDate, ID buyerID, string sEmpID) { DataSet monthlyDetail = null; try { monthlyDetail = Service.GetMonthlyDetail(dFromDate, dToDate, buyerID, sEmpID); } catch (ServiceException e) { throw new Exception(e.Message, e); } return monthlyDetail; } public static DataSet GetDailyAbsent(DateTime attndate, ID buyerID, string sEmpID) { DataSet dailyAbsent = null; try { dailyAbsent = Service.GetDailyAbsent(attndate, buyerID, sEmpID); } catch (ServiceException e) { throw new Exception(e.Message, e); } return dailyAbsent; } public static DataSet GetMonthlyAttnData(DateTime attnMonth, ID empID) { DataSet monthlyDataBuyreWise = null; try { monthlyDataBuyreWise = Service.GetMonthlyAttnData(attnMonth, empID); } catch (ServiceException e) { throw new Exception(e.Message, e); } return monthlyDataBuyreWise; } #endregion } #endregion #region IBuyerDailyAttProcess Service public interface IBuyerDailyAttProcessService { BuyerDailyAttProcess Get(ID id); BuyerDailyAttProcess GetDailyEmployeeAbsent(ID empID, DateTime dateTime, ID buyerID); ObjectsTemplate Get(); ObjectsTemplate Get(DateTime attnDate); ObjectsTemplate GetManualEntry(DateTime attnDate); ObjectsTemplate Get(ID empID, DateTime fromDate, DateTime toDate, ID buyerID); ObjectsTemplate Get(DateTime attnDate, ID shiftID, EnumAttendanceType attnType); ID Save(BuyerDailyAttProcess item); void Save(ObjectsTemplate _dAttnProcessess, bool IsCounterClock); void Delete(ID id); DataSet GetMonthlyAttn(DateTime dFromDate, DateTime dToDate, ID buyerID, string sEmpID); DataSet GetDailyInOut(DateTime attndate, ID buyerID, string sEmpID); DataSet GetMonthlyDetail(DateTime dFromDate, DateTime dToDate, ID buyerID, string sEmpID); DataSet GetDailyAbsent(DateTime attndate, ID buyerID, string sEmpID); DataSet GetMonthlyAttnData(DateTime attnMonth, ID empID); } #endregion }