using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ease.CoreV35.DataAccess;
using System.Data;
using HRM.BO;
using Ease.Core.DataAccess;

namespace HRM.DA
{
    #region FactoryWorkSpaceDA

    internal class GatePassDA
    {
        #region Constructor

        private GatePassDA()
        {
        }

        #endregion

        #region Insert function

        internal static void Insert(TransactionContext tc, GatePass item)
        {
            string sql = SQLParser.MakeSQL(@"INSERT INTO GatePass(GatePassID, TelephoneNo, Remarks, EmployeeID,    
                                                    LineManagerID, ClaimWFStatus, TotalHour, EntryDate,    
                                                    DepartureTime, ReturnTime, CreatedBy, CreatedDate, 
                                                    SystemMode, ApprovedBy, ApprovedDate)
                                                     VALUES(%n, %s, %s, %n,   
                                                            %n, %n, %n, %d,    
                                                            %D, %D, %n,%d, 
                                                            %n, %n, %d)",
                item.ID, item.TelephoneNo, item.Remarks,
                DataReader.GetNullValue(item.EmployeeID, 0),
                DataReader.GetNullValue(item.LineManagerID, 0),
                item.ClaimWFStatus, item.TotalHour, item.EntryDate, item.DepartureTime,
                item.ReturnTime, item.CreatedBy, item.CreatedDate, item.SystemMode,
                DataReader.GetNullValue(item.ApprovedBy, 0), DataReader.GetNullValue(item.ApprovedDate));

            int a = 1;
            tc.ExecuteNonQuery(@"INSERT INTO GatePass(GatePassID, TelephoneNo, Remarks, EmployeeID,    
                                                    LineManagerID, ClaimWFStatus, TotalHour, EntryDate,    
                                                    DepartureTime, CreatedBy, CreatedDate, 
                                                    SystemMode, ApprovedBy, ApprovedDate)
                                                     VALUES(%n, %s, %s, %n,   
                                                            %n, %n, %n, %d,    
                                                            %D, %n,%d, 
                                                            %n, %n, %d)",
                item.ID, item.TelephoneNo, item.Remarks,
                DataReader.GetNullValue(item.EmployeeID, 0),
                DataReader.GetNullValue(item.LineManagerID, 0),
                item.ClaimWFStatus, item.TotalHour, item.EntryDate, item.DepartureTime,
                item.CreatedBy, item.CreatedDate, item.SystemMode,
                DataReader.GetNullValue(item.ApprovedBy, 0), DataReader.GetNullValue(item.ApprovedDate));
        }

        #endregion

        #region Update function

        internal static void Update(TransactionContext tc, GatePass item)
        {
            tc.ExecuteNonQuery(
                "UPDATE GatePass SET TelephoneNo=%s, Remarks=%s, EmployeeID=%n, LineManagerID=%n, ClaimWFStatus=%n, TotalHour=%n,  EntryDate=%d,    DepartureTime=%D, ReturnTime=%D, ModifiedBy=%n, ModifiedDate=%d, SystemMode=%n, ApprovedBy=%n, ApprovedDate=%D" +
                " WHERE GatePassID=%n", item.TelephoneNo, item.Remarks, DataReader.GetNullValue(item.EmployeeID, 0),
                DataReader.GetNullValue(item.LineManagerID, 0), item.ClaimWFStatus, item.TotalHour, item.EntryDate,
                item.DepartureTime, item.ReturnTime, item.ModifiedBy, item.ModifiedDate, item.SystemMode,
                DataReader.GetNullValue(item.ApprovedBy, 0), item.ApprovedDate, item.ID);
        }

        #endregion

        #region Get Function

        internal static int GetGatePassDataByWFStatusCount(TransactionContext tc, DateTime fromDate, DateTime toDate,
            EnumWFAttnStatus status)
        {
            string sql = string.Empty;
            sql = SQLParser.MakeSQL(@"Select Count(*) from GatePass
											   where ClaimWFStatus=%n and EntryDate between %d and %d", (int)status,
                fromDate, toDate);

            return Convert.ToInt32(tc.ExecuteScalar(sql).ToString());
        }

        internal static IDataReader Get(TransactionContext tc)
        {
            return tc.ExecuteReader("SELECT * FROM GatePass");
        }

        internal static IDataReader Get(TransactionContext tc, int nID)
        {
            return tc.ExecuteReader("SELECT * FROM GatePass WHERE GatePassID=%n", nID);
        }

        internal static IDataReader GetByEmployeeID(TransactionContext tc, int employeeID, DateTime fromDate,
            DateTime toDate)
        {
            return tc.ExecuteReader("SELECT * FROM GatePass WHERE EmployeeID=%n and EntryDate between %d and %d ",
                employeeID, fromDate, toDate);
        }

        internal static IDataReader GetByEmployeeID(TransactionContext tc, string employeeIDs, EnumClaimWFStatus status)
        {
            return tc.ExecuteReader("SELECT * FROM GatePass WHERE EmployeeID In (%q) and ClaimWFStatus = %n ",
                employeeIDs, status);
        }

        internal static IDataReader GetByShiftManagerID(TransactionContext tc, int employeeID, EnumClaimWFStatus status)
        {
            return tc.ExecuteReader("SELECT * FROM GatePass WHERE LINEMANAGERID =%n and ClaimWFStatus = %n ",
                employeeID, status);
        }

        internal static IDataReader GetByApproverID(TransactionContext tc, int employeeID, DateTime fromDate,
            DateTime toDate)
        {
            return tc.ExecuteReader("SELECT * FROM GatePass WHERE ApprovedBy =%n and EntryDate between %d and %d",
                employeeID, fromDate, toDate);
        }

        #endregion

        #region Delete function

        internal static void Delete(TransactionContext tc, int nID)
        {
            tc.ExecuteNonQuery("DELETE FROM GatePass WHERE GatePassID=%n", nID);
        }

        #endregion
    }

    #endregion
}