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 AttnNationalHolidayDA

    internal class AttnNationalHolidayDA
    {
        #region Constructor

        private AttnNationalHolidayDA()
        {
        }

        #endregion

        #region Insert function

        internal static void Insert(TransactionContext tc, AttnNationalHoliday item, int payrollTypeID)
        {
            tc.ExecuteNonQuery(
                "INSERT INTO AttnNationalHoliday(AttnNationalHolidayID, Description, FromDate, ToDate, CreatedBy, CreatedDate,SequenceNo,Status, HolidayType, HolidayHour, PayrollTypeID, FromTime, ToTime,LocationID)" +
                " VALUES(%n, %s, %D, %D, %n, %d,%n,%n, %n, %n, %n, %D, %D, %n)", item.ID, item.Description, item.FromDate,
                item.ToDate, item.CreatedBy, item.CreatedDate, item.Sequence, (int)item.Status, (int)item.HolidayType,
                item.HolidayHour, payrollTypeID, item.FromTime, item.ToTime, item.LocationID);
        }


        internal static void InsertChild(TransactionContext tc, AttnNationalHolidayLocation item)
        {
            tc.ExecuteNonQuery(
                "INSERT INTO AttnNationalHolidayLocation(AttnNationalHolidayLocationID, AttnNationalHolidayID, LocationID)" +
                " VALUES(%n, %n, %n)", item.ID, item.AttnNationalHolidayID, item.LocationID);
        }

        internal static void InsertShift(TransactionContext tc, AttnShiftWiseNationalHoliday item)
        {
            tc.ExecuteNonQuery(
                "INSERT INTO AttnNationalHolidayShift(AttnNationalHolidayShiftID, AttnNationalHolidayID, ShiftID, WorkPlanGroupID)" +
                " VALUES(%n, %n, %n, %n)", item.ID, item.ANationalHolidayID, item.ShiftID, item.WorkPlanGroupID);
        }

        #endregion

        #region Update function

        internal static void Update(TransactionContext tc, AttnNationalHoliday item)
        {
            tc.ExecuteNonQuery(
                "UPDATE AttnNationalHoliday SET Description=%s, FromDate=%D, ToDate=%D, ModifiedBy=%n, ModifiedDate=%d,Status=%n,SequenceNo=%n, HolidayType=%n, HolidayHour=%n, FromTime=%D, ToTime=%D" +
                ", LocationID=%n  WHERE AttnNationalHolidayID=%n", item.Description, item.FromDate, item.ToDate, item.ModifiedBy,
                item.ModifiedDate, (int)item.Status, item.Sequence, (int)item.HolidayType, item.HolidayHour,
                item.FromTime, item.ToTime, item.LocationID, item.ID);
        }

        #endregion

        #region Get Function

        internal static IDataReader Get(TransactionContext tc, EnumStatus status, int payrollTypeID)
        {
            string sql = string.Empty;

            if (EnumStatus.Active == status)
            {
                sql = SQLParser.MakeSQL(@"
				SELECT * FROM AttnNationalHoliday a, LEAVEYEAR cy
				WHERE a.Status=%n AND a.PayRollTypeID = %n AND cy.PAYROLLTYPEID = %n AND cy.ISCURRENT = %b AND a.FROMDATE BETWEEN cy.STARTDATE AND cy.ENDDATE 
				ORDER BY a.FromDate ASC", status, payrollTypeID, payrollTypeID, true);
            }
            else
            {
                sql = SQLParser.MakeSQL(@"
				SELECT * FROM AttnNationalHoliday a, LEAVEYEAR cy
				WHERE a.PayRollTypeID = %n AND cy.PAYROLLTYPEID = %n AND cy.ISCURRENT = %b AND a.FROMDATE BETWEEN cy.STARTDATE AND cy.ENDDATE 
				ORDER BY a.FromDate ASC", payrollTypeID, payrollTypeID, true);
            }

            return tc.ExecuteReader(sql);
        }

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

        internal static IDataReader Get(TransactionContext tc, DateTime fromDate, DateTime todate)
        {
            return tc.ExecuteReader("SELECT * FROM AttnNationalHoliday WHERE FromDate between %d and %d", fromDate, todate);
        }

        internal static IDataReader Get(TransactionContext tc, DateTime fromDate, DateTime todate, int payrollTypeID)
        {
            string sql = SQLParser.MakeSQL(@"
            SELECT * FROM AttnNationalHoliday WHERE FromDate between %d and %d and PayRollTypeID = %n ORDER BY FromDate DESC",
            fromDate,todate, payrollTypeID);
            return tc.ExecuteReader(sql);
        }

        internal static IDataReader getupcommingHoliday(TransactionContext tc, DateTime fromDate, int payrollTypeID)
        {
            return tc.ExecuteReader(
                "SELECT * FROM AttnNationalHoliday WHERE FromDate >= %d and PayRollTypeID = %n", fromDate,
                 payrollTypeID);
        }

        internal static IDataReader GetupcommintHolidayByUserId(TransactionContext tc, DateTime fromDate, int userId)
        {
			//return tc.ExecuteReader(@"
			//SELECT * 
			//FROM AttnNationalHoliday anh
			//JOIN LOCATION l ON anh.LOCATIONID = l.LOCATIONID
			//JOIN EMPLOYEE e ON l.LOCATIONID = e.LOCATIONID
			//JOIN USERS u ON u.EMPLOYEEID = e.EMPLOYEEID
			//WHERE u.USERID = %n AND anh.FROMDATE >= %d", 
			//userId, fromDate);
			return tc.ExecuteReader(@"select * from AttnNationalHoliday where FROMDATE >= %d And PAYROLLTYPEID = %n order by FromDate ASC", fromDate, userId);
		}

        internal static IDataReader GetChild(TransactionContext tc, int attnNationalHolidayID)
        {
            return tc.ExecuteReader("SELECT * FROM AttnNationalHolidayLocation WHERE AttnNationalHolidayID=%n",
                attnNationalHolidayID);
        }

        internal static IDataReader GetHolidayShift(TransactionContext tc, int attnNationalHolidayID)
        {
            return tc.ExecuteReader("SELECT * FROM AttnNationalHolidayShift WHERE AttnNationalHolidayID=%n",
                attnNationalHolidayID);
        }

        #endregion

        #region Delete function

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

        internal static void DeleteChild(TransactionContext tc, int nID)
        {
            tc.ExecuteNonQuery("DELETE FROM AttnNationalHolidayLocation WHERE AttnNationalHolidayID=%n", nID);

            tc.ExecuteNonQuery("DELETE FROM AttnNationalHolidayShift WHERE AttnNationalHolidayID=%n", nID);
        }

        #endregion
    }

    #endregion
}