using System; using System.Data; using Ease.CoreV35.DataAccess; using Ease.CoreV35.Model; using Payroll.BO; namespace Payroll.Service { class TrainingDA { #region Get Function public static IDataReader Get(TransactionContext tc, int id) { return tc.ExecuteReader("SELECT * from Training WHERE TRAININGID=%n", id); } public static IDataReader Get(TransactionContext tc) { return tc.ExecuteReader("SELECT * from Training ORDER BY Name"); } internal static IDataReader Get(TransactionContext tc, string query) { return tc.ExecuteReader(query); } #endregion #region Get DataSet public static DataSet GetEmployeeWiseTrainingSummary(TransactionContext tc, string sEmpIDs, DateTime fromDate, DateTime toDate, int tNature, int tTrainingTypeID, int trainingID, int deptID, int instituteID, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT tr9.EmployeeNo, tr9.EmployeeName,tr9.DCode,tr9.Designation,tr9.DEPARTMENTID,tr9.Department,tr9.branch, tr8.* From (SELECT * FROM (SELECT tr6.*,ISNULL(tr7.TotalTrainingMinutes,0) AS TotalTrainingMinutes,cast(ISNULL((tr7.TotalTrainingMinutes/60),0)AS VARCHAR(MAX))+':'+Cast(ISNULL((tr7.TotalTrainingMinutes%60),0)AS VARCHAR(MAX)) TrainingHour FROM (SELECT tr4.*,ISNULL(tr5.TrainingCost,0) TrainingCost FROM (SELECT tss.TrainingScheduleEmployeeID,tss.TrainingScheduleID,tss.Institute,tss.EmployeeID,tss.TrainingID,tss.StartDate,tss.EndDate,tss.Venue,tss.TrainingNature,tn.TrainingName,tn.TrainingType FROM (SELECT * FROM (SELECT tse.* FROM TrainingScheduleEmployee tse {0}) t LEFT JOIN ( SELECT a.TrainingScheduleID as TSID,i.NAME as Institute,a.TrainingID,a.StartDate,a.EndDate,a.Venue,b.[NAME] TrainingNature from TrainingSchedule a ,NATUREOFTRAINING b,Institution i WHERE a.TrainingNatureID = b.NATUREOFTRAININGID AND a.StartDate BETWEEN '{1}' AND '{2}' AND a.PAYROLLTYPEID={3} AND a.InstituteID = i.INSTITUTIONID {4} {6} {7}) ts ON t.TrainingScheduleID = ts.TSID) tss JOIN ( SELECT trr.TRAININGID, trr.[NAME] TrainingName,trt.[NAME] TrainingType FROM TRAINING trr ,TRAININGTYPE trt WHERE trr.TRAININGTYPEID = trt.TRAININGTYPEID {5}) tn ON tss.TrainingID = tn.TRAININGID) tr4 LEFT JOIN (SELECT SUM(tsec.Amount) TrainingCost,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) tr5 ON tr4.TrainingScheduleEmployeeID = tr5.TrainSchEmpID) tr6 LEFT JOIN (SELECT SUM(DATEDIFF(minute,tsds.StartTime,tsds.EndTime)) TotalTrainingMinutes,tsds.TrainingScheduleID FROM [TrainingScheduleDate] tsds GROUP BY tsds.TrainingScheduleID) tr7 ON tr6.TrainingScheduleID = tr7.TrainingScheduleID) tr10 ) tr8,(SELECT e.EMPLOYEEID,e.EMPLOYEENO, e.[NAME] EmployeeName,d.CODE as DCode,d.[NAME] Designation,d2.DEPARTMENTID,d2.[DESCRIPTION] Department,l.[DESCRIPTION] branch FROM vw_employeedept e LEFT JOIN DESIGNATION d ON e.DESIGNATIONID=d.DESIGNATIONID LEFT JOIN DEPARTMENT d2 ON e.DEPARTMENTID=d2.DEPARTMENTID LEFT JOIN LOCATION l ON e.LOCATIONID=l.LOCATIONID) tr9 WHERE tr8.EmployeeID = tr9.EMPLOYEEID {8} ORDER BY tr9.DCode,tr9.EmployeeName,tr8.StartDate", sEmpIDs.Trim() == string.Empty ? "" : "where tse.employeeid in (" + sEmpIDs + ")", fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), payrollTypeID, tNature == 0 ? "" : " AND b.NATUREOFTRAININGID = " + tNature, tTrainingTypeID == 0 ? "" : "AND trr.TRAININGTYPEID=" + tTrainingTypeID, trainingID == 0 ? "" : " AND a.TRAININGID=" + trainingID, instituteID == 0 ? "" : " AND a.InstituteID=" + instituteID, deptID == 0 ? "" : " AND tr9.DEPARTMENTID=" + deptID); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetTrainingWiseReport(TransactionContext tc, string sEmpIDs, ID trainingID, DateTime fromDate, DateTime toDate, int nTypeID, int nNatureID, int ndeptID, int instituteID, int payrollTypeID) { DataSet oDataSet = null; // string sql = String.Format(@"SELECT scEmp.*,empGr.ttlPrsEmpCount // From // (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName,Count(*) EmpCount // FROM TrainingScheduleEmployee tse,Employee e,Department d ,TrainingSchedule ts // WHERE tse.ScheduleEmpStatus = 2 AND tse.EmployeeID = e.EMPLOYEEID AND ts.TrainingScheduleID=tse.TrainingScheduleID // AND e.DEPARTMENTID = d.DEPARTMENTID AND ts.TRAININGID={0} AND e.PAYROLLTYPEID = {1} // GROUP BY d.DEPARTMENTID,d.DESCRIPTION) scEmp // LEFT Join // (Select Count(*) ttlPrsEmpCount,e.DEPARTMENTID // FROM EMPLOYEE e // WHERE STATUS = 1 AND PAYROLLTYPEID = {2} // GROUP BY e.DEPARTMENTID) empGr // ON empGr.DEPARTMENTID= scEmp.DEPARTMENTID", trainingID.Integer, SystemInformation.CurrentSysInfo.PayrollTypeID.Integer, SystemInformation.CurrentSysInfo.PayrollTypeID.Integer); string sql = String.Format(@"SELECT scEmp.*,empGr.ttlPrsEmpCount From (SELECT t.[NAME], ts.TRAININGID, d.DEPARTMENTID,d.DESCRIPTION AS DeptName,Count(*) EmpCount FROM TrainingScheduleEmployee tse,vw_EmployeeDept e,Department d ,TrainingSchedule ts,Training t WHERE t.TRAININGID=ts.TRAININGID AND tse.ScheduleEmpStatus IN (2, 4) AND tse.EmployeeID = e.EMPLOYEEID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND e.DEPARTMENTID = d.DEPARTMENTID {0} AND ts.PAYROLLTYPEID = {1} AND ts.StartDate BETWEEN '{2}' AND '{3}' {4} {5} {6} {7} GROUP BY d.DEPARTMENTID,d.DESCRIPTION,ts.TRAININGID,t.[NAME]) scEmp LEFT Join (Select Count(*) ttlPrsEmpCount,e.DEPARTMENTID FROM vw_EmployeeDept e GROUP BY e.DEPARTMENTID) empGr ON empGr.DEPARTMENTID= scEmp.DEPARTMENTID ORDER BY scEmp.NAME,scEmp.DeptName ", !trainingID.IsUnassigned ? "AND ts.TRAININGID=" + trainingID.Integer : "", payrollTypeID, fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), nTypeID != 0 ? " AND t.TRAININGTYPEID=" + nTypeID : "", nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "" , instituteID == 0 ? "" : " AND ts.InstituteID=" + instituteID, sEmpIDs.Trim() == string.Empty ? "" : " AND tse.EmployeeID in (" + sEmpIDs + ")"); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetDeptWiseTrainingReport(TransactionContext tc, int dptID, DateTime fromDate, DateTime toDate, int tNatureID, int tTrainingTypeID, int instituteID, int trainingID, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT scEmp.*,empGr.ttlPrsEmpCount From (SELECT n.[NAME] AS Nature,tt.[NAME] AS TrainingType , d.DEPARTMENTID, t.[NAME],t.TRAININGID,d.DESCRIPTION AS DeptName,Count(*) EmpCount FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,TrainingSchedule ts ,Training t, TRAININGTYPE tt, NATUREOFTRAINING n WHERE t.TRAININGTYPEID=tt.TRAININGTYPEID AND ts.TrainingNatureID=n.NATUREOFTRAININGID AND t.TRAININGID=ts.TRAININGID AND tse.ScheduleEmpStatus IN (2, 4) AND tse.EmployeeID = e.EMPLOYEEID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND ts.StartDate BETWEEN '{2}' AND '{3}' AND e.DEPARTMENTID = d.DEPARTMENTID {0} AND ts.PAYROLLTYPEID = {1} {4} {5} {6} {7} GROUP BY t.TRAININGID,t.[NAME],d.DESCRIPTION ,d.DEPARTMENTID,n.[NAME],tt.[NAME]) scEmp LEFT Join (Select Count(*) ttlPrsEmpCount,e.DEPARTMENTID FROM vw_employeedept e GROUP BY e.DEPARTMENTID) empGr ON empGr.DEPARTMENTID= scEmp.DEPARTMENTID", dptID != 0 ? "AND d.DEPARTMENTID=" + dptID : "", payrollTypeID, fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), tTrainingTypeID != 0 ? " AND tt.TRAININGTYPEID=" + tTrainingTypeID : "", tNatureID != 0 ? " AND ts.TrainingNatureID = " + tNatureID : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", trainingID != 0 ? " AND ts.TRAININGID=" + trainingID : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetEmployeeWiseTrainingReport(TransactionContext tc, string sEmpID, int nNatureID, int nTrainingTypeID, int ndeptID, int instituteID, int year, int payrollTypeID) { DataSet oDataSet = null; // string sql = String.Format(@"SELECT emp.EmployeeName,emp.DEPARTMENTID,emp.Designation,EMP.JOININGDATE, COUNT(*) NoOfTraining // FROM (select distinct EmployeeID From TrainingScheduleAttn) tsa,TrainingScheduleEmployee te, // (SELECT e.EMPLOYEEID,e.DEPARTMENTID, e.[NAME] EmployeeName,e.JOININGDATE,d.[NAME] Designation,d2.[DESCRIPTION] Department // FROM Employee e LEFT JOIN DESIGNATION d ON e.DESIGNATIONID=d.DESIGNATIONID // LEFT JOIN DEPARTMENT d2 ON e.DEPARTMENTID=d2.DEPARTMENTID)emp // WHERE emp.EMPLOYEEID=tsa.EmployeeID AND te.EmployeeID=emp.EMPLOYEEID // GROUP BY emp.EMPLOYEEID,emp.EmployeeName,emp.DEPARTMENTID,emp.Designation,EMP.JOININGDATE"); #region Old // string sql = String.Format(@"SELECT emp.EMPLOYEENO,emp.EMPLOYEEID,emp.EmployeeName,emp.JOININGDATE, emp.DEPARTMENTID, // emp.DesCode,emp.Designation,ar.Assigned,ar.Received, // ISNULL(C.ReceivedTillDate,0) AS ReceivedTillDate,ISNULL(D.ReceivedLastYear,0) AS ReceivedLastYear, D.TrainingNature // FROM // (SELECT e.EMPLOYEENO, e.EMPLOYEEID,e.DEPARTMENTID, e.[NAME] EmployeeName,e.JOININGDATE,d.[NAME] Designation,d.CODE AS DesCode ,d2.[DESCRIPTION] Department // FROM vw_employeedept e LEFT JOIN DESIGNATION d ON e.DESIGNATIONID=d.DESIGNATIONID // LEFT JOIN DEPARTMENT d2 ON e.DEPARTMENTID=d2.DEPARTMENTID) emp, // // (SELECT IsNULL(A.employeeID,B.employeeID) AS EmployeeID,ISNULL(A.Assaigned,0) AS Assigned,ISNULL(B.Received,0) AS Received FROM // // (SELECT COUNT(a.ScheduleStatus) AS 'Assaigned' ,a.employeeID // FROM // (SELECT tse.EmployeeID,ts.TrainingScheduleID,ts.ScheduleStatus,ts.StartDate // FROM trainingscheduleemployee tse // INNER JOIN TrainingSchedule ts // ON ts.TrainingScheduleID = tse.TrainingScheduleID // INNER JOIN TRAINING t // ON t.TRAININGID=ts.TRAININGID // WHERE ts.StartDate>='{0}' AND ts.PAYROLLTYPEID={3} {4} {5} {6}) a // GROUP BY a.EMPLOYEEID) A // // FULL OUTER JOIN // ( SELECT COUNT(a.ScheduleStatus) AS 'Received' ,a.employeeID FROM // (SELECT tse.EMPLOYEEID,ts.TrainingScheduleID,ts.ScheduleStatus // FROM trainingscheduleemployee tse // INNER JOIN TrainingSchedule ts // ON ts.TrainingScheduleID = tse.TrainingScheduleID // INNER JOIN TRAINING t // ON t.TRAININGID=ts.TRAININGID // WHERE ts.ScheduleStatus=0 AND ts.PAYROLLTYPEID={3} AND ts.StartDate>='{0}' {4} {5} {6}) a // GROUP BY a.EMPLOYEEID) B // // ON A.employeeID = B.employeeID // // ) ar // FULL OUTER JOIN // ( SELECT COUNT(a.ScheduleStatus) AS 'ReceivedTillDate' ,a.employeeID FROM // (SELECT tse.EMPLOYEEID,ts.TrainingScheduleID,ts.ScheduleStatus // FROM trainingscheduleemployee tse // INNER JOIN TrainingSchedule ts // ON ts.TrainingScheduleID = tse.TrainingScheduleID // INNER JOIN TRAINING t // ON t.TRAININGID=ts.TRAININGID // WHERE ts.ScheduleStatus=0 AND ts.PAYROLLTYPEID={3} {4} {5} {6}) a // GROUP BY a.EMPLOYEEID) C // ON C.employeeID=ar.employeeID // FULL OUTER JOIN // ( SELECT COUNT(a.ScheduleStatus) AS 'ReceivedLastYear' ,a.employeeID, a.TrainingNature // FROM // // (SELECT tse.EMPLOYEEID,ts.TrainingScheduleID,ts.ScheduleStatus, n.[NAME] TrainingNature // FROM trainingscheduleemployee tse // INNER JOIN TrainingSchedule ts // ON ts.TrainingScheduleID = tse.TrainingScheduleID // LEFT JOIN NATUREOFTRAINING n // ON ts.TrainingNatureID = n.NATUREOFTRAININGID // INNER JOIN TRAINING t // ON t.TRAININGID=ts.TRAININGID // WHERE ts.ScheduleStatus=0 AND ts.PAYROLLTYPEID={3} AND YEAR(ts.StartDate)='{1}' {4} {5} {6}) a // // GROUP BY a.EMPLOYEEID,a.TrainingNature ) D // ON C.employeeID=D.employeeID // WHERE ar.EmployeeID=emp.EMPLOYEEID {2} // ORDER BY emp.DesCode,emp.EMPLOYEENO // ", DateTime.Today.Year, DateTime.Today.Year - 1, sEmpID.Trim() == string.Empty ? "" : "AND emp.EMPLOYEEID IN (" + sEmpID + ")", // SystemInformation.CurrentSysInfo.PayrollTypeID.Integer, nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "", // nTrainingTypeID != 0 ? " AND t.TRAININGTYPEID=" + nTrainingTypeID : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : ""); #endregion string sql = String.Format(@"SELECT emp.EMPLOYEENO,emp.EMPLOYEEID,emp.EmployeeName,emp.JOININGDATE, emp.DEPARTMENTID,emp.DesCode,emp.Designation,ISNULL(tmp.Assigned,0) AS Assigned,ISNULL(tmp.Received,0) AS Received, ISNULL(tmp.ReceivedTillDate,0) AS ReceivedTillDate,ISNULL(tmp.ReceivedLastYear,0) AS ReceivedLastYear FROM (SELECT em.* from(SELECT e.EMPLOYEENO, e.EMPLOYEEID,e.DEPARTMENTID, e.[NAME] EmployeeName,e.JOININGDATE,d.[NAME] Designation,d.CODE AS DesCode ,d2.[DESCRIPTION] Department FROM vw_employeedept e LEFT JOIN DESIGNATION d ON e.DESIGNATIONID=d.DESIGNATIONID LEFT JOIN DEPARTMENT d2 ON e.DEPARTMENTID=d2.DEPARTMENTID) em {2} ) emp LEFT OUTER JOIN ( SELECT -- ISNULL(ar.EmployeeID,ISNULL(C.employeeID,D.employeeID)) EmployeeID,ar.Assigned,ar.Received, ISNULL(C.ReceivedTillDate,0) AS ReceivedTillDate,ISNULL(D.ReceivedLastYear,0) AS ReceivedLastYear, D.TrainingNature FROM (SELECT IsNULL(A.employeeID,B.employeeID) AS EmployeeID,ISNULL(A.Assaigned,0) AS Assigned,ISNULL(B.Received,0) AS Received FROM (SELECT COUNT(a.ScheduleStatus) AS 'Assaigned' ,a.employeeID FROM (SELECT tse.EmployeeID,ts.TrainingScheduleID,ts.ScheduleStatus,ts.StartDate FROM trainingscheduleemployee tse INNER JOIN TrainingSchedule ts ON ts.TrainingScheduleID = tse.TrainingScheduleID INNER JOIN TRAINING t ON t.TRAININGID=ts.TRAININGID WHERE ts.StartDate>='{0}' AND ts.PAYROLLTYPEID={3} {4} {5} {6}) a GROUP BY a.EMPLOYEEID) A FULL OUTER JOIN ( SELECT COUNT(a.ScheduleStatus) AS 'Received' ,a.employeeID FROM (SELECT tse.EMPLOYEEID,ts.TrainingScheduleID,ts.ScheduleStatus FROM trainingscheduleemployee tse INNER JOIN TrainingSchedule ts ON ts.TrainingScheduleID = tse.TrainingScheduleID INNER JOIN TRAINING t ON t.TRAININGID=ts.TRAININGID WHERE ts.ScheduleStatus=0 AND ts.PAYROLLTYPEID={3} AND ts.StartDate>='{0}' {4} {5} {6}) a GROUP BY a.EMPLOYEEID) B ON A.employeeID = B.employeeID ) ar FULL OUTER JOIN ( SELECT COUNT(a.ScheduleStatus) AS 'ReceivedTillDate' ,a.employeeID FROM (SELECT tse.EMPLOYEEID,ts.TrainingScheduleID,ts.ScheduleStatus FROM trainingscheduleemployee tse INNER JOIN TrainingSchedule ts ON ts.TrainingScheduleID = tse.TrainingScheduleID INNER JOIN TRAINING t ON t.TRAININGID=ts.TRAININGID WHERE ts.ScheduleStatus=0 AND ts.PAYROLLTYPEID={3} {4} {5} {6}) a GROUP BY a.EMPLOYEEID) C ON C.employeeID=ar.employeeID FULL OUTER JOIN ( SELECT COUNT(a.ScheduleStatus) AS 'ReceivedLastYear' ,a.employeeID, a.TrainingNature FROM (SELECT tse.EMPLOYEEID,ts.TrainingScheduleID,ts.ScheduleStatus, n.[NAME] TrainingNature FROM trainingscheduleemployee tse INNER JOIN TrainingSchedule ts ON ts.TrainingScheduleID = tse.TrainingScheduleID LEFT JOIN NATUREOFTRAINING n ON ts.TrainingNatureID = n.NATUREOFTRAININGID INNER JOIN TRAINING t ON t.TRAININGID=ts.TRAININGID WHERE ts.ScheduleStatus=0 AND ts.PAYROLLTYPEID={3} AND YEAR(ts.StartDate)='{1}' {4} {5} {6}) a GROUP BY a.EMPLOYEEID,a.TrainingNature ) D ON C.employeeID=D.employeeID)tmp ON tmp.EmployeeID=emp.EMPLOYEEID ORDER BY emp.DesCode,emp.EmployeeName ", year, year - 1, sEmpID.Trim() == string.Empty ? "" : "Where em.EMPLOYEEID IN (" + sEmpID + ")", payrollTypeID, nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "", nTrainingTypeID != 0 ? " AND t.TRAININGTYPEID=" + nTrainingTypeID : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetTrainingAttendenceReport(TransactionContext tc, string sEmpIDs, ID trainingID, DateTime dStartDate, DateTime dEndDate, int tTrainingTypeID, int nNatureID, int instituteID, int nScheduleID, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"select a.*,b.Atteddence from (select e.employeeno, d.code,e.name as 'Name',tsa.employeeid as 'EmployeeID',e.departmentid as 'DepartmentID',l.[DESCRIPTION] as 'BranchName', d.name as 'DesignationName',tse.ScheduleEmpStatus from Trainingschedule ts join trainingscheduleattn tsa on tsa.trainingscheduleid=ts.trainingscheduleid join vw_employeedept e on tsa.employeeid=e.employeeid join Location l on e.LOCATIONID = l.LOCATIONID join designation d on e.designationid=d.designationid JOIN TRAINING t ON t.TRAININGID = ts.TRAININGID JOIN TrainingScheduleEmployee tse ON tse.TrainingScheduleID= ts.TrainingScheduleID AND tsa.EmployeeID = tse.EmployeeID Where ts.trainingid={0} AND ts.PAYROLLTYPEID={1} AND ts.StartDate BETWEEN '{7}' AND '{8}' {3} {4} {5} {6} group by tsa.employeeid,e.name,e.departmentid,d.name,d.code,e.employeeno,l.[DESCRIPTION],tse.ScheduleEmpStatus) a inner join (select employeeid,count(TrainingScheduleID) as 'Atteddence' from trainingscheduleattn group by employeeid) b on a.employeeid=b.employeeid {2} order by a.code,a.Name", trainingID.Integer, payrollTypeID, sEmpIDs != string.Empty ? " WHERE a.EmployeeID IN(" + sEmpIDs + ")" : "", nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", tTrainingTypeID != 0 ? " AND t.TRAININGTYPEID=" + tTrainingTypeID : "", nScheduleID != 0 ? " AND ts.TrainingScheduleID=" + nScheduleID : "", dStartDate.ToString("dd MMM yyyy"), dEndDate.ToString("dd MMM yyyy")); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetEmployeeWiseTrainingDetails(TransactionContext tc, string sEmpIDs, DateTime fromDate, DateTime toDate, int nTypeID, int nNatureID, int instituteID, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT tr9.CODE,tr9.EMPLOYEEID,YEAR(tr8.StartDate) AS 'YEAR',tr9.EMPLOYEENO,tr9.DEPARTMENTID, tr9.EmployeeName,tr9.Designation,tr9.JOININGDATE,tr9.Department,tr9.branch, tr8.* From (SELECT * FROM (SELECT tr6.*,ISNULL(tr7.TotalTrainngMinutes,0) AS TotalTrainngMinutes,cast(ISNULL((tr7.TotalTrainngMinutes/60),0)AS VARCHAR(MAX))+':'+Cast(ISNULL((tr7.TotalTrainngMinutes%60),0)AS VARCHAR(MAX)) TrainingHour FROM (SELECT tr4.*,ISNULL(tr5.TrainingCost,0) TrainingCost FROM (SELECT tss.TrainingScheduleEmployeeID,tss.Venue,tss.TrainingScheduleID,tss.InstituteID,tss.EmployeeID,tss.TrainingID,tss.StartDate,tss.EndDate,tss.TrainingNature,tn.TrainingName,tn.TrainingType FROM (SELECT * FROM (SELECT tse.* FROM TrainingScheduleEmployee tse {0}) t LEFT JOIN ( SELECT a.TrainingScheduleID as TSID,a.Venue,a.TrainingID, a.InstituteID,a.StartDate,a.EndDate,b.[NAME] TrainingNature from TrainingSchedule a ,NATUREOFTRAINING b WHERE a.PAYROLLTYPEID={4} AND a.TrainingNatureID = b.NATUREOFTRAININGID AND a.StartDate BETWEEN '{2}' AND '{3}' {6} {7}) ts ON t.TrainingScheduleID = ts.TSID) tss JOIN ( SELECT trr.TRAININGID, trr.[NAME] TrainingName,trt.[NAME] TrainingType FROM TRAINING trr ,TRAININGTYPE trt WHERE trr.TRAININGTYPEID = trt.TRAININGTYPEID {5}) tn ON tss.TrainingID = tn.TRAININGID) tr4 LEFT JOIN (SELECT SUM(tsec.Amount) TrainingCost,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) tr5 ON tr4.TrainingScheduleEmployeeID = tr5.TrainSchEmpID) tr6 LEFT JOIN (SELECT SUM(DATEDIFF(minute,tsds.StartTime,tsds.EndTime)) TotalTrainngMinutes,tsds.TrainingScheduleID FROM [TrainingScheduleDate] tsds GROUP BY tsds.TrainingScheduleID) tr7 ON tr6.TrainingScheduleID = tr7.TrainingScheduleID) tr10 ) tr8,(SELECT e.EMPLOYEEID,e.EMPLOYEENO, d.CODE, e.JOININGDATE ,e.[NAME] EmployeeName,d.[NAME] Designation,d2.[DESCRIPTION] Department,d2.DEPARTMENTID,l.[DESCRIPTION] branch FROM vw_employeedept e LEFT JOIN DESIGNATION d ON e.DESIGNATIONID=d.DESIGNATIONID LEFT JOIN DEPARTMENT d2 ON e.DEPARTMENTID=d2.DEPARTMENTID LEFT JOIN Location l ON e.LOCATIONID=l.LOCATIONID) tr9 WHERE tr8.EmployeeID = tr9.EMPLOYEEID {1} ORDER BY tr9.EMPLOYEEID, tr9.CODE,tr9.EmployeeName, tr8.TrainingNature,tr8.TrainingType ", sEmpIDs.Trim() == string.Empty ? "" : "where tse.employeeid in (" + sEmpIDs + ")", sEmpIDs.Trim() == string.Empty ? "" : "AND tr9.EMPLOYEEID IN(" + sEmpIDs + ")", fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), payrollTypeID, nTypeID != 0 ? " AND trr.TRAININGTYPEID=" + nTypeID : "", nNatureID != 0 ? " AND a.TrainingNatureID=" + nNatureID : "", instituteID != 0 ? "AND a.InstituteID=" + instituteID : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetTrainingNameWiseDetails(TransactionContext tc, string sEmpIDs, DateTime dStartDate, DateTime dEndDate, int nTyprID, int nNatureID, int instituteID, int trainingID, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT * FROM (SELECT t.NAME AS 'TrainingName',e.NAME,d.[DESCRIPTION] Department,e.employeeno,d2.[NAME] Designation,d2.CODE,e.employeeID,d.DEPARTMENTID, YEAR(ts.StartDate) YEAR, ts.Venue,tcost.TrainingCost, tse.TrainingScheduleEmployeeID,ts.TrainingScheduleID,t.trainingID, ts.StartDate,ts.EndDate,ts.TrainingHour,ts.InstituteID FROM vw_employeedept e JOIN TrainingScheduleEmployee tse ON e.EMPLOYEEID=tse.EmployeeID JOIN vw_TrainingSchWithHour ts ON tse.TrainingScheduleID = ts.TrainingScheduleID JOIN TRAINING t ON t.TRAININGID = ts.TRAININGID JOIN DEPARTMENT d ON d.DEPARTMENTID = e.DEPARTMENTID JOIN (SELECT SUM(tsec.Amount) TrainingCost,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) tCost ON tcost.TrainSchEmpID=tse.TrainingScheduleEmployeeID JOIN DESIGNATION d2 ON d2.DESIGNATIONID = e.DESIGNATIONID WHERE ts.PAYROLLTYPEID={3} AND ts.StartDate BETWEEN '{1}' AND '{2}' {0} {4} {5} {6} {7} GROUP BY t.NAME,e.NAME,e.employeeno,e.employeeID,tse.TrainingScheduleEmployeeID,ts.TrainingScheduleID,t.trainingID,d2.[NAME],d2.CODE, ts.Venue, d.[DESCRIPTION],YEAR(ts.StartDate),tcost.TrainingCost,d.DEPARTMENTID, ts.StartDate,ts.EndDate,ts.TrainingHour,ts.InstituteID) a ORDER BY a.TrainingName,a.CODE,a.NAME", sEmpIDs.Trim() == string.Empty ? "" : "AND e.EMPLOYEEID IN (" + sEmpIDs + ")", dStartDate.ToString("dd MMM yyyy"), dEndDate.ToString("dd MMM yyyy"), payrollTypeID, nTyprID != 0 ? " AND t.TRAININGTYPEID=" + nTyprID : "", nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "", trainingID != 0 ? " AND ts.TRAININGID=" + trainingID : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetDepartmentWiseTrainingExpense(TransactionContext tc, string sEmpIDs, int nNatureID, int nTrainingTypeID, int instituteID, int year, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT dpt.DEPARTMENTID,dpt.DeptName, Count(*) EmpCount, SUM(TC.Amount) Cost,Sum(dpt.TotalTrainingMinutes) TotalTrainingMinutes, cast(ISNULL((Sum(dpt.TotalTrainingMinutes)/60),0)AS VARCHAR(MAX))+':' +Cast(ISNULL((SUM(dpt.TotalTrainingMinutes)%60),0)AS VARCHAR(MAX)) TrainingHour FROM (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID, SUM(ts.TotalTrainingMinutes) TotalTrainingMinutes FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,vw_TrainingSchWithHour ts, TRAINING t WHERE e.EmployeeID=tse.EmployeeID AND d.DEPARTMENTID=e.DEPARTMENTID AND tse.ScheduleEmpStatus IN (2, 4) AND ts.TrainingScheduleID=tse.TrainingScheduleID {2} {3} {4} AND t.TRAININGID=ts.TRAININGID {5} AND e.DEPARTMENTID = d.DEPARTMENTID AND YEAR (ts.StartDate)={0} AND e.PAYROLLTYPEID = {1} GROUP BY d.DEPARTMENTID,d.DESCRIPTION ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID,tse.TrainingScheduleID) dpt LEFT JOIN (SELECT SUM(tsec.Amount) Amount,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) TC ON TC.TrainSchEmpID=dpt.TrainingScheduleEmployeeID GROUP BY dpt.DEPARTMENTID,dpt.DeptName ORDER BY dpt.DeptName ", year, payrollTypeID, sEmpIDs != "" ? " AND e.EMPLOYEEID IN(" + sEmpIDs + ")" : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "", nTrainingTypeID != 0 ? " AND t.TRAININGTYPEID=" + nTrainingTypeID : ""); // string sql = String.Format(@"SELECT dpt.DEPARTMENTID,dpt.DeptName, Count(*) EmpCount, SUM(TC.Amount) Cost FROM // (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID // FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,TrainingSchedule ts, TRAINING t // // WHERE e.EmployeeID=tse.EmployeeID AND d.DEPARTMENTID=e.DEPARTMENTID AND tse.ScheduleEmpStatus IN (2, 4) // AND ts.TrainingScheduleID=tse.TrainingScheduleID {2} {3} {4} AND t.TRAININGID=ts.TRAININGID {5} // AND e.DEPARTMENTID = d.DEPARTMENTID AND ts.StartDate>='{0}' AND e.PAYROLLTYPEID = {1}) dpt // LEFT JOIN // (SELECT SUM(tsec.Amount) Amount,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) TC // ON TC.TrainSchEmpID=dpt.TrainingScheduleEmployeeID // GROUP BY dpt.DEPARTMENTID,dpt.DeptName ORDER BY dpt.DeptName // ", DateTime.Today.Year-1, SystemInformation.CurrentSysInfo.PayrollTypeID.Integer, sEmpIDs!=""?" AND e.EMPLOYEEID IN("+sEmpIDs+")":"",instituteID!=0?" AND ts.InstituteID="+instituteID:"", // nNatureID != 0 ? " AND ts.TrainingNatureID=" + nNatureID : "", nTrainingTypeID != 0 ? " AND t.TRAININGTYPEID=" + nTrainingTypeID : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetTrainingConductedByDepartment(TransactionContext tc, int dptID, DateTime fromDate, DateTime toDate, int tNature, int tTrainingType, int trainingID, int instituteID, int payrollTypeID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT tna.DepartmentID, tna.[DESCRIPTION], trs.training,trs.nature,trs.TrainingType,COUNT(*) AS NoOfSession, trs.TotalSchedule from (SELECT ts.*,n.[NAME] nature, tt.[NAME] TrainingType, t.[NAME] training,totalSch.TotalSchedule FROM TrainingSchedule ts,training t,NATUREOFTRAINING n,TRAININGTYPE tt,(SELECT ts.trainingID,COUNT(*) TotalSchedule FROM TrainingSchedule ts WHERE ts.PAYROLLTYPEID={0} AND ts.StartDate BETWEEN '{2}' AND '{3}' {4} GROUP BY ts.trainingID) totalSch WHERE ts.TRAININGID=totalSch.trainingID AND ts.TRAININGID=t.TRAININGID AND tt.TRAININGTYPEID=t.TRAININGTYPEID AND ts.PAYROLLTYPEID={0} AND n.NATUREOFTRAININGID=ts.TrainingNatureID AND ts.StartDate BETWEEN '{2}' AND '{3}' {5} {6} {7}) trs JOIN (SELECT TrainingNeedAnalysisID,tna.DepartmentID,d.[DESCRIPTION] FROM TrainingNeedAnalysis tna ,Department d WHERE tna.Conduct_Required=1 AND d.DEPARTMENTID=tna.DepartmentID {1}) tna ON trs.TNAnalysisID=tna.TrainingNeedAnalysisID GROUP BY trs.training,trs.nature,trs.TrainingType,tna.DepartmentID,tna.[DESCRIPTION], trs.TotalSchedule ORDER BY tna.DepartmentID", payrollTypeID, dptID != 0 ? "AND tna.DepartmentID=" + dptID : "", fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), tNature != 0 ? " AND ts.TrainingNatureID =" + tNature : "", tTrainingType != 0 ? " AND t.TRAININGTYPEID=" + tTrainingType : "", trainingID != 0 ? " AND t.TRAININGID=" + trainingID : "", instituteID != 0 ? " AND ts.InstituteID=" + instituteID : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetEntityWiseTrainingSummery(TransactionContext tc, string sEmpIDs, DateTime fromDate, DateTime toDate, int tNature, int tTrainingType, int instituteID) { DataSet oDataSet = null; string sql = String.Format(@"SELECT p.[DESCRIPTION],t3.* FROM (SELECT ISNULL(t1.PAYROLLTYPEID,t2.PAYROLLTYPEID) AS PAYROLLTYPEID ,ISNULL(t1.[NAME],t2.NAME) as TrainingType, IsNull(t2.NoOfTrainings,0) AS NoOfTrainings , IsNULL(t1.NoOfParticipants,0) AS NoOfParticipants,t1.Cost,t1.TotalTrainingMinutes, CAST(ISNULL(t1.TotalTrainingMinutes/60,0)AS VARCHAR(MAX))+':'+Cast(ISNULL(t1.TotalTrainingMinutes%60,0)AS VARCHAR(MAX)) TrainingHour FROM (SELECT tccc.PAYROLLTYPEID,tccc.[Name],COUNT(tccc.EmployeeID) AS NoOfParticipants,SUM(tccc.Cost) AS Cost , SUM(tccc.TotalTrainingMinutes) AS TotalTrainingMinutes FROM (SELECT tcc.PAYROLLTYPEID, tcc.[NAME],tcc.EmployeeID,tcc.TrainingScheduleEmployeeID, IsNULL(SUM(tcc.TotalTrainingMinutes),0) TotalTrainingMinutes,IsNULL(SUM(tsec.Amount),0) Cost From (SELECT ts.PAYROLLTYPEID,ts.TotalTrainingMinutes, tt.[NAME],tse.EmployeeID,tse.TrainingScheduleEmployeeID FROM vw_TrainingSchWithHour ts,TrainingScheduleEmployee tse,TrainingType tt,Training t WHERE ts.TrainingScheduleID=tse.TrainingScheduleID AND t.TRAININGID=ts.TRAININGID AND t.TRAININGTYPEID=tt.TRAININGTYPEID AND ts.StartDate BETWEEN '{0}' AND '{1}' AND tse.ScheduleEmpStatus IN(2,4) {2} {3} {4} {5}) tcc LEFT JOIN TrainingSchEmpCost tsec ON tsec.TrainSchEmpID = tcc.TrainingScheduleEmployeeID GROUP BY tcc.PAYROLLTYPEID, tcc.[NAME],tcc.EmployeeID,tcc.TrainingScheduleEmployeeID) tccc GROUP BY tccc.[NAME],tccc.PAYROLLTYPEID) t1 FULL OUTER JOIN (SELECT ts.PAYROLLTYPEID, tt.[NAME],COUNT(*) AS NoOfTrainings FROM TrainingSchedule ts,TrainingType tt,Training t WHERE t.TRAININGID=ts.TRAININGID AND t.TRAININGTYPEID=tt.TRAININGTYPEID AND ts.StartDate BETWEEN '{0}' AND '{1}' {2} {3} {4} {5} GROUP BY tt.[NAME],ts.PAYROLLTYPEID) t2 ON t1.[NAME] = t2.[NAME] AND t1.PAYROLLTYPEID = t2.PAYROLLTYPEID) t3, PAYROLLTYPE p WHERE p.PAYROLLTYPEID=t3.PAYROLLTYPEID ORDER BY t3.PAYROLLTYPEID,t3.TrainingType", fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", tNature != 0 ? " AND ts.TrainingNatureID=" + tNature : "", tTrainingType != 0 ? " AND t.TRAININGTYPEID=" + tTrainingType : "", sEmpIDs != string.Empty ? " AND tse.EmployeeID IN (" + sEmpIDs + ")" : ""); // string sql = String.Format(@"SELECT p.[DESCRIPTION],t3.* FROM // (SELECT ISNULL(t1.PAYROLLTYPEID,t2.PAYROLLTYPEID) AS PAYROLLTYPEID ,ISNULL(t1.[NAME],t2.NAME) as TrainingType, // IsNull(t2.NoOfTrainings,0) AS NoOfTrainings , IsNULL(t1.NoOfParticipants,0) AS NoOfParticipants,t1.Cost // FROM // (SELECT tccc.PAYROLLTYPEID,tccc.[Name],COUNT(tccc.EmployeeID) AS NoOfParticipants,SUM(tccc.Cost) AS Cost // FROM // (SELECT tcc.*,IsNULL(SUM(tsec.Amount),0) Cost From // (SELECT ts.PAYROLLTYPEID, tt.[NAME],tse.EmployeeID,tse.TrainingScheduleEmployeeID // FROM TrainingSchedule ts,TrainingScheduleEmployee tse,TrainingType tt,Training t // WHERE ts.TrainingScheduleID=tse.TrainingScheduleID AND t.TRAININGID=ts.TRAININGID AND t.TRAININGTYPEID=tt.TRAININGTYPEID // AND ts.StartDate BETWEEN '{0}' AND '{1}' AND tse.ScheduleEmpStatus IN(2,4) {2} {3} {4} {5}) tcc // LEFT JOIN TrainingSchEmpCost tsec // ON tsec.TrainSchEmpID = tcc.TrainingScheduleEmployeeID // GROUP BY tcc.PAYROLLTYPEID, tcc.[NAME],tcc.EmployeeID,tcc.TrainingScheduleEmployeeID) tccc // // GROUP BY tccc.[NAME],tccc.PAYROLLTYPEID) t1 // FULL OUTER JOIN // (SELECT ts.PAYROLLTYPEID, tt.[NAME],COUNT(*) AS NoOfTrainings // FROM TrainingSchedule ts,TrainingType tt,Training t // WHERE t.TRAININGID=ts.TRAININGID AND t.TRAININGTYPEID=tt.TRAININGTYPEID // AND ts.StartDate BETWEEN '{0}' AND '{1}' {2} {3} {4} {5} // GROUP BY tt.[NAME],ts.PAYROLLTYPEID) t2 // ON t1.[NAME] = t2.[NAME] // AND t1.PAYROLLTYPEID = t2.PAYROLLTYPEID) t3, // PAYROLLTYPE p // WHERE p.PAYROLLTYPEID=t3.PAYROLLTYPEID ORDER BY t3.PAYROLLTYPEID,t3.TrainingType", fromDate.ToString("dd MMM yyyy"), toDate.ToString("dd MMM yyyy"), // instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", tNature != 0 ? " AND ts.TrainingNatureID=" + tNature : "", tTrainingType != 0 ? " AND t.TRAININGTYPEID=" + tTrainingType : "", // sEmpIDs != string.Empty ? " AND tse.EmployeeID IN (" + sEmpIDs + ")" : ""); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } public static DataSet GetTrainingCostDetailsReport(TransactionContext tc, string sEmpIDs) { DataSet oDataSet = null; string sql = String.Format(@"SELECT e.[NAME],tch.TrainingCostHeadID,e.EMPLOYEENO,e.EMPLOYEEID,d.[NAME] Designation,e.DEPARTMENTID,ts.Venue, tch.[Name] CostType,tsec.Amount,t.[NAME] TrainingTopics, TotalEmp.TotalEmployee,TimeDiff.DiffDate,TimeDiff.DiffHour,TimeDiff.StartDate,TimeDiff.EndDate FROM vw_employeedept e JOIN TrainingScheduleEmployee tse ON tse.EmployeeID = e.EMPLOYEEID JOIN TrainingSchedule ts ON ts.TrainingScheduleID = tse.TrainingScheduleID JOIN TrainingSchEmpCost tsec ON tsec.TrainSchEmpID = tse.TrainingScheduleEmployeeID JOIN TrainingCostHead tch ON tch.TrainingCostHeadID = tsec.CostHdID JOIN TRAINING t ON t.TRAININGID = ts.TRAININGID JOIN DESIGNATION d ON d.DESIGNATIONID = e.DESIGNATIONID JOIN (SELECT COUNT(*) AS TotalEmployee,tse.TrainingScheduleID FROM vw_employeedept e, TrainingScheduleEmployee tse WHERE e.EMPLOYEEID = tse.EmployeeID GROUP BY tse.TrainingScheduleID) TotalEmp ON TotalEmp.TrainingScheduleID = ts.TrainingScheduleID JOIN (SELECT ts.TrainingScheduleID,CONVERT(VARCHAR(11),StartDate,106) AS StartDate,CONVERT(VARCHAR(11),EndDate,106) AS EndDate,DATEDIFF(day,StartDate,EndDate) AS DiffDate,DATEDIFF(hh,StartDate,EndDate) AS DiffHour FROM TrainingSchedule ts) TimeDiff ON TimeDiff.TrainingScheduleID=ts.TrainingScheduleID WHERE e.EMPLOYEEID IN({0}) ORDER BY d.CODE ", sEmpIDs); oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } #endregion #region Insert Function public static void Insert(TransactionContext tc, Training oItem) { tc.ExecuteNonQuery("INSERT INTO Training(TRAININGID, CODE, Name,TRAININGTYPEID,STANDARDDURATION,LEARNINGOBJECTIVE,STANDARDCOST,CREATEDBY,CREATEDDATE)" + " VALUES(%n,%s,%s,%n,%n,%s,%n,%n,%d)", oItem.ID.Integer, oItem.Code, oItem.Name, DataReader.GetNullValue(oItem.TrainingTypeID, IDType.Integer), DataReader.GetNullValue(oItem.TrainingDuration), DataReader.GetNullValue(oItem.LearningObjective), DataReader.GetNullValue(oItem.StandardCost), DataReader.GetNullValue(oItem.CreatedBy.Integer), DataReader.GetNullValue(oItem.CreatedDate)); } #endregion #region Update Function public static void Update(TransactionContext tc, Training oItem) { tc.ExecuteNonQuery("UPDATE Training SET CODE=%s,Name=%s,TRAININGTYPEID=%n,STANDARDDURATION=%n,LEARNINGOBJECTIVE=%s,STANDARDCOST=%n,MODIFIEDBY=%n,MODIFIEDDATE=%d" + " WHERE TRAININGID=%n", oItem.Code, oItem.Name, DataReader.GetNullValue(oItem.TrainingTypeID, IDType.Integer), DataReader.GetNullValue(oItem.TrainingDuration), DataReader.GetNullValue(oItem.LearningObjective), DataReader.GetNullValue(oItem.StandardCost), DataReader.GetNullValue(oItem.ModifiedBy.Integer), DataReader.GetNullValue(oItem.ModifiedDate), oItem.ID.Integer); } #endregion #region Delete Function public static void Delete(TransactionContext tc, int id) { tc.ExecuteNonQuery("Delete from Training where TRAININGID=%n", id); } #endregion public static bool IsExists(string TableName, string ColName, string sCode, TransactionContext tc) { object ob = tc.ExecuteScalar("SELECT COUNT(*) FROM " + TableName + " WHERE " + ColName + "=%s", sCode); return (Convert.ToInt32(ob) > 0); } public static DataSet GetTrainingCostingInfoReport(TransactionContext tc, string sEmpIDs, DateTime dFromDate, DateTime dToDate, int tNature, int instituteID, int tTrainingType, int payrollTypeID) { DataSet oDataSet = null; string sql = string.Empty; if (tTrainingType > 0) { sql = String.Format(@"SELECT ISNULL(lt.DEPARTMENTID,ft.DEPARTMENTID) DepartmentID, ISNULL(lt.DeptName,ft.DeptName) DeptName,ISNULL(lt.localNoOfTraining,0) localNoOfTraining, ISNULL(lt.EmpCount,0) locEmpCount,ISNULL(lt.Cost,0) locCost, ISNULL(ft.forNoOfTraining,0) forNoOfTraining, ISNULL(ft.EmpCount,0) forEmpCount,ISNULL(ft.Cost,0) forCost From ( SELECT ltt.*,dlsc.localNoOfTraining FROM (SELECT dpt.DEPARTMENTID,dpt.DeptName, Count(*) EmpCount, SUM(TC.Amount) Cost FROM (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,TrainingSchedule ts ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EmployeeID=tse.EmployeeID AND t.TRAININGTYPEID={6} AND d.DEPARTMENTID=e.DEPARTMENTID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND e.DEPARTMENTID = d.DEPARTMENTID AND e.PAYROLLTYPEID = {5} AND ts.StartDate BETWEEN '{0}' AND '{1}' {2} {3} {4}) dpt LEFT JOIN (SELECT SUM(tsec.Amount) Amount,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) TC ON TC.TrainSchEmpID=dpt.TrainingScheduleEmployeeID GROUP BY dpt.DEPARTMENTID,dpt.DeptName) ltt LEFT JOIN (SELECT e.DEPARTMENTID,Count(DISTINCT tse.TrainingScheduleID) localNoOfTraining FROM TrainingSchedule ts, TrainingScheduleEmployee tse , vw_employeedept e ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EMPLOYEEID = tse.EmployeeID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND ts.StartDate BETWEEN '{0}' AND '{1}' AND t.TRAININGTYPEID={6} {2} {3} {4} Group BY e.DEPARTMENTID ) dlsc ON ltt.DEPARTMENTID=dlsc.DEPARTMENTID) lt FULL OUTER JOIN (SELECT ftt.*,dfsc.forNoOfTraining FROM (SELECT dpt.DEPARTMENTID,dpt.DeptName, Count(*) EmpCount, SUM(TC.Amount) Cost FROM (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,TrainingSchedule ts ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EmployeeID=tse.EmployeeID AND t.TRAININGTYPEID ={7} AND d.DEPARTMENTID=e.DEPARTMENTID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND e.DEPARTMENTID = d.DEPARTMENTID AND e.PAYROLLTYPEID = {5} AND ts.StartDate BETWEEN '{0}' AND '{1}' {2} {3} {4}) dpt LEFT JOIN (SELECT SUM(tsec.Amount) Amount,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) TC ON TC.TrainSchEmpID=dpt.TrainingScheduleEmployeeID GROUP BY dpt.DEPARTMENTID,dpt.DeptName)ftt LEFT JOIN (SELECT e.DEPARTMENTID,Count(DISTINCT tse.TrainingScheduleID) forNoOfTraining FROM TrainingSchedule ts, TrainingScheduleEmployee tse , vw_employeedept e ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EMPLOYEEID = tse.EmployeeID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND ts.StartDate BETWEEN '{0}' AND '{1}' AND t.TRAININGTYPEID={7} {2} {3} {4} Group BY e.DEPARTMENTID) dfsc ON ftt.DEPARTMENTID=dfsc.DEPARTMENTID) ft ON lt.DepartmentID=ft.DepartmentID", dFromDate.ToString("dd MMM yyyy"), dToDate.ToString("dd MMM yyyy"), instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", tNature != 0 ? " AND ts.TrainingNatureID=" + tNature : "", sEmpIDs != string.Empty ? " AND tse.EmployeeID IN (" + sEmpIDs + ")" : "", payrollTypeID, tTrainingType != 4 ? tTrainingType : 0, tTrainingType != 4 ? 0 : tTrainingType); } else { sql = String.Format(@"SELECT ISNULL(lt.DEPARTMENTID,ft.DEPARTMENTID) DepartmentID, ISNULL(lt.DeptName,ft.DeptName) DeptName,ISNULL(lt.localNoOfTraining,0) localNoOfTraining, ISNULL(lt.EmpCount,0) locEmpCount,ISNULL(lt.Cost,0) locCost, ISNULL(ft.forNoOfTraining,0) forNoOfTraining, ISNULL(ft.EmpCount,0) forEmpCount,ISNULL(ft.Cost,0) forCost From ( SELECT ltt.*,dlsc.localNoOfTraining FROM (SELECT dpt.DEPARTMENTID,dpt.DeptName, Count(*) EmpCount, SUM(TC.Amount) Cost FROM (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,TrainingSchedule ts ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EmployeeID=tse.EmployeeID AND t.TRAININGTYPEID NOT IN (4) AND d.DEPARTMENTID=e.DEPARTMENTID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND e.DEPARTMENTID = d.DEPARTMENTID AND e.PAYROLLTYPEID = {5} AND ts.StartDate BETWEEN '{0}' AND '{1}' {2} {3} {4}) dpt LEFT JOIN (SELECT SUM(tsec.Amount) Amount,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) TC ON TC.TrainSchEmpID=dpt.TrainingScheduleEmployeeID GROUP BY dpt.DEPARTMENTID,dpt.DeptName) ltt LEFT JOIN (SELECT e.DEPARTMENTID,Count(DISTINCT tse.TrainingScheduleID) localNoOfTraining FROM TrainingSchedule ts, TrainingScheduleEmployee tse , vw_employeedept e ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EMPLOYEEID = tse.EmployeeID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND ts.StartDate BETWEEN '{0}' AND '{1}' AND t.TRAININGTYPEID NOT IN (4) {2} {3} {4} Group BY e.DEPARTMENTID ) dlsc ON ltt.DEPARTMENTID=dlsc.DEPARTMENTID) lt FULL OUTER JOIN (SELECT ftt.*,dfsc.forNoOfTraining FROM (SELECT dpt.DEPARTMENTID,dpt.DeptName, Count(*) EmpCount, SUM(TC.Amount) Cost FROM (SELECT d.DEPARTMENTID,d.DESCRIPTION AS DeptName ,e.EMPLOYEEID,tse.TrainingScheduleEmployeeID FROM TrainingScheduleEmployee tse,vw_employeedept e,Department d ,TrainingSchedule ts ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EmployeeID=tse.EmployeeID AND t.TRAININGTYPEID IN (4) AND d.DEPARTMENTID=e.DEPARTMENTID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND e.DEPARTMENTID = d.DEPARTMENTID AND e.PAYROLLTYPEID = {5} AND ts.StartDate BETWEEN '{0}' AND '{1}' {2} {3} {4}) dpt LEFT JOIN (SELECT SUM(tsec.Amount) Amount,tsec.TrainSchEmpID FROM TrainingSchEmpCost tsec GROUP BY tsec.TrainSchEmpID) TC ON TC.TrainSchEmpID=dpt.TrainingScheduleEmployeeID GROUP BY dpt.DEPARTMENTID,dpt.DeptName)ftt LEFT JOIN (SELECT e.DEPARTMENTID,Count(DISTINCT tse.TrainingScheduleID) forNoOfTraining FROM TrainingSchedule ts, TrainingScheduleEmployee tse , vw_employeedept e ,Training t WHERE t.TRAININGID=ts.TRAININGID AND e.EMPLOYEEID = tse.EmployeeID AND ts.TrainingScheduleID=tse.TrainingScheduleID AND ts.StartDate BETWEEN '{0}' AND '{1}' AND t.TRAININGTYPEID IN (4) {2} {3} {4} Group BY e.DEPARTMENTID) dfsc ON ftt.DEPARTMENTID=dfsc.DEPARTMENTID) ft ON lt.DepartmentID=ft.DepartmentID", dFromDate.ToString("dd MMM yyyy"), dToDate.ToString("dd MMM yyyy"), instituteID != 0 ? " AND ts.InstituteID=" + instituteID : "", tNature != 0 ? " AND ts.TrainingNatureID=" + tNature : "", sEmpIDs != string.Empty ? " AND tse.EmployeeID IN (" + sEmpIDs + ")" : "", payrollTypeID); } oDataSet = tc.ExecuteDataSet(sql); return oDataSet; } } }