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


namespace HRM.DA
{
    public class MiscellaneousDatasetDA
    {
        internal static DataSet GetItemWiseSalary(TransactionContext tc, string sEmpID, DateTime _SalaryMonth, DateTime toDate, string sSQL)
        {
            DataSet rootDataset = new DataSet();
            DataSet tempdataset = new DataSet();

            try
            {
                string sTableName;
                sEmpID = IDHelper.GetIDs(tc, sEmpID, out sTableName);

                string SSalary = SQLParser.MakeSQL(@"select E.EmployeeNo,E.Name,S.SalaryMonth,sum(smd.ChangedAmount) Amount
                                                    from SalaryMonthly s
                                                    inner join Employee E on S.EmployeeID=E.EmployeeID
                                                    inner join SalaryMonthlyDetail smd on S.SalaryMonthlyID=smd.SalaryMonthlyID
                                                    where S.EmployeeID in(%q) %q
                                                    And S.SalaryMonth between %d and %d
                                                    group by E.EmployeeNo,E.Name,S.SalaryMonth
                                                    order by E.EmployeeNo,S.SalaryMonth", sEmpID, sSQL, _SalaryMonth, toDate);

                tempdataset = tc.ExecuteDataSet(SSalary);
                tempdataset.Tables[0].TableName = "ItemWiseSalary";
                rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
                if (sTableName != "")
                    tc.ExecuteNonQuery("Drop TAble %q", sTableName);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return rootDataset;
        }
        internal static DataSet GetEmployeesPF(TransactionContext tc, DateTime dateTime, int locationID, string empIds)
        {
            DataSet rootDataset = new DataSet();
            DataSet tempdataset = new DataSet();
            string sTranType = Convert.ToString((int)EnumPFTranType.PFAmount) + "," + Convert.ToString((int)EnumPFTranType.CPFAmount);

            try
            {
                if (empIds != string.Empty)
                {
                    string sexpEmps = SQLParser.MakeSQL(@"SELECT t.EmployeeNo, t.[Name],  SUM(t.EPF) EPF,t.CRGID, 
                                                    SUM(t.CPF) CPF,t.CostCenter,t.Designation,t.Department,t.JOININGDATE,t.Location
                                                    FROM 
                                                        (
                                                          SELECT e.EmployeeID,e.EmployeeNo,e.Name,e.JOININGDATE,D.NAME AS Designation,
                                                          Dep.DESCRIPTION AS Department,lc.[DESCRIPTION] Location,CC.CRGID,
                                                          CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END AS EPF,
                                                          CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END AS CPF,
                                                          CC.DESCRIPTION AS CostCenter
                                                          FROM PFTRANSACTION pt 
                                                          LEFT JOIN Employee e ON pt.EMPLOYEEID = e.EMPLOYEEID AND pt.TRANDATE = %d 
                                                          LEFT JOIN DESIGNATION D ON e.DESIGNATIONID = D.DESIGNATIONID
                                                          LEFT JOIN DEPARTMENT Dep ON e.DEPARTMENTID = Dep.DEPARTMENTID
                                                          LEFT JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cmpcc.EMPLOYEEID AND cmpcc.CurrentCC=1
                                                          INNER JOIN CRG CC ON cmpcc.CostCenterID = CC.CRGID  
                                                          Inner JOIN LOCATION lc ON e.LOCATIONID = lc.LOCATIONID
                                                          AND e.LOCATIONID = %n 
                                                          AND e.EMPLOYEEID IN (%q)
                                                        )t 
                                                    GROUP BY t.EmployeeNo, t.[Name],  t.CostCenter,
                                                    t.JOININGDATE,t.Designation,t.Department,t.Location,t.CRGID
                                                    ORDER BY t.CostCenter", (int)EnumPFTranType.PFAmount, (int)EnumPFTranType.CPFAmount, dateTime,
                                                                              locationID, empIds);
                    tempdataset = tc.ExecuteDataSet(sexpEmps);

                    tempdataset.Tables[0].TableName = "MonthlyPFExp";
                    rootDataset.Tables.Add(tempdataset.Tables[0].Copy());


                    string sSQLMonthlyPF = SQLParser.MakeSQL(@"SELECT t.EmployeeNo, t.[Name], t.THISMONTHBASIC, t.TotalGross, SUM(t.EPF) EPF,t.CRGID, 
                                                        SUM(t.CPF) CPF,t.CostCenter,t.Designation,t.Department,t.JOININGDATE,t.Location
                                                        FROM 
                                                            (
                                                              SELECT e.EmployeeNo,e.Name,e.JOININGDATE,D.NAME AS Designation,Dep.DESCRIPTION AS Department,
                                                              ISNULL(sm.THISMONTHBASIC,0) THISMONTHBASIC,lc.[DESCRIPTION] Location,
                                                              IsNull(sm.ThisMonthGross,0) as TotalGross,CC.CRGID,
                                                              CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END AS EPF,
                                                              CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END AS CPF,
                                                              CC.DESCRIPTION AS CostCenter
                                                              FROM PFTRANSACTION pt 
                                                              LEFT JOIN Employee e ON pt.EMPLOYEEID = e.EMPLOYEEID AND pt.TRANDATE = %d 
                                                              LEFT JOIN DESIGNATION D ON e.DESIGNATIONID = D.DESIGNATIONID
                                                              LEFT JOIN DEPARTMENT Dep ON e.DEPARTMENTID = Dep.DEPARTMENTID
                                                              LEFT JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cmpcc.EMPLOYEEID AND cmpcc.CurrentCC=1
                                                              INNER JOIN CRG CC ON cmpcc.CostCenterID = CC.CRGID 
                                                              LEFT JOIN SALARYMONTHLY sm ON sm.EMPLOYEEID = e.EMPLOYEEID 
                                                              Inner JOIN LOCATION lc ON sm.LOCATIONID = lc.LOCATIONID
                                                              AND sm.SalaryMonth = %d AND sm.LOCATIONID = %n
                                                            )t 
                                                        GROUP BY t.EmployeeNo, t.[Name], t.THISMONTHBASIC, t.TotalGross, t.CostCenter,
                                                        t.JOININGDATE,t.Designation,t.Department,t.Location,t.CRGID
                                                        ORDER BY t.CostCenter"
                                                         , (int)EnumPFTranType.PFAmount, (int)EnumPFTranType.CPFAmount, dateTime, dateTime, locationID);

                    tempdataset = tc.ExecuteDataSet(sSQLMonthlyPF);

                    tempdataset.Tables[0].TableName = "MonthlyPF";
                    rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return rootDataset;
        }
        internal static DataSet GetDataSetBySQL(TransactionContext tc, string sSQL)
        {

            DataSet tempdataset = new DataSet();

            try
            {


                tempdataset = tc.ExecuteDataSet(sSQL);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return tempdataset;
        }

        internal static DataSet GetFor177Data(TransactionContext tc, DateTime dSalarymonth, string sEmpID, int payrollTypeId)
        {
            DataSet rootDataset = new DataSet();
            DataSet tempdataset = new DataSet();

            try
            {
                string sSQL = SQLParser.MakeSQL(@"
                                                    select e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.Description,SUM(sd.changedamount) Amount
                                                    from SALARYMONTHLYDETAIL sd,SALARYMONTHLY S ,Employee e
                                                    Where sd.SALARYMONTHLYID=S.SALARYMONTHLYID And S.EmployeeID = e.EmployeeId
                                                    AND S.SalaryMonth = %d and sd.ITEMGROUP in(1,3,8)
                                                    AND sd.ItemCode not in(-102) AND S.EmployeeID IN(%q) AND S.payrolltypeid = %n
                                                    group by e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.DESCRIPTION
                                                    ORDER BY e.EmployeeNo ", dSalarymonth, sEmpID, payrollTypeId, sEmpID);

                tempdataset = tc.ExecuteDataSet(sSQL);

                tempdataset.Tables[0].TableName = "EmpWiseSalary";
                rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                //sSQL = SQLParser.MakeSQL(@"
                //                                    select e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.Description,SUM(sd.changedamount) Amount
                //                                    from SALARYMONTHLYDETAIL sd,SALARYMONTHLY S ,Employee e
                //                                    Where sd.SALARYMONTHLYID = S.SALARYMONTHLYID And S.EmployeeID = e.EmployeeId
                //                                    AND S.SalaryMonth between %d and %d and sd.ITEMGROUP in(3)
                //                                    AND sd.ItemCode in(-128) AND S.EmployeeID IN (%q) AND S.payrolltypeid = %n
                //                                    group by e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.DESCRIPTION
                //                                    ORDER BY e.EmployeeNo ",
                //                               dSStartMonthDate, dSEndMonthDate, sEmpID, payrollTypeId, sEmpID);

                //tempdataset = tc.ExecuteDataSet(sSQL);

                //tempdataset.Tables[0].TableName = "EmpWisePF";
                //rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                sSQL = SQLParser.MakeSQL(@"SELECT e.EMPLOYEEID,e.EmployeeNo,bpd.BONUSID,b.NAME Description,Sum(bpd.CHANGEBONUSAMOUNT) Amount
                                                FROM BONUSPROCESSDETAIL bpd
                                                INNER JOIN BONUS b ON bpd.BONUSID = b.BONUSID
                                                inner join Employee e on bpd.EMPLOYEEID = e.EmployeeId
                                                LEFT JOIN BONUSPROCESS bp ON bpd.BONUSPROCESSID = bp.BONUSPROCESSID
                                                WHERE bp.BONUSMONTH=%d AND bpd.EMPLOYEEID IN (%q)
                                                AND bp.ISDISBURSEWITHSALARY = %n AND bp.PAYROLLTYPEID = %n
                                                GROUP BY e.EMPLOYEEID,e.EmployeeNo,bpd.BONUSID,b.NAME
                                                ORDER BY e.EmployeeNo", dSalarymonth, sEmpID, false, payrollTypeId);

                tempdataset = tc.ExecuteDataSet(sSQL);

                tempdataset.Tables[0].TableName = "EmpWiseBonus";
                rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return rootDataset;
        }
        internal static DataSet GetEmployeesPFNew(TransactionContext tc, DateTime Fromdate, DateTime Todate, string sEmpIDs)
        {
            DataSet rootDataset = new DataSet();
            DataSet tempdataset = new DataSet();
            string sTranType = Convert.ToString((int)EnumPFTranType.PFAmount) + "," + Convert.ToString((int)EnumPFTranType.CPFAmount);
            try
            {
                //                string sqlPFexception = SQLParser.MakeSQL(@"SELECT t.[Name],t.EmployeeNo,t.JOININGDATE, t.Designation,t.Department, t.TotalGross GrossSalary,ROUND (SUM(t.EPF),0)as EPF, Round(SUM(t.CPF),0) CPF,  t.BIRTHDATE
                //                    FROM 
                //                    (
                //                    SELECT e.EmployeeNo,e.Name,e.JOININGDATE,e.BIRTHDATE, D.NAME Designation,Dep.DESCRIPTION Department,
                //                    NVL(sm.THISMONTHBASIC,0) THISMONTHBASIC,
                //                    NVL(sm.ThisMonthBasic,0) TotalGross,
                //                    CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END EPF,
                //                    CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END CPF,
                //
                //                    CC.DESCRIPTION CostCenter
                //                    FROM PFTRANSACTION pt 
                //                    LEFT JOIN Employee e ON pt.EMPLOYEEID = e.EMPLOYEEID AND pt.TRANDATE BETWEEN %d AND %d 
                //                    LEFT JOIN DESIGNATION D ON e.DESIGNATIONID = D.DESIGNATIONID
                //                    LEFT JOIN DEPARTMENT Dep ON e.DEPARTMENTID = Dep.DEPARTMENTID
                //                    LEFT JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cmpcc.EMPLOYEEID AND cmpcc.CurrentCC=1
                //                    INNER JOIN CRG CC ON cmpcc.CostCenterID = CC.CRGID 
                //                    LEFT JOIN SALARYMONTHLY sm ON sm.EMPLOYEEID = e.EMPLOYEEID AND sm.SalaryMonth = %d
                //                    Left JOIN SALARYMONTHLYDETAIL smd ON sm.SALARYMONTHLYID = smd.SALARYMONTHLYID AND smd.ITEMGROUP IN(1,8)
                //
                //                    )t 
                //                    GROUP BY t.EmployeeNo, t.[Name], t.THISMONTHBASIC, t.TotalGross, t.CostCenter,
                //                    t.JOININGDATE,t.Designation,t.Department,t.BirthDate", (int)EnumPFTranType.PFAmount, (int)EnumPFTranType.CPFAmount, Fromdate, Todate, Todate);

                string sqlPfException = "";

                if (sEmpIDs == "")
                {
                    sqlPfException = SQLParser.MakeSQL(@" SELECT t.Name,t.EmployeeNo,t.JOININGDATE, t.Designation,t.Department, t.TotalGross GrossSalary,ROUND (SUM(t.EPF),0)as EPF, Round(SUM(t.CPF),0) CPF,  t.BIRTHDATE
                            FROM
                            (SELECT e.EmployeeNo,e.Name,e.BIRTHDATE, e.JOININGDATE, D.NAME Designation,Dept.DESCRIPTION Department,
                            CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END EPF,
                            CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END CPF,
                            ISNULL(s.THISMONTHBASIC,0) THISMONTHBASIC,
                            ISNULL(s.ThisMonthBasic,0) TotalGross

                            FROM SALARYMONTHLY s
                            INNER JOIN EMPLOYEE e ON e.EMPLOYEEID= s.EMPLOYEEID
                            INNER JOIN DESIGNATION d ON d.DESIGNATIONID= e.DESIGNATIONID
                            INNER JOIN DEPARTMENT dept ON e.DEPARTMENTID = dept.DEPARTMENTID
                            INNER JOIN EmpLifeCycle elc ON elc.EmployeeID=e.EMPLOYEEID
                            INNER JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cmpcc.EMPLOYEEID AND cmpcc.CurrentCC=1
                            INNER JOIN CRG CC ON cmpcc.CostCenterID = CC.CRGID 
                            INNER JOIN SALARYMONTHLYDETAIL smd ON s.SALARYMONTHLYID = smd.SALARYMONTHLYID AND smd.ITEMGROUP IN(1,8)
                            LEFT JOIN PFTRANSACTION pt ON pt.EMPLOYEEID=e.EMPLOYEEID 
                            WHERE s.SalaryMonth=%d AND elc.IsConfirm=1 AND elc.EffectDate BETWEEN %d AND %d)t
                            GROUP BY t.EmployeeNo, t.Name, t.THISMONTHBASIC, t.TotalGross, t.JOININGDATE,t.Designation,t.Department,t.BirthDate", (int)EnumPFTranType.PFAmount, (int)EnumPFTranType.CPFAmount,PayrollGlobalFunctions.PayrollLastDateOfMonth(Fromdate), Fromdate, Todate);

                    tempdataset = tc.ExecuteDataSet(sqlPfException);

                    tempdataset.Tables[0].TableName = "PFandConfirmation";
                    rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
                }
                else
                {
                    string sTableName;
                    sEmpIDs = IDHelper.GetIDs(tc, sEmpIDs, out sTableName);


                    sqlPfException = SQLParser.MakeSQL(@" SELECT t.Name,t.EmployeeNo,t.JOININGDATE, t.Designation,t.Department, t.TotalGross GrossSalary,ROUND (SUM(t.EPF),0)as EPF, Round(SUM(t.CPF),0) CPF,  t.BIRTHDATE
                            FROM
                            (SELECT e.EmployeeNo,e.Name,e.BIRTHDATE, e.JOININGDATE, D.NAME Designation,Dept.DESCRIPTION Department,
                            CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END EPF,
                            CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END CPF,
                            NVL(s.THISMONTHBASIC,0) THISMONTHBASIC,
                            NVL(s.ThisMonthBasic,0) TotalGross

                            FROM SALARYMONTHLY s
                            INNER JOIN EMPLOYEE e ON e.EMPLOYEEID= s.EMPLOYEEID
                            INNER JOIN DESIGNATION d ON d.DESIGNATIONID= e.DESIGNATIONID
                            INNER JOIN DEPARTMENT dept ON e.DEPARTMENTID = dept.DEPARTMENTID
                            INNER JOIN EmpLifeCycle elc ON elc.EmployeeID=e.EMPLOYEEID
                            INNER JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cmpcc.EMPLOYEEID AND cmpcc.CurrentCC=1
                            INNER JOIN CRG CC ON cmpcc.CostCenterID = CC.CRGID 
                            INNER JOIN SALARYMONTHLYDETAIL smd ON s.SALARYMONTHLYID = smd.SALARYMONTHLYID AND smd.ITEMGROUP IN(1,8)
                            LEFT JOIN PFTRANSACTION pt ON pt.EMPLOYEEID=e.EMPLOYEEID 
                            WHERE s.SalaryMonth=%d AND elc.IsConfirm=1 AND elc.EffectDate BETWEEN %d AND %d AND e.EMPLOYEEID IN (%q) )t
                            GROUP BY t.EmployeeNo, t.Name, t.THISMONTHBASIC, t.TotalGross, t.JOININGDATE,t.Designation,t.Department,t.BirthDate", (int)EnumPFTranType.PFAmount, (int)EnumPFTranType.CPFAmount, Todate, Fromdate, Todate, sEmpIDs);

                    tempdataset = tc.ExecuteDataSet(sqlPfException);

                    tempdataset.Tables[0].TableName = "PFandConfirmation";
                    rootDataset.Tables.Add(tempdataset.Tables[0].Copy());


                    if (sTableName != "")
                        tc.ExecuteNonQuery("Drop TAble %q", sTableName);

                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return rootDataset;
        }
        internal static DataSet GetEmpCostCenter(TransactionContext tc, string sEmpID)
        {
            DataSet OPIDset = new DataSet();

            string query = SQLParser.MakeSQL(@"SELECT emp.EMPLOYEEID,cc.CRGID,cc.[DESCRIPTION] CostCenter
                                                FROM EMPLOYEE EMp
                                                LEFT JOIN EMPCOSTCENTER ecc ON (emp.EMPLOYEEID = ecc.EMPLOYEEID AND ecc.CurrentCC=1)
                                                LEFT JOIN CRG cc ON ecc.COSTCENTERID = cc.CRGID
                                                WHERE emp.EMPLOYEEID IN(%q)", sEmpID);

            OPIDset = tc.ExecuteDataSet(query);

            return OPIDset;
        }
        internal static DataSet GetPerquisiteData(TransactionContext tc, DateTime dSStartMonthDate, DateTime dSEndMonthDate, string sEmpID, int payrollTypeId)
        {
            DataSet rootDataset = new DataSet();
            DataSet tempdataset = new DataSet();

            try
            {
                string sSQL = SQLParser.MakeSQL(@"
                                                    select e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.Description,SUM(sd.changedamount) Amount
                                                    from SALARYMONTHLYDETAIL sd,SALARYMONTHLY S ,Employee e
                                                    Where sd.SALARYMONTHLYID=S.SALARYMONTHLYID And S.EmployeeID = e.EmployeeId
                                                    AND S.SalaryMonth between %d and %d and sd.ITEMGROUP in(1,8)
                                                    AND sd.ItemCode not in(-102) AND S.EmployeeID IN(%q)
                                                    group by e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.DESCRIPTION
                                                    ORDER BY e.EmployeeNo ",
                                                dSStartMonthDate, dSEndMonthDate, sEmpID, payrollTypeId, sEmpID);

                tempdataset = tc.ExecuteDataSet(sSQL);

                tempdataset.Tables[0].TableName = "EmpWiseSalary";
                rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                sSQL = SQLParser.MakeSQL(@"
                                                    select e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.Description,SUM(sd.changedamount) Amount
                                                    from SALARYMONTHLYDETAIL sd,SALARYMONTHLY S ,Employee e
                                                    Where sd.SALARYMONTHLYID = S.SALARYMONTHLYID And S.EmployeeID = e.EmployeeId
                                                    AND S.SalaryMonth between %d and %d and sd.ITEMGROUP in(3)
                                                    AND sd.ItemCode in(-128) AND S.EmployeeID IN (%q)
                                                    group by e.EMPLOYEEID,e.EmployeeNo,sd.ITEMGROUP,sd.ITEMCODE,sd.ITEMID,sd.DESCRIPTION
                                                    ORDER BY e.EmployeeNo ",
                                               dSStartMonthDate, dSEndMonthDate, sEmpID, payrollTypeId, sEmpID);

                tempdataset = tc.ExecuteDataSet(sSQL);

                tempdataset.Tables[0].TableName = "EmpWisePF";
                rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                sSQL = SQLParser.MakeSQL(@"SELECT e.EMPLOYEEID,e.EmployeeNo,bpd.BONUSID,b.NAME Description,Sum(bpd.CHANGEBONUSAMOUNT) Amount
                                                FROM BONUSPROCESSDETAIL bpd
                                                INNER JOIN BONUS b ON bpd.BONUSID = b.BONUSID
                                                inner join Employee e on bpd.EMPLOYEEID = e.EmployeeId
                                                LEFT JOIN BONUSPROCESS bp ON bpd.BONUSPROCESSID = bp.BONUSPROCESSID
                                                WHERE bp.BONUSMONTH BETWEEN %d and %d AND bpd.EMPLOYEEID IN (%q)
                                                AND bp.ISDISBURSEWITHSALARY = %n
                                                GROUP BY e.EMPLOYEEID,e.EmployeeNo,bpd.BONUSID,b.NAME
                                                ORDER BY e.EmployeeNo",
                                            dSStartMonthDate, dSEndMonthDate, sEmpID, false, payrollTypeId);

                tempdataset = tc.ExecuteDataSet(sSQL);

                tempdataset.Tables[0].TableName = "EmpWiseBonus";
                rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return rootDataset;
        }

        /* internal static IDataReader GetByGlobalID(TransactionContext tc, string GPDPID)
         {
             var sql = SQLParser.MakeSQL(@"Select EmployeeID From Employee Where GlobalID = %s", GPDPID);
             return tc.ExecuteReader(sql);
         }

         internal static DataSet GetEmpGrossPay(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var queryGross = SQLParser.MakeSQL(
                     @"select E.EmployeeNo, E.Name,Sum(A.amount) GrossAmount,a.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID 
                         from( select S.EmployeeID,  Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S, SalaryMonthlyDetail Sd  
                         where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d   
                         and Sd.ItemGroup IN (1, 8) AND S.EmployeeID IN(%q)  group by S.EmployeeID,S.LOCATIONID 
                         UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd 
                         where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d and Sd.ItemGroup IN (2) 
                         AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID) A, Employee E 
                         where A.EmployeeID = E.EmployeeID  
                         group by E.EmployeeNo, E.Name,a.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryGross);

                 tempdataset.Tables[0].TableName = "TotalGross";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var queryTotalDeduction = SQLParser.MakeSQL(
                     @"select E.EmployeeNo, E.Name, Sum(A.amount) DeductionAmount,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID  
                     from ( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd 
                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth=%d and Sd.ItemGroup IN (2,3) 
                     AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID)A, Employee E 
                     where A.EmployeeID = E.EmployeeID  
                     group by E.EmployeeNo, E.Name,A.LOCATIONID,E.DESIGNATIONID,  E.DEPARTMENTID  ", dSMonthDate,
                     sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryTotalDeduction);

                 tempdataset.Tables[0].TableName = "TotalDeduction";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetTotalOPI(TransactionContext tc, string oPIItem, DateTime _SalaryMonth, string sEmpID)
         {
             var oTotalOPI = new DataSet();
             var sQuary = SQLParser.MakeSQL("SELECT  e.EmployeeNo,e.DEPARTMENTID, e.Name EmpName,"
                                            + " e.DESIGNATIONID,e.BRANCHID, Sum(opdi.NetAmount) OPIAmount"
                                            + " FROM Employee e, "
                                            + " OPIItem oi, OPIProcess op, OPIProcessDetail opd, OPIProcessDetailItem opdi "
                                            + " WHERE op.OPIMonth >= %d AND op.OPIMonth <= %d  "
                                            + " AND e.EmployeeId IN(%q)  AND op.OPIProcessID = opd.OPIProcessID"
                                            + " AND e.EmployeeId = opd.EmployeeId  AND opd.OPIProcessDetailId = opdi.OPIProcessDetailId"
                                            + " AND oi.OPIItemId = opdi.OPIItemId  "
                                            + " GROUP BY  e.EmployeeId, e.EmployeeNo, e.Name,e.DEPARTMENTID,e.DESIGNATIONID,"
                                            + " e.BRANCHID ORDER BY  e.EmployeeNo",
                 PayrollGlobalFunctions.PayrollFirstDateOfMonth(_SalaryMonth),
                 PayrollGlobalFunctions.PayrollLastDateOfMonth(_SalaryMonth), sEmpID, oPIItem);

             oTotalOPI = tc.ExecuteDataSet(sQuary);

             return oTotalOPI;
         }

         internal static DataSet GetEmpDeduction(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var deductItem = SQLParser.MakeSQL(
                     "select  A.EmployeeNo,A.CIFNo, A.Name,A.GName,A.GCode,A.SequenceNo,A.DName,A.Description, "
                     + " SUM(A.changedamount) Amount,A.Department,A.Branch,A.DEPARTMENTID,A.ITEMCODE,A.ITEMGROUP,A.ITEMID  "
                     + " from ("
                     + " select S.EmployeeID, E.EmployeeNo, E.Name,E.GLOBALID CIFNo, "
                     + " sd.ItemGroup,sd.ItemCode,  sd.ItemID, sd.Description,sd.Position, "
                     + " sd.changedamount,G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName ,"
                     + " DE.DESCRIPTION Department,L.DESCRIPTION Branch,DE.DEPARTMENTID"
                     + " from Grades G,DESIGNATION D,Employee E, SALARYMONTHLY S, SalaryMonthlyDetail Sd,DEPARTMENT DE,"
                     + " LOCATION L  "
                     + " where G.GradeID= E.GradeID AND D.DESIGNATIONID=E.DESIGNATIONID "
                     + " AND E.employeeID=S.EmployeeID AND  S.SalaryMonthlyID=Sd.SalaryMonthlyID "
                     + " AND S.SalaryMonth=%d and Sd.ItemGroup=3 "
                     + " AND L.LOCATIONID=S.LOCATIONID and DE.DEPARTMENTID=S.DEPARTMENTID"
                     + " AND S.EmployeeID IN(%q)  "
                     + " union "
                     + " select S.EmployeeID, E.EmployeeNo, E.Name, sd.ItemGroup,sd.ItemCode,E.GLOBALID CIFNo, "
                     + " sd.ItemID, sd.Description,sd.Position, -sd.changedamount,G.DESCRIPTION GName,"
                     + " G.Code GCode,G.sequenceNo,D.Name DName,DE.DESCRIPTION Department,L.DESCRIPTION Branch,DE.DEPARTMENTID "
                     + " from Grades G,DESIGNATION D,Employee E, "
                     + " SALARYMONTHLY S, SalaryMonthlyDetail Sd,DEPARTMENT DE,LOCATION L "
                     + " where G.GradeID= E.GradeID "
                     + " AND D.DESIGNATIONID=E.DESIGNATIONID AND E.employeeID=S.EmployeeID "
                     + " AND DE.DEPARTMENTID=S.DEPARTMENTID AND L.LOCATIONID=S.LOCATIONID "
                     + " AND  S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d"
                     + " and Sd.ItemGroup=2 AND S.EmployeeID IN(%q)  "
                     + " ) A "
                     + " group by  A.EmployeeID, A.EmployeeNo, A.Name,A.GName,A.SequenceNo,A.GCode,A.CIFNo,"
                     + " A.DName,  A.ItemCode, A.ItemID,A.ITEMGROUP, A.Description,A.Position ,A.Department,A.Branch,A.DEPARTMENTID "
                     + " order by A.EmployeeNo", dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(deductItem);

                 tempdataset.Tables[0].TableName = "DeductItem";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var query6 = SQLParser.MakeSQL(
                     "select E.EmployeeNo, E.Name,A.GName,A.GCode,A.SequenceNo,A.DName,A.Department,"
                     + " 'Total Deduction' Description, Sum(A.amount) amount,A.Branch,A.DEPARTMENTID  "
                     + " ,E.GLOBALID CIFNo from"
                     + " ( select S.EmployeeID, Sum(sd.changedamount) Amount,G.DESCRIPTION GName,"
                     + " G.Code GCode,G.SequenceNo,D.Name DName,DE.DEPARTMENTID,"
                     + " DE.DESCRIPTION Department,L.DESCRIPTION Branch  "
                     + " from DEPARTMENT DE,LOCATION L,"
                     + " GRADES G,DESIGNATION D,SALARYMONTHLY S,SalaryMonthlyDetail Sd"
                     + " where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth=%d"
                     + " AND S.DEPARTMENTID=DE.DEPARTMENTID AND S.LOCATIONID = L.LOCATIONID"
                     + " AND G.GRADEID=S.GRADEID AND D.DESIGNATIONID=S.DESIGNATIONID "
                     + " and Sd.ItemGroup IN (2,3) AND S.EmployeeID IN(%q)"
                     + " group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name,DE.DESCRIPTION,"
                     + " L.DESCRIPTION,DE.DEPARTMENTID ) A, Employee E "
                     + " where A.EmployeeID = E.EmployeeID "
                     + " group by E.EmployeeNo, E.Name,A.GName,A.SequenceNo,A.GCode,A.DName ,A.Department,"
                     + "  A.Branch,A.DEPARTMENTID,E.GLOBALID order by E.EmployeeNo", dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(query6);

                 tempdataset.Tables[0].TableName = "TotalDeduction";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetBranchWiseSalary(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var queryGross = SQLParser.MakeSQL(@"Select Sum(A.amount) GrossAmount,E.DEPARTMENTID ,
                         A.LOCATIONID from( select S.EmployeeID,Sum(sd.changedamount) Amount,S.LOCATIONID  
                         from SALARYMONTHLY S, SalaryMonthlyDetail Sd   where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                         AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8)  
                         AND S.EmployeeID IN(%q) 
                         group by S.EmployeeID,S.LOCATIONID UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID 
                         from SALARYMONTHLY S,SalaryMonthlyDetail Sd  where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                         AND S.SalaryMonth=%d and Sd.ItemGroup IN (2)  
                         AND S.EmployeeID IN(%q) 
                         group by S.EmployeeID,S.LOCATIONID) A, Employee E  where A.EmployeeID = E.EmployeeID   
                         group by A.LOCATIONID,E.DEPARTMENTID 
                         order by A.LocationID,E.DEPARTMENTID",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryGross);

                 tempdataset.Tables[0].TableName = "TotalGross";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sFestiveBonus = SQLParser.MakeSQL(@"Select Sum(A.amount) FestivalBonus, E.DEPARTMENTID,
                             A.LOCATIONID from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID  
                             from SALARYMONTHLY S, SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) and ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID  IN(%q) 
                             group by S.EmployeeID,S.LOCATIONID UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID 
                             from SALARYMONTHLY S,SalaryMonthlyDetail Sd  where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d  and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID IN(%q) 
                             group by S.EmployeeID,S.LOCATIONID) A, Employee E  where A.EmployeeID = E.EmployeeID   
                             group by A.LOCATIONID,E.DEPARTMENTID
                             order by A.LOCATIONID,E.DEPARTMENTID",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sFestiveBonus);

                 tempdataset.Tables[0].TableName = "FestivalBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sPerformanceBonus = SQLParser.MakeSQL(@"Select Sum(A.amount) PerformBonus,E.DEPARTMENTID,
                             A.LOCATIONID from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID  
                             from SALARYMONTHLY S, SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) and ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID  IN(%q) group by S.EmployeeID,S.LOCATIONID 
                             UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID 
                             from SALARYMONTHLY S,SalaryMonthlyDetail Sd  where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID IN(%q) 
                             group by S.EmployeeID,S.LOCATIONID) A, Employee E  where A.EmployeeID = E.EmployeeID   
                             group by A.LOCATIONID,E.DEPARTMENTID 
                             order by A.LOCATIONID,E.DEPARTMENTID",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sPerformanceBonus);

                 tempdataset.Tables[0].TableName = "PerformanceBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var queryTotalDeduction = SQLParser.MakeSQL(@"select A.LOCATIONID, Sum(A.amount) DeductionAmount,
                 E.DEPARTMENTID  from ( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID 
                 from SALARYMONTHLY S,SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID  
                 AND S.SalaryMonth=%d and Sd.ItemGroup IN (2,3) 
                 AND S.EmployeeID IN(%q) 
                 group by S.EmployeeID,S.LOCATIONID)A, Employee E where A.EmployeeID = E.EmployeeID  
                 group by A.LOCATIONID,E.DEPARTMENTID 
                 order by A.LOCATIONID,E.DEPARTMENTID", dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryTotalDeduction);

                 tempdataset.Tables[0].TableName = "TotalDeduction";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetCCWiseSalaryDetails(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var sSQL = SQLParser.MakeSQL(
                     @"select  A.EmployeeNo, A.Name,A.GName,A.DName,A.GCode,A.CRGDes,A.SequenceNO,
                                 A.Description, SUM(A.amonut) amount,A.PERCENTAGE,A.DEPARTMENTID,A.LocationID 
                                 from (select S.EmployeeID, E.EmployeeNo, E.Name, sd.ItemGroup,sd.ItemCode, 
                                 sd.ItemID, sd.Description,sd.Position, sd.changedamount*SEMCC.PERCENTAGE/100 amonut,
                                 SEMCC.PERCENTAGE, G.DESCRIPTION GName,D.Name DName,G.Code GCode,G.SequenceNo,
                                 E.DEPARTMENTID,E.LocationID, CC.DESCRIPTION CRGDes 
                                 from Grades G,CRG CC,SALARYEMPCOSTCENTER SEMCC , DESIGNATION D,Employee E, 
                                 SALARYMONTHLY S, SalaryMonthlyDetail Sd   where G.GradeID= E.GradeID 
                                 AND S.EMPLOYEEID=SEMCC.EMPLOYEEID  AND CC.CRGID=SEMCC.COSTCENTERID 
                                 AND D.DESIGNATIONID=E.DESIGNATIONID AND E.employeeID=S.EmployeeID 
                                 AND S.SalaryMonthlyID=Sd.SalaryMonthlyID AND SD.SALARYMONTHLYID=SEMCC.SALARYMONTHLYID 
                                 AND S.SalaryMonth=%d and Sd.ItemGroup in(8,4)  
                                 AND sd.ItemCode not in(-133)  AND S.EmployeeID IN(%q) 
                                 union select S.EmployeeID, E.EmployeeNo, E.Name, sd.ItemGroup,sd.ItemCode, sd.ItemID,
                                 sd.Description,sd.Position,sd.changedamount*SEMCC.PERCENTAGE/100 amonut,
                                 SEMCC.PERCENTAGE, G.DESCRIPTION GName, D.Name DName,G.Code GCode,G.SequenceNo,
                                 E.DEPARTMENTID,E.LocationID, CC.DESCRIPTION CRGDes
                                 from Grades G,CRG CC,
                                 SALARYEMPCOSTCENTER SEMCC, DESIGNATION D,Employee E,  SALARYMONTHLY S, 
                                 SalaryMonthlyDetail Sd   where G.GradeID= E.GradeID  AND S.EMPLOYEEID=SEMCC.EMPLOYEEID  
                                 AND CC.CRGID=SEMCC.COSTCENTERID AND D.DESIGNATIONID=E.DESIGNATIONID 
                                 AND E.employeeID=S.EmployeeID  AND SD.SALARYMONTHLYID=SEMCC.SALARYMONTHLYID 
                                 AND S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth=%d 
                                 and Sd.ItemGroup in(1,4) AND sd.ItemCode not in(-133) AND S.EmployeeID 
                                 IN(%q)  ) A  
                                 group by  A.EmployeeID, A.EmployeeNo, A.Name,A.GName,A.DName,A.SequenceNo,A.GCode, 
                                 A.CRGDes, A.ItemCode, A.ItemID, A.Description,A.Position ,A.PERCENTAGE,A.DEPARTMENTID,
                                 A.LocationID  order by A.EmployeeNo,A.CRGDes,A.Position,A.SequenceNo,A.GCode",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID, dSMonthDate, sEmpID);
                 tempdataset = tc.ExecuteDataSet(sSQL);

                 tempdataset.Tables[0].TableName = "GrossItem";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var queryGross = SQLParser.MakeSQL(
                     @"select E.EmployeeNo, E.Name,A.GName,A.GCode,A.SequenceNo,A.DName,'Gross Pay' Description,  
                                       Sum(A.amount) amount,A.CRGDes,A.PERCENTAGE,E.DEPARTMENTID,E.LocationID  from
                                       ( select S.EmployeeID, Sum(sd.changedamount)*EMPC.PERCENTAGE/100 Amount,
                                       G.DESCRIPTION GName,
                                       G.Code GCode,G.SequenceNo,D.Name DName,CC.DESCRIPTION CRGDes,EMPC.PERCENTAGE 
                                       from SALARYMONTHLY S,Grades G,DESIGNATION D, SalaryMonthlyDetail Sd,
                                       CRG CC,EMPCOSTCENTER EMPC 
                                       where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                                       AND G.GRADEID=S.GRADEID AND D.DESIGNATIONID=S.DESIGNATIONID AND S.SalaryMonth=%d
                                       and Sd.ItemGroup IN (1, 8) AND S.EmployeeID IN(%q)
                                       And S.EMPLOYEEID=EMPC.EMPLOYEEID AND EMPC.COSTCENTERID=CC.CRGID
                                       group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name 
                                       ,CC.DESCRIPTION ,EMPC.PERCENTAGE
                                       UNION
                                       select S.EmployeeID, -Sum(sd.changedamount)* EMPC.PERCENTAGE/100 Amount,G.DESCRIPTION GName,
                                       G.Code GCode,G.sequenceNo,D.Name DName,CC.DESCRIPTION CRGDes,EMPC.PERCENTAGE
                                       from GRADES G,DESIGNATION D,SALARYMONTHLY S, SalaryMonthlyDetail Sd,CRG CC,EMPCOSTCENTER EMPC 
                                       where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                                       AND S.SalaryMonth=%d AND G.GRADEID=S.GRADEID AND D.DESIGNATIONID=S.DESIGNATIONID 
                                       and Sd.ItemGroup IN (2) AND S.EmployeeID IN(%q) 
                                       And S.EMPLOYEEID=EMPC.EMPLOYEEID AND EMPC.COSTCENTERID=CC.CRGID
                                       group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name,CC.DESCRIPTION,EMPC.PERCENTAGE 
                                       ) A, Employee E where A.EmployeeID = E.EmployeeID 
                                       group by E.EmployeeNo, E.Name,A.GName,A.SequenceNo,A.GCode,A.DName,A.CRGDes,A.PERCENTAGE,E.DEPARTMENTID,E.LocationID
                                       order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryGross);

                 tempdataset.Tables[0].TableName = "TotalGross";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetDividionWiseReport(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var queryGross = SQLParser.MakeSQL(@"Select E.EMPLOYEEID,E.EmployeeNo, E.Name,Sum(A.amount) 
                         GrossAmount,A.LocationID,E.BRANCHID,E.DESIGNATIONID, 
                         E.DEPARTMENTID  from( select S.EmployeeID,Sum(sd.changedamount) Amount,S.LOCATIONID  from SALARYMONTHLY S, 
                         SalaryMonthlyDetail Sd   where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d 
                         and Sd.ItemGroup IN (1, 8) AND S.EmployeeID IN(%q) 
                         group by S.EmployeeID,S.LOCATIONID UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID 
                         from SALARYMONTHLY S,SalaryMonthlyDetail Sd  where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                         AND S.SalaryMonth=%d and Sd.ItemGroup IN (2)  
                         AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID) A, Employee E  
                         where A.EmployeeID = E.EmployeeID   group by E.EMPLOYEEID,E.EmployeeNo, E.Name,A.LocationID,E.BRANCHID,
                         E.DESIGNATIONID,E.DEPARTMENTID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryGross);

                 tempdataset.Tables[0].TableName = "TotalGross";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sFestiveBonus = SQLParser.MakeSQL(@"Select E.EmployeeNo, E.Name,Sum(A.amount) FestivalBonus,
                             A.LocationID , E.BRANCHID,E.DESIGNATIONID, 
                             E.DEPARTMENTID from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID  
                             from SALARYMONTHLY S, SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) and ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID  IN(%q) group by S.EmployeeID,S.LOCATIONID 
                             UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d  
                             and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID ) A, Employee E  
                             where A.EmployeeID = E.EmployeeID   group by E.EmployeeNo, E.Name,E.BRANCHID,E.DESIGNATIONID,
                             E.DEPARTMENTID,A.LocationID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sFestiveBonus);

                 tempdataset.Tables[0].TableName = "FestivalBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sPerformanceBonus = SQLParser.MakeSQL(@"Select E.EmployeeNo, E.Name,Sum(A.amount) 
                             PerformBonus,A.LocationID , E.BRANCHID,E.DESIGNATIONID, 
                             E.DEPARTMENTID from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID  
                             from SALARYMONTHLY S, SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) and ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID  IN(%q) group by S.EmployeeID,S.LOCATIONID 
                             UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d  
                             and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID ) A, Employee E  
                             where A.EmployeeID = E.EmployeeID   group by E.EmployeeNo, E.Name,A.LocationID , E.BRANCHID,E.DESIGNATIONID,
                             E.DEPARTMENTID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sPerformanceBonus);

                 tempdataset.Tables[0].TableName = "PerformanceBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var SCoPFContri = SQLParser.MakeSQL(@"Select E.EmployeeNo, E.Name,Sum(A.changedamount) CoPFContri,
                             A.LOCATIONID , E.BRANCHID,E.DESIGNATIONID,
                             E.DEPARTMENTID from( select S.EmployeeID,sd.changedamount,S.LOCATIONID    
                             from SALARYMONTHLY S, SalaryMonthlyDetail Sd  
                             where  S.SalaryMonthlyID=Sd.SalaryMonthlyID
                             AND S.SalaryMonth=%d  and Sd.ItemGroup=3 
                             AND S.EmployeeID IN(%q) AND sd.ITEMCODE  in(-128)
                             ) A, Employee E 
                             where A.EmployeeID = E.EmployeeID  
                             group by E.EmployeeNo, E.Name,A.LocationID , E.BRANCHID,E.DESIGNATIONID,
                             E.DEPARTMENTID 
                             order by E.EmployeeNo",
                     dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(SCoPFContri);

                 tempdataset.Tables[0].TableName = "CoPFContribution";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var queryTotalDeduction = SQLParser.MakeSQL(@"select E.EmployeeNo, E.Name, 
                 Sum(A.amount) DeductionAmount,A.LocationID ,E.BRANCHID,E.DESIGNATIONID,
                 E.DEPARTMENTID  from ( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID 
                 from SALARYMONTHLY S,SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID  
                 AND S.SalaryMonth=%d and Sd.ItemGroup IN (2,3) 
                 AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID)A, Employee E 
                 where A.EmployeeID = E.EmployeeID  group by E.EmployeeNo, E.Name,A.LocationID ,E.BRANCHID,E.DESIGNATIONID , 
                 E.DEPARTMENTID order by E.EmployeeNo ", dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryTotalDeduction);

                 tempdataset.Tables[0].TableName = "TotalDeduction";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetCTCDetail(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var queryGross = SQLParser.MakeSQL(
                     @"select E.EmployeeID, E.EmployeeNo,E.GLOBALID CIFNo, E.Name,A.GName,A.GCode,A.SequenceNo,
                     E.DESIGNATIONID,'GrossPay' Description,  
                     Sum(A.amount) amount,A.CRGDes,A.PERCENTAGE,E.DEPARTMENTID,A.LOCATIONID  from
                     ( select S.EmployeeID, Sum(sd.changedamount)*EMPC.PERCENTAGE/100 Amount,S.LOCATIONID,
                     G.DESCRIPTION GName,
                     G.Code GCode,G.SequenceNo,D.Name DName,CC.DESCRIPTION CRGDes,EMPC.PERCENTAGE 
                     from SALARYMONTHLY S,Grades G,DESIGNATION D, SalaryMonthlyDetail Sd,
                     CRG CC,EMPCOSTCENTER EMPC 
                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                     AND G.GRADEID=S.GRADEID AND D.DESIGNATIONID=S.DESIGNATIONID AND S.SalaryMonth=%d
                     and Sd.ItemGroup IN (1, 8) AND S.EmployeeID IN(%q)
                     And S.EMPLOYEEID=EMPC.EMPLOYEEID AND EMPC.COSTCENTERID=CC.CRGID
                     group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name 
                     ,CC.DESCRIPTION ,EMPC.PERCENTAGE,S.LOCATIONID
                     UNION
                     select S.EmployeeID, -Sum(sd.changedamount)* EMPC.PERCENTAGE/100 Amount,S.LOCATIONID,G.DESCRIPTION GName,
                     G.Code GCode,G.sequenceNo,D.Name DName,CC.DESCRIPTION CRGDes,EMPC.PERCENTAGE
                     from GRADES G,DESIGNATION D,SALARYMONTHLY S, SalaryMonthlyDetail Sd,CRG CC,EMPCOSTCENTER EMPC 
                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                     AND S.SalaryMonth=%d AND G.GRADEID=S.GRADEID AND D.DESIGNATIONID=S.DESIGNATIONID 
                     and Sd.ItemGroup IN (2) AND S.EmployeeID IN(%q) 
                     And S.EMPLOYEEID=EMPC.EMPLOYEEID AND EMPC.COSTCENTERID=CC.CRGID
                     group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name,CC.DESCRIPTION,EMPC.PERCENTAGE,S.LOCATIONID 
                     ) A, Employee E where A.EmployeeID = E.EmployeeID 
                     group by E.EmployeeID,E.EmployeeNo, E.Name,A.GName,A.SequenceNo,A.GCode,E.DESIGNATIONID,A.CRGDes,A.LOCATIONID,
                     A.PERCENTAGE,E.DEPARTMENTID,E.GLOBALID order by E.EmployeeNo", dSMonthDate, sEmpID, dSMonthDate,
                     sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryGross);

                 tempdataset.Tables[0].TableName = "TotalGross";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sFestiveBonus = SQLParser.MakeSQL(
                     @"Select E.EmployeeNo, E.Name,Sum(A.amount) FestivalBonus,A.LOCATIONID, E.BRANCHID,E.DESIGNATIONID, E.DEPARTMENTID 
                             from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID  from SALARYMONTHLY S, SalaryMonthlyDetail Sd 
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d 
                             and Sd.ItemGroup IN (1, 8) and ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID  IN(%q) group by S.EmployeeID,S.LOCATIONID 
                             UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d  
                             and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID) A, Employee E  
                             where A.EmployeeID = E.EmployeeID   group by E.EmployeeNo, E.Name,A.LOCATIONID, E.BRANCHID,E.DESIGNATIONID,E.DEPARTMENTID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sFestiveBonus);

                 tempdataset.Tables[0].TableName = "FestivalBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sPerformanceBonus = SQLParser.MakeSQL(
                     @"Select E.EmployeeNo, E.Name,Sum(A.amount) PerformBonus,A.LOCATIONID,E.DESIGNATIONID, E.DEPARTMENTID 
                             from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID  
                             from SALARYMONTHLY S, SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) and ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID  IN(%q) group by S.EmployeeID,S.LOCATIONID 
                             UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d  
                             and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113) 
                             AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID) A, Employee E  
                             where A.EmployeeID = E.EmployeeID   group by E.EmployeeNo, E.Name,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sPerformanceBonus);

                 tempdataset.Tables[0].TableName = "PerformanceBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var SCoPFContri = SQLParser.MakeSQL(
                     @"Select E.EmployeeNo, E.Name,Sum(A.amount) CoPFContri,A.LOCATIONID,E.DESIGNATIONID,
                                 E.DEPARTMENTID from( select S.EmployeeID,
                                 Sum(sd.changedamount) Amount,S.LOCATIONID 
                                 from SALARYMONTHLY S, SalaryMonthlyDetail Sd
                                 where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d
                                 and Sd.ItemGroup IN (3) AND S.EmployeeID IN(%q) AND Sd.ITEMCODE  in(-128)
                                 group by S.EmployeeID,S.LOCATIONID
                                 ) A, Employee E 
                                 where A.EmployeeID = E.EmployeeID  
                                 group by E.EmployeeNo, E.Name,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(SCoPFContri);

                 tempdataset.Tables[0].TableName = "CoPFContribution";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var queryTotalDeduction = SQLParser.MakeSQL(@"select E.EmployeeNo, E.Name, Sum(A.amount) 
                 DeductionAmount,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID  
                 from ( select S.EmployeeID, Sum(sd.changedamount) Amount,S.LOCATIONID 
                 from SALARYMONTHLY S,SalaryMonthlyDetail Sd where S.SalaryMonthlyID=Sd.SalaryMonthlyID  
                 AND S.SalaryMonth=%d and Sd.ItemGroup IN (2,3) 
                 AND S.EmployeeID IN(%q) group by S.EmployeeID,S.LOCATIONID)A, Employee E 
                 where A.EmployeeID = E.EmployeeID  
                 group by E.EmployeeNo, E.Name,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID order by E.EmployeeNo",
                     dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryTotalDeduction);

                 tempdataset.Tables[0].TableName = "TotalDeduction";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetIncrement(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var queryGross = SQLParser.MakeSQL(
                     @"Select distinct E.EMPLOYEEID,E.EmployeeNo, E.Name,Sum(A.amount) GrossAmount,A.LOCATIONID,
                         E.DESIGNATIONID, E.DEPARTMENTID,A.CRGDes,A.CRGID,A.PERCENTAGE  
                         from( select S.EmployeeID,Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 amount,
                         CC.DESCRIPTION CRGDes,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID
                         from SALARYMONTHLY S, SalaryMonthlyDetail Sd,SALARYEMPCOSTCENTER SEMPCC,CRG CC
                         where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) 
                         And S.EMPLOYEEID=SEMPCC.EMPLOYEEID AND CC.CRGID=SEMPCC.COSTCENTERID
                         AND S.EmployeeID IN(%q)
                         group by S.EmployeeID,CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID 
                         UNION select S.EmployeeID, -Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 amount,CC.DESCRIPTION CRGDes,CC.CRGID, 
                         SEMPCC.PERCENTAGE,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd,SALARYEMPCOSTCENTER SEMPCC,CRG CC  
                         where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d and Sd.ItemGroup IN (2) 
                         And S.EMPLOYEEID=SEMPCC.EMPLOYEEID AND CC.CRGID=SEMPCC.COSTCENTERID
                         AND S.EmployeeID IN(%q)
                         group by S.EmployeeID,CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID) A, 
                         Employee E  where A.EmployeeID = E.EmployeeID   
                         group by E.EMPLOYEEID,E.EmployeeNo, E.Name,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID,
                         A.CRGDes,A.PERCENTAGE,A.CRGID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryGross);

                 tempdataset.Tables[0].TableName = "TotalGross";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var queryBasic = SQLParser.MakeSQL(@"Select E.EMPLOYEEID,E.EmployeeNo, E.Name,A.amount BasicAmount,
                                     A.LOCATIONID,E.DESIGNATIONID, E.DEPARTMENTID ,A.CRGDes,A.CRGID,A.PERCENTAGE 
                                     from( select S.EmployeeID,Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 Amount,CC.DESCRIPTION CRGDes,CC.CRGID , 
                                     SEMPCC.PERCENTAGE,S.LOCATIONID from SALARYMONTHLY S, SalaryMonthlyDetail Sd ,SALARYEMPCOSTCENTER SEMPCC,CRG CC  
                                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d 
                                     and Sd.ItemGroup IN (1, 8) and ITEMID in (-101) And S.EMPLOYEEID=SEMPCC.EMPLOYEEID 
                                     AND CC.CRGID=SEMPCC.COSTCENTERID AND S.EmployeeID IN(%q) 
                                     group by S.EmployeeID, CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID UNION select S.EmployeeID, 
                                     -Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 amount,CC.DESCRIPTION CRGDes,CC.CRGID,
                                     SEMPCC.PERCENTAGE,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd ,SALARYEMPCOSTCENTER SEMPCC,CRG CC 
                                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d 
                                     and Sd.ItemGroup IN (2) AND ITEMID  in (-101) AND S.EmployeeID IN(%q) 
                                     group by S.EmployeeID,CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID)A,
                                     Employee E  where A.EmployeeID = E.EmployeeID   
                                     group by E.EMPLOYEEID,E.EmployeeNo, E.Name,A.LOCATIONID,A.amount,
                                     E.DESIGNATIONID,E.DEPARTMENTID ,A.CRGDes,A.PERCENTAGE,A.CRGID
                                     order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(queryBasic);

                 tempdataset.Tables[0].TableName = "Basic";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var sFestiveBonus = SQLParser.MakeSQL(@" Select E.EmployeeNo, E.Name,Sum(A.amount) FestivalBonus,
                             A.LOCATIONID,E.DESIGNATIONID, E.DEPARTMENTID,A.CRGDes,A.CRGID,A.PERCENTAGE 
                             from( select S.EmployeeID, Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 Amount,CC.DESCRIPTION CRGDes,CC.CRGID,
                             SEMPCC.PERCENTAGE,S.LOCATIONID from SALARYMONTHLY S, SalaryMonthlyDetail Sd ,SALARYEMPCOSTCENTER SEMPCC,CRG CC
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d and Sd.ItemGroup IN (1, 8) 
                             and ITEMID in (4) AND ITEMCODE in(-113) And S.EMPLOYEEID=SEMPCC.EMPLOYEEID AND CC.CRGID=SEMPCC.COSTCENTERID
                             AND S.EmployeeID  IN(%q)
                             group by S.EmployeeID,CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID UNION select S.EmployeeID, 
                             -Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 Amount,CC.DESCRIPTION CRGDes,CC.CRGID,SEMPCC.PERCENTAGE 
                             ,S.LOCATIONID from SALARYMONTHLY S,SalaryMonthlyDetail Sd,SALARYEMPCOSTCENTER SEMPCC,CRG CC  
                             where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                             AND S.SalaryMonth=%d  and Sd.ItemGroup IN (2) AND ITEMID in (4) AND ITEMCODE in(-113)
                             And S.EMPLOYEEID=SEMPCC.EMPLOYEEID AND CC.CRGID=SEMPCC.COSTCENTERID 
                             AND S.EmployeeID IN(%q) 
                             group by S.EmployeeID,CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID ) A, Employee E  where A.EmployeeID = E.EmployeeID   group by E.EmployeeNo, E.Name, 
                             A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID,A.CRGDes,A.PERCENTAGE,A.CRGID 
                             order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(sFestiveBonus);

                 tempdataset.Tables[0].TableName = "FestivalBonus";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

                 var SCoPFContri = SQLParser.MakeSQL(
                     @" Select E.EmployeeNo, E.Name,Sum(A.amount) CoPFContri,A.LOCATIONID,E.DESIGNATIONID,
                     E.DEPARTMENTID,A.CRGDes,A.CRGID,A.PERCENTAGE from( select S.EmployeeID,
                     Sum(sd.changedamount)*SEMPCC.PERCENTAGE/100 Amount,CC.DESCRIPTION CRGDes,
                     CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID 
                     from SALARYMONTHLY S, SalaryMonthlyDetail Sd,SALARYEMPCOSTCENTER SEMPCC,CRG CC
                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth=%d
                     and Sd.ItemGroup IN (3) And S.EMPLOYEEID=SEMPCC.EMPLOYEEID AND CC.CRGID=SEMPCC.COSTCENTERID
                     AND S.EmployeeID IN(%q)
                     group by S.EmployeeID,CC.DESCRIPTION,CC.CRGID,SEMPCC.PERCENTAGE,S.LOCATIONID
                     ) A, Employee E 
                     where A.EmployeeID = E.EmployeeID  
                     group by E.EmployeeNo, E.Name,A.LOCATIONID,E.DESIGNATIONID,E.DEPARTMENTID,
                     A.CRGDes,A.PERCENTAGE,A.CRGID order by E.EmployeeNo",
                     dSMonthDate, sEmpID, dSMonthDate, sEmpID);

                 tempdataset = tc.ExecuteDataSet(SCoPFContri);

                 tempdataset.Tables[0].TableName = "CoPFContribution";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetADHeadReport(TransactionContext tc, DateTime dSMonthDate, string checkItem,
             string itemcode)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var sAllowanceDeduct = SQLParser.MakeSQL(
                     "select S.EMPLOYEEID,S.LOCATIONID,Sd.DESCRIPTION,Sum(Sd.CHANGEDAMOUNT) Amount"
                     + " from SALARYMONTHLY S,SALARYMONTHLYDETAIL Sd"
                     + " where  S.SALARYMONTHLYID=SD.SALARYMONTHLYID AND S.SalaryMonth=%d %q) %q)"
                     + " group by S.EMPLOYEEID,S.LOCATIONID,Sd.DESCRIPTION",
                     dSMonthDate, checkItem, itemcode);

                 tempdataset = tc.ExecuteDataSet(sAllowanceDeduct);

                 tempdataset.Tables[0].TableName = "HeadAllowanceDeduct";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetGrandFatherData(TransactionContext tc, int payrollTypeID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var sGrandFatherData = SQLParser.MakeSQL(
                     @"SELECT e.EMPLOYEENO, e.NAME, dep.DESCRIPTION DEPARTMENT, deg.NAME DESIGNATION, g.CODE GRADE, e.JOININGDATE, bat.ALLOWANCE, 
                                         bat.BONUS, bat.GRATUITY, bat.LEAVE, bat.opi, bat.PENSION FROM BATBGRANDFATHERTAGING bat
                                         LEFT JOIN EMPLOYEE e ON e.EMPLOYEEID= bat.EMPLOYEEID
                                         LEFT JOIN GRADES g ON g.GRADEID= e.GRADEID
                                         LEFT JOIN DEPARTMENT dep ON dep.DEPARTMENTID=e.DEPARTMENTID
                                         LEFT JOIN DESIGNATION deg ON deg.DESIGNATIONID=e.DESIGNATIONID
                                         WHERE e.PAYROLLTYPEID=%n ORDER BY e.EMPLOYEENO asc", payrollTypeID);

                 tempdataset = tc.ExecuteDataSet(sGrandFatherData);

                 tempdataset.Tables[0].TableName = "GrandFatherData";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }


         internal static DataSet GetEmpJoiningInsuranceData(TransactionContext tc, DateTime fromDate, DateTime toDate,
             int payrollTypeID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var sInsuranceData = SQLParser.MakeSQL(
                     @"SELECT e.EMPLOYEENO, e.NAME, e.BIRTHDATE,e.JOININGDATE, D.Name Designation, g.Code Grade, g.InsuranceCoverage FROM EMPLOYEE e 
                                                         LEFT JOIN Designation d ON d.DESIGNATIONID=e.DESIGNATIONID
                                                         Left Join Grades g ON g.GradeID=e.GradeID
                                                         WHERE e.JOININGDATE BETWEEN %d AND %d AND e.PayrollTypeID = %n",
                     fromDate, toDate, payrollTypeID);

                 tempdataset = tc.ExecuteDataSet(sInsuranceData);

                 tempdataset.Tables[0].TableName = "InsuranceData";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetEmpPromotionInsuranceData(TransactionContext tc, DateTime fromDate, DateTime toDate,
             int payrollTypeID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var sInsuranceData = SQLParser.MakeSQL(
                     @"SELECT e.EMPLOYEENO, e.NAME, e.BIRTHDATE,e.JOININGDATE, D.Name Designation, g.Code Grade, g.InsuranceCoverage FROM EMPLOYEE e 
                                                         LEFT JOIN Designation d ON d.DESIGNATIONID=e.DESIGNATIONID
                                                         Left Join Grades g ON g.GradeID=e.GradeID
                                                         WHERE e.JOININGDATE BETWEEN %d AND %d AND e.PayrollTypeID = %n",
                     fromDate, toDate, payrollTypeID);

                 tempdataset = tc.ExecuteDataSet(sInsuranceData);

                 tempdataset.Tables[0].TableName = "InsuranceData";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }

         internal static DataSet GetEmpDisConInsuranceData(TransactionContext tc, DateTime fromDate, DateTime toDate,
             int payrollTypeID)
         {
             var rootDataset = new DataSet();
             var tempdataset = new DataSet();
             try
             {
                 var sInsuranceData = SQLParser.MakeSQL(
                     @"SELECT e.EMPLOYEENO, e.NAME, e.BIRTHDATE,elc.EFFECTDATE, D.Name Designation, g.Code Grade, g.InsuranceCoverage FROM EMPLIFECYCLE elc 
                                                         Inner join Employee e on e.Employeeid=elc.EmployeeID
                                                         LEFT JOIN Designation d ON d.DESIGNATIONID=e.DESIGNATIONID
                                                         Left Join Grades g ON g.GradeID=e.GradeID
                                                         WHERE elc.EFFECTDATE BETWEEN %d AND %d and elc.Status = %n AND e.PayrolltypeID=%n",
                     fromDate, toDate, EnumEmployeeStatus.Discontinued, payrollTypeID);

                 tempdataset = tc.ExecuteDataSet(sInsuranceData);

                 tempdataset.Tables[0].TableName = "InsuranceData";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }

             return rootDataset;
         }


         internal static DataSet GetOPIHeadReport(TransactionContext tc, DateTime dSMonthDate, string checkItem)

         private ataSet root

         private a
             ase
                 = new
                     D

         private a
             ta

         private ataSet temp

         private a
             ase
                 = new
                     D

         private a
             ta //string sOPI = SQLParser.MakeSQL("Select D.EmployeeID,D.LocationID,I.Description,(I.ChangeNetAmount)as Amount from OPIProce               //           + " OPIProcessDetail D, OPIProcessDetailItem I W               //           + " O.OPIMonth=%d AND I.OPIProcessDetailID=D.OPIProcessDet               //           + " AND  O.OPIProcessID= D.OPIProcessI               //           + " ORDER BY  D.OPIProcessDetailID, OPIItemID", dSMonthDate, checI              

         private stri
             g

         sOPI =

         private SQ
             L

         private Parser.
             M
             akeSQL("Select D.EmployeeID,D.LocationID,I.Description,(I.ChangeNetAmount)as Amount,oi.Sequ

         nc " from OPIProcess O, OPIProcessDetail D, OPIProcessDetailItem I,OpiIt
         m " Where  O.OPIMonth=%d AND I.OPIProcessDetailID=D.OPIProcessDet
         il " AND  O.OPIProcessID= D.OPIProcess
         D " AND I.OPIItemID=oi.OpiI
         em " ORDER BY  D.OPIProcessDetailID, I.OPI

         private I
             emID", dSMo

         private n
             hDate, ch

         private e
             cI

         private temp
             a

         as

         private e
             t = tc.Execute

         private D
             ataS

         private e
             ts

         private temp
             d

         private ataset
             .
             T
             a

         private b
             les[0].

         private Ta
             l

         Name = "H
         private ea root

         D
             ataset
             .
             Tab

         l
             es.Add(temp
                 d

         private ataset
             .
             T
             a

         private b
             les[
                     0
                 ]
                 .

         Co

         catch (Ex
         ep
         private ti
             th

         ow

         private new Ex
             c

         private ep
             t

         private ion(ex.
             M
             es
             return

         private root
             Dataset;
     }

     internal static DataSet GetBranchWiseSalaryDetails(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
     {
     internal Data
         et

     internal ootDatas
         t = new Dat

     internal a
         et();

     DataSet =

     internal new
         ataSet();
         try

     internal stri
         g

     sSQ
     =

     internal SQLP
         a

     internal r
         se

     internal sele pt

     internal edamou
         t)

     internal A
         o

     nt,

     internal S.DEPA
         R

     TMENTID
     ,
     S.LOCATIONID,
     sd.ItemGroup,sd.ITEMCODE,

     internal sd.ITEMID
         from

     internal SALARYMONTHLYDETAIL sd
     internal inner join
     internal SALARYMONTHLY S on sd.SALARYMONTHLYID=

     internal S.SALARYMONTHLYID
         where S.SalaryMonth= %
     internal d and sd.ITEMGROUP in

     internal (1, 2, 8)
         AND

     internal sd.ItemCode not in

     internal (-133)
         AND

     internal S.EmployeeID IN(%q)
     internal group by sd.DESCRIPTION,S.DEPARTMENTID,S.LOCATIONID,sd.ITEMCODE,sd.ITEMGROUP,

     internal sd.ITEMID
         order by S.LOCATIONID,S.DEPARTMENTID",
     dSMonthDate, sEmpID);
     internal et(sSQL);
     Tables[0].

     internal T
         b

     internal eN
         a

     me = "Branch";

     internal set.Tables.
         A
         dd(tem
             p

     internal d
         a

     t
         aset.Tabl

     s
     0].

     internal Copy(
         ))
         catch

     (
     Exc
     e
     internal ption ex)
     {
         ow on(ex
             M
             essage);


         otDat
             set
     }

     internal static DataSet GetTotalBranchWiseOPI(TransactionContext tc, string str, DateTime dSMonthDate,
         string sEmpID)

     internal DataSet root
     ataset
     =

     internal new D
         taSet();

     internal D
         ataSet tempdataset
     =

     internal n
         w

     internal Data
         et(
         )
         try

     {
         = SQLPa
         ser.MakeSQL
             @
         SE
             ECT opd
             .
             D
             EP d.LOCAT
             ONID, oi.OPI
             t
         mId
             me O op ount
             F
         ROM OPI
         I
         tem oi, OPIProcess op, OPIProcessDetail opd, OPIProcessDetailItem opdi
             WHERE op.OPIMonth >= %d AND op.OPIMonth <=%d
             AND opd.EmployeeId IN(%
         q)
         AND op.OPIProcessID = opd.OPIProcessID
         AND opd.OPIProcessDetailId = opdi.OPIProcessDetailId AND oi.OPIItemId = opdi.OPIItemId
         GROUP BY opd.LOCATIONID,opd.DEPARTMENTID, oi.OPIItemId, oi.Name
             ORDER BY opd.LOCATIONID,opd.DEPARTMENTID",
         PayrollGlobalFunctions.PayrollFirstDateOfMonth(dSMonthDate), PayrollGlobalFunctions.PayrollLastDateOfMonth(
             dSMonthDate), sEmpI
             D) tempdataset = tc.Exe
         c
         uteDataSet(sSQL);


         t
             e
         pdataset.Tables[0].Tab
         l
             eName = "BranchOPI";


         rootDa
         t
             as mpdataset.T
         b
         es
         [
             0].Copy());


         atch(Excep
         t
             ion ex
             )


         {
             eption(ex.M
             e
                 ssage)
             ;
         }


         ret
             u
         r
             n
         r
     }

     internal static DataSet GetTotalOPIForBranch(TransactionContext tc, string oPIItem, DateTime _SalaryMonth,
         string sEmpID)
     {
         Da t

         s tr ng sQuary =
             SQLParser.akeSQL(@"SELECT  
         pd.DEP
         RTMENTI
         ,opd.LocationID, 


                      Sum(o
         di
         .
         etAmou
         t) OPIA
         m
         unt FROM
           OPIItem oi
         ,
         OPIPro
         ess op
         , OPIProcess        


         P
         Pro
         essDeta
         i
         l
         It        RE op.
         PIMont

         = %d AND 
         o
         p.OPIMo
         n
         th <= %d   
                 AND opd.EmployeeId IN(%q)  
                 AND op.OPIProcessID = opd.OPIProcessID  
                 AND opd.OPIProcessDetailId = opdi.OPIProcessDetailId AND oi.OPIItemId = opdi.OPIItemId   
                 GROUP BY opd.LocationID,opd.DEPARTMENTID 
                 ORDER BY  opd.LocationID,opd.DEPARTMENTID",
                 PayrollGlobalFunctions.PayrollFirstDateOfMonth(_SalaryMonth),
                 PayrollGlobalFunctions.PayrollLastDateOfMonth(_SalaryMonth), sEmpID, oPIItem);

         oTotalOPI = tc.ExecuteDataSet(sQuary);

         ret
             ur
     }

     internal static DataSet GetBranchWiseEmpDeduction(TransactionContext tc, DateTime _SalaryMonth, string sEmpID)
     {
         Da
             t
         Set roo
         t
             Dt ataSet();


         DataSet
             tempda
         t
             ae Set();


         try
         {
             tring s
                 QL = SQLParser.MakeSQL(@"
         S
         elect SMD.DESCRIPT
         ON
         ,
         UM(SMD.C
         ANGEDAMOUNT)

         mount 


                    S        ,SM.DEP
         RTMENTID,SM
         L
         CAT
         ONID,SM
         D
         .
         IT        MCODE 



          fr
         m SALAR
         Y
         M
         ON        MD,S         S           whe
         e SM
         E
         PLOYEEID 
         i
         n(%q) A
         N
         D SMD.ITEMGROUP IN(3)
                 AND SM.SALARYMONTH=%d AND SM.SALARYMONTHLYID=SMD.SALARYMONTHLYID 
                 AND SMD.CHANGEDAMOUNT<>0 GROUP by SMD.ITEMGROUP,SMD.ITEMID,SMD.ITEMCODE,
                 SMD.DESCRIPTION, SM.DEPARTMENTID,SM.LOCATIONID
                 order by SM.LOCATIONID,SM.DEPARTMENTID asc",
                     sEmpID, _SalaryMonth);
             tempdataset = tc.ExecuteDataSet(sSQL);

             tempdataset.Tables[0].TableName = "BranchDeduction";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
         }

         (Excep
         t
             on ex)


         throw
             n
         w
             E
         xception(ex.Me
         s
             sage
             )
         ;
         re
             t
         urn ro
         o
             t
         D
         a
             taset;
     }

     internal static DataSet GetCCWiseFinance(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
     {
         D
             at ae Set()


         Da
             t
         t
             tr y


         {
             G QLP ar ser
             Mak eS QL(@ "s        elect

             o,SUM(A.amount) Am
                 unt, A.
             EPARTME
                 TID,
                 A.LOCATIONID,A
                 It
             e
                 Group, A.
             TEMCODE,A.I
             T
                 MID, A.
             RGID,A
                 .CostCenter
                 fro
                 (Select S.

             O
             ATI
                 NID, S.D
                 E
             P
                 AR escript
                 on, (sd.CHAN
             E
                 AMO
             NT* EMPC
             C
                 .PE )as mGroup
             sd.ITEMCO
                 E
             sd.ITEMID
                 ,
             CC.CRGI
                 D, CC.Description CostCenter
             from SALARYMONTHLYDETAIL sd ,SALARYMONTHLY S, SALARYEMPCOSTCENTER EMPCC,CRG CC
             Where sd.SALARYMONTHLYID = S.SALARYMONTHLYID
             AND S.SALARYMONTHLYID = EMPCC.SALARYMONTHLYID
             AND EMPCC.COSTCENTERID = CC.CRGID
             AND S.SalaryMonth = %d and sd.ITEMGROUP in(1, 8)
             AND sd.ItemCode not in(-133) AND S.EmployeeID IN(%
             q))A
                 group by A.Description,A.DEPARTMENTID,A.LOCATIONID,A.ItemGroup,A.ITEMCODE,
             A.ITEMID,A.CRGID,A.CostCenter
                 order by A.LOCATIONID,A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(GrossItem);
             tempdataset.Tables[0].TableName = "GrossItem";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

             var DeductItem = SQLParser.MakeSQL(@"select A.Description,SUM(A.amount) Amount,A.DEPA
         R
         MENTID,




                   ItemGroup,A
         I
         EM
         C
         ODE,A.ITEMID,A
         .
         CRGID,A.C
         o
         st               from

         (Selec
         t

         S
         .
         LOCATIONI
         ,
         .DEPARTMENT
         ID        (sd.CHANGED
         A
         MOUNT*
         E
         MPC
         C
         .PERCENTAGE
         /
         100)as

         a
         m
         o
         unt,




                   emGrou
         ,sd.ITEMCO
         E
         sd.ITEMID
         ,
         CC.CRGI
         D
         ,CC.Description CostCenter
                 from SALARYMONTHLYDETAIL sd ,SALARYMONTHLY S,SALARYEMPCOSTCENTER EMPCC,CRG CC
                 Where sd.SALARYMONTHLYID=S.SALARYMONTHLYID
                 AND S.SALARYMONTHLYID=EMPCC.SALARYMONTHLYID
                 AND EMPCC.COSTCENTERID=CC.CRGID AND sd.CHANGEDAMOUNT<>0
                 AND S.SalaryMonth=%d and sd.ITEMGROUP in(3) AND S.EmployeeID IN(%q))A
                 group by A.Description,A.DEPARTMENTID,A.LOCATIONID,A.ItemGroup,A.ITEMCODE,
                 A.ITEMID,A.CRGID,A.CostCenter
                 order by A.LOCATIONID,A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(DeductItem);
             tempdataset.Tables[0].TableName = "DeductItem";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

             var opiItem = SQLParser.MakeSQL(@"select A.Description,SUM(A.amount) Amount,A.DEPAR
         T
         ENTID,




                   RGID,A.Cost
         e
         te
         r
         ,A.SequenceNO




                   pd.LOCATION
         I
         D,opd.
         D
         E
         P
         A
         RTMENTID,
         p
         i.Descriptio
         n,        EMPCC.PERCE
         N
         TAGE/1
         0
         0)a
         s
          amount,







            C
         C
         .
         C
         RI         CostC
         nter,oi
         S
         quenceNO




                from OPIItem oi, OPIProcess op, OPIProcessDetail opd,SALARYEMPCOSTCENTER EMPCC,
                 CRG CC,OPIProcessDetailItem opdi
                 Where  op.OPIMonth == %d AND opd.EmployeeId IN(%q)
                 AND op.OPIProcessID = opd.OPIProcessID 
                 AND opd.EmployeeId  = EMPCC.EMPLOYEEID AND EMPCC.COSTCENTERID=CC.CRGID
                 AND opd.OPIProcessDetailId = opdi.OPIProcessDetailId 
                 AND oi.OPIItemId = opdi.OPIItemId )A  
                 group by A.Description,A.DEPARTMENTID,A.LOCATIONID,A.CRGID,A.CostCenter,A.SequenceNO
                 order by A.LOCATIONID,A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(opiItem);
             tempdataset.Tables[0].TableName = "OPIItem";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
         }
         catch (Exception ex)
         {
             throw new Exception(ex.Message);
         }


         aset;
     }

     internal static DataSet GetNewCCWiseSalaryDetails(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
     {
         DataSet root
         D
             ataset
                 =
                 n D
             a
         taSet
             t
         e
             m
         p
             dataset =
                 n
         w DataSet
         () y


         {
             st
                 r
             ing Gr
             o
                 s
             s
             I
                 tem
                     =
                     S
             QL QL.Empl
             y
                 eeNo, A.N
                 me, A, A A.Ite
                 Cod, A.ItemI
                 D,
                 A
                     .
             ItemGro
                 u
             p

             SUM(A.monut) Amou
             n
                 AE, A.DEPARTMENTID,
                 .Locat
                 on

             from(select

             E.EmployeeNo, E.Na
                 e,
                 d.ItemGr
                 up, sd.ItemC
             o
                 e,
                 sd.It criptio, sd.change
                 a
             oun
                 * SEMCC.P
             E
             RC monut,
                 SE
             CC.PERC
                 E
             N
                 TA sign RI
                 .EPARTMENT
             I
                 D, CC.D
                 E
             SCRIPTION CRGDes, CC.CRGID
                 from CRG CC, LOCATION L,SALARYEMPCOSTCENTER SEMCC, DESIGNATION D,Employee E,
                 SALARYMONTHLY S, SalaryMonthlyDetail Sd where
             S.EMPLOYEEID = SEMCC.EMPLOYEEID AND CC.CRGID = SEMCC.COSTCENTERID
             AND D.DESIGNATIONID = E.DESIGNATIONID AND E.employeeID = S.EmployeeID
             AND S.SalaryMonthlyID = Sd.SalaryMonthlyID AND SD.SALARYMONTHLYID = SEMCC.SALARYMONTHLYID
             AND S.SalaryMonth = %d and Sd.ItemGroup in(8) AND S.LOCATIONID = L.LOCATIONID
             AND S.EmployeeID IN(%
             q)
             union select E.EmployeeNo, E.Name, sd.ItemGroup,sd.ItemCode, sd.ItemID,
             sd.Description,sd.changedamount * SEMCC.PERCENTAGE / 100 amonut,
             SEMCC.PERCENTAGE, D.Name Designation, L.DESCRIPTION Location,
                 S.DEPARTMENTID,CC.DESCRIPTION CRGDes, CC.CRGID
                 from CRG CC, LOCATION L,
             SALARYEMPCOSTCENTER SEMCC, DESIGNATION D,Employee E, SALARYMONTHLY S,
             SalaryMonthlyDetail Sd where S.EMPLOYEEID = SEMCC.EMPLOYEEID
             AND CC.CRGID = SEMCC.COSTCENTERID AND D.DESIGNATIONID = E.DESIGNATIONID
             AND E.employeeID = S.EmployeeID AND SD.SALARYMONTHLYID = SEMCC.SALARYMONTHLYID
             AND S.SalaryMonthlyID = Sd.SalaryMonthlyID AND S.SalaryMonth = %d
                 and Sd.ItemGroup in(1) AND S.LOCATIONID = L.LOCATIONID
             AND S.EmployeeID IN(%
             q) ) A
                 group by A.EmployeeNo, A.Name,A.Designation,A.ItemGroup,A.Location,A.CRGID,
             A.CRGDes, A.ItemCode, A.ItemID, A.Description ,A.PERCENTAGE,A.DEPARTMENTID,A.Location
                 order by A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID, dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(GrossItem);
             tempdataset.Tables[0].TableName = "GrossItem";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
         }
         catch (Exception ex)
         {
             throw new Exception(ex.Message);
         }
         return rootDataset;
     }

     internal static DataSet GetCCWiseOPIDetails(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
     {
         DataSe
             t
         rootDataset

         new D
         a
             tS DataSet t
         m
             da
         t
             aset = new Dat
         a
         Set();


         {
             string
             o
                 iItem = SQL
             Pa elect disti
                 n
             ct A.D
                 e
             scr
             i
                 ption, A.amo
                 u
             nt Amo
             u
             n
                 t,
                 A.DE
                 P
             A
                 R
             TM gn

             A.LOC
                 TI
             ON os ceNO,
                 .EM
                 LOYEENO,
                 A
                     .
             NA
             M
                 E, A.PER
                 C
             EN(Selec
             opd.DEPART
                 MENTID, opdiDescription, (opdi
             NetAmo
             nt * EMPC
                 .PERCENTAGE / 100)as
             a
                 mount,
                 CC.CRGID
             CC.Descript
                 i
             n Cost
                 enter,
                 oi.SequenceN ION LOC
                 TION,
                 E.E
                 M
             P
                 LO, D.NAME
                 Designation
             E
                 PCC
             PERCENT
                 A
             G
             E
                 o, OPIP
             ocessDe
                 a
             l opd, SAL
             A
                 RYEMPCO
             S
             TCENTER EMPCC,
                 CRG CC,OPIProcessDetailItem opdi, EMPLOYEE E,LOCATION L, DESIGNATION D
                 Where op.OPIMonth =  %d AND opd.EmployeeId IN(%
             q)
             AND op.OPIProcessID = opd.OPIProcessID AND opd.EmployeeId = E.EmployeeId
             AND opd.EmployeeId = EMPCC.EMPLOYEEID AND EMPCC.COSTCENTERID = CC.CRGID
             AND opd.OPIProcessDetailId = opdi.OPIProcessDetailId AND E.LOCATIONID = L.LOCATIONID
             AND oi.OPIItemId = opdi.OPIItemId AND opd.DESIGNATIONID = D.DESIGNATIONID)A
                 order by A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(opiItem);
             tempdataset.Tables[0].TableName = "OPIItem";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
         }
         catch (Exception ex)
         {
             throw new Exception(ex.Message);
         }
         return rootDataset;
     }

     internal static DataSet GetCCWiseSummary(TransactionContext tc, DateTime dSMonthDate, string sEmpID)
     {
         ataS
             e
         t rootDat
             set
                 = n
         e
             w DataSet();


         Data
             S
         et ew Da
             aS
         t
         (
         );


         try

         {
             ross = SQLP
             r
             er
                 .MakeSQL(@"Sele
         c
         t A.Cos
         t
         Ce        EPARTMENTID
         ,
         E.Role
         ,
         s
         u
         m
         (A.amount
         a
          Amount

                        from( 
         s
         elect 
         S
         .Em
         p
         loyeeID,Sum
         (
         sd.cha
         n
         g
         e
         d
         amou
         n
         t
         )
         *E        AG        ,




                   TM        TION 
         ost
         enter,CC.
         C
         RG
         I
         D


                             YMONTH
         Y S,SalaryM
         onthlyDetai Sd,SALARYEMPCOST
         ENTER 
         MPCC,CR
          CC   


                       wher
          S
         .
         alaryMon
         hlyID=Sd.Sa
         l
         ryMont
         lyID A
         ND S.SalaryM               


         nd 
         d.ItemG
         r
         o
         up        ND S.SA
         ARYMONTHLYI
         =
         MPC
         .SALARY
         M
         O
         NT                              NTERID
         CC.CRGID A
         D
         S.Employe
         e
         ID IN(%
         q
         )
                         group by S.EmployeeID,S.DEPARTMENTID,CC.DESCRIPTION,CC.CRGID,EMPCC.PERCENTAGE)A,Employee E  
                         where A.EmployeeID = E.EmployeeID   
                         group by A.CostCenter,A.CRGID,A.DEPARTMENTID,E.Role
                         order by A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(totalGross);
             tempdataset.Tables[0].TableName = "TotalGross";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

             var totalOPI = SQLParser.MakeSQL(@"select A.CostCenter,A.CRGID,A.DEPARTMENTID,A.Role,sum(A.amount)as Amount
                         from (select opd.EmployeeID,Sum(opdi.NetAmount)*EMPCC.PERCENTAGE/100 amount,
                         opd.DEPARTMENTID,CC.DESCRIPTION CostCenter,CC.CRGID,E.Role
                         from OPIItem oi, OPIProcess op, OPIProcessDetail opd,SALARYE
         M
         COSTCENTER 
         E
         PCC,


                      CRG CC,O
         I
         ro
         c
         essDetailItem 
         o
         pdi,EMPLOY
         E
         E                   W
         h
         ere  o
         p
         .
         O
         P
         IMonth =%

         ND opd.Emplo
         ye                   



         AND

         op.OPIProce
         s
         sID = 
         o
         p
         d
         .
         OPIP
         r
         o
         c
         es        yeeId=
         .Employe
         I





                AND opd.EmployeeId  = EMPCC.EMPLOYEEID AND EMPCC.COSTCENTERID=CC.CRGID
                         AND opd.OPIProcessDetailId = opdi.OPIProcessDetailId 
                         AND oi.OPIItemId = opdi.OPIItemId
                         group by opd.EmployeeID,EMPCC.PERCENTAGE,opd.DEPARTMENTID,CC.DESCRIPTION,CC.CRGID,E.Role)A
                         group by A.CostCenter,A.CRGID,A.DEPARTMENTID,A.Role
                         order by A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(totalOPI);
             tempdataset.Tables[0].TableName = "TotalOPI";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

             var coContri = SQLParser.MakeSQL(@"Select A.CostCenter,A.CRGID,A.DEPARTMENTID,E.Role,sum(A.amount)as Amount
                         from( select S.EmployeeID,Sum(sd.changedamount)*EMPCC.PERCENTAGE/100 amount,
                         S.DEPARTMENTID,CC.DESCRIPTION CostCenter,CC.CRGID
                         from SALARYMONTHLY S,SalaryMonthlyDetail Sd,SALARYEMPCOSTCENTER EMPCC,CRG

         C   




                   laryMonthly
         D
         Sd
         .
         SalaryMonthlyI
         D
          AND S.S
         a
         la                   




         a
         n
         d Sd.Item
         r
         up IN(3)AN
         D         -128)






                AND 
         S
         .SALAR
         Y
         M
         O
         N
         THLY
         I
         D
         =
         EP        ID




         A
         ND EMPC
         C
         .COSTCENTERID=CC.CRGID AND S.EmployeeID IN(%q)
                         group by S.EmployeeID,S.DEPARTMENTID,CC.DESCRIPTION,CC.CRGID,EMPCC.PERCENTAGE)A,Employee E 
                         where A.EmployeeID = E.EmployeeID  
                         group by A.CostCenter,A.CRGID,A.DEPARTMENTID,E.Role 
                         order by A.CRGID,A.DEPARTMENTID", dSMonthDate, sEmpID);

             tempdataset = tc.ExecuteDataSet(coContri);
             tempdataset.Tables[0].TableName = "CoContri";
             rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
         }
         catch (Exception ex)
         {
             throw new Exception(ex.Message);
         }

         return rootDataset;
     }

     internal static DataSet GetItemWiseSalary(TransactionContext tc, string sEmpID, DateTime _SalaryMonth,
         DateTime toDate, string sSQL)

     internal DataSet ro

     internal o
         t

     internal D
         ataset = new
             Da

     internal t
         aSet();

     internal D
         ataSe

     internal t
         tempdatas

     internal e
         t
             = new Da

     a


     {
         string
         L(@"s
         le
         t

         E.Employee
         N
         o
         ,
         E.Nam
         e
         ,
         S
         .SalaryMonth
         ,
         s
         u
         m(sm









                            from a                   







                   n Employee 
         E
          on S.
         E
         m
         p
         l
         oyeeID=E.
         m
         loyeeID







                  in
         n
         er joi
         n

         S
         a
         lary
         M
         o
         n
         th         o        nthly
         D
         =smd.Sala
         yM
         on                       





               w
         h
         er        ID              


            And
         S.Salar
         Month between %d 
         a
         nd %d







                    g
         r
         up by E.
         mploye
         e
         o,E.Na
         e,S.
         SalaryMonth







                   E.Emplo
         eeNo,S.Sala
         y
         ont
         ", sEmp
         I
             D, yMon

         tempda
             aset =
                 c
         ExecuteDa
             t
         aSet(SS
         a
             lary);
         tempdataset.Tables[0].TableName = "ItemWiseSalary";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
     }

     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }

     return rootDataset;
     }

     internal static DataSet GetEmpIndSalarySheet(TransactionContext tc, string sEmpID, string _months)
     {
     internal at a

     internal Set
         rootD

     internal tas et = new;
         try

     lect
         A
         .Emplo eeNo,
     A.Name,
     .
     internal Ga me, A

     internal D
         N

     internal ry Mo

     internal th
         yeeID

     internal E
         E

     internal m
         ployee o,

     internal E
         .
         N
         a

     me,
     internal E.oi ingD te,
     internal sd.I te
     internal mG r
     up,

     internal s
         d

     ItemCode,

     internal S.S
         a

     internal aryMon
         t

     h
         sd.I

     internal temI
         D, d.Position,

     internal sd.cha
         n

     internal g
         e

     internal d
         amount, G.

     internal E
         CRIPTION GName,

     internal D
         .N GCode, G.

     internal Se
         q

     internal uenceN
         o

     ades
     ,

     internal DESIGNATI
         N

     D,
     internal SA alary

     internal ont
         lyDetail

     internal S
         d

     internal w
         here G.GradID=
     internal S.GradeID AND

     internal D.DESI
         NATIONI
             = E.DESIGNATIONID AND
         E.employeeID=

     internal S.Emp
         oy

     internal e
         ID

     internal AND
         .SalaryMont
         l

     ID=

     internal d.Salar
         y

     M
         on.Salary

     onth in(%
     internal q
         emGrou

     in

     internal (8)
         A

     D sd.Item

     internal C
         ode not
     in
     internal (-133) AND
     internal S.EmployeeID IN(%q)

     internal UNION
         select S.EmployeeID, E.EmployeeNo, E.Name,E.JoiningDate, sd.ItemGroup,sd.ItemCode,S.SalaryMonth,sd.ItemID,
     sd.Description,sd.Position, sd.changedamount,
     internal G.DESCRIPTION GName, D.
     internal Name DName, G.
     internal Code GCode, G.

     internal SequenceNo
         from

     internal Grades G, DESIGNATION D,
     internal Employee E, SALARYMONTHLY S,
     internal SalaryMonthlyDetail Sd
     where G.GradeID=
     internal S.GradeID AND D.DESIGNATIONID=
     internal E.DESIGNATIONID AND E.employeeID=

     internal S.EmployeeID
         AND S.SalaryMonthlyID=
     internal Sd.SalaryMonthlyID AND S.SalaryMonth in(%q) and Sd.ItemGroup in

     internal (1)
         AND

     internal sd.ItemCode not in
     internal (-133) AND
     internal S.EmployeeID IN(%q) )

     internal A
         group by A.EmployeeID, A.EmployeeNo, A.Name,A.GName,A.DName,A.SequenceNo,A.GCode, A.ItemCode,A.SalaryMonth,
     A.ItemID, A.Description,A.Position,
     internal A.JoiningDate order by A.SalaryMonth,A.Position,A.EmployeeNo,A.SequenceNo,A.GCode",
     _months, sEmpID, _months, sEmpID);
     tempdataset = tc.ExecuteDataSet(query1);
     tempdataset.Tables[0].TableName = "GrossItem";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query2 = SQLParser.MakeSQL(
         @"select E.EmployeeNo, E.Name,E.JoiningDate,A.GName,A.GCode,A.SequenceNo,A.DName,'Total Gross' Description,
                                                     Sum(A.amount) amount,A.SalaryMonth  from( select S.EmployeeID, Sum(sd.changedamount) Amount,
                                                     G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName,S.SalaryMonth  
                                                     from SALARYMONTHLY S,Grades G,DESIGNATION D, SalaryMonthlyDetail Sd  
                                                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND G.GRADEID=S.GRADEID AND D.DE
         SI               





           AND 
         S
         .a         and Sd.Ite
         G
         ou
         p
          IN (1, 8) AND

         S.Empl
         o
         ye                   









                   loyeeID,G.D
         E
         SCRIPT
         I
         ON,
         G
         .SequenceNo
         ,
         G.Code
         ,
         D
         .
         N
         ame,
         S
         .
         S
         aa              






                     UNION select S.EmployeeID, -Sum(sd.changedamount) Amount,G.DESCRIPTION GName,
                                                     G.Code GCode,G.sequenceNo,D.Name DName,S.SalaryMonth from GRADES G,DESIGNATION D,SALARYMONTHLY S, SalaryMonthlyDetail Sd  
                                                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth in(%q) AND G.GRADEID=S.GRADEID 
                                                     AND D.DESIGNATIONID=S.DESIGNATIONID  and Sd.ItemGroup IN (2) AND S.EmployeeID IN(%q)  
                                                     group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name,S.SalaryMonth  ) A, Employee E 
                                                     where A.EmployeeID = E.EmployeeID  
                                                     group by E.EmployeeNo, E.Name,A.GName,A.SequenceNo,A.GCode,A.DName,E.JoiningDate,A.SalaryMonth",
         _months, sEmpID, _months, sEmpID);

     tempdataset = tc.ExecuteDataSet(query2);
     tempdataset.Tables[0].TableName = "TotalGross";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query3 = SQLParser.MakeSQL(
         @"select  A.EmployeeNo, A.Name,A.JoiningDate,A.GName,A.GCode,A.SequenceNo,A.DName,  A.Description, 
                                                     SUM(A.changedamount) Amount,A.ItemCode,A.ItemID ,A.SalaryMonth 
                                                     from (select S.EmployeeID, E.EmployeeNo, E.Name,E.JoiningDate,sd.ItemGroup,sd.ItemCode,S.SalaryMonth,  
                                                     sd.ItemID, sd.Description,sd.Position, sd.changedamount,G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName  
                                                     from Grades G,DESIGNATION D,Employe
         e                







                   .GradeID= S
         G
         ad
         e
         ID AND D.DESIG
         N
         ATIONI
         D
         =E        ND E.employ
         e
         eID=S.
         E
         m
         p
         l
         oyeeID 






         A
         ND 

         S.SalaryMon
         t
         hlyID=
         S
         d
         .
         S
         alar
         y
         M
         o
         nh        yMonth
         in(%q)
         a
         d Sd.Item
         G
         roup=3 
         A
         ND S.EmployeeID IN(%q)  
                                                     union select S.EmployeeID, E.EmployeeNo, E.Name,E.JoiningDate,sd.ItemGroup,sd.ItemCode,S.SalaryMonth,  
                                                     sd.ItemID, sd.Description,sd.Position, -sd.changedamount,G.DESCRIPTION GName,G.Code GCode,G.sequenceNo,D.Name DName 
                                                     from Grades G,DESIGNATION D,Employee E, SALARYMONTHLY S, SalaryMonthlyDetail Sd  
                                                     where G.GradeID= S.GradeID AND D.DESIGNATIONID=E.DESIGNATIONID AND E.employeeID=S.EmployeeID 
                                                     AND  S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth in(%q) and Sd.ItemGroup=2 AND S.EmployeeID IN(%q)  ) A 
                                                     group by  A.EmployeeID, A.EmployeeNo, A.Name,A.GName,A.SequenceNo,A.GCode,A.DName,A.SalaryMonth, 
                                                     A.ItemCode, A.ItemID, A.Description,A.Position,A.JoiningDate 
                                                    order by A.SalaryMonth,A.EmployeeNo,A.Position,A.SequenceNo,A.GCode",
         _months, sEmpID, _months, sEmpID);

     tempdataset = tc.ExecuteDataSet(query3);
     tempdataset.Tables[0].TableName = "DeductItem";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query4 = SQLParser.MakeSQL(@"select  A.EmployeeNo, A.Name,A.GName,A.GCode,A.SequenceNo,
                                                     A.DName, A.Description, SUM(A.changedamount) Amount,A.SalaryMonth 
                                                     from ( select S.EmployeeID, E.EmployeeNo, E.Name, sd.ItemGroup,sd.ItemCode,  
                                                     sd.ItemID, sd.Description,sd.Position, sd.changedamount,S.SalaryMonth,
                                                     G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName 
                                                     from Grades G,DESIGNATION D,Employ
         ee               







                   re G.GradeI
         =
         S.
         G
         radeID AND D.D
         E
         SIGNAT
         I
         ON        ID 










                   ployeeID=S.
         E
         mploye
         e
         ID 
         A
         ND S.Salary
         M
         onthly
         I
         D
         =
         S
         d.Sa
         l
         a
         r
         yo              






                    AND S.SalaryMonth in(%q) and Sd.ITEMCODE =-133 AND S.EmployeeID IN(%q)  
                                                     UNION  select S.EmployeeID, E.EmployeeNo, E.Name, sd.ItemGroup,
                                                     sd.ItemCode,  sd.ItemID, sd.Description,sd.Position, sd.changedamount,S.SalaryMonth,
                                                     G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName 
                                                     from Grades G,DESIGNATION D,Employee E, SALARYMONTHLY S, SalaryMonthlyDetail Sd  
                                                     where G.GradeID= S.GradeID AND D.DESIGNATIONID=E.DESIGNATIONID 
                                                     AND E.employeeID=S.EmployeeID AND S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                                                     AND S.SalaryMonth in(%q) and Sd.ITEMCODE =-133 AND S.EmployeeID IN(%q)  ) A 
                                                     group by  A.EmployeeID, A.EmployeeNo, A.Name,A.GName,A.SequenceNo,A.GCode,A.DName, A.ItemCode, 
                                                     A.ItemID, A.Description,A.Position,A.SalaryMonth 
                                                     order by A.SalaryMonth,A.Position,A.SequenceNo,A.GCode,A.EmployeeNo",
         _months, sEmpID, _months, sEmpID);

     tempdataset = tc.ExecuteDataSet(query4);
     tempdataset.Tables[0].TableName = "LeaveDays";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query5 = SQLParser.MakeSQL(@"select E.EmployeeNo, E.Name,A.GName,A.GCode,A.sequenceNo,A.DName, 
                                                     'UnAuthorized' Description, Sum(A.amount) amount,A.SalaryMonth  
                                                     from ( select S.EmployeeID, Sum(sd.changedamount) Amount,G.DESCRIPTION GName,
                                                     G.Code GCode,G.SequenceNo,D.Name DName,S.SalaryMonth  
                                                     from GRADES G,DESIGNATION D,SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                                                     where S.SalaryMonthlyID=Sd.Salary
         Mo               







          A        RADEID AND 
         .
         ES
         I
         GNATIONID=S.DE
         S
         IGNATI
         O
         NI                   








              and Sd
         .I        AND S.Emplo
         y
         eeID I
         N
         (%q
         )













         group 
         y
         S.Employe
         e
         ID,G.DE
         S
         CRIPTION,G.SequenceNo,G.Code,D.Name,S.SalaryMonth ) A, Employee E 
                                                     where A.EmployeeID = E.EmployeeID 
                                                     group by E.EmployeeNo,E.Name,A.GName,A.SequenceNo,A.GCode,A.DName,A.SalaryMonth",
         _months, sEmpID);

     tempdataset = tc.ExecuteDataSet(query5);
     tempdataset.Tables[0].TableName = "UnAuthorized";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query6 = SQLParser.MakeSQL(
         @"select E.EmployeeNo, E.Name,E.JoiningDate,A.GName,A.GCode,A.SequenceNo,A.DName, 
                                                 'Total Deduction' Description, Sum(A.amount) amount,A.SalaryMonth  
                                                 from( select S.EmployeeID, Sum(sd.changedamount) Amount,S.SalaryMonth,
                                                 G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName  
                                                 from GRADES G,DESIGNATION D,SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                                                 where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth in(%q) 




             AN
         D
          .        D AND D.DES
         G
         AT
         I
         ONID=S.DESIGNA
         T
         IONID 









                 a
         d
         Sd.ItemGroup I
         N         oyeeID IN(%
         q
         )  















                   y S.Em
         loyeeI
         ,
         .DESCRIPT
         I
         ON,G.Se
         q
         uenceNo,G.Code,D.Name,S.SalaryMonth ) A, Employee E 
                                                 where A.EmployeeID = E.EmployeeID group by E.EmployeeNo, E.Name,A.GName,A.SequenceNo,A.SalaryMonth,
                                                 A.GCode,A.DName,E.JoiningDate 
                                                order by A.SalaryMonth,E.EmployeeNo,A.sequenceno,A.GCode", _months,
         sEmpID);

     tempdataset = tc.ExecuteDataSet(query6);
     tempdataset.Tables[0].TableName = "TotalDeduction";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query7 = SQLParser.MakeSQL(
         @"Select E.EMPLOYEENO,E.NAME,E.JoiningDate,G.DESCRIPTION GName,G.Code GCode,S.SalaryMonth,
                                                     G.SequenceNo,D.Name DName ,'Net Pay' Description,SD.CHANGEDAMOUNT Amount 
                                                     from EMPLOYEE E,GRADES G,DESIGNATION D,SALARYMONTHLY S,SALARYMONTHLYDETAIL Sd 
                                                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth in(%q) 
                                                     AND G.GRADEID=S.GRADEID  AND D.DESIGNATIONID=S.DESIGNATIONID  
                                                     AND E.EMPLOYEEID =S.EMPLOYEEID  and Sd.ItemGroup IN (5) 
         A
         D Sd.It
         e
         Code I
         N
         (1                   







                    IN(%q) ord
         e
         r by S
         .
         S
         a
         l
         aryMonth,
         .
         MPLOYEENO,G.Sequ
         en        months, sEm
         p
         ID);






         t
         empdat
         a
         s
         e
         t
          = t
         c
         .
         E
         xc        7);



             tempd
         a
         taset.T
         a
         bles[0].TableName = "NetPay";

     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());

     internal string query8 = SQLParser.MakeSQL(
         @"Select E.EMPLOYEENO,E.NAME,E.JoiningDate,G.DESCRIPTION GName,S.SalaryMonth,
                                                     G.Code GCode,G.SequenceNo,D.Name DName ,'CPF' Description,SD.CHANGEDAMOUNT Amount
                                                     from EMPLOYEE E,GRADES G,DESIGNATION D,SALARYMONTHLY S,SALARYMONTHLYDETAIL Sd
                                                     where S.SalaryMonthlyID=Sd.SalaryMonthlyID 
                                                     AND S.SalaryMonth in(%q)
                                                     AND G.GRADEID=S.GRADEID 
                                                     AND D.DESIGNATIONID=S.DESIGNATIONID 






                   .EMPLOYEEID
         =
         .E
         M
         PLOYEEID 











         AND Sd.It
         m
         roup IN 
         (3        e IN(-128) 

















                   mploye
         ID IN(
         q
          order by

         S.Salar
         y
         Month,E.EMPLOYEENO,G.SequenceNo,G.Code ", _months, sEmpID);

     tempdataset = tc.ExecuteDataSet(query8);
     tempdataset.Tables[0].TableName = "CPF";
     rootDataset.Tables.Add(tempdataset.Tables[0].
     internal Copy());
     }
     catch (Exception ex)
     {
     throw new Exception(ex.Message);
 }

 return rootDataset;
 }

 internal static DataSet GetPFLedger(TransactionContext tc, string sEmpID, DateTime FromDate, DateTime toDate)
 {
     DataS
     t
         rootDataset = new D
     taS );


     try


     {
         scr
             p
         t
             ion, A.PFAmo
             nt,
             B
                 .
         CP
         (
             S
         elect '
         t
             d


         S
             elect 'O penin
             g
                 '

         Descriptio
             n,
             ISNULL(sum
         (
             T
         r
             anAm
         unt),0) CPFAmount
             from
         P
             FT here TranDa
         t
         e < %d
             And T
             r
         anT
         y
         pe in(%n) a
             n
         d Empl
         o
             y
         e
             e
         ID i
         n
                 (
             % q


         er = B.D
         scr
             ption",


         FromDat
             e,  (int)EnuPFTranType.PFAmou
         t, sEm
             ID,
             F
         omDate,
         int)Enum
             P
         TranType
         CPFAmo
             unt, sEmpID)
         //         


         string
             q
         u
             er er.Make
         QL(@"Select
         '
         pen
         ng' Des
         c
         r
         ip        nAmo        un        )as CP
         Amount




              //

                                                            from PFTransaction PFT where TranDate < %d
                 //                                                    And TranType in(1,2) and EmployeeID in (%q)",
             FromDate, sEmpID);

         tempdataset = tc.ExecuteDataSet(query1);

         tempdataset.Tables[0].TableName = "Opening";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

         var query2 = SQLParser.MakeSQL(@"Select A.TranDate Description,A.PFAmount,B.CPFAmount from 
                                                     (Select TranDate,ISNULL(sum(TranAmount),0)as PFAmount
                                                     from PFTransaction PFT where TranDate  between  %d  and %d
                                                     And TranType in(%n) and EmployeeID in (%q)










           ,












          Se        SNULL(sum(TranAmount),0) CPFAmount 
                                                     from PFTransaction PFT where TranDate  between  %d                                                     And TranType in(%n) and EmployeeID in (%q)
                                             group by TranDate) B
                                                     Where A.TranDate                     







                    toDate, (i
         n
         t)Enum
         P
         F
         T
         r
         anType.PF
         m
         unt, sEmp
         ID                   







            Fro
         m
         D
         a
         t
         e, t
         o
         D
         a
         t,        Type.C
         FAmoun
         ,
         sEmpID);





                 //              string query2 = SQLParser.MakeSQL(@"Select distinct TranDate Description,
             TranAmount PFAmount, TranAmount CPFAmount
         //                                                    from PFTransaction PFT where TranDate between  %d  and %d
         //                                                    And TranType in(1,2) and EmployeeID in (%q)
         //                                                    order by TranDate",FromDate,toDate,sEmpID);

         tempdataset = tc.ExecuteDataSet(query2);

         tempdataset.Tables[0].TableName = "TranDate";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }

     return rootDataset;
 }

 internal static DataSet PrintEnvelop(TransactionContext tc, string sEmpID)
 root
 at
     set = ne
 w
     Da et();


 r
     y


 ct Disti
 n
     t E.Em
     p
 o
     ye eN o,
     E.Nam e, D. Na me Desig
     n
 ati n, E.D
     E
 CRIPT IO
 N
     fr om E mp l
 o
 ee E, D es ig
 n
     t
 ion
     D, DEPARTMENT D
     E


 where E.DesignationID = D.DesignationID and DE.DepartmentID = DE.DEPARTMENTID and E.EmployeeID in(%q)
 order by E.EmployeeNo", sEmpID);

 tempdataset = tc.ExecuteDataSet(query1);

 ataset.Tables[0].TableName = "Envelop";
 rootDataset.Tables.Add(tempdataset.Tables[ }
 catch (Exception ex)
 {
     throw new Exception(ex.Ms
 }


 return rootDat
 a
     set;


 }

 internal static DataSet GetSalaryData(TransactionContext tc, string sEmpID, DateTime fromMonth,
     DateTime toMonth)

 rootD
 t
     aset = ne
 D
     at mpdat
     set
         = new Dat
 a
     Se
 t
     ();


 stri
 ng query1 = SQLParser.MakeSQL
 @"sele
         t sum(c
         angedAmount)

         Amount,ItemGroup, 
         te
         m
         ode, I
         emID f
         ro        nthly         sa        ary
         o
         thl        yD        tail wh
         e
         r
         e         y.salar
         Monthlyid= 
         a
         ary
         onthlyD
         e
         t
         a



             +         " n
     s
 ala ry on th bet we e
 n
     % d
 a
     n
 d
     % d
 ND Emp lo yeeID

 IN
         (
     % q ) roup by I,
     de,
     temiD "        


 e
 m
     pdataset = tc
         .x

 e
     cuteDataSet(q
         ery
     );


 t
 empdataset.T
 ble
     [
         0
     ].TableNam
     =
     "
 S
     al Add(t
 mp
     a
 t
 aset.Table
 s[0].Copy();
 string qu
 r
 2
     =
     SQLParser.Mak
 e
 SQL(@"
         s
         ee        ount) Amoun
         t
         ,ItemG
         r
         o
         u
         p
         , ItemCod
         ,
         ItemID fr
         om        salaryMonth
         l
         yDetai
         l
          wh
         e
         re salaryMo
         n
         thly.s
         a
         l
         a
         r
         yMon
         t
         h
         l
         yi        th        arymo
         t
         hlyid"
     + "
 and
     salarymon
 t
     h
 b
 etween
     %
     d m
     ND Ite
     Code = -12 9 AND

 2 group by Ite
     Group,
     ItemCod,
     ItemiD ",


 fromM
     nth, toMo
 n
     h, sEmpI
     );


 = tc.E
     ecuteDataSe
 (
     uer
 2);


 mpdatas
 t.Tables[0]
 T
 ble
     ame = "
 D
     e
 du tD d(temp
 ataset
     T
 bles[0].C
 o
 py());


 var query6 = SQLParser.MakeSQL(
     @"select sum(changedAmount) Amount,ItemGroup, ItemCode, ItemID from salaryMonthly, salaryMonthlyDetail where salaryMonthly.sala        o
         thlyid"
     + " and salarymonth between %d and %d AND Employe
 eI group by
     temGrou
 p
     ItemC
 o
     d,
     f
 rm sEmpID);


 tempd
 t
     set = tc.ExecuteDat
 aS
     tempd
 a
     tas
 e
 t.Tables[0]
     .TableN
 a
 m
     e
         = "D
 e
     d
 u
     cI
 rootDa
     a
 et.Tables
     .Add(tem
 p
 dataset.Tables[0].Copy());

 string query3 = SQLParser.MakeSQL(@"select E.EmployeeNo, E.Name,E.JoiningDate, 
                                 'Bonus' Description,         a
         amount,A.BonusID  
                                 from( select B.EmployeeID, Sum(B.BonusAmount) Amount,SUM(taxamount) taxamount,B.Bonus
         ID        USPROCESS
         D
         TAIL B 




                        where 
         .
         is
         b
         urseDate betwe
         e
         n %d a
         n
         d%                   



         A
         N
         D
          B.Employ
         e
         D IN(%q)  



          group

         by 
         B
         .EmployeeID
         ,
         B.Bonu
         s
         I
         D

         ) A,

         E
         m
         po              


                wh
         e
         re A.Em
         p
         loyeeID = E.EmployeeID group by E.EmployeeNo, E.Name,
                                 A.BonusID,E.JoiningDate 
                                 order by E.EmployeeNo,A.BonusID",
     tempdataset = tc.ExecuteDataSet(query3);

 tempdataset.Tables[0].TableName = "Bonus";
 rootDatase
 t.

 }
 c
 ac
 t
 hrow n
 e
 wE age);
 }
 r
 turn rootData
 set;
 }

 internal static DataSet GetSalarySheet(TransactionContext tc, string sEmpID, DateTime _SalaryMonth,
     DateTime toDate)
 {
     aset = ew Da
         t
     aSet();


     DataSe
         t
     tempd
         a
     t
         a
     s
         et =
             n
     e
         wD
     ry


     {
         var query1 = SQLParser.MakeSQL(
             @"select  A.EmployeeNo, A.Name,A.GName,A.DName,A.GCode,A.JoiningDate,A.SequenceNo, A.Description,A.ItemGroup,A.ItemCode,A.ItemID, 
                                             SUM(A.changedamount) Amount from(select S.EmployeeID, E.EmployeeNo, E.Name,E.JoiningDate, sd.ItemGroup,sd.ItemCode,  
                                             sd.ItemID, sd.Description,sd.Position, sd.changedamount,G.DESCRIPTION GName,D.Name DName,G.Code GCode,G.SequenceNo 
                                             from Grades G,DESIGNATION D,Employee E, SALARYMONTHLY S, SalaryMonthlyDetail Sd  
                                             where G.GradeID= S.GradeID AND D.DESIGNATIONID=E.DESIGNATIONID AND E.employeeID=S.EmployeeID 
                                             AND S.SalaryMonthl
         y
         D=Sd.Sala
         r
         Monthly
         I
          AND S
         .
         S
         %d and %d a
         d
         Sd
         .
         ItemGroup in(8
         )








         A
         N
         D sd.Item
         o
         e not i
         n(        oyeeID IN(%        q
         )

















         e
          E        .Emp
         o
         yeeNo, E.
         am
         e
         Co        de, 
         sd        .I        t
         mID, 








         ri        tion
         sd.Positi        on,
          sd.changedmount,G.DESCRIPTI
         N GNam
         ,D.Name
         DName,G.Code G
         C
         ode,







           G.Sequence
         N
          from Gr
         des G,
         DESIGNATION         , SALAR
         MONTHLY S, 
         a
         ary
         onthlyD
         e
         t
         ai               






                   adeI         A        ID=E.D
         SIGNAT
         O
         ID AND E.
         e
         mployee
         I
         D=S.EmployeeID 
                                             AND S.SalaryMonthlyID=Sd.SalaryMonthlyID AND S.SalaryMonth between %d and %d and Sd.ItemGroup in(1) 
                                             AND sd.ItemCode not in(-133) AND S.EmployeeID IN(%q)  ) A 
                                             group by  A.EmployeeID, A.EmployeeNo, A.Name,A.GName,A.DName,A.SequenceNo,A.GCode, A.ItemCode, A.ItemID, 
                                             A.Description,A.Position,A.JoiningDate,A.ItemGroup,A.ItemCode,A.ItemID order by A.EmployeeNo,A.SequenceNo,A.GCode",
             _SalaryMonth, toDate, sEmpID, _SalaryMonth, toDate, sEmpID);

         tempdataset = tc.ExecuteDataSet(query1);

         tempdataset.Tables[0].TableName = "SalaryCertificate";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

         var query2 = SQLParser.MakeSQL(
             @"select E.EmployeeNo, E.Name,E.JoiningDate,A.GName,A.GCode,A.SequenceNo,A.DName, 
                                 'IncomeTax' Description, Sum(A.amount) amount  
                                 from( select S.EmployeeID, Sum(sd.changedamount) Amount,
                                 G.DESCRIPTION GName,G.Code GCode,G.SequenceNo,D.Name DName  
                                 from GRADES G,DESIGNATION D,SALARYMONTHLY S,SalaryMonthlyDetail Sd  
                                 where S.SalaryMonthlyID=Sd.SalaryMonthlyID  AND S.SalaryMonth between %d and %d 
                                 AND G.GRADEID=S.GRADEID AND D.DESIGNATIONID=S.DESIGNATIONID 
                                 and Sd.ItemGroup IN (2,3) AND S.EmployeeID IN(%q)  
                                 group by S.EmployeeID,G.DESCRIPTION,G.SequenceNo,G.Code,D.Name ) A, Employee E 
                                 where A.EmployeeID = E.EmployeeID group by E.EmployeeNo, E.Name,A.GName,A.SequenceNo,
                                 A.GCode,A.DName,E.JoiningDate 
                                 order by E.EmployeeNo,A.sequenceno,A.GCode", _SalaryMonth, toDate, sEmpID);


         ;


         t
             e
         pdatas
         e
             .Tables[0].T
         a
             leName

         "Dedu
         c
             tt rootDa
             a
         et
             .Tables.Add(tem
         p
             datase
         t
             .a
             s
         t
             r
         i
         ng query3
             =
             SQLParser.MakeSQL(@
         "s        No, E.Name,
         E
             .Joini
             n
         gDa
         t
             e,
             riptio,
             Sum(
             .
         mount) am
         o
             unt, A.B
             o

         nusID
             from(select B.

         EmployeeID, Sum(B.BonusAmount) Amount,B.BonusID
             from BONUSPROCESSDETAIL B
         where B.DisburseDate between % d and % d
         AND B.EmployeeID IN(%
         q)
         group by B.EmployeeID,B.BonusID ) A, Employee E
         where A.EmployeeID = E.EmployeeID group by E.EmployeeNo, E.Name,
         A.BonusID,E.JoiningDate
             order by E.EmployeeNo,A.BonusID", _SalaryMonth, toDate, sEmpID);

         tempdataset = tc.ExecuteDataSet(query3);

         tempdataset.Tables[0].TableName = "Bonus";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
     return rootDataset;
 }

 internal static DataSet GetEmpsFiscalYeartax(TransactionContext tc, string sEmpIDs, DateTime fromdate,
     DateTime toDate, int taxParamID)
 {
     DataSet
     DataSet();


     DataSettempdata
     s
     tr


     {
         st ri ng sS
         Que akeSQL("S        lec        t         E.EMPL
         O
             YEE
         I
             D, sm .S alaryMo nt h
         Fisca
             l
         m
             o
         n
             th, s
         m
         d
             .
             D
             DA MO UN T Am
         unt
             from SA L
         ARYMON TH LY s m
             in
         er join Emp o
         ee
             E n.EMPL
             O
         EEI D = s
         m
             .
             E
             mp lo yeeId


         inner j
         o
             n S
             A
         L
             A
         RYMONTHLYDE
             T
         IL smd

         o
             n
         sm.SAL


         m.Sal
             r
         y
             Month betwee
             % d and
             %
             d


         and
         m.
             E
             M
         P
             L
         Item
             od
                 =
                 -129


         mploy
             e
         I
             D, sm.Salar
             M
         n
             t
         h", fromda
         e, to
             at,
             sEmpIDs);


         t
             a
         Set(sSQ
         u
             e
         r
             y);


         bleNa
             e

         "
         TaxSalary"
             ;


         rootDataset.Tables.Add(tep ].Copy());


         str
             i
         ng sBo
         n
             ut akeSQL(@"Se
         l
         ect bp
         d
         .
         E
         m
         ployeeID 
         b
         d.Disbu
         rs        h,'Bonus ta
         x
         ' desc
         r
         ipt
         i
         on,bpd.taxa
         m
         ount A
         m
         o
         u
         n
         t








         fr        ES             







                             Disbur
         eDate betwe
         en %d and %




         a
         nd bpd.EmployeeID 
         n(
         %
         ) 










         rder by bp
         d.Employeeid        eDate",
             fromdate, t
         D
             te,
             sEmpIDs
             )
         ;


         tem
             dataset = t
                 .xec
         teDataS
             e
         t
             (s te[0].Ta
         leName
             TaxBonus"
             ;


         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

         var sSettlementTax = SQLParser.MakeSQL(
             @"select fs.EmployeeID,E.ENDOFCONTRACTDATE Fiscalmonth,'Settlement Tax' Description,
                                                     fs.TaxAmount Amount
                                                     from FSTran fs
                                                     inner join Employee E on fs.EmployeeiD = E.EMPLOYEEID
                                                     where E.ENDOFCONTRACTDATE between %d and %d
                                                     and fs.EmployeeID in(%q)
                                                     order by fs.Employe
         e
         d", from
                 d
                 te, to
         D
             te, sEm
         p
             ID tempda
         a
             et
                 = tc.ExecuteDa

         t
             aSet(sS
                 e

         tl
             tempda
         t
             a
         s
             e
         t.Tables[
             ]
             TableName =
                 "                   

         ro
             o
         tDa
             t
         aset.Tables
             .Add(te
         m
             p
         d
             a
         tase
         t
             .
             T
             al

         f
             (taxParam
         I
         D == 0)


         {
             var sDeductedTax = SQLParser.MakeSQL(
                 @"Select EmployeeID,ModifiedBy FiscalMonth,'Tax Deducted' Description,ThisYearTotal Amount
                                                     from INCOMETAXTEMP where Employeeid in(%q) and ItemCode=%n and ItemID=%n
                                                     order by EmployeeID", sEmpIDs, EnumIncomeTaxItemGroup.Tax_Deducted,
                 EnumIn
             c
                 oe _Deducted);


             tempdata
                 s

             e Set(sDeduct
                 e
                 dTax);


             temp
             da TableName =
                 "TaxDe
             d
                 uct
             e
                 d";


             ro
                 o
             t
                 D
             aa empdat
             set.Tables[0].o
             y());


             var sIncreaseGrosstax = SQLParser.MakeSQL(
                 @"Select EmployeeID,ModifiedBy FiscalMonth,'Increase Gross Tax' Description,ThisYearTotal Amount
                                                     from INCOMETAXTEMP where Employeeid in(%q) and ItemCode=%n and ItemID=%n
                                                     order by EmployeeID", sEmpIDs,
                 EnumIncomeTaxItemGroup.Tax_Gross_OtherAddable, EnumAllowOrDeduct.Allowance);

             tempdataset = tc.ExecuteDataSet(sIncreaseGrosstax);

             tempdataset.Tables[0].TableName = "TaxIncreaseGr
             o
                 s";


             r
                 o

             oD d(tempdatas
                 t

             Ta
                 b
             les[0].Copy())
             ;


             easeGrossTa
                 x
                     = SQL
             P
                 a
             r
                 s
             er.MakeSQ
             (
                 "Select Employe
             eI calMonth, 'D
             e
                 crease

             Gro
                 s
             s Tax' Desc
             r
                 iption,
                 T
             h
                 i
             sYea
                 r
             T
                 o
             tl
                 EMP wh
                 re Employeei

             n( % q) and

             ItemCod
                 e
                     = %n and ItemID = %n
                 order by
                 EmployeeID", sEmpIDs, EnumIncomeTaxItemGroup.Tax_Gross_OtherRebate, EnumAllowOrDeduct.Deduction);

             tempdataset = tc.ExecuteDataSet(sDecreaseGrossTax);

             tempdataset.Table
                 s
             0].Tabl
             e
                 ame = "TaxDecreaseGros
             s
             ";
                 ].Copy());
         }


         ramID > 0)


         {
             = SQLParse
             r
                 .MakeS
                 Q
             L
             (
                 @
             "Select E
             p
                 oyeeID, Modifi
             ed Deducted' D
                 e
             script
             i
                 on,
                 T
             otalAmount
                 A
             mount
                 from I
                 C
             METAXYEAR
                 L
             Y where

             Employeeid in(%q) and ItemCode = %n and ItemID = %n
             and TaxParamID = %n
                 order by EmployeeID", sEmpIDs, EnumIncomeTaxItemGroup.Tax_Deducted,
             Enum
                 I
             comeTax
                 I
             emGroup.Tax_Deducted,
             t
                 axParamID);


             tempdata
             s
                 et = tc.E
             x
                 eu ax);


             tempd
                 a
             taset.Tables[0].T
             a
                 be;


             rootDatas
                 t
             Tables.Add(tempdat
                 as;


             string sInc
             r
                 easeGr
             o
                 s
             s
             t
                 ax =
                     S
             Q
                 La t Empl
                 yeeID, ModifiedBy
             i
                 calMonth,
                 '
             Increas
                 e
             Gross Tax' Description,TotalAmount Amount
             from INCOMETAXYEARLY where Employeeid in(%q) and ItemCode = %n and ItemID = %n
             and TaxParamID = %n
                 or
             d
                 r by Em
             p
                 oyeeID", sEmpIDs, Enum
             I
             ncomeTaxItemGroup.Tax
             _
                 ross_OtherAddable,
                 EnumAllowOr
             D
             educt.Allowance,
             t
                 aP t
                 e
             mpdata
                 s
             e
                 t
                     = tc.Exec

             t
                 DataSet(sIncreaseG
                     ro

             te
                 m
             pdatas
                 e
             t.T
                 a
             bles[0].Tab
             l
                 eName
                     =
                     "
             T
                 axIn
             c
                 r
             e
                 as atas
             t.a
             bles.Add(t
             m
                 d
             at op
             string sDecr
             a
                 eGrossTax
                     = SQLPa
             r
             ser.MakeSQL(@"Select EmployeeID,ModifiedBy FiscalMonth,'Decrease Gross Tax' Description,TotalAmount Amount
                                                     from INCOMETAXYEARLY where Employeeid in(%q) and ItemCode=%n and ItemID=%n
                                                     and TaxParamID=%n
                                                     or
         d
         r by Em
         p
         oyeeID", sEmpIDs, Enum
             I
                 ncomeTaxItem
             Gr
                 EnumAllo
             w
             rDeduct.De
                 d
             ut
                 tempdataset
                     =
                     tc.ExecuteD
             a
                 tS );


             tempdat
                 s
             t.Tables[0].T
             ab eGross";


             rootD
                 a
             taset.
                 T
                 a
             b
                 l
             es.A
                 d
             d
             (
                 tm opy())
         }


         catch (Exception ex)
         {
             throw new Exception(ex.Message);
         }
         return rootDataset;
     }

     internal static DataSet GetEmpstaxInvestment(TransactionContext tc, string sEmpIDs, int taxParamID)
     {
         ataSet
             roo
         t
             Dataset = ne
         w
             DataS
         e
         t
             (
             )
             ;


         new Da
         aSet();

         s tr
         n
             It em Code =
             C
         onvert.T
         oString((int)EnumIncomeTaxItemGroup.Company_Contri_PF) + "," +
             Convert.ToString((int)EnumIncomeTaxItemGroup.Annual_Salary_Income) + "," +
             Convert.ToString((int)EnumIncomeTaxItemGroup.Investment_Allowed);
         try
         {
             var sQuery = string.Empty;

             if (taxParamID == 0)
             {
                 sQuery = SQLParser.M
                 keSQL(@
                 "
                 elect E mployeeID,
                     rTotal


                 ov id ent Fun d'  ,


                 tem Co de = %n T h
                     e
                 n Th isYe
                     a
                 r
                     T
                 o
                     tal


                 alary Inco e
                 ',


                 ItemCo
                     e = %n Th n ThisYea
                 t
                     l


                 End)'Investment Required'
                 from Incometaxtemp
                 Where EmployeeID in(%q)
                 group by EmployeeID
                     order by EmployeeID", (int)EnumIncomeTaxItemGro
                 u
                     .Compan
                     y
                 Contr i_ PF, 


                 (int)EnumIncomeT
                 a
                 Group.Inv es ment_Al
                     l
                 owe d, sEmpI
                 D
                     );


                 lse if (taxa ra ID
                     > 0)


                 {
                     eSQL(@"S        le        t

         Employ
         e
         e
         I
         D
         ,




         case W        he        n Ite
         mC        od        e         =         %n         T
         h
         en         T        hi        sY        earTotal











         '
         ,




                                 s
         m(c
         se When I
         t
         em
         C
         ode = %
         n
          T        To              

                                   En
         )'Sala
         y Incom
         ',






              su
         m
         cas
          When Item
         Code = %n Th        otal








          End)'Inves
         m
         nt 
         equired
         '












          from IncometaxYearly 














                Where EmployeeI
         D
          in(%q)












                     group by E
         m
         ployeeID


                                         der by
         Employ
         e
         D", (i
                     n
                         t)Enu
                     mn.C
                         m
                     pany_Contr
                         _P,
                         temGro
                     p
                         Annual_Sa
                     l
                         ary_Inc
                     o
                         me,  (int)EnumIncomeTaxItemGroup.Investment_Allowed, sEmpIDs);
                 }
                 tempdataset = tc.ExecuteDataSet(sQuery);

                 tempdataset.Tables[0].TableName = "TaxInvestment";
                 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }
             return rootDataset;
         }

         internal static DataSet GetEmpstaxChallan(TransactionContext tc, string sEmpIDs, int taxParamId)
         roo
             Dataset = new
                 DataS
         t();


         llan
             S
         LParser.Mak tion,
             c.
         hallenNo,t
         c.DepositDate,tc.Amount
             f
         rom TaxChall at
             jo
         n
             m
         ployee E
         t
             .
             E
             y


         inner join Designation D on E.DesignationID = D.DesignationID
         where tc.taxparamid = %n
             and tc.EmployeeiD in(%q)
         order by tc.EmployeeiD,tc.DepositDate,tc.ChallenNo", taxParamId, sEmpIDs);

         tempdataset = tc.ExecuteDataSet(sTaxChallan);

         tempdataset.Tables[0].TableName = "TaxChallan";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
     }
     catch

     (Exception ex)
     {
         throw new Exception(ex.Message);
     }
     return rootDataset;
 }

 internal static DataSet GetEmployeesMasterData(TransactionContext tc, DateTime Fromdate, string sEmpID)
 et =
     ew ataSet(;


 Data Set tempdataset = n
 e
     w at aSet();


 string sSQ Gr ssItem = S QL Parser.M ak eS
 Q
 (
     @"S
         e
         lect E.EMPLOYEENO,E.NA
         M
         E,G.Code Grade,d.D
         E
         CRIPTIO
         N
          D        nt                   



                    des
         .
         NAME D
         e
         sg                   







         E
         BIRTHDATE,E.JOI
         NI        ONFIRMATION
         ,
         E.GEND
         E
         R,E
         .
         ENDOFCONTRA
         C
         TDATE,
         E
         .
         E
         M
         AILA
         D
         D
         R
         ES        MO             



                    E        HONE,
         C.P
         RMANENTAD
         D
         RE
         S
         S,EC.PR
         E
         SE        FA        OTHERN
         ME,ES.NAME 
         SpouseName,                 


                E.National
         I
         D,E.ACCOUNTNO,EN.N
         ME

         ominee
         ame1,EN
         .
         ame
         NomineeNam
         e2        ript        on, 


                     ount)         m
         o
         u
         n
         ance        Gr        md.POS
         TION





                    from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID






                    join Salar
         M
         nt
         h
         ly sm on E.EMP
         L
         OYEEID = sm
         .
         Ep                   







         i
         ner join Sal
         ar        md on smd.S
         a
         laryMo
         n
         thl
         y
         ID = sm.Sal
         a
         ryMont
         h
         l
         y
         I
         D






         where sm.
         al
         ar        d         (%q)








                   an        oup in
         1,8)


             gr
         up by E
         EMPLOYEENO,E.NAME,G.Co
         d
         e,d.DESCRIPTION, d
         s.
         N
         ME,





                             E.JOINI
         GDATE,E.DAT
         O
         CON
         IRMATIO
         N
         ,
         E.        OFCONTR
         CTDATE,E.EM
         I
         ADD
         ESS,EC.
         P
         R
         EE                                  EC
         EMERGENCYTELE
         H
         NE,EC.PAR
         M
         ANENTAD
         D
         RESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name, smd.Description,smd.Position,d.ParentID
                                         order by E.EmployeeNo,smd.POSITION", Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sSQLGrossItem);

 tempdataset.Tables[0].TableName = "GrossItem";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

 var sTotalGross = SQLParser.MakeSQL(@"Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         Max(smd.Position)as Position,E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2,
                                         'Total Gross'as Description, SUM(smd.changedamount) Amount,'Salaries & Allowances(Taxable)' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join SalaryMonthly sm on E.EMPLOYEEID = sm.EmployeeID
                                         inner join SalaryMonthlyDetail smd on smd.SalaryMonthlyID = sm.SalaryMonthlyID
                                         where sm.SalaryMonth=%d and sm.EmployeeID in(%q)
                                         and smd.ItemGroup in(1,8)




             gr
         o
         u         E.NAME,G.Co
         e
         d.
         D
         ESCRIPTION, de
         s
         .NAME,




           E.BI
         R
         T
         H
         D
         ATE,E.JOI
         I
         GDATE,E.DAT
         EO        GENDER,E.EN
         D
         OFCONT
         R
         ACT
         D
         ATE,E.EMAIL
         A
         DDRESS
         ,
         E
         C
         .
         PRES
         E
         N
         T
         MB              


                 E
         C
         .EMERGE
         N
         CYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,d.ParentID", Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sTotalGross);

 tempdataset.Tables[0].TableName = "TotalGross";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

 var sOPIItem = SQLParser.MakeSQL(@"Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2, opdi.Description,
                                         opdi.ChangeNetAmount Amount,'Salaries Expenses' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join OPIProcessDetail opd on E.EMPLOYEEID = opd.EmployeeID
                                         inner join OPIProcess op on op.OPIProcessID = opd.OPIProcessID
                                         inner join OPIProcessDetailItem opdi on opd.OPIProcessDetailID = opdi.OPIProcessDetailID
                                         where op.OPIMonth=%d and opd.EmployeeID in(%q)


              gro
         u
          by E.
         E
         ML        Code,d.DESC
         I
         TI
         O
         N, des.NAME,




                          E.BI
         R
         THDATE
         ,
         E
         .
         J
         OININGDAT
         ,
         .DATEOFCONFI
         RM        .ENDOFCONTR
         A
         CTDATE
         ,
         E.E
         M
         AILADDRESS,
         E
         C.PRES
         E
         N
         T
         M
         OBIL
         E
         ,





            EC.EME
         R
         GENCYTE
         L
         EPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,opdi.Description,opdi.ChangeNetAmount,d.ParentID",
     Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sOPIItem);

 tempdataset.Tables[0].TableName = "OPIItem";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

 var sTotalOPI = SQLParser.MakeSQL(@"Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2, 
                                         'Total OPI' Description,Sum(opdi.ChangeNetAmount) Amount,'Salaries Expenses' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join OPIProcessDetail opd on E.EMPLOYEEID = opd.EmployeeID
                                         inner join OPIProcess op on op.OPIProcessID = opd.OPIProcessID
                                         inner join OPIProcessDetailItem opdi on opd.OPIProcessDetailID = opdi.OPIProcessDetailID
                                         where op.OPIMonth=%d and opd.EmployeeID in(%q)




           grou
         p
          y        NAME,G.Code
         d
         DE
         S
         CRIPTION,des.N
         A
         ME,




             E.
         B
         I
         R
         T
         HDATE,E.J
         I
         INGDATE,E
         .D        N,E.GENDER,
         E
         .ENDOF
         C
         ONT
         R
         ACTDATE,E.E
         M
         AILADD
         R
         E
         S
         S
         ,EC.
         P
         R
         E
         SN              




             EC.
         E
         MERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,opdi.Description,d.ParentID",
     Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sTotalOPI);

 tempdataset.Tables[0].TableName = "Total OPI";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

 var sDeductedItem = SQLParser.MakeSQL(@"Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2,smd.Description, 
                                         smd.changedamount Amount,'Deduction from Salary' GroupDescription,smd.POSITION
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join SalaryMonthly sm on E.EMPLOYEEID = sm.EmployeeID
                                         inner join SalaryMonthlyDetail smd on smd.SalaryMonthlyID = sm.SalaryMonthlyID
                                         where sm.SalaryMonth=%d and sm.EmployeeID in(%q)
                                         and smd.ItemGroup in(3)
                                         group by E.EMPLOYEENO,E.NAME,G
         .
         ode,d.DE
         S
         RIPTIO
         N
         ,e                   





         E.BIRTHDA
         T
         EE        ATEOFCONFIR
         M
         ATION,
         E
         .
         G
         E
         NDER,E.EN
         O
         CONTRACTDAT
         E,        C.PRESENTMO
         B
         ILE,















                   LEPHON
         ,EC.PARMANENT
         D
         RESS,EC.P
         R
         ESENTAD
         D
         RESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,smd.Description, smd.changedamount,smd.POSITION,d.ParentID
                                         order by E.EmployeeNo,smd.POSITION", Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sDeductedItem);

 tempdataset.Tables[0].TableName = "Deducted Items";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

 var sTotalDeduction = SQLParser.MakeSQL(@"Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2,'Total Deduction' Description, 
                                         Sum(smd.changedamount) Amount,'Deduction from Salary' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join SalaryMonthly sm on E.EMPLOYEEID = sm.EmployeeID
                                         inner join SalaryMonthlyDetail smd on smd.SalaryMonthlyID = sm.SalaryMonthlyID
                                         where sm.SalaryMonth=%d and sm.EmployeeID in(%q)
                                         and smd.ItemGroup in(3)
                                         group by E.EM
         P
         OYEENO,E
         .
         AME,G.
         C
         oe        des.NAME,








                   OININGDATE,
         E
         .DATEO
         F
         C
         O
         N
         FIRMATION
         E
         GENDER,E.ENDOFCO
         NT        ADDRESS,EC.
         P
         RESENT
         M
         OBI
         L
         E,











                   ERGENC
         TELEPHONE,EC.PA
         M
         NENTADDRE
         S
         S,EC.PR
         E
         SENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,d.ParentID
                                         order by E.EmployeeNo", Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sTotalDeduction);

 tempdataset.Tables[0].TableName = "Total Deduction";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

 var sNetPay = SQLParser.MakeSQL(
     @"Select tbGross.*,ISNULL((ISNULL(tbOPI.Amount,0)+tbGross.PreAmount - tbDeduction.Amount),0)as Amount from (
                                         Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,Max(smd.Position)as Position,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2, 'Net Salary'as Description, 
                                         SUM(smd.changedamount) PreAmount,'' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join SalaryMonthly sm on E.EMPLOYEEID = sm.EmployeeID
                                         inner join SalaryMonthlyDetail smd on smd.SalaryMonthlyID = sm.SalaryMonthlyID
                                         where sm.Salary
         M
         nth=%d a
         n
          sm.Em
         p
         ly                   





             and smd.Ite
         m
         Go                   








          group by E.EMPLO
         YE        e,d.DESCRIP
         T
         ION,de
         s
         .NA
         M
         E,











                   THDATE
         E.JOINI
         G
         ATE,E.DAT
         E
         OFCONFI
         R
         MATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,d.ParentID)tbGross
                                         left join 
                                         (
                                         Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2, 'Total OPI' Description,
                                         Sum(opdi.ChangeNetAmount) Amount,'' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join OPIProcessDetail opd on E.EMPLOYEEID = opd.EmployeeID
                                         inner join OPIProcess op on op.OPIProcessID = opd.OPIProcessID
                                         inner join OPIProcessDetailItem opdi on opd.OPIProcessDetailID = opdi.OPIProcessDetailID
                                         where op.OPIMonth=%d and opd.EmployeeID in(%q)
                                         group by E.EMPLOYEENO,E.NAME,G.Code,d.DESCRIPTION,des.NAME,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,opdi.Description,d.ParentID)tbOPI on tbGross.EmployeeNo = tbOPI.EmployeeNo
                                         left join
                                         (
                                         Select E.EMPLOYEENO,E.NAME,G.Code Grade,d.DESCRIPTION Department,
                                         des.NAME Designation,d.ParentID,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME SpouseName,
                                         E.NationalID,E.ACCOUNTNO,EN.NAME NomineeName1,EN.Name NomineeName2,'Total Deduction' Description, 
                                         Sum(smd.changedamount) Amount,'' GroupDescription
                                         from Employee E
                                         inner join Grades G on E.GradeID = G.GradeID
                                         inner join Department d on E.DepartmentID = d.DepartmentID
                                         inner join Designation des on E.DesignationID = des.DesignationID
                                         left Outer join EMPCONTACT EC on E.EMPLOYEEID = EC.EMPLOYEEID
                                         left Outer join EMPSPOUSE ES on E.EMPLOYEEID = ES.EMPLOYEEID
                                         left Outer Join EMPNOMINEE EN on E.EMPLOYEEID = EN.EMPLOYEEID
                                         inner join SalaryMonthly sm on E.EMPLOYEEID = sm.EmployeeID
                                         inner join SalaryMonthlyDetail smd on smd.SalaryMonthlyID = sm.SalaryMonthlyID
                                         where sm.SalaryMonth=%d and sm.EmployeeID in(%q)
                                         and smd.ItemGroup in(3)
                                         group by E.EMPLOYEENO,E.NAME,G.Code,d.DESCRIPTION,des.NAME,
                                         E.BIRTHDATE,E.JOININGDATE,E.DATEOFCONFIRMATION,E.GENDER,E.ENDOFCONTRACTDATE,E.EMAILADDRESS,EC.PRESENTMOBILE,
                                         EC.EMERGENCYTELEPHONE,EC.PARMANENTADDRESS,EC.PRESENTADDRESS,E.FATHERNAME,E.MOTHERNAME,ES.NAME,
                                         E.NationalID,E.ACCOUNTNO,EN.Name,EN.Name,d.ParentID) tbDeduction on tbGross.EMPLOYEENO = tbDeduction.EMPLOYEENO
                                         ", Fromdate, sEmpID, Fromdate, sEmpID, Fromdate, sEmpID);

 tempdataset = tc.ExecuteDataSet(sNetPay);

 tempdataset.Tables[0].TableName = "Net Pay";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return rootDataset;
 }

 internal static DataSet GetEmployeesPF(TransactionContext tc, DateTime dateTime, string sUnitID)

 D
 ataSet rootDataset
     =
     n
 ew DataSet();


 DataSet
     t
 e
 m
     pdataset =
         n
 e
     w DataSet(
     )
     ;


 try

 P
     F
         = SQLPars
 e
 r
     .MakeSQL(@
 "
 Se
     l
 ect
     istinct tb1.
     D
     ep
 a
 rtme
     t, tb1.EPF,tb
 1
     .CPF,tb1.ParentID
     ISNULL(tb3.
         P
         SNULL

 (
     t
 b3
     PFLoanInterest, 0) (
     T Max
 E.EM
     LOYEEI
     )
 mp
     o
 y
     eeID,
     ase W
     EN
 pft.TranTy
 e
     %
     THEN pft.TRA
     A
 O
     U
 NT ELSE 0 END
     Sum(C
         se

 HE


 pft.TranType
     n
 T
     HEN pft.TRANAM
     .
     D
     ESCRIPTION
 D
     pa
 r
     tment, D.Par
     f
 om Depart
 en
     D


 yee
     on E
 Depa
     tmentID =
         .D
     pa
 t
     m
 entID
     Trans
 ctio
     pft on e.Emp
 oy
     eI
         =
         pft.Emplo
 e
     iD


 re pf
     .Tra
     Date = %d
     group by
     left
 JO
     I
 N
 (
     ax(sm
 EM
     L
 O
     YEEID)Empl
     o
 y
 e
     eID,
     M
 C
     ODE = %n
     A
 N
     D
 smd.ITEMGR
     O
 U
     P
         = %n AND smd.ITEMID
     =
     1 THEN
     s
 m
 d.CHANGEDAMOUNT E
 L
     S
 E
 0 END) PFLo
 a
     n,
     E
 W
     HEN smd.ITEMCODE = %
 n
     A
 N
     D smd.ITEMGROUP = 
     %
 n
     A
 ND smd.ITEMID =
     1

 T
     HEN smd.CH
     A
 N
     G
 EDAMOUNT E
 L
     SE

 0 EN
     D)


 D.
     D
     ESCR
 I
     PT
 I
     ON D
     e
 p
 a
     rtment,
     D
         .
 arentID
     from Left Outer join Department D on D.e DepartmentI


 nner join E
     m
 ployee
     e

 o
     n e.Emplo
 e
     ID = sm.E
 mp
     INNE
 R
     J
 O
     IN S
     A
 L
     A
 RY L LARYM
 N
     THLYID =
         md
             .S ID
     w
 he Mo

 grou
     by D.
     ESCRIPT
     ON, D.ParentID
     tb3 On
 tb1.Departm rtment
 ND tb1.Pare
 t
     D =
         tb3.Par
 e
     n
 tI
     elect Dep
     a
 rtmentI
     D, Code, Description from Department
 where ParentID is Null)tb2 on tb1.ParentID = tb2.DepartmentID
 where tb1.ParentID in(%q)",
     (int)EnumPFTranType.PFAmount, (int)EnumPFTranType.CPFAmount, dateTime, (int)EnumSalaryItemCode
     .Loan_Monthly_Installment,
 (int)EnumSalaryGroup.Deductions, (int)EnumSalaryItemCode.Loan_Monthly_Interest, (int)EnumSalaryGroup
     .Deductions, dateTime,
 sUnitID);


 tempdataset = tc.ExecuteDataSet(sSQLPF);

 tempdataset.Tables[0].TableName = "PF";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return rootDataset;
 }

 internal static DataSet GetStuffListWithoutSalary(TransactionContext tc, DateTime fromdate, string sEmpID)
 {
     et te
     pd
         t
     a
         set = new D
     a
         t
     a
     Set();


     ist = SQL Pa r
     g
         DESCR
     PTI
         O
     N D par me nt, E.AC
         C
     OUNTN O, E. JO INI
     N
         F
     R
         OM EM PL OYE
         l

     OIN
         ig na t
     i
         on D ON E.DES
         GN AT IO NI
     D.
         D
         SIGNA TI O
     N
         EFT

     JOIND ep art
         ent

     De ON E.
         D
         EP AR ME NT I
         =
         D
     e.DEPARTM
         EN TI D


     L
         ft J OI
     M
         COS T
         C
     NTER empcc ON
         E


     IN NE R JOIN C
         R
     G CC ON CC.C
         WH
     ", s
     mpID)


     te
         p
     d
         ataset = tc.x
     cu
         t
     eDataSet(sS
     bleNa
         e =
             St uf fList"


     r ot at
         s
     t.
         T
         ab les.Add(t
     cat c
     Ex ce pt
         on e x)
     {
         throw ne w Exce
         t
             (ex.Message);
     }
     return rootDataset;
 }

 internal static DataSet GetEmployeesPF(TransactionContext tc, DateTime dateTime)
 {
     D
         ata
     et ne
     w
     DataSet()
         ;


     s
         ng
     sTr
     a
         nType = o
     ve t.T
         o
     Stri ng((int
     EnumP
         Tran
     y
         s tr ing sSQL Mo n
         thly
     P
         F = SQLPars
     r.Ma
     eSQL(@"SELE        alGro
         s, SUM(t
         EP
         ) EP
         F
         , 








                              enter
         t.D
         e
         signatio
         ,t
         .
         D
         e
         p
         art         







         FRO
         M












            (


         e.E
         m
         ployeeNo,e.Name
         ,
         e.JOININGD
         A
         E
         ,D.
         N
         AME Designation,De
         p
         .DESCRIPTION Departme
         n
         ,








                    THISMO
         N
         TA                   







                   (sm.ThisMon
         t
         hBasic
         ,
         0
         )

         TotalGros
         ,










         C
         A
         S
         E
          WHE
         N

         p
         t.        n         AMOUN

         ELSE 0 EN
          E
         PF                       







                   pt        %n THE
          pt.TRANAMO
         UNT ELSE 0 ND CPF,





                     CC.DES
         RI
         P
         ION Cost
         enter






                    FRO         P        FT        RAN
         A
         TIO
          p        t         






                                  EEID =        e.EM        PL        O
         EEID AND p
         t
         .
         T
         RAN        DA        TE = %
         d




          L        EF        T 
         OIN DES









          L        EF         JOIN DEP        AE        RTM
         ID







         c.        MP
         OYEI        D         ND cm        pc        .Cur
         entCC
         1









         rID                         

         T J        IN         S        ALARYM
         N
         HL
         Y         m         N s        m.        EMPLOYEE
         I
         D O        yMonth        =
         %










         ROUP 
         Y t
         Emplo        ee        o
         , 
         t.        Name, t
         .
         TH        ,         , t.Co
         tCenter,




                      t
         .
         JOININGDATE,t.Desi
         na
         t
         on,t.Dep
         rtment"
         , TranTyp
             .PFAmount,
         i
     t)E
         umPFTra
     n
         T
     yp dateT
         me, dateT
     m
         );


     t
     e
         mpdataset = tc
             .ExecuteD
     a
         a
     et(
         S
     LMonthl
         y
     PF);


     tempda
         t
     aset.Tabl
     e
         s0 = "M                  tDatas
     t.Tables.Add(
         e
     pdataset.T
     ables[0
         ]
         .Copy());
 }
 catch

 (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return rootDataset;
 }

 internal static DataSet GetEmployeesPFNew(TransactionContext tc, DateTime Fromdate, DateTime Todate)
     =

 newD a
 t
     aS et();


 Da t
 a
     Set tempd at se t
     = ne w D
 taSet();


 string s
     ranType = C n
     t)Enum
     P
 FT
     r
 anType.CPFAmou
     n
 t
     )

 try


 SQLPar
     s
 er
     .MakeSQL(@"        SELECT         t.        [N        a
         ,t.Employe        N
          (        SU        M(        t.        PF),        0
          E        P
         F
         , Round(
         U
         (
         t
         CPF)
         0)

         CPF,  t.B
         DATE







            //   





           SELECT         e.
         mplo
         e
         No,
         .Na
         m
         tm
         e
         nt,

                      /    

                         /                      
           //




         CA
         S
         E WHEN pt.
         R
         N
         T
         YPE =         n TH
         N p
         .T        RA        NA        MO        UNT ELS

          E        N

           C
         SE 

          //



         //




           C
         C
         .DESCRIT        IO


         //                



         LEFT        JOIN E        p
          %d
         A
         D 
         %
         d 

         T
         ON D
         ON e.DES        GN        TIO        N
         D 
          D
         DE
         S
         IGNATIONI        D





         /  



                   E


         ENTE
         m
         cc        ON e.EMPLOY        EI        D
         =
         cmpc
         c
         EM        PL        OYEEID AND cmp
         c
         .
         C
         urrentCC=1






         CC        .C        RGID 




                        /        /           





         l
         r
         yMo
         n
         th = %d


         /


                                             Le        ft 
         J
         OIN SALAR
         Y
         ONTHLY        ET
         A
         L smd         N         m
         .
         AL        AR        YMONTHLYI

         ND         sm        d.ITEMGRO        UP        IN        1,
         8)                                              

         /


            )t         







         /          
                    t.Employe        N
         o
         , t.[N
         a
         me]
         ,         .T        ISMONTHB
         AS        IC        , t.T
         o
         ta        lG        r
         oss,

         t
         .
         Co                  //   



                   TE        .Depa
         tme
         t,t.Birth
         D
         at
         e
         ", (int
         )
         En.P t)Enum
 FTranType.C
     PFAmount, Fomdate, Todate, T
 date);


 string
 s
     qlPfException = SQ
 Pa
     r
 er.MakeS
 L(@" SEL
         E
         T t.Name
         t.Empl
         oyeeNo,t.JOI        Designa
         ion,t.Depar
         m
         nt,
         t.Total
         G
         r
         os        y,ROUND
         (SUM(t.EPF)
         0
         as 
         PF, Rou
         n
         d
         (S         CPF, 
         t.BIRTHDA
         E







               FROM







               (
         S
         ELECT e.
         E
         m
         plo
         y
         eeNo,e.Name,e.
         B
         IRTHDATE,

         e.         D.N        io        ON Department,
                             CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END EPF,
                             CASE WHEN pt.TRANTYPE = %n THEN pt.TRANAMOUNT ELSE 0 END CPF,
                             IS        BASIC,0) THISMONTHBASIC,
                     ISNULL(s.ThisMo        lGross

                             FROM SALARYMONTHLY s
                             INNER JOIN EMPLOYEE e ON e.EMPLOYEEID=                                  INNER JOIN DESIGNATION d ON d.DESIGNATIO        ONID
                             INNER JOIN DEPARTMENT dept ON        = dept.DEPARTMENTID
                             INNER JOIN EmpLifeCycle elc ON elc.E        OYEEID
                             INNER JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cm        ND         1
                             INNER JOIN CRG CC         terID = CC.CRGID 
                                    RYMONTHLYDETAIL smd ON s.SALARYMONTHLYID = smd.SALARYMONTHLYID AND smd.ITEMGROUP IN(1,8)
                               PFTRANSACTION pt ON pt.EMPLOYEEID=e.EMPLOYEEID 
                             WHERE          AND elc.IsConfirm=1 AND elc.EffectDate BETWEEN %d AND %d)t
                                 mployeeNo, t.Name, t.THISMONTHBASIC, t.TotalGross, t.JOININGDATE,t.Designation,t.Department,t.BirthDate",
     (pe.PFAmount, (int)EnumPFTranType.CPFAmount, Todate, Fromdate, Todate);

 mpdataset = tc.ExecuteDataSet(sqlPfException);

 tempdataset.Tables[0].TableName = "PFandC                      rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
 }
 catch (Exception ex)
 ion(ex.Message);
 return rootDataset;
 }

 internal static DataSet GetMonthlySalaryRevision(TransactionContext tc, DateTime Fromdate, DateTime Todate)
 {
     Dat
     Set(
         ;


     D
         a
     aSet
         te
     m
         pdataset =
             new
                 a
     aSe
         ();


     {
         str
             n

         m
             alar
         Re
         v
             ision = SQ
         Pars
             r
         Mak
             SQL
         (@ EENO,
         E
             m
         p
             .JOININGDATE,D
             E
         S
             .AME Designatio
             n, sa.BAS
             I
         C
             S
         ALARY Present,
             I
         S
             N
         LL(gsat.BAI

         ARYAS
             IGNM
         NT GSA


         ESALA
             YASS
         GNMENT GSAt
         O
             g
         a
         t
             .EMPLOYEEID = g
         s
             .
             E
             MPLOYEEID AND SALAR
         ID - 1
         AND gsat.B
             SICS
         LA
             Y
                 <
                 >gsa.BASICSA
             A
         Y
             I
         NER
             OIN EMPLOYEE
             Emp
         On
         GSA
                 .EMPLOYEEID
             =
             E
         m
         p.EMPLOYEEI
             L
         FT JO
         N
             e
         s
             ignation D
             E
         S On
         E
         mp.DESIGNA
         ION
             D = D
         E
         S.DESIGNA
             T
         IO
             LE
         F
             T JOIN Depar
         m
             nt

         Dep O
         TMENT
             D


         W
             ere

         Emp.PayrollType
             d = 1
         AN
             D
         GSA.EFFE
             TD
         A
             T
         E
             b SICS
             LARY
         0 ORDER BY em
             .J
             IN
         NG
             D
         ATE DESC",

         F
         r
             omdate, To
         taset
             =
             tc.ExecuteD
         a
             t

         a
             et(
                 Sal
                     a
                     ryRevisio
                     n
             )


         t
             mpdatas
         t
             .abl
         s
         [
             0
         ].rootData
         s
         t
             .Tabl

         e
             .
             A
             dd(tempdataset
                 .
                 a
                 b

         les[0].Cop
         y
             )
             )
         ;
     }


     catch (Exc
     e
         p
     t
         ion e)

     {
         throw new Exception(e.Message, e);
     }
     rt
 }

 internal static DataSet GetEmployeesPF(TransactionContext tc, DateTime Fromdate, DateTime Todate)
 DataSet
     r
 ootDat
 a
     set
         = new DataS
 e
 t();


 Da ta taSet
     )
 ;


 Ty tring
 (in
     )EnumPFTr
     a
 nT
     y
 pe.PFAm
     o
 un ov((int)
     numPFTranTy
 pe.CPFAmoun);

 t
     y


 string
 s
     SQLMonthlyPF = SQL
 ar
     s
 r.MakeSQ
 (@"SELEC
         T
         t.Employ
         eNo, t
         .Name, t.TH
         t.Total
         ross, SUM(t
         E
         F)E
         F, 



                     S
         t.        PF)C        F
         ,
         to        esig        a



                        F        OM        (

                                         SELECT e.EmployeeNo,e.Name,e.JOININGDATE,D.NAME Designation,Dep.DESCRIPTION Department,
                                         ISNULL(sm.THISMONTHBASIC,0)THISMONTHBASIC,
                                         ISNULL(SUM(smd.ChangedAmount),0)as TotalGross,
                                         CASE WHEN pt.TRANTYPE = %n  THEN pt.TRANAMOUNT ELSE 0 END EPF,
                                         CASE WHEN pt.TRANTYPE = %n  THEN pt.TRANAMOUNT ELSE 0 END CPF,
                                         CC.DESCRIPTION CostCenter
                                         FROM PFTRANSACTION pt 
                                         LEFT JOIN Employee e ON pt.EMPLOYEEID = e.EMPLOYEEID AND e.PFMEMBERSHIPDT BETWEEN %d AND %d 
                                         LEFT JOIN DESIGNATION D ON e.DESIGNATIONID = D.DESIGNATIONID
                                         LEFT JOIN DEPARTMENT Dep ON e.DEPARTMENTID = Dep.DEPARTMENTID
                                         LEFT JOIN EMPCOSTCENTER cmpcc ON e.EMPLOYEEID=cmpc
         c
         PL        OY        EEID A
         N
          cm                       


                                               I        NE
         R         OIN         CR        G CC ON cm        pc        c
         ID        




           LEFT JOIN

         m.EMPLOYE        EI         =         e        .EMPL        OY        EI        D         AN
         D
          sm.SalaryMo        nt         =         %        d







         LARYM
         N
         THLY        DE        TA        IL         sm

         O
         TH        YMONT
         LYI
          AND smd.
         I
         T
         E
         MGROUP 
         I
         (
         1
         ,8                        
                  GR
         OUP BY e.EMLOYEENO,e.NAME,IS
         ULL(sm
         THISMON
         HBASIC,0),CC.D
         E
         SCRIPTION,pt.TRANT
         PE
         ,
         t.TRANDA
         E,




                             NAMOUNT
         e.JOININGDA
         E
         D.N
         ME,Dep.
         D
         E
         SC               






          )              




             GROU
         P

         BY 
         t
         .EmployeeNo, t
         .
         Name, t.
         T
         I
         MON
         H
         ASIC, t
         .
         TotalGro
         s
         s
         , t
         .
         CostCenter,




                               IN        ation,
         .Department",
     (
         nt)EnumPF
 T
 ranType
     .PFAmount, (int)EnumPFTranType.CPFAmount,
 Fromdate, Todate, Todate);

 tempdataset = tc.ExecuteDataSet(sSQLMonthlyPF);

 tempdataset.Tables[0].TableName = "MonthlyPF";
 rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return rootDataset;
 }

 internal static DataSet GetSalarySummaryData(TransactionContext tc, DateTime dateTime)


 DataSe
     roo
 D
 tas
     t =
         n tase
     = n
 w
     D
 ataSet()


 try


 {
     r.M
     akeSQL(@"SE
         ECT smd.Des        ,D.D
         scription Dep
         rt





         RO
         M
          SALARYMON
         H
         Y
         D
         ETAIL smd











         LY s
          ON 
         m.SALARYMON
         H
         YI

         =
          smd.SALARYMO
         T
         L
         Y
         ID


         EFT JOIN D
         PAR
         ME
         T

         D ON sm.DEPA
         T
         ENT
         I
         D = D.DEPARTM            


           WHE
         E 
         m
         .
         SalaryMont
         h
          = %d         N        D smd.It
         mG        ro         IN(1
         ,
         8)




            G
         OUP
         BY
         sm
         .DESCI        RI






         O
         R
         DER BY D.D
         SCR        IP        IO
         N
         ,smd.POSITI
         N
         ,

         taset          t        c.ExecuteD
         ta
         sQ        ss);




                 tem        data        t.T
         ble
         s[        0]        .T        ab        leName=         " al ar y
     G
         r
     dd(tem
     da
         a
     s
     et.Tables[
             0
         ]
         .Copy
         (
         ));


     string
         s
     S
         Q
     LG
         r
     os sT otal = SQ
     L
         Pa
     r
     ser.Ma eSQ L("
     S
         ELECT '  o
         t

     A
         mount, D.Des r
     i
         ption Depa tm n
         t


     M
         O


     I NN ER J
     O
         N
     S AL RY ONTH Y m ON

     m.SA LARYMONTH LY ID
     s md.SALARYMON
         T


     LEFT J
     OI
         DEPARTMENT
     D N m.
         D
         EPARTME NT ID = D.D EP ARTMENTI
     D
         GRO
     P
         BY

     D.DESCRIPTION
         ORDER
     B
     D.DESCRIPT
         IO

     te
         m
     pda
     t
         aset = tc.E
     x
         ecuteD
     a
         t
     a
         S
     et(s
     S
         Q
     L
         Gr temp
         a
     taset.Tab
     es
     [0 =
         rootD
     a
         ta
     s
     et.Tabl
         e
     s.se Copy()
         ;


     strng sSQLOPIItems =
         SQLPar
     er.Make
     QL(@"SELECT op.Name 
         D
         ESCRIPTION,Sum(opd
         .C
         h
         ngeNetAm
         unt) Amo
         unt,D.DESCRI        ment








             FROM OP
         P
         oce
         sDetail
         I
         t
         e                                     
                 LEFT JO
         N
         OpiItem o
         p
          ON opd
         i
         .OPIItemID = op.OpiItemID
                                                         LEFT JOIN OPIProcessDetail opd ON opd.OPIProcessDetailID = opdi.OPIProcessDetailID
                                                         LEFT JOIN OPIProcess opp ON opd.OPIProcessID = opp.OPIProcessID
                                                         LEFT JOIN Department D ON opd.DepartmentID = D.DEPARTMENTID
                                                         WHERE opp.OPIMonth = %d
                                                         GROUP BY op.Name,D.DESCRIPTION,op.SequenceNO
                                                         ORDER BY D.DESCRIPTION,op.SequenceNO", dateTime);

     tempdataset = tc.ExecuteDataSet(sSQL
     O
         IItems);


     pdataset.Ta
         l
     s[
             0
         ].TableName =
         "
     OPIItems";


     aset.Tables
         .Add(te
     m
         p
     d
         a
     taset.Tab
     e
         [0].Copy());


     tring sSQLT
     o
         talOPI
             = S
     Q
     LParser.Mak
         e
     SQL(@"
         S
         E
         L
         E
         CT  
         '
         T
         o
         tl        n,SUM(
         pdi.ChangeNetA
         o
         nt)  Amou
         n
         t,D.Des
         c
         ription Department
                                                             FROM OPIProcessDetailItem opdi
                                                             LEFT JOIN OpiItem op ON opdi.OPIItemID = op.OpiItemID
                                                             LEFT JOIN OPIProcessDetail opd ON opd.OPIProcessDetailID = opdi.OPIProcessDetailID
                                                             LEFT JOIN OPIProcess opp ON opd.OPIProcessID = opp.OPIProcessID
                                                             LEFT JOIN Department D ON opd.DepartmentID = D.DEPARTMENTID
                                                             WHERE opp.OPIMonth = %d






          G
         R
         OUP BY D.DESCR
         I
         PTION











         RDER BY D.DE
         SC        me);






         t
         empdataset 
         =
          tc.Ex
         e
         c
         u
         t
         eDat
         a
         S
         e
         ts              
                tempd
         t
         set.Table
         s
         [0].Tab
         l
         eName = "TotalOPI";
     rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

     var sSQLGrandTotal = SQLParser.MakeSQL(@"SELECT 'Grand Total' DESCRIPTION,SUM(tab1.Amount)  Amount,tab1.Department
                                                     FROM
                                                     (SELECT 'Total Gross' Description ,SUM(smd.ChangedAmount)  Amount,
                                                     D.Description Department
                                                     FROM SALARYMONTHLYDETAIL smd
                                                     INNER JOIN SALARYMONTHLY sm ON sm.SALARYMONTHLYID = smd.SALARYMONTHLYID
                                                     LEFT JOIN DEPARTMENT D ON sm.DEPARTMENTID = D.DEPARTMENTID
                                                     WHERE sm.SalaryMonth = %d AND smd.ITEMGROUP IN(1,8)




                   SCRIPTION








                   nion










                   T  'Total O
         P
         I' Des
         c
         rip
         t
         ion,SUM(opd
         i
         .Chang
         e
         N
         e
         t
         Amou
         n
         t
         )
          A              






            D.Description Department
                                                     FROM OPIProcessDetailItem opdi
                                                     LEFT JOIN OpiItem op ON opdi.OPIItemID = op.OpiItemID
                                                     LEFT JOIN OPIProcessDetail opd ON opd.OPIProcessDetailID = opdi.OPIProcessDetailID
                                                     LEFT JOIN OPIProcess opp ON opd.OPIProcessID = opp.OPIProcessID
                                                     LEFT JOIN Department D ON opd.DepartmentID = D.DEPARTMENTID
                                                     WHERE opp.OPIMonth = %d
                                                     GROUP BY D.DESCRIPTION)tab1
                                                     GROUP BY tab1.Department
                                                     Order By tab1.Department", dateTime, dateTime);

     tempd
     a
         aset = t
     c
         .x LGrandTotal
         ;


     t
         e
     mpdataset.Ta
         b
     le "GrandTota
     l
     ";


     o
     tDataset.T
         ab set.Tables[
         0
     ].Copy
     (
     ));


     s
         t
     r
         i
     n
         g sS
         Q
     L
         D
     eu arser.akeSQL(@"SELEC

         md.Descri
         p
         tion ,S
         U
         M(smd.ChangedAmount)  Amount,D.Description Department
                                                                 FROM SALARYMONTHLYDETAIL smd
                                                                 left JOIN SALARYMONTHLY sm ON sm.SALARYMONTHLYID = smd.SALARYMONTHLYID
                                                                 LEFT JOIN DEPARTMENT D ON sm.DEPARTMENTID = D.DEPARTMENTID
                                                                 WHERE sm.SalaryMonth = %d AND smd.ItemGroup IN(3)
                                                                 GROUP BY smd.DESCRIPTION,D.DESCRIPTION,smd.POSITION
                                                                 ORDER BY D.DESCRIPTION,smd.POSITION", dateTime);

     tempdataset = tc.ExecuteDataSet(sSQLDeductedItems);
     tempdataset.Tables[0].TableName = "Deduction";
     rootDataset.Tables.Add(tempdataset.Tables[0].Copy());

     var sSQLTotalDeduction = SQLParser.MakeSQL(
         @"SELECT 'Total Deduction' Description ,SUM(smd.ChangedAmount)  Amount,D.Description Department
                                                                 FROM SALARYMONTHLYDETAIL smd
                                                                 INNER JOIN SALARYMONTHLY sm ON sm.SALARYMONTHLYID = smd.SALARYMONTHLYID
                                                                 LEFT JOIN DEPARTMENT D ON sm.DEPARTMENTID = D.DEPARTMENTID
                                                                 WHERE sm.SalaryMonth = %d AND smd.ITEMGROUP IN(3)
                                                                 GROUP BY D.DESCRIPTION
                                                                 ORDER BY D.DESCRIPTION", dateTime);

     tempdataset = tc.ExecuteDataSet(sSQLTotalDeduction);
     tempdataset.Tables[0].TableName = "TotalDeduction";
     rootDataset.Tables.Add(t
     e
     pdataset
         .ables[0]
         .Cp stri
         g
     sN
     e
         tSalary = SQLP
     a
     rser.MakeSQL(@
     "
     SE '  Descript
     i
         on, (t1
         .A
     m
         o
     unt - t2.m
     unt) Amount
         ,t
         FROM


     (SELECT '
     G
         rand To
         t
     al' DESCRIPTION,SUM(tab1.Amount) Amount,tab1.Department
         FROM
     (SELECT 'Total Gross' Description ,SUM(smd.ChangedAmount) Amount,D.Description Department
     FROM SALARYMONTHLYDETAIL smd
         INNER JOIN SALARYMONTHLY sm ON sm.SALARYMONTHLYID = smd.SALARYMONTHLYID
     LEFT JOIN DEPARTMENT D ON sm.DEPARTMENTID = D.DEPARTMENTID
     WHERE sm.SalaryMonth =  %d AND smd.ITEMGROUP IN(1, 8)
     GROUP BY D.DESCRIPTION


     U
     n
         in


     SELECT 'Total O
     P
         I' (opdi.Chang
     e
         NetAmo
     u
         n
     t
         )
     Amount,
         .
     escription
         De


     F
         R
     O
         M
     OPI
         P
     r
         o
     cs
         LEFT JOIN OpiItem op ON opdi.OPIItemID = op.OpiItemID
     LEFT JOIN OPIProcessDetail opd ON opd.OPIProcessDetailID = opdi.OPIProcessDetailID
     LEFT JOIN OPIProcess opp ON opd.OPIProcessID = opp.OPIProcessID
     LEFT JOIN Department D ON opd.DepartmentID = D.DEPARTMENTID
     WHERE opp.OPIMonth =  %d
         GROUP BY D.DESCRIPTION)tab1
         GROUP BY tab1.Department)t1
         LEFT OUTER join
     (S
         E

     LC on' Descrip
     i
         n,
         SUM(smd.Change
     d
         Amount) Amount,D.
         D
         es ent
         LYDETAIL sm
         d


     SALAR
         MONTHLY sm
         O
     sm.SALAR
         Y
     MONTHLY
     I
         D = smd.SALARYMONTHLYID
     LEFT JOIN DEPARTMENT D ON sm.DEPARTMENTID = D.DEPARTMENTID
     WHERE sm.SalaryMonth =  %d AND smd.ITEMGROUP IN(3)
     GROUP BY D.DESCRIPTION)t2
         ON t1.Department = t2.Department
     ORDER BY t1.Department", dateTime, dateTime, dateTime);

     tempdataset = tc.ExecuteDataSet(sNetSalary);
     tempdataset.Tables[0].TableName = "NetSalary";
     rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }

 return rootDataset;
 }

 internal static DataSet GetStaggingData(TransactionContext tc)
 et =
     new
         ataSet();


 DataSet t
 m
     d
 a
     taset = new D


 string sSQL
     =
     S
 Q
     Par
 er.M
 akeSQL(@"
         EL
         E
         C
         T

         *         empda
         as
         t

         = tc.Execut
         0]        .T        abl
         taset.
         bl
         es.A
         d(        te        m
         pd
         ataset.Tabl
         e
         s[0
         ]
         .Cop
         y
         ());

                                                                 s        L = SQ
         LP        rs        r.MakeSQL(" SELECT DIS
 e, ar re ar nfo, pr om ot iontype, tillda
 e FR
 fect
     ate"
     ;


 tempdatas
     t
         =
         t
 c.ExecuteD[0].able
 ame = "STAGGING_
 RAD
     SA
 ARY
     A
 SSIGNMENT";


 rootDataset.Table
     sSQ
         = SQLPars
 r.M
     ke
 QL(
     @
 "SELECT dist
 n
     t e
 m
     ployeeno, post ode,
 osti
     gtype, extr
 d
     te
 FRO
     M
 STAGGING_EM
     P
 S
     T
 ING ORDER BY atase
     =
     t
 c.Execut
     D
 t
     aS Table
     am
         =
         "STAGGING_
 E
     MPPOS mpdat
 se
     .Tab
     l
 es[0].Copy
 (
 ));
 h(E
 cepti
     n ex
 (
     ex.M essa
 e);
 }
 rt ur n r
 o
 otD
 a
 taset;
 }

 internal static DataSet GetSalaryComparisonData(TransactionContext tc, DateTime _SalaryMonth, string sEmpID)

 Dat
     Set
 empdat set = n
 w D ta t(
     )
     ;

 t ry


 {
     akeS
     L(@"
         ELECT E.EM
         L
         YE
         NO
         ,
         E.NAME,(G.DE
         C
         I
         P
         TION) Grade,



                (D.D
         S
         R
         I
         TIO
         )  
         D
         epartment
         DE
         S
         .
         NA             





                    IT
         GR
         O
         UP IN(1,8)




                                T
         EN
         sm
         d
         .CHANGEDAM
         OUNT ELSE 0 END)  CurAmount,







         S
         UM        laryMonth =

         %d AND

         s
         m
         d
         .ITEMGROU

         N(1,8) 














          THE
         N

         s
         md        NT          Prv
         m
         ount








           FROM 
         E
         MP                        

                                    L
         FT JOI
          Grades
         G ON E.GRADEID 
         =
          G.GRADEID








             LEF
          J        IN        De        pa        rtmen

          ON
         E.DEPAR
         T
         M
         ET        TMEN         


                                Lef
         t
          Join Designation DES ON E.DESIGNATIONID = D
         E
         SD                                   







                   EFT         J
         O
         IN        S
         a
         lary        Mon        thly s
         m
          ON E        .E        M
         P
         LO        YE        E
         ID =         s        m
         .
         E
         ML            







               LEFT

         JOIN SalaryMo
         n
         thlyDet        i
          sm        LARYM        NTH
         LY        D






                        WHERE 
         s
         m.EMPL
         O
         Y
         E
         EI         IN (        q)




           GROUP BY 
         E
         .EMPLO
         Y
         EEN
         O
         ,E.NAME,G.D
         E
         SCRIPT
         I
         O
         N
         ,
         D.DE
         S
         C
         R
         I





          D        ES        .NAME",
         _
     SalaryMonth
         ,
     PayrollGlobal
         F
     unctions.Payrol
         l

     LastDateOfMo
         nt(_Sal ryMon

     t
     h.Add on hs(1)),


     pID);


     temp at se t =
         t
     c.Ex
         e
     cu laryCompari
     s
         on);


     mp ataset.Tabl es[0].Table
     Nam rison";


     rootDat set T
         able s.Ad
         d
         (
             t
                 e

     mpdat as e
     t
         .
 }
 catc
     (E ceptio
 x) {
     ew.Mess
         ge );


     return rootDat
     set;
 }

 internal static DataSet GetEmpExperience(TransactionContext tc, int empid)

 atas t =
     w DataSet(
     ;


 Da ta St =

     {
         t
         ing sSQLE
         x
         perien e
         = SQLParser.MakeSQL(@"SELECT E.NAME,E.FATHERNAME,E.MOTHERNAME,E.JOININGDATE,E.ENDOFCONTRACTDATE,
                                                             E.Gender,D.DESCRIPTION Department,DES.NAME Designation
                                                             FROM EMPLOYEE e
                                                             Left Outer Join Department D ON E.DEPARTMENTID = D.DEPARTMENTID
                                                             LEFT OUTER JOIN Designation DES ON E.DESIGNATIONID = DES.DESIGNATIONID
                                                             WHERE E.EMPLOYEEID = %n", empid);
         tempdataset = tc.ExecuteDataSet(sSQLExperience);
         tempdataset.Tables[0].TableName = "Experience";
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
     }
     catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return rootDataset;
 }

 internal static DataSet GetEmpsAuditReport(TransactionContext tc, DateTime _SalaryMonth, string sEmpID)
 {
     DataSet ro
     t
     at as e
     t
         = new DataSe


         {
             st in

             s
             SQL Au dit = SQ
             P
             rse r.Ma keSQL(@"S
         Desi
         tion
         G.DESCRIP        TI        ON Grade,





         E,smdI        TE        M
         G
         ROUP,        sm        d.        IT        EMI
         ,E
         J
         O
         I
         N


              F        RO        M EM        PL        O
         Y
         E
         E E 







         D.D
         E
         PART
         MENT        ID        


                                      LEFT JOIN         De
         s
         ignation DE        S         O
         N
          E.DESIGN
         A
         T
         I
         O
         N
         I
         N Grad
         e
         s
         .GRADEID








         ly sm On 
         E
         .EMPLO
         Y
         E
         E
         I
         D = sm        .EMP
         O
         EEID




                    LEFT

         JOI        N         Sa        la        ry        MonthlyDe        ta        is        RY        smd.
         R
         YMONTHLYI




             WHERE

         sm
         .
         Salar        Mo
         n
         t
         EID IN
         %q)




               O
         DER BY E.EMPLOYE
         E
         ID", _SalaryMonth,
             sE
             m
             ID)
             eDataS
             t( S
             LAudit)
             ;
             mpdatas
             t.Tables[0]
             T
             t
             te pda
             aset.T ab les[0].C
             (
             );
         }
         catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
     return rootDataset;
 }

 internal static DataSet GetSalaryRegister(TransactionContext tc, DateTime PayrollFirstDateOfMonth,
     DateTime PayrollLastDateOfMonth, string sEmpID, int payrollTypeID)
 {
     var rootDataset = new DataSet();
     var tempdataset = new DataSet();

     var sql = string.Empty;

     try
     {
         if (payrollTypeID == 1)
         {
             #region Nokia

             sql = SQLParser.MakeSQL(@"SELECT * FROM 
                                                         (SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, CC.Code CostCenter, 'BD80' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) +'-'+ CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %d PeriodStartDate, %d PeriodEndDate,
                                                         CASE allowDeduct.CODE 
                                                         WHEN 'E032' THEN 'N' 
                                                         WHEN 'E033' THEN 'N' 
                                                         ELSE 'R' END ProcessType,  
                                                         CASE salMonD.ITEMID 
                                                         WHEN -101 THEN 'E001' 
                                                         WHEN -129 THEN 'D004'
                                                         WHEN -132 THEN 'O001'
                                                         WHEN -144 THEN 'D001'
                                                         ELSE allowDeduct.CODE END PayElementCode, salMonD.DESCRIPTION Description,
                                                         SUM(salMonD.CHANGEDAMOUNT) Amount, 'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN EMPCOSTCENTER salCC ON salCC.EMPLOYEEID = salMon.EMPLOYEEID
                                                         LEFT JOIN CRG CC ON CC.CRGID = salCC.COSTCENTERID
                                                         LEFT JOIN SALARYMONTHLYDETAIL salMonD ON salMonD.SALARYMONTHLYID = salMon.SALARYMONTHLYID
                                                         LEFT JOIN ALLOWANCEDEDUCTION allowDeduct ON (allowDeduct.NAME = salMonD.DESCRIPTION AND allowDeduct.PAYROLLTYPEID = %n)
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) AND salCC.CURRENTCC = 1
                                                         Group BY E.EMPLOYEENO, E.NAME, CC.Code, salMon.SALARYMONTH, allowDeduct.CODE, salMonD.ITEMID, salMonD.DESCRIPTION

                                                         UNION 

                                                         SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, CC.Code CostCenter, 'BD80' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) +'-'+ CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %d PeriodStartDate, %d PeriodEndDate,
                                                         'R' ProcessType,  
                                                         'E023' PayElementCode, 
                                                         CASE WHEN oi.Name IS NULL THEN 'Leave Accrual' ELSE oi.Name END Description,
                                                         CASE WHEN op.VALUE IS NULL THEN 0 ELSE op.VALUE END Amount,
                                                         'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN EMPCOSTCENTER salCC ON salCC.EMPLOYEEID = salMon.EMPLOYEEID
                                                         LEFT JOIN CRG CC ON CC.CRGID = salCC.COSTCENTERID
                                                         LEFT JOIN OpiParameterIndividual op ON op.EMPLOYEEID = salMon.EMPLOYEEID
                                                         LEFT JOIN OPIITEM oi ON oi.OPIItemId = op.OPIItemId
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) AND oi.OPIItemId = 1 AND salCC.CURRENTCC = 1
                                                         AND op.FROMDATE BETWEEN %d AND %d

                                                         UNION

                                                         SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, CC.Code CostCenter, 'BD80' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) +'-'+ CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %d PeriodStartDate, %d PeriodEndDate,
                                                         'R' ProcessType,  
                                                         'E022' PayElementCode, 
                                                         'Total Earnings' Description,
                                                         SUM(salMonD.CHANGEDAMOUNT) Amount, 'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN EMPCOSTCENTER salCC ON salCC.EMPLOYEEID = salMon.EMPLOYEEID
                                                         LEFT JOIN CRG CC ON CC.CRGID = salCC.COSTCENTERID
                                                         LEFT JOIN SALARYMONTHLYDETAIL salMonD ON salMonD.SALARYMONTHLYID = salMon.SALARYMONTHLYID
                                                         LEFT JOIN ALLOWANCEDEDUCTION allowDeduct ON (allowDeduct.NAME = salMonD.DESCRIPTION AND allowDeduct.PAYROLLTYPEID = %n)
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) AND salMonD.ITEMGROUP IN (1,8) AND salCC.CURRENTCC = 1
                                                         GROUP BY E.EMPLOYEENO, E.NAME, CC.Code, salMon.SALARYMONTH

                                                         UNION

                                                         SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, CC.Code CostCenter, 'BD80' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) +'-'+ CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %d PeriodStartDate, %d PeriodEndDate,
                                                         'R' ProcessType,  
                                                         'D006' PayElementCode, 
                                                         'Total Deductions' Description,
                                                         SUM(salMonD.CHANGEDAMOUNT) Amount, 'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN EMPCOSTCENTER salCC ON salCC.EMPLOYEEID = salMon.EMPLOYEEID
                                                         LEFT JOIN CRG CC ON CC.CRGID = salCC.COSTCENTERID
                                                         LEFT JOIN SALARYMONTHLYDETAIL salMonD ON salMonD.SALARYMONTHLYID = salMon.SALARYMONTHLYID
                                                         LEFT JOIN ALLOWANCEDEDUCTION allowDeduct ON (allowDeduct.NAME = salMonD.DESCRIPTION AND allowDeduct.PAYROLLTYPEID = %n)
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) AND salMonD.ITEMGROUP = 3 AND salCC.CURRENTCC = 1
                                                         GROUP BY E.EMPLOYEENO, E.NAME, CC.Code, salMon.SALARYMONTH
                                                         ) tab1
                                                         ORDER BY tab1.EmployeeID", PayrollFirstDateOfMonth,
                 PayrollLastDateOfMonth, payrollTypeID, PayrollLastDateOfMonth, sEmpID,
                 PayrollFirstDateOfMonth, PayrollLastDateOfMonth, PayrollLastDateOfMonth, sEmpID,
                 PayrollFirstDateOfMonth, PayrollLastDateOfMonth,
                 PayrollFirstDateOfMonth, PayrollLastDateOfMonth, payrollTypeID, PayrollLastDateOfMonth, sEmpID,
                 PayrollFirstDateOfMonth, PayrollLastDateOfMonth, payrollTypeID, PayrollLastDateOfMonth, sEmpID);

             #endregion
         }
         else if (payrollTypeID == 3)
         {
             #region APLL

             sql = SQLParser.MakeSQL(@"SELECT * FROM 
                                                         (SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, '' CostCenter, 'L865' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %s PeriodStartDate, %s PeriodEndDate,
                                                         'R' ProcessType,  
                                                         CASE salMonD.ITEMID 
                                                         WHEN -101 THEN 'E001' 
                                                         WHEN -129 THEN 'D004'
                                                         WHEN -132 THEN 'O001'
                                                         WHEN -144 THEN 'D001'
                                                         ELSE allowDeduct.CODE END PayElementCode, salMonD.DESCRIPTION Description,
                                                         SUM(salMonD.CHANGEDAMOUNT) Amount, 'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN SALARYMONTHLYDETAIL salMonD ON salMonD.SALARYMONTHLYID = salMon.SALARYMONTHLYID
                                                         LEFT JOIN ALLOWANCEDEDUCTION allowDeduct ON (allowDeduct.NAME = salMonD.DESCRIPTION AND allowDeduct.PAYROLLTYPEID = %n)
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) 
                                                         Group BY E.EMPLOYEENO, E.NAME, salMon.SALARYMONTH, allowDeduct.CODE, salMonD.ITEMID, salMonD.DESCRIPTION

                                                         UNION

                                                         SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, '' CostCenter, 'L865' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %s PeriodStartDate, %s PeriodEndDate,
                                                         'R' ProcessType,  
                                                         'E022' PayElementCode, 
                                                         'Total Earnings' Description,
                                                         SUM(salMonD.CHANGEDAMOUNT) Amount, 'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN SALARYMONTHLYDETAIL salMonD ON salMonD.SALARYMONTHLYID = salMon.SALARYMONTHLYID
                                                         LEFT JOIN ALLOWANCEDEDUCTION allowDeduct ON (allowDeduct.NAME = salMonD.DESCRIPTION AND allowDeduct.PAYROLLTYPEID = %n)
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) AND salMonD.ITEMGROUP IN (1,8) 
                                                         GROUP BY E.EMPLOYEENO, E.NAME, salMon.SALARYMONTH

                                                         UNION

                                                         SELECT 'BD' CountryCode, E.EMPLOYEENO EmployeeID, E.NAME EmpName, '' CostCenter, 'L865' EntityCode, 
                                                         CAST(YEAR(salMon.SALARYMONTH) AS VARCHAR) YearCode, 
                                                         %s PeriodStartDate, %s PeriodEndDate,
                                                         'R' ProcessType,  
                                                         'D007' PayElementCode, 
                                                         'Total Deductions' Description,
                                                         SUM(salMonD.CHANGEDAMOUNT) Amount, 'BDT' PayoutCurrency FROM SALARYMONTHLY salMon
                                                         LEFT JOIN  EMPLOYEE E ON E.EMPLOYEEID =  salMon.EMPLOYEEID
                                                         LEFT JOIN SALARYMONTHLYDETAIL salMonD ON salMonD.SALARYMONTHLYID = salMon.SALARYMONTHLYID
                                                         LEFT JOIN ALLOWANCEDEDUCTION allowDeduct ON (allowDeduct.NAME = salMonD.DESCRIPTION AND allowDeduct.PAYROLLTYPEID = %n)
                                                         WHERE salMon.SALARYMONTH = %d AND salMon.EmployeeID IN (%q) AND salMonD.ITEMGROUP = 3 
                                                         GROUP BY E.EMPLOYEENO, E.NAME, salMon.SALARYMONTH
                                                         ) tab1
                                                         ORDER BY tab1.EmployeeID",
                 PayrollFirstDateOfMonth.ToString("dd/MM/yyyy"), PayrollLastDateOfMonth.ToString("dd/MM/yyyy"),
                 payrollTypeID, PayrollLastDateOfMonth, sEmpID,
                 PayrollFirstDateOfMonth.ToString("dd/MM/yyyy"), PayrollLastDateOfMonth.ToString("dd/MM/yyyy"),
                 payrollTypeID, PayrollLastDateOfMonth, sEmpID,
                 PayrollFirstDateOfMonth.ToString("dd/MM/yyyy"), PayrollLastDateOfMonth.ToString("dd/MM/yyyy"),
                 payrollTypeID, PayrollLastDateOfMonth, sEmpID);

             #endregion
         }

         tempdataset = tc.ExecuteDataSet(sql);
         rootDataset.Tables.Add(tempdataset.Tables[0].Copy());
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }

     return rootDataset;
 }

 internal static DataSet GetSalaryCertificateData(TransactionContext tc, int EmpID, int bankID)

 DataSet
     t
 Conver
     .ToString((int
         )
         rt.ToString((int)E
 umSalaryIte
 mC {
     string

     SQLAud
         i
             = SQ
     Parser.MakeSQL
     @"SE
         ECT E.EMPLOYE
         NO,E.NA            

               DE
         .
         AM

         D
         esignation
         D
         .DESCR
         I
         PTION Divis        smd.
         TEMG
         OUP=%n THEN smd.CHA
         GEDAMOU
         T 
         LSE 0 E
         N
         D) GrossAmount,



                        S        EN s
         d.CH
         NGEDAMOUNT ELSE 0 
         ND)  LoanAm
         un
         ,





               S
         U
         M(CASE WHEN
         smd
         ITEMGROUP=%
         n
          AND smd.ITEM
         O
         E

         NO        t





         R
         O
          Em
         loyee 
         E








           INNER

         JOIN BRAN
         H
         S
         NER J
         IN
         B
         A
         NKS b ON B
         r
         B
         A
         NKID

          b.BAN
         K
         ID
                  O
         ID =         ARTME
         T 
         ep O
         N
          E.DEPARTM
         ENTID = Dep.DEPARTMENTID 






            INNER JOIN SALARYMONTHLY sm ON E.E
         MP
         L
         OY
         E
         EID 
         = sm.EMPLOYEEID
                         INNER JOIN         HERE sm.SalaryMonth=(SE
         L
         ECT MAX(
         S
         alaryMonth) 
         F
         R
         M SALARYMONTHLY) 




                   AN
         D

         .EMPLOYEEID =

         n AND B.BANKID = %n 



                           DES.NAME,Dep.DE
         S
         CRIPTION
         ,
         b.NAME,Br.AD
         D
         R
         SS", (int)EnumSalaryGr
     o
     up.Gross
         ,
     (int)EnumSa
     l
         a
     yGroup.Deduct
     i
         ns,
         sItemCode,
         yGroup.Dedu
     e
         tempdataset =
             t
     c.E
         x
     ec udit);


     tempdataset
         .Tables
         [
             0
         ]
         .Tabl
     e
         N
     a
         me root
         a
     taset.Tab
     es
         .A et ));
 }


 c
     at n {
     throw nw Exception(ex.Me
     sage);
 }
 return
     rootDataset;


 }

 internal static DataSet GetSalaryCertificateDataforOtherBank(TransactionContext tc, int EmpID, int bankID)
 {
     at
         a
     Set temp
     d
         a
     tas
         e
     t new DataSet();


     try


     S
         akeSQL
     ELECT E.E L
     YEE O, E.NA
     M
         E, E.JOIN NGDATE, E.ENDOFCONTRACTDATE,Br.ADDRESS BankAddress,
         DES.NAME Designation, b.NAME Bank, smd.ITEMGROUP,
     smd.CHANGEDAMOUNT Amount, smd.DESCRIPTION
         FROM Employee E
     INNER JOIN BRANCHES Br ON E.BRANCHID = Br.BRANCHID
     INNER JOIN BANKS b ON Br.BANKID = b.BANKID
     INNER JOIN DESIGNATION DES ON E.DESIGNATIONID = DES.DESIGNATIONID
     INNER JOIN SALARYMONTHLY sm ON E.EMPLOYEEID = sm.EMPLOYEEID
     INNER JOIN SALARYMONTHLYDETAIL smd ON sm.SALARYMONTHLYID = smd.SALARYMONTHLYID
     WHERE sm.SalaryMonth = (SELECT MAX(SalaryMonth) FROM SALARYMONTHLY)
     AND E.EMPLOYEEID =  %n AND B.BANKID =  %n
         GROUP BY E.EMPLOYEENO,E.NAME,E.JOININGDATE,E.ENDOFCONTRACTDATE,smd.DESCRIPTION,
     DES.NAME,b.NAME,Br.ADDRESS,smd.CHANGEDAMOUNT,smd.POSITION,smd.ITEMGROUP
         ORD ER B
     Y
     smd.P OS T
         ION
     "
         , EmpID , ba kID);


     tempdat
         a
     u
         dit
         )
     ;


     tempdata
         s
     t.Tables[
         0
             .Tabl
     e
         ame =
             "
     O
         rootDa
     ae t.T
         a
     bl es.Add(tempdat
     a
     set.Table
     s
         [
 }
 catch

 (E xc ep ti on ex )


 {
     ow ne E xcept

     i
         on(e.Me s
             sag
             e
         );
 }


 r
     et;
 }

 internal static DataSet GetExceptionEmployeesPF(TransactionContext tc, DateTime fromdate, DateTime todate)
 {
     Dat
     a
         aet = new DataSet(
         ;


     ataSet tempdataset = new DataSet();


     try


     {
         string sSA rser.Ma
         eSQL(@"SELE
         T
         t.E
         ployeeN
         o
         ,
          t        TRAN        AM        OUN
         )  PF        Am        ou        nt,t        .C        o
         n
         ry,





                   er,t.D
         sii        partmet             














                FROM 













         SELE
         T e.
         E
         mpl
         o
         yeeNo,e.N
         am           






                             ,e2.
         RESENTAD
         RE             
         ROM 
         FTRANSAC
         IO
          p







                           pt.E
         PLOY
         EID =
         p
         ex
         Em
         p
         loyeeI



                        yee e
         ON p
         ex.Employee
         D =
         e.
         M
         P
         LOYEEID AND p
         .
         RAN
         D
         ATE BETWEEN %
           LEF
          JOI
          DESIGNATION 
          O
          e
         D
         E
         SIGNATIONI

          D
         .
         DESIGNATION        ER JO
         N EM
         CONTACT e2 ON e2.EM
         LOY
         EI
         =e
         .
         EMPLOYEEID




                                 ON e.
         EP
         A
         RTMENTID = 
         D
         e
         p.DEPA
         TME
         N
         TID





         MPL
         Y
         E
         EID=cmpcc.
         M
         L
         O
         EEI

         A
         ND cmp
         c
         C
         u



         I
         NNER JOIN 
         C
         R
         G
          CC 
         O
         N

         cmpcc.CostC
         e
         n
         t
         erID = CC.CRGID  



















         GROUP BY t.Em
         p
         loy
         e
         eNo, t.N
         a
         me,
         t
         .CostCent
             t
         JO        IN        NGD
         A
         TE,t.D        esig        na        t
         on,t.
         D
         partme
         n
         t

                     tempdat        aset         =         
         SQLAudit)        ;




          temp        da        ase
         .a        bl        eT        ame = " xce
         p
             ti on PF";


         r
             o
         otData se ts Ad t.Tab
             e
         s[0].Copy
             ))
         ;

         Excep
             ion
         ex)


         {
             w
                 ;
         }
         return rootDat
         set;
     }

     internal static DataSet GetEmpArrearBankAdvice(TransactionContext tc, string sEmpID, string itemType,
         int processID, int branchID)


     DataSet
         o
     ank
         dvices
             =
             nD

     stri
     g sSQL;


     i(sE
     m
     pID != string.Empty)
     {
         sSQL = SQLParser.MakeSQL(
             @"SELECT E.EMPLOYEENO,E.NAME,E.EMAILADDRESS,E.AccountNo,sum(ROUND(APDI.CHANGEDAMOUNT , 0)) CHANGEDAMOUNT,BA.NAME,BR.ADDRESS
                                                 FROM EMPLOYEE E,ArrearProcess AP,ArrearProcessDetail APD,ArrearProcessDetailItem APDI,
                                                 BRANCHES BR,BANKS BA
                                                 WHERE AP.ArrearProcessID=APD.ArrearProcessID
                                                 AND APD.EmployeeID = E.EmployeeID
                                                 AND BR.BranchID=APD.BranchID
                                                 AND BA.BANKID = BR.BANKID
                                                 AND APD.ArrearProcessDetailID = APDI.ArrearProcessDetailID
                                                 AND APDI.ItemType NOT in (8, 11)
                                                 AND APD.EmployeeID IN(%q) And AP.ArrearProcessID=%n And APD.BranchID=%n
                                                 Group by E.EMPLOYEENO,E.NAME,E.EMAILADDRESS,E.AccountNo,BA.NAME,BR.ADDRESS
                                                 order by E.EmployeeNo",
             sEmpID, processID, branchID);
     }
     else
     {
         sSQL = SQLParser.MakeSQL(
             @"SELECT E.EMPLOYEENO,E.NAME,E.EMAILADDRESS,E.AccountNo,sum(ROUND(APDI.CHANGEDAMOUNT, 0)) CHANGEDAMOUNT,BA.NAME,BR.ADDRESS
                                                 FROM EMPLOYEE E,ArrearProcess AP,ArrearProcessDetail APD,ArrearProcessDetailItem APDI,
                                                 BRANCHES BR,BANKS BA
                                                 WHERE AP.ArrearProcessID=APD.ArrearProcessID
                                                 AND APD.EmployeeID = E.EmployeeID
                                                 AND BR.BranchID=APD.BranchID



                                    AN
         D
          BA.BA
         N
         KID

         = BR.BANKID









          AND A        D.Ar        ea
         r

         s          

                           A
         N
         mType NOT in (8, 1
         )




                     And AP
         Ar
         r
         arProc
         ssID=%
         n
         And AP
         .BranchI
         D
         %n





                             Group b
          E.EMPLOYEEN
         ,
         .NA
         E,E.EMA
         I
         L
         AD        untN        .A              




         rd
         r by E
         .
         Emplo
         ye                      



            proc
         e
         ssID, branchID);
                 }
                 oBankAdvices = tc.ExecuteDataSet(sSQL);
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }
             return oBankAdvices;
         }

         internal static DataSet GetEmpArrerSheet(TransactionContext tc, string sEmpID, string itemType, int arrPrcssID)
         {




                DataSet r        tem
         dat
         a
         set = new 
         a
         a
         S
         et();
              que
         y;







             if (s           



         u
         ry

         = SQLPa        RIP
         ION

         GName,




                                       rPr
         .* ,
         R
         OW_NUMBE
          ()
         VE

         (
         P
         RT
         IT        nse
         RAN
         K
         () OVER (O
         DE
         R

         B
         Y
         E.E
         PL
         O
         YEENO) SLGroup























               Grades

         G
         ,
         DESIGNATI
         O
         N 
         D
         ,Emp
         l
         oy
         e
         e E,
              (SE
         EC

         a
         pd.Employe
         eID              





                   ad        e,apd        sc            





                           apdi.SerialNo,apdi.ChangedAmount 
                                                       FROM ArrearProcessDetail apd,ArrearProcessDetailItem apdi
                                                       WHERE apd.ArrearprocessDetailID= apdi.ArrearprocessDetailID
                                                       And apd.ArrearProcessID=%n
                                                       AND apdi.ItemType IN(%q) 
                                                       AND apd.EmployeeID IN (%q)) ArrPrs
                                                       WHERE G.GradeID = ArrPrs.GradeID AND E.EmployeeID = ArrPrs.EmployeeID
                                                       AND D.DesignationID = ArrPrs.DesingnationID
                                                       ORDER BY E.EMPLOYEENO,ArrPrs.SerialNo	", arrPrcssID, itemType,
             sEmpID);
     }
     else
     {
         query = SQLParser.MakeSQL(@"SELECT E.EMPLOYEENO,E.NAME,G.DESCRIPTION GName,
                                                    D.Name DName,D.CODE DCode,G.Code GCode,ArrPrs.*, ROW_NUMBER 
         (
         L,den        se        _RAN
         K
         ) OVER (
         O
         RD        NO                    











                             NATIO
          D,
         mployee E
         ,






                 (SEL
         ECT apd.EmpoyeeID,apd.Proces
         Month,
         pd.Desi
         gnationID,









            apd.G
         r
         deI
         ,apdi.Item
         Type,apdi.It        scripti
         n,







                 apd
         .
         eri
         lNo,apd
         i
         .
         Ch        


                   rP
         o
         cessDe
         ai
          apd,A
         r
         rearP
         ro        pd             





                   WHERE apd.ArrearprocessDetailID= apdi.ArrearprocessDetailID
                                                       And apd.ArrearProcessID=%n
                                                       AND apdi.ItemType IN(%q)) ArrPrs
                                                       WHERE G.GradeID = ArrPrs.GradeID AND E.EmployeeID = ArrPrs.EmployeeID
                                                       AND D.DesignationID = ArrPrs.DesingnationID 
                                                       ORDER BY E.EMPLOYEENO,ArrPrs.SerialNo	", arrPrcssID, itemType);
     }

     return tc.ExecuteDataSet(query);
 }
 catch

 (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return rootDataset;
 }


 internal static DataSet GetEmpArrerSlipGross(TransactionContext tc, string sEmpID, string itemType,
     int processID)


 try
 {
     string sSQL;


     {
         OYE
             NO,
             G
                 .
         CODE Gra
             e,
             D
         G
             .N


         D.DESC MODE,
             APD.
         A
             CCOUNTNO, AP ype
             N Cat
         go
             y,
             E.JOININGD
         A
             TE,
             roces

         P
             inner join ArrearProcessDetail APD on AP.ArrearProcessID = APD.ArrearProcessID
         inner join EMPLOYEE E on APD.EMPLOYEEID = E.EMPLOYEEID
         inner join DEPARTMENT D on APD.DEPARTMENTID = D.DEPARTMENTID
         inner join Grades G on APD.GRADEID = G.GRADEID
         inner join DESIGNATION DG on APD.DesingnationID = DG.DESIGNATIONID
         inner join LOCATION L on APD.LOCATIONID = L.LOCATIONID
         left outer join BRANCHES Br on APD.BRANCHID = Br.BRANCHID
         left outer join BANKS B on Br.BANKID = B.BANKID
         inner join CATEGORY cat on E.CATEGORYID = cat.CATEGORYID
         inner join ArrearProcessDetailItem APDI on APD.ArrearprocessDetailID = APDI.ArrearprocessDetailID
         AND APDI.ItemType IN(%
         q) And AP.ArrearProcessID = %n
             AND APD.EmployeeID IN(%
         q) ORDER BY E.EmployeeNo", itemType, processID, sEmpID);
     }

     else
     {
         sSQL = SQLParser.MakeSQL(@"SELECT E.NAME Name,E.EMPLOYEENO,G.CODE Grade,DG.Name De
         s
         gnation,L.
         D
         scriptio
         n
          L                        


                  D.DES
         C
         RIPTI
         O
         N         .N        ASICS
         L
         ARY,E.PAY
         EN
         TM                       





         APD.ACC
         O
         UN        es        DESCRI
         TION Descri
         ption,APDI.emType,





           APDI.CHANGEDAMOU
         T,
         A
         DI.Ite
         ID,cat
         .
         ESCRIP
         ION Cate
         g
         ry,
         .JOININGD
         ATE,




           E.DEP
         A
         R
         TM                                    
          FRO
         M         







                             Proc
         s
         Detail AP
         D
          on AP.
         A
         rrearProcessID=APD.ArrearProcessID
                                                 inner join EMPLOYEE E on APD.EMPLOYEEID=E.EMPLOYEEID 
                                                 inner join DEPARTMENT D on APD.DEPARTMENTID=D.DEPARTMENTID
                                                 inner join Grades G on APD.GRADEID=G.GRADEID
                                                 inner join DESIGNATION DG on APD.DesingnationID =DG.DESIGNATIONID 
                                                 inner join LOCATION L on APD.LOCATIONID=L.LOCATIONID
                                                 left outer join BRANCHES Br on APD.BRANCHID=Br.BRANCHID
                                                 left outer join BANKS B on Br.BANKID=B.BANKID
                                                 inner join CATEGORY cat on E.CATEGORYID=cat.CATEGORYID
                                                 inner join ArrearProcessDetailItem APDI on APD.ArrearprocessDetailID=APDI.ArrearprocessDetailID
                                                 AND APDI.ItemType IN(%q) And AP.ArrearProcessID=%n
                                                 ORDER BY E.EmployeeNo", itemType, processID);
     }

     oArrearSlips = tc.ExecuteDataSet(sSQL);
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }

 return oArrearSlips;
 }

 internal static DataSet GetArrearSlipDeduct(TransactionContext tc, string sEmpID, string itemType,
     int processID)

 Arrea
     Slip
         = new DataSet();


 t
 y


 {
     string sSQL;

     {
         sS
             L
                 =
                 SQLParser.Make
         S
             Q
         L(G.N
         me
             D
         esignation
         L.
             D
             e
         s
             c
         iptio
             L
         a
         m
             e,
             PI NAME RY


         APD.ACCOUNTNO,APD.ProcessMonth,APDI.DESCRIPTION Description, APDI.ItemType,
         APDI.CHANGEDAMOUNT,APDI.ItemID
             FROM Employee E Inner join ArrearProcessDetail APD on E.EMPLOYEEID = APD.EMPLOYEEID
         inner join ArrearProcess AP on AP.ArrearProcessID = APD.ArrearProcessID
         inner join Grades G on APD.GRADEID = G.GRADEID
         Inner join Department D on APD.DEPARTMENTID = D.DEPARTMENTID
         inner join Designation DG on APD.DesingnationID = Dg.DESIGNATIONID
         inner join ArrearProcessDetailItem APDI on APD.ArrearprocessDetailID = APDI.ArrearprocessDetailID
         left outer join BRANCHES Br on APD.BRANCHID = br.BRANCHID
         left outer join BANKS B on Br.BANKID = B.BANKID
         Inner join Location L on APD.LocationID = L.LocationID
         AND APDI.ItemType in(%q) AND APD.EmployeeID IN(%
         q)
         And AP.ArrearProcessID = %n ORDER BY E.EmployeeNo", itemType, sEmpID, processID);
     }
     else
     {
         sSQL = SQLParser.MakeSQL(@"SELECT E.NAME Name,E.EMPLOYEENO,G.CODE Grade,DG.Name Designation,L.Description LName,
                                                 D.DESCRIPTION Department,B.NAME Bank,E.BASICSALARY ,E.PAYMENTMODE,
                                                 APD.ACCOUNTNO,APD.ProcessMonth,APDI.DESCRIPTION Description,APDI.ItemType,
                                                 APDI.CHAN
         G
         DAMOUNT,
         A
         DI.ItemID


                                        F
         O
          E
         m
         ployee E Inner

         join

         Ar        et        .EMPL
         Y
         EEID=APD.
         MP
         LO                       





          inner 
         j
         oi        es        rrearP
         ocessID=APD.
         ArrearProcesID




         i
         nner join Grades G
         on

         PD.GRA
         EID=G.
         G
         ADEID





                             Inner j
         in  Departme
         t
         D o
          APD.DE
         P
         A
         RT        PART                        

                   r 
         o
         in  De
         ig
         ation 
         D
         G on 
         AP        =D            





                            inner join ArrearProcessDetailItem APDI on APD.ArrearprocessDetailID=APDI.ArrearprocessDetailID  
                                                 left outer join BRANCHES Br on APD.BRANCHID=br.BRANCHID
                                                 left outer join BANKS B on Br.BANKID=B.BANKID 
                                                 Inner join  Location L on APD.LocationID =L.LocationID
                                                 AND APDI.ItemType in(%q)  
                                                 And AP.ArrearProcessID=%n ORDER BY E.EmployeeNo", itemType, processID);
     }
     oArrearSlips = tc.ExecuteDataSet(sSQL);
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return oArrearSlips;
 }

 internal static DataSet GetEmpArrerSlipGross(TransactionContext tc, DateTime arrearMonth, string sEmpID,
     string itemType)

 et();

 try


 string sSQL = SQ
 L
     Pars
 e
 r.MakeSQL(@"SELECT E.
         atio
         ',L.D
         scri
         tion LNa
         e,







                          AME 
         ank,E
         BASI
         SALAR
         ,
         .P
         YM
         E
         NTMODE
         ,




         NTNO,
         PD.P
         cessMont
         ,
         PD
         .DE
         S
         CRIPTION D
         s
         c
         r
         iption,APDI           


           APDI.C
         AN
         G
         E
         D
         A
         OUN
         ,AP
         D
         I.ItemID,c
         t.
         D
         E
         S
         C







            E.
         EP
         R
         T
         MENTID




         nner join

         ArrearP
         r
         ocessDetail APD on AP.ArrearProcessID=APD.ArrearProcessID
                                                 inner join EMPLOYEE E on APD.EMPLOYEEID=E.EMPLOYEEID 
                                                 inner join DEPARTMENT D on APD.DEPARTMENTID=D.DEPARTMENTID
                                                 inner join Grades G on APD.GRADEID=G.GRADEID
                                                 inner join DESIGNATION DG on APD.DesingnationID =DG.DESIGNATIONID 
                                                 inner join LOCATION L on APD.LOCATIONID=L.LOCATIONID
                                                 left outer join BRANCHES Br on APD.BRANCHID=Br.BRANCHID
                                                 left outer join BANKS B on Br.BANKID=B.BANKID
                                                 inner join CATEGORY cat on E.CATEGORYID=cat.CATEGORYID
                                                 inner join ArrearProcessDetailItem APDI on APD.ArrearprocessDetailID=APDI.ArrearprocessDetailID
                                                 AND APD.ProcessMonth=%d AND APDI.ItemType IN(%q) 
                                                 AND APD.EmployeeID IN(%q) ORDER BY E.EmployeeNo", arrearMonth,
     itemType, sEmpID);

 oArrearSlips = tc.ExecuteDataSet(sSQL);
 }
 catch (Exception ex)
 {
     throw new Exception(ex.Message);
 }
 return oArrearSlips;
 }

 internal static DataSet GetCashPaymentSummaryData(TransactionContext tc, DateTime fromdate)
 hPa
     Ds
 e
     t = new DataSet
     (
     )
     ;


 string gr
     oupID = Convert.ToString(ro + Convert.To
 t
     in
 g
     ((int)EnumSala
 r
     yGro
 u
 p.ng qu
 r
     y = SQLPa
 se
 r.LE e.EMP
 OYE
     NO, e.NAME
     RO HLY AS
     sm, SALARYMON
 THLYDETAIL S smd, Employee e
     DEPART
 ENT AS, DESIGNATION AS d2, d
 e
     partment pd
     WHERE s
     m
 SALARY
 ONTHLY
     I
         = smd.S
 LARYMONT
     HL


 ND
     AND d.PARE NT I
     D
         = pd.DEP
 A
     RTMENTID
 AND e.DEPARTMENTID = d.DEPARTMENTID
 AND e.DESIGNATIONID = d2.DESIGNATIONID
 AND sm.SalaryMonth = %d
     AND smd.ITEMCODE = -132 AND smd.ITEMID = -132 AND sm.BRANCHID IS NULL
     ORDER BY e.EMPLOYEENO", fromdate);

 cashPayDset = tc.ExecuteDataSet(query);

 return cashPayDset;
 }

 internal static DataSet GetArrearSlipDeduct(TransactionContext tc, DateTime arrearMonth, string sEmpID,
     string itemType)
 {
     try


     SELE
         T E.
         E Name, E .E MPLOYEENO, G
     COD
         G
     ad
         e, DG.Name 'Desig
         n
     ati
         o
     n',L.Description
     D.
         ESCRIPTI
         N
     De
         art
     m
         ent, B.NAME
         B
     a
         nk, E.BASIC


     P
         .A
         COU
     N
         TNO, APD.Proc
         e
     s
     s
         Month, APDI.DE


     APDI.CHA
         FR
     M
         mpl
     o
         yee E Inner jo
         n
     A
         r
     rearProcessDe
         i
     n
         n
     e
         r join Arre cess
         D


     i
         In PARTM
     NTID
         onID =
             g.DE
     IGNATIONID
         inn
     e
         r join ArrearProcessDe Arr
         arp
     r
         ocessDetailI
     D
         r o
         AP
     D
             .BRANCHID =
         r.B
     R
         A
     N
         HID


     lef B on Br.BAN
         I
             = B
                 .BANKID


     Inner jo
     n
         L A.Loca
         ion
     D
         AND A
     D.ProcessMon
         th = %d AND APDI.ItemType in(%
         ) AND
     PD.Empl
         yeeID IN( % q)


     ORD
         ER loye No"        ,         a
     r
     arM
         nth, ite mT yp e
         oArre
     r
         lips =
             t
     c.Execut
         e
     D
         ata
     S
     et(sSQL);


     ca
         t
     ch Ex ept io n
         ex)


     {
         ceptio
             (ex Me s
         a
             e);
     }


     return oArrearSlips;
 }

 internal static DataSet GetExpensesPaySlipData(TransactionContext tc, DateTime fromDate, DateTime toDate,
     string sEmpID)
 {
     taSet
         );
     try


     {
         rs
             LEC

         e
             .Employe eN o,
             e
                 .Nam e as EmpNam e.O
             T
         P
             AYACCOUNTNO,
             e
                 .
         P
             aymentMode, d men
             ,

         desig.[NAME]
         A
             S
         D
             esignation, g.C IIt
             m,
             I
         NUL
             L
         (Sum(CON
         V
             E
         RT(
             igi
         t,
         o
         pdi.Ne
             t
         A
             mou
             )),
             )
         A
             S Amount
             F
         OM P


         LEFT JOINO ailItem opd

         N
             o
         i.OPIItemId =
             o
         pdi.O
             P
         It
             LEFT JOIN OPI
         rocess
             etail o
             d ON opd.OPIProcess
         D
             etailId = opdi.OPI
         ro
             c
         ssDetail
             d


         LEFT JOIN


         EFT
             J
         O
             I
         N Employee

         e N e.PL YEE ID
             =
             o
         pd.E
             pl
         oyeeI d
             D
                 = e.DEPARTM NT D


         L
             E
         FT JOIN Gra
             es g on g.G
             r
         adeI
             d
                 = e.Grade
         I
             >= %
         d
             AND op.OPIMo
             n
         th <
             = 
             %d A

         G ROU

         Y e.E
             plo ee o, e .Name, d.[DES
         e
             ) src
         (
             r OPI
         tem
             ([Utilit

         xp
             nse
         s
             ], [Leave
         Fa
             e

         A
             ssistanc Exp
         nces /
             Expe
         es], [Drive
         A
             lo

         anc
             e
         s],


         tici pa t
             on F
             nd], [Manager’
         s Telephon
         Exp
             ns
         s],

         [
             Telephone
         Expenses(M
                 o
                 bile
                 Bill ],
         )

         p v;
         "
         et =
             tc.Ex

         cute
             ataSe
             (
                 ue
                     y)
             ;
     }

     t
         row n
         Exceptio
         (
             x.
                 ess
                 a
                 ge);
 }

 return tempDataSet;
 }*/
    }
}