using HRM.BO;
using Ease.Core.DataAccess;
using System;
using System.Data;


namespace HRM.DA
{
    internal class ProdBonusWorkScheduleDA
    {
        #region Constructor

        private ProdBonusWorkScheduleDA()
        {
        }

        #endregion

        #region Insert function

        internal static void Insert(TransactionContext tc, ProdBonusWorkSchedule item)
        {
            tc.ExecuteNonQuery(
                "INSERT INTO ProdBonusWorkSchedule(ProdBonusWorkScheduleID, ProdBonusSetupID,ProdBonusLineID,StartDateTime, EndDateTime)" +
                " VALUES(%n, %n,%n, %D,%D)", item.ID, item.ProdBonusSetupID, item.ProdBonusLineID, item.StartDateTime,
                item.EndDateTime);
        }

        #endregion

        #region Update function

        internal static void Update(TransactionContext tc, ProdBonusWorkSchedule item)
        {
            //string sql = SQLParser.MakeSQL(
            //    "UPDATE ProdBonusWorkSchedule SET ProdBonusSetupID=%n,ProdBonusLineID=%n, StartDateTime=%D, EndDateTime=%D " +
            //    "WHERE ProdBonusWorkScheduleID=%n", item.ProdBonusSetupID, item.ProdBonusLineID, item.StartDateTime,
            //    item.EndDateTime, item.ID);
            string sql = SQLParser.MakeSQL(
                "UPDATE ProdBonusWorkSchedule SET ProdBonusSetupID=%n,ProdBonusLineID=%n, StartDateTime=%D" +
                "WHERE ProdBonusWorkScheduleID=%n", item.ProdBonusSetupID, item.ProdBonusLineID, item.StartDateTime, item.ID);
            tc.ExecuteNonQuery(sql);
        }

        #endregion

        #region Get Function

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

        internal static IDataReader GetBySetupId(TransactionContext tc, int nSetupID)
        {
            return tc.ExecuteReader("SELECT * FROM ProdBonusWorkSchedule where ProdBonusSetupID=%n", nSetupID);
        }
        internal static DataTable GetschedulewithTime(TransactionContext tc, int lineID)
        {
            return tc.ExecuteDataTable(@"select a.*,bb.scheduleCount , (select max(ps.InTime) from ProdBonusAttn ps where ps.ProdBonusLineID =%n  
and  DATEADD(dd, 0, DATEDIFF(dd, 0, ps.InTime)) = bb.scheduleDate) as inTime,
(select max(ps.OutTime) from ProdBonusAttn ps where ps.ProdBonusLineID =%n  
and  DATEADD(dd, 0, DATEDIFF(dd, 0, ps.InTime)) = bb.scheduleDate) as outTime from 
(SELECT * FROM ProdBonusWorkSchedule where ProdBonusLineID=%n) a,
(
select DATEADD(dd, 0, DATEDIFF(dd, 0, InTime)) scheduleDate,COUNT(*) scheduleCount  from ProdBonusAttn where 
ProdBonusLineID =%n  group by DATEADD(dd, 0, DATEDIFF(dd, 0, InTime))  
 ) bb
where bb.scheduleDate = DATEADD(dd, 0, DATEDIFF(dd, 0,  a.StartDateTime)) ", lineID, lineID, lineID, lineID);
        }


        internal static IDataReader GetByLineID(TransactionContext tc, int lineID)
        {
            return tc.ExecuteReader("SELECT * FROM ProdBonusWorkSchedule where ProdBonusLineID=%n", lineID);
        }
        internal static IDataReader Get(TransactionContext tc, int nID)
        {
            return tc.ExecuteReader("SELECT * FROM ProdBonusWorkSchedule WHERE ProdBonusWorkScheduleID=%n", nID);
        }

        #endregion

        #region Delete function

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


        #endregion
    }
}