2024-10-14 10:01:49 +06:00
using HRM.BO ;
using Ease.Core.DataAccess ;
using System ;
using System.Data ;
namespace HRM.DA
{
#region SalaryProcessDA
internal class SalaryProcessDA
{
#region Constructor
private SalaryProcessDA ( )
{
}
#endregion
#region Insert function
internal static void Insert ( TransactionContext tc , SalaryProcess item )
{
tc . ExecuteNonQuery (
"INSERT INTO SalaryProcess(SalaryProcessID, SalaryMonth, ProcessDate, ProcessCode,ShowInDeskTop,"
+ " Remarks, PaymentDate, WorkDays, IsFinalized, PayrollTypeID,"
+ " CreatedBy, CreationDate,MONTHENDDATE,userid)" +
" VALUES(%n, %d, %d, %s, %n, %s, "
+ " %d, %n, %b, %n, %n, %d,%d,%n)" ,
item . ID , item . SalaryMonth , item . ProcessDate , item . ProcessCode , item . ShowInDesktops , item . Remarks ,
DataReader . GetNullValue ( item . PaymentDate ) , item . WorkDays , item . IsFinalized , item . PayrollTypeID ,
item . CreatedBy , item . CreatedDate , DataReader . GetNullValue ( item . MonthEndDate ) , item . CreatedBy ) ;
}
#endregion
#region Update function
internal static DataTable SalaryHeadCount ( TransactionContext tc , DateTime salaryMonth , int payrolltypeID )
{
return tc . ExecuteDataTable (
@ "select count(e.employeeid), (select count(s.employeeid) from SALARYMONTHLY s where s.SALARYMONTH =%d and s.PAYROLLTYPEID=%n)
from employee e where e . STATUS = 1 and e . PAYROLLTYPEID = % n ", salaryMonth, payrolltypeID,payrolltypeID );
}
internal static void Update ( TransactionContext tc , SalaryProcess item )
{
tc . ExecuteNonQuery (
"UPDATE SalaryProcess SET SalaryMonth=%d, ProcessDate=%d, ProcessCode=%s, Remarks=%s, PaymentDate=%d, WorkDays=%n, ISFINALIZED=%b, PayrollTypeID=%n, ModifiedBy=%n, ModifiedDate=%d,MONTHENDDATE=%d" +
" WHERE SalaryProcessID=%n" , item . SalaryMonth , item . ProcessDate , item . ProcessCode , item . Remarks ,
item . PaymentDate , item . WorkDays , item . IsFinalized , item . PayrollTypeID , item . ModifiedBy ,
item . ModifiedDate , item . MonthEndDate , item . ID ) ;
}
internal static void SPApprove ( TransactionContext tc , SalaryProcess oSProcess )
{
tc . ExecuteNonQuery ( "UPDATE SalaryProcess SET SHOWINDESKTOP=%n,ShowInDesktopDate=%d" +
" WHERE SalaryMonth=%d and SalaryProcessID=%n" , oSProcess . ShowInDesktops ,
oSProcess . ShowInDesktopDate , oSProcess . SalaryMonth , oSProcess . ID ) ;
}
internal static void ApproveSalary ( TransactionContext tc , DateTime salaryMonth , int payrollTypeid )
{
tc . ExecuteNonQuery ( "UPDATE SalaryProcess SET SHOWINDESKTOP=%b, ShowInDesktopDate=%D" +
" WHERE SalaryMonth=%d and payrollTypeID=%n" , true ,
DateTime . Today , salaryMonth , payrollTypeid ) ;
}
#endregion
#region Get Function
internal static IDataReader GetUnApprovedSalaries ( TransactionContext tc , DateTime dMonthDate , int payrollTypeID )
{
return tc . ExecuteReader ( "SELECT *, (select Count(*) Count From SalaryMonthly where SalaryProcessID=SalaryProcess.SalaryProcessID) Count FROM SalaryProcess Where IsFinalized=%b and SalaryMonth = %d And PayrollTypeID=%n" ,
false , dMonthDate , payrollTypeID ) ;
}
internal static IDataReader Get ( TransactionContext tc , DateTime dMonthDate , int payrollTypeID )
{
return tc . ExecuteReader ( "SELECT * FROM SalaryProcess Where SalaryMonth = %d And PayrollTypeID=%n" ,
dMonthDate , payrollTypeID ) ;
}
internal static IDataReader Get ( TransactionContext tc )
{
return tc . ExecuteReader ( "SELECT * FROM SalaryProcess" ) ;
}
internal static IDataReader Get ( TransactionContext tc , int nID )
{
return tc . ExecuteReader ( "SELECT * FROM SalaryProcess WHERE SalaryProcessID=%n" , nID ) ;
}
internal static bool GetBySMonth ( TransactionContext tc , DateTime dSMonth , int payrollTypeID )
{
bool bShowInDesktop = false ;
object obj =
tc . ExecuteScalar ( "Select SHOWINDESKTOP from SALARYPROCESS where SALARYMONTH=%d AND PAYROLLTYPEID=%n" ,
dSMonth , payrollTypeID ) ;
if ( obj = = DBNull . Value ) return false ;
bShowInDesktop = Convert . ToInt32 ( obj ) > 0 ? true : false ;
return bShowInDesktop ;
}
internal static bool MonthEndStatus ( TransactionContext tc , DateTime dSMonth , int payrollTypeID )
{
bool bShowInDesktop = false ;
object obj =
tc . ExecuteScalar ( "Select ISFINALIZED from SALARYPROCESS where SALARYMONTH=%d AND PAYROLLTYPEID=%n" ,
dSMonth , payrollTypeID ) ;
if ( obj = = DBNull . Value ) return false ;
bShowInDesktop = Convert . ToInt32 ( obj ) > 0 ? true : false ;
return bShowInDesktop ;
}
2025-01-09 12:03:52 +06:00
internal static bool IsSalaryprocessed ( TransactionContext tc , DateTime dSMonth , int payrollTypeID )
{
bool bShowInDesktop = false ;
object obj =
tc . ExecuteScalar ( "Select SALARYPROCESSID from SALARYPROCESS where SALARYMONTH=%d AND PAYROLLTYPEID=%n" ,
dSMonth , payrollTypeID ) ;
if ( obj = = DBNull . Value ) return false ;
else bShowInDesktop = true ;
return bShowInDesktop ;
}
2024-10-14 10:01:49 +06:00
#endregion
#region Delete function
internal static void Delete ( TransactionContext tc , int nID )
{
tc . ExecuteNonQuery ( "DELETE FROM SalaryProcess WHERE SalaryProcessID=%n" , nID ) ;
}
internal static void MonthEnd ( TransactionContext tc , DateTime salaryMonth , int payrollTypeID , int userid )
{
tc . ExecuteNonQuery ( "UPDATE SalaryProcess SET ISFINALIZED =%b, MonthEndDate=%D, UserID=%n WHERE SalaryMonth=%d AND PayrollTypeID=%n" ,
true , DateTime . Now , userid , salaryMonth , payrollTypeID ) ;
//tc.ExecuteNonQuery("UPDATE SalaryMonthly SET ISFINALIZED =%b WHERE SalaryMonth=%d AND PayrollTypeID=%n",
// true, salaryMonth, payrollTypeID);
tc . ExecuteNonQuery (
"Update GradeSalaryAssignment Set ArrearInfo = %n Where ArrearInfo = %n AND GradeSalaryAssignment.EmployeeID IN "
+ " (SELECT Employee.EmployeeID FROM Employee WHERE PayrollTypeID=%n)" ,
EnumArrearType . Paid , EnumArrearType . ToCalculate , payrollTypeID ) ;
tc . ExecuteNonQuery ( "DELETE FROM INCOMETAXTEMP WHERE INCOMETAXTEMP.EMPLOYEEID IN "
+ " (SELECT SALARYMONTHLY.EMPLOYEEID FROM SALARYMONTHLY"
+ " WHERE SALARYMONTHLY.PAYROLLTYPEID= %n AND"
+ " SALARYMONTHLY.SALARYMONTH= %d)" , payrollTypeID , salaryMonth ) ;
tc . ExecuteNonQuery ( "INSERT INTO INCOMETAXTEMP(EMPLOYEEID, ITEMCODE,HeadID,ITEMID, DESCRIPTION,"
+ " THISYEARTOTAL, PREVIOUSAMOUNT, THISMONTHAMOUNT, PROJECTEDAMOUNT,"
+ " SIDE, POSITION)"
+ " (SELECT SALARYTEMPIT.EMPLOYEEID, SALARYTEMPIT.ITEMCODE,SALARYTEMPIT.HeadID, SALARYTEMPIT.ITEMID,"
+ " SALARYTEMPIT.DESCRIPTION, SALARYTEMPIT.THISYEARTOTAL, "
+ " SALARYTEMPIT.PREVIOUSAMOUNT, SALARYTEMPIT.THISMONTHAMOUNT, "
+ " SALARYTEMPIT.PROJECTEDAMOUNT, SALARYTEMPIT.SIDE, SALARYTEMPIT.POSITION "
+ " "
+ " FROM SALARYTEMPIT WHERE SALARYTEMPIT.EMPLOYEEID IN "
+ " (SELECT DISTINCT SALARYMONTHLY.EMPLOYEEID FROM SALARYMONTHLY "
+ " WHERE SALARYMONTHLY.PAYROLLTYPEID= %n AND "
+ " SALARYMONTHLY.SALARYMONTH= %d ))" , payrollTypeID , salaryMonth ) ;
tc . ExecuteNonQuery ( "DELETE FROM SALARYTEMPIT WHERE SALARYTEMPIT.EMPLOYEEID IN "
+ " (SELECT SALARYMONTHLY.EMPLOYEEID FROM SALARYMONTHLY "
+ " WHERE SALARYMONTHLY.PAYROLLTYPEID= %n AND "
+ " SALARYMONTHLY.SALARYMONTH= %d)" , payrollTypeID , salaryMonth ) ;
// In previous payroll (VB6), we always delete individual allowance which expired/ end date complte
// Employee history report can't be seen on previous month, if delete this data.
//
//tc.ExecuteNonQuery("Delete From ADParameterEmployee Where TillDate <= %d AND ADParameterEmployee.EmployeeID IN"
// + " (SELECT Employee.EmployeeID FROM Employee WHERE Employee.PayrollTypeID=%n)",
// salaryMonth, SystemInformation.CurrentSysInfo.PayrollTypeID );
tc . ExecuteNonQuery (
"Update ADParameterEmployee SET ArrearInfo=%n Where TillDate <= %d AND ADParameterEmployee.EmployeeID IN"
+ " (SELECT Employee.EmployeeID FROM Employee WHERE Employee.PayrollTypeID=%n)" , EnumArrearType . Paid ,
salaryMonth , payrollTypeID ) ;
tc . ExecuteNonQuery (
"Update GradeSalaryAssignment Set ArrearInfo = %n Where ArrearInfo = %n AND GradeSalaryAssignment.EmployeeID IN "
+ " (SELECT Employee.EmployeeID FROM Employee WHERE PayrollTypeID=%n)" ,
EnumArrearType . Paid , EnumArrearType . ToCalculate ,
payrollTypeID ) ;
tc . ExecuteNonQuery ( "Update Employee Set Status=MonthStatusUpdate WHERE "
+ " PayrollTypeId=%n and STATUS != MonthStatusUpdate AND MonthStatusUpdate>1 "
+ " AND ENDOFCONTRACTDATE IS NOT null" , payrollTypeID ) ;
// update PF member ship date, there is many thing to do for secondy emloyee
tc . ExecuteNonQuery ( "Update Employee Set PFMEMBERTYPE=%n WHERE "
+ " PayrollTypeId=%n and STATUS != MonthStatusUpdate AND MonthStatusUpdate>1"
+ " AND ENDOFCONTRACTDATE IS NOT null" , EnumPFMembershipType . DiscontinuedfromPayroll ,
payrollTypeID ) ;
tc . ExecuteNonQuery ( @ "Update LOANSCHEDULE set PAYMENTDATE = %d, PAYMENTMODE = 2 where LOANSCHEDULEID in(select supportid from SALARYMONTHLYDETAIL sd, SALARYMONTHLY s where s.SALARYMONTH = %d and s.SALARYMONTHLYID = sd.SALARYMONTHLYID
and sd . ITEMCODE = % n and s . PAYROLLTYPEID = % n ) ", salaryMonth, salaryMonth, (int)EnumSalaryItemCode.Loan_Monthly_Installment, payrollTypeID);
tc . ExecuteNonQuery ( "UPDATE PAYROLLTYPE SET NEXTPAYPROCESSDATE= %d WHERE PayrollTypeId=%n" ,
PayrollGlobalFunctions . PayrollLastDateOfMonth ( salaryMonth . AddMonths ( 1 ) ) , payrollTypeID ) ;
}
#endregion
#region Undo salary
internal static void UndoSalary ( TransactionContext tc , int id , int employeeCount )
{
//if (employeeCount > 0)
//{
tc . CommandTimeOut = 10000 ;
tc . ExecuteNonQuery (
"DELETE FROM SalaryEmpCostCenter WHERE SalaryMonthlyID in( Select SalaryMonthlyID from SalaryMonthly Where SalaryProcessID=%n)" ,
id ) ;
tc . ExecuteNonQuery (
"DELETE FROM SalaryTempIT WHERE EmployeeID in (Select distinct EmployeeID from SalaryMonthly Where SalaryProcessID=%n)" ,
id ) ;
tc . ExecuteNonQuery (
"DELETE FROM SalaryMonthlyDetail WHERE SalaryMonthlyID in( Select SalaryMonthlyID from SalaryMonthly Where SalaryProcessID=%n)" ,
id ) ;
tc . ExecuteNonQuery ( "DELETE FROM SalaryMonthly WHERE SalaryProcessID=%n" , id ) ;
//}
tc . ExecuteNonQuery ( "DELETE FROM SalaryProcess WHERE SalaryProcessID=%n" , id ) ;
}
internal static void UndoMonthlySalaryByIDs ( TransactionContext tc , string ids )
{
tc . ExecuteNonQuery ( "DELETE FROM SalaryEmpCostCenter WHERE SalaryMonthlyID in(%q)" , ids ) ;
tc . ExecuteNonQuery (
"DELETE FROM SalaryTempIT WHERE EmployeeID in (Select EmployeeID from SalaryMonthly Where SalaryMonthlyID in(%q))" ,
ids ) ;
tc . ExecuteNonQuery ( "DELETE FROM SalaryMonthlyDetail WHERE SalaryMonthlyID in(%q)" , ids ) ;
tc . ExecuteNonQuery ( "DELETE FROM SalaryMonthly WHERE SalaryMonthlyID in(%q)" , ids ) ;
}
internal static void UndoMonthlySalaryByEmpIDs ( TransactionContext tc , string ids , DateTime salaryMonth )
{
tc . ExecuteNonQuery ( @ "DELETE FROM SalaryEmpCostCenter
WHERE SalaryMonthlyID in ( SELECT SALARYMONTHLYID FROM SALARYMONTHLY
WHERE EMPLOYEEID in ( % q ) AND Salarymonth = % d ) ", ids,
salaryMonth . PayrollLastDateOfMonth ( ) ) ;
tc . ExecuteNonQuery ( @ "DELETE FROM SalaryTempIT
WHERE EmployeeID in ( % q ) ", ids);
tc . ExecuteNonQuery (
@ "DELETE FROM SalaryMonthlyDetail WHERE SalaryMonthlyID in(SELECT SALARYMONTHLYID FROM SALARYMONTHLY
WHERE EMPLOYEEID in ( % q ) AND Salarymonth = % d ) ", ids,
salaryMonth . PayrollLastDateOfMonth ( ) ) ;
tc . ExecuteNonQuery (
@ "DELETE FROM SalaryMonthly WHERE SalaryMonthlyID in(SELECT SALARYMONTHLYID FROM SALARYMONTHLY
WHERE EMPLOYEEID in ( % q ) AND Salarymonth = % d ) ", ids,
salaryMonth . PayrollLastDateOfMonth ( ) ) ;
}
#endregion
internal static IDataReader GetAllProcess ( TransactionContext tc , int payrollTypeID , DateTime nextPayProcessDate )
{
return tc . ExecuteReader ( "SELECT * FROM SalaryProcess Where PayrollTypeID=%n and SalaryMonth=%d" ,
payrollTypeID , nextPayProcessDate ) ;
}
}
#endregion
}