2024-10-14 10:01:49 +06:00
using System ;
using System.Collections.Generic ;
using System.Data ;
2025-01-23 16:34:05 +06:00
using System.IO ;
2024-10-14 10:01:49 +06:00
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using Ease.Core.Model ;
using Ease.Core.Utility ;
using HRM.BO ;
2025-01-23 16:34:05 +06:00
using HRM.BO.Configuration ;
2024-10-14 10:01:49 +06:00
using HRM.DA ;
using HRM.Report.Attendence.AttendenceDataSet ;
2025-01-23 16:34:05 +06:00
using Microsoft.Extensions.Configuration ;
2024-10-14 10:01:49 +06:00
using Microsoft.Reporting.NETCore ;
using NPOI.SS.Formula.Functions ;
using NPOI.XSSF.Streaming.Values ;
using Org.BouncyCastle.Ocsp ;
using Org.BouncyCastle.Utilities.Collections ;
namespace HRM.Report
{
public class rptEcho
{
List < EmployeeBankAccount > _empBankAccs = null ;
List < ESBDefinition > _oGratuityParams = null ;
private DateTime _dSalaryMonth = DateTime . MinValue ;
private DateTime _dMonthEndDate = DateTime . MinValue ;
DateTime _fiscalyearStart ;
DateTime _SalaryMonth ;
string tempEmpID = string . Empty ;
private int TotalEmp = 0 ;
int count = 1 ;
public rptEcho ( )
{
}
#region Payslip
public byte [ ] ShowPaySlipEcho ( int payrollTypeID , DateTime SalaryMonth , string sEmpID , bool isForESS )
{
DataSet oFDST = new DataSet ( ) ;
//_empBankAccs = new List<EmployeeBankAccount>();
//_empBankAccs = new EmployeeBankAccountService().Get();
//_oGratuityParams = new ESBDefinitionService().Get();
Employee oEmployee = null ;
List < Employee > oEmps = new List < Employee > ( ) ;
oEmps = new EmployeeService ( ) . GetByEmpIDs ( sEmpID , payrollTypeID ) ;
List < Designation > oDesigs = new DesignationService ( ) . Get ( EnumStatus . Regardless , payrollTypeID ) ;
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
DateTime salaryMonth = SalaryMonth . LastDateOfMonth ( ) ;
List < SalaryProcess > oSaProcess = new List < SalaryProcess > ( ) ;
oSaProcess = new SalaryProcessService ( ) . Get ( salaryMonth , payrollTypeID ) ;
DataTable basicInfo = new HRM . Report . PayrollDataSet . PayrollDataSet . PayslipBasicInfoDataTable ( ) ;
if ( isForESS )
{
foreach ( SalaryProcess item in oSaProcess )
{
if ( ! item . ShowInDesktops )
{
throw new Exception ( "Salary is not approved yet." ) ;
}
}
}
//bool bIsProcess = SalaryMonthly.IsSalaryProcessed(SessionManager.CurrentEmployee.ID, _SalaryMonth);
DataSet oSalaryMonthlysGross = new SalaryMonthlyService ( ) . GetEmpPaySlipGrossForOthersNew ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , sEmpID ) ;
HRM . Report . PayrollDataSet . PayrollDataSet . PayslipDataTable PayslipData = new HRM . Report . PayrollDataSet . PayrollDataSet . PayslipDataTable ( ) ;
HRM . Report . PayrollDataSet . PayrollDataSet . LoanDataDataTable loanDT = new HRM . Report . PayrollDataSet . PayrollDataSet . LoanDataDataTable ( ) ;
//bool IsApproved = oSaProcess.GetBySMonth(GlobalFunctions.LastDateOfMonth(salaryMonth));
_SalaryMonth = GlobalFunctions . LastDateOfMonth ( salaryMonth ) ;
if ( oSaProcess ! = null & & oSaProcess . Count > 0 & & oSalaryMonthlysGross . Tables [ 1 ] . Rows . Count > 0 )
{
if ( oSaProcess [ 0 ] . PaymentDate ! = DateTime . MinValue )
{
_dMonthEndDate = Convert . ToDateTime ( oSaProcess [ 0 ] . PaymentDate ) ;
}
else
{
_dMonthEndDate = DateTime . MinValue ;
}
}
foreach ( DataRow odRow in oSalaryMonthlysGross . Tables [ 1 ] . Rows )
{
double dbl = Convert . ToDouble ( odRow [ "CHANGEDAMOUNT" ] . ToString ( ) ) ;
if ( dbl = = 0 )
{
continue ;
}
DataRow oRow = this . GetItem ( PayslipData , Convert . ToString ( odRow [ "EMPLOYEENO" ] ) , ( EnumSalaryGroup ) Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) , ( EnumSalaryItemCode ) Convert . ToInt32 ( odRow [ "ItemCode" ] ) , Convert . ToInt32 ( odRow [ "ItemID" ] ) ) ;
if ( oRow = = null )
{
oRow = PayslipData . NewRow ( ) ;
oRow = this . GrossMerge ( oRow , odRow ) ;
PayslipData . Rows . Add ( oRow ) ;
}
if ( Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) = = ( int ) EnumSalaryGroup . Gross )
{
oRow [ "Earning" ] = odRow [ "CHANGEDAMOUNT" ] ;
}
else if ( ( Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) = = ( int ) EnumSalaryGroup . Arrear ) )
{
double dArrear = Convert . ToDouble ( odRow [ "CHANGEDAMOUNT" ] . ToString ( ) ) ;
oRow [ "Arrear" ] = dArrear ;
}
else if ( ( Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) = = ( int ) EnumSalaryGroup . UnauthLeave ) )
{
oRow [ "unAuthLeave" ] = odRow [ "CHANGEDAMOUNT" ] ;
}
}
int nCount = 0 ;
DataSet oSalaryMonthlysDeduct = new SalaryMonthlyService ( ) . GetEmpPaySlipDeductForOthers ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , sEmpID ) ;
string employeeNo = "" ;
DataRow [ ] odros = null ;
if ( oSalaryMonthlysDeduct . Tables [ 0 ] . Rows . Count > 0 )
{
employeeNo = oSalaryMonthlysDeduct . Tables [ 0 ] . Rows [ 0 ] [ "EMPLOYEENO" ] . ToString ( ) ;
odros = PayslipData . Select ( " EmployeeNo='" + oSalaryMonthlysDeduct . Tables [ 0 ] . Rows [ 0 ] [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
}
double dGratuityAmount = 0 ;
double dPFAmount = 0 ;
string sTEmpEmpNo = "" ;
double nCurrPFAmount = 0 ;
foreach ( DataRow odRow in oSalaryMonthlysDeduct . Tables [ 0 ] . Rows )
{
double dbl = Convert . ToDouble ( odRow [ "CHANGEDAMOUNT" ] . ToString ( ) ) ;
if ( dbl = = 0 )
{
continue ;
}
DataRow oRow = null ;
if ( employeeNo ! = odRow [ "EMPLOYEENO" ] . ToString ( ) )
{
odros = PayslipData . Select ( " EmployeeNo='" + odRow [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
nCount = 0 ;
}
if ( odros . Length < = nCount )
{
oRow = PayslipData . NewRow ( ) ;
oRow = this . GrossMerge ( oRow , odRow ) ;
PayslipData . Rows . Add ( oRow ) ;
}
else oRow = odros [ nCount ] ;
oRow [ "DeducDescription" ] = odRow [ "Description" ] ;
if ( ( Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) = = ( int ) EnumSalaryGroup . Deductions ) )
oRow [ "DeducAmount" ] = odRow [ "CHANGEDAMOUNT" ] ;
oRow [ "DeducDescription" ] = odRow [ "Description" ] ;
//oEmployee = oEmps.Find(delegate(Employee oEmpItem) { return oEmpItem.EmployeeNo == odRow["EMPLOYEENO"].ToString().Trim(); });
if ( sTEmpEmpNo = = "" | | sTEmpEmpNo ! = odRow [ "EMPLOYEENO" ] . ToString ( ) )
{
nCurrPFAmount = 0 ;
dPFAmount = 0 ;
oEmployee = oEmps . Find ( delegate ( Employee oEmpItem ) { return oEmpItem . EmployeeNo = = odRow [ "EMPLOYEENO" ] . ToString ( ) . Trim ( ) ; } ) ;
DataRow [ ] odrosPF = oSalaryMonthlysDeduct . Tables [ 0 ] . Select ( " ItemCode='" + ( int ) EnumSalaryItemCode . PF_Contribution + "' AND EMPLOYEENO='" + odRow [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
if ( odrosPF . Length > 0 )
{
DataRow oRowPF = odrosPF [ 0 ] ;
nCurrPFAmount = Convert . ToDouble ( oRowPF [ "CHANGEDAMOUNT" ] ) ;
}
if ( oEmployee ! = null )
{
//if (_oGratuityParams.Count > 0 && _oGratuityParams != null)
//{
// dGratuityAmount = GetGratuityAmount(_oGratuityParams, oEmployee, salaryMonth);
//}
//else
//{
// dGratuityAmount = 0;
//}
dPFAmount = GetPFAmount ( oEmployee , salaryMonth ) ;
}
}
oRow [ "Gratuity" ] = dGratuityAmount ;
double nServiceLength = 0 ;
if ( oEmployee ! = null )
nServiceLength = ServiceYears ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , oEmployee ) ;
if ( nServiceLength > 5 )
{
//oRow["PF"] = dPFAmount + nCurrPFAmount * 2;
oRow [ "PF" ] = dPFAmount + nCurrPFAmount ;
}
else
{
oRow [ "PF" ] = dPFAmount + nCurrPFAmount ;
}
nCount = nCount + 1 ;
employeeNo = odRow [ "EMPLOYEENO" ] . ToString ( ) ;
sTEmpEmpNo = odRow [ "EMPLOYEENO" ] . ToString ( ) ;
}
nCount = 0 ;
DataSet oSalaryMonthlysIncomeTax = new SalaryMonthlyService ( ) . GetEmpPaySlipIncomeTaxAmountForOthers ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , sEmpID ) ;
string employeeNo1 = "" ;
DataRow [ ] odros1 = null ;
if ( oSalaryMonthlysIncomeTax . Tables [ 0 ] . Rows . Count > 0 )
{
employeeNo1 = oSalaryMonthlysIncomeTax . Tables [ 0 ] . Rows [ 0 ] [ "EMPLOYEENO" ] . ToString ( ) ;
odros1 = PayslipData . Select ( " EmployeeNo='" + oSalaryMonthlysIncomeTax . Tables [ 0 ] . Rows [ 0 ] [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
}
foreach ( DataRow odRow in oSalaryMonthlysIncomeTax . Tables [ 0 ] . Rows )
{
DataRow oRow = null ;
if ( employeeNo1 ! = odRow [ "EMPLOYEENO" ] . ToString ( ) )
{
odros1 = PayslipData . Select ( " EmployeeNo='" + odRow [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
nCount = 0 ;
}
if ( odros1 . Length < = nCount ) continue ;
oRow = odros1 [ nCount ] ;
if ( ( Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) = = ( int ) EnumSalaryGroup . OtherItem ) & & ( Convert . ToInt32 ( odRow [ "ItemCode" ] ) = = ( int ) EnumSalaryItemCode . Inc_Tax_Deduction ) )
oRow [ "IncomTaxAmount" ] = odRow [ "CHANGEDAMOUNT" ] ;
nCount = nCount + 1 ;
employeeNo1 = odRow [ "EMPLOYEENO" ] . ToString ( ) ;
}
nCount = 0 ;
DataSet oSalaryMonthlysLaonAmount = new SalaryMonthlyService ( ) . GetEmpPaySlipDeductForLR ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , sEmpID ) ;
string employeeNo12 = "" ;
DataRow [ ] odros12 = null ;
if ( oSalaryMonthlysLaonAmount . Tables [ 0 ] . Rows . Count > 0 )
{
employeeNo12 = oSalaryMonthlysLaonAmount . Tables [ 0 ] . Rows [ 0 ] [ "EMPLOYEENO" ] . ToString ( ) ;
odros12 = PayslipData . Select ( " EmployeeNo='" + oSalaryMonthlysLaonAmount . Tables [ 0 ] . Rows [ 0 ] [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
}
foreach ( DataRow odRow in oSalaryMonthlysLaonAmount . Tables [ 0 ] . Rows )
{
DataRow oRow = null ;
if ( employeeNo12 ! = odRow [ "EMPLOYEENO" ] . ToString ( ) )
{
odros12 = PayslipData . Select ( " EmployeeNo='" + odRow [ "EMPLOYEENO" ] . ToString ( ) + "'" ) ;
nCount = 0 ;
}
if ( odros12 . Length < = nCount ) continue ;
oRow = odros12 [ nCount ] ;
if ( ( Convert . ToInt32 ( odRow [ "ITEMGROUP" ] ) = = ( int ) EnumSalaryGroup . Miscellaneous ) & & ( Convert . ToInt32 ( odRow [ "ItemCode" ] ) = = ( int ) EnumSalaryItemCode . Loan_Remain_Balance ) )
{
oRow [ "LoanDescription" ] = odRow [ "Description" ] ;
oRow [ "LoanAmount" ] = odRow [ "CHANGEDAMOUNT" ] ;
}
nCount = nCount + 1 ;
employeeNo12 = odRow [ "EMPLOYEENO" ] . ToString ( ) ;
}
bool isDesigFromEmp = false ; // ConfigurationManager.GetBoolValue("designation", "desigfromdescriptiontext", EnumConfigurationType.Logic);
foreach ( DataRow oRow in PayslipData . Rows )
{
Employee oEmp = oEmps
. Where ( o = > o . EmployeeNo . ToUpper ( ) . Trim ( ) = = oRow [ "EMPLOYEENO" ] . ToString ( ) . ToUpper ( ) . Trim ( ) )
. SingleOrDefault ( ) ;
if ( oEmp ! = null )
{
if ( isDesigFromEmp )
{
oRow [ "Designation" ] = oEmp . DescriptionText ;
}
else
{
Designation oDesg = oDesigs . Where ( o = > o . ID = = oEmp . DesignationID ) . SingleOrDefault ( ) ;
if ( oDesg ! = null )
{
oRow [ "Designation" ] = oDesg . Name ;
}
}
}
}
basicInfo = oSalaryMonthlysGross . Tables [ 0 ] . Copy ( ) ;
basicInfo . TableName = "BasicInfo" ;
DateTime joinDate = DateTime . MinValue ;
foreach ( DataRow oRow in basicInfo . Rows )
{
joinDate = oRow [ "JoinIngDate" ] = = DBNull . Value ? DateTime . MinValue : Convert . ToDateTime ( oRow [ "JoinIngDate" ] ) ;
if ( joinDate ! = DateTime . MinValue )
oRow [ "JOININGDATE" ] = joinDate . ToString ( "dd MMM yyyy" ) ;
if ( oRow [ "PaymentMode" ] . ToString ( ) = = "1" )
{
oRow [ "PaymentMode" ] = "CashPayment" ;
oRow [ "AccountNO" ] = oRow [ "OutAccountNo" ] ;
oRow [ "BName" ] = oRow [ "OutBank" ] ;
}
else if ( oRow [ "PaymentMode" ] . ToString ( ) = = "2" )
{
oRow [ "PaymentMode" ] = "BankTransfer" ;
}
else if ( oRow [ "PaymentMode" ] = = "3" )
{
oRow [ "PaymentMode" ] = "Provision" ;
}
}
//DataSet dsSubReport = new DataSet();
//PayslipData.TableName = "SalaryMonthlysGross";
//dsSubReport.Tables.Add(PayslipData);
//rlforPayslipdt.TableName = "RemainingLoanforPayslip";
//dsSubReport.Tables.Add(rlforPayslipdt);
loanDT . TableName = "RemainingLoanforPayslip" ;
PayslipData . TableName = "SalaryMonthlysGross" ;
oFDST . Tables . Add ( PayslipData ) ;
oFDST . Tables . Add ( loanDT ) ;
if ( PayslipData ! = null & & PayslipData . Rows . Count < = 0 )
{
return null ;
}
return reportProcessor . ShowDlgForNewPaySlip ( null , basicInfo , oFDST , payrollTypeID ) ;
}
private DataRow GetItem ( PayrollDataSet . PayrollDataSet . PayslipDataTable Source , string sEmpNo , EnumSalaryGroup groupCode , EnumSalaryItemCode itemCode , int ITemID )
{
foreach ( DataRow odRow in Source . Rows )
{
if ( Convert . ToString ( odRow [ "EMPLOYEENO" ] ) = = sEmpNo & &
Convert . ToInt32 ( odRow [ "ItemCode" ] ) = = ( int ) itemCode & & Convert . ToInt32 ( odRow [ "ItemID" ] ) = = ITemID )
{
return odRow ;
}
}
return null ;
}
private DataRow GrossMerge ( DataRow destination , DataRow source )
{
if ( Convert . ToInt32 ( source [ "ItemGroup" ] ) = = 3 )
{
destination [ "Name" ] = source [ "Name" ] ;
destination [ "EMPLOYEENO" ] = source [ "EMPLOYEENO" ] ;
destination [ "Grade" ] = source [ "Grade" ] ;
destination [ "Designation" ] = source [ "Designation" ] ;
destination [ "Department" ] = source [ "Department" ] ;
destination [ "LName" ] = source [ "LName" ] ;
destination [ "RC" ] = source [ "RC" ] ;
destination [ "BName" ] = source [ "BName" ] ;
destination [ "ActualBasic" ] = source [ "ActualBasic" ] ;
if ( source [ "PAYMENTMODE" ] . Equals ( 1 ) )
{
destination [ "PAYMENTMODE" ] = "CashPayment" ;
}
else if ( source [ "PAYMENTMODE" ] . Equals ( 2 ) )
{
destination [ "PAYMENTMODE" ] = "BankTransfer" ;
}
else if ( source [ "PAYMENTMODE" ] . Equals ( 3 ) )
{
destination [ "PAYMENTMODE" ] = "Provision" ;
}
destination [ "ACCOUNTNO" ] = source [ "ACCOUNTNO" ] ;
destination [ "SalaryMonth" ] = Convert . ToDateTime ( source [ "SalaryMonth" ] ) . ToString ( "dd MMM yyyy" ) ;
destination [ "Description" ] = "" ;
destination [ "ItemGroup" ] = source [ "ITEMGROUP" ] ;
destination [ "ItemCode" ] = source [ "ITEMCode" ] ;
destination [ "ItemID" ] = source [ "ITEMID" ] ;
if ( _SalaryMonth . Month > = 1 & & _SalaryMonth . Month < 7 )
{
_fiscalyearStart = new DateTime ( _SalaryMonth . Year - 1 , 7 , 1 ) ;
destination [ "TaxMonth" ] = _fiscalyearStart . ToString ( "MMM yyyy" ) ;
}
else
{
_fiscalyearStart = new DateTime ( _SalaryMonth . Year , 7 , 1 ) ;
destination [ "TaxMonth" ] = _fiscalyearStart . ToString ( "MMM yyyy" ) ;
}
//destination["TaxMonth"] = Payroll.BO.SystemInformation.CurrentSysInfo.TaxYearEndDate.AddMonths(1);
// destination["TaxFiscalYearAmount"] = GlobalFunctions.Round(item.GetAmountOnRange(oEmp, _dFiscalYear, _SalaryMonth.AddMinutes(1), EnumSalaryGroup.Deductions, EnumSalaryItemCode.Inc_Tax_Deduction, (int)EnumSalaryItemCode.Inc_Tax_Deduction));
return destination ;
}
else
{
destination [ "Name" ] = source [ "Name" ] ;
destination [ "EMPLOYEENO" ] = source [ "EMPLOYEENO" ] ;
destination [ "Grade" ] = source [ "Grade" ] ;
destination [ "Designation" ] = source [ "Designation" ] ;
destination [ "Department" ] = source [ "Department" ] ;
destination [ "LName" ] = source [ "LName" ] ;
// destination["RC"] = source["RC"];
destination [ "BName" ] = source [ "BName" ] ;
destination [ "ActualBasic" ] = source [ "ActualBasic" ] ;
if ( source [ "PAYMENTMODE" ] . Equals ( 1 ) )
{
destination [ "PAYMENTMODE" ] = "CashPayment" ;
}
else if ( source [ "PAYMENTMODE" ] . Equals ( 2 ) )
{
destination [ "PAYMENTMODE" ] = "BankTransfer" ;
}
else if ( source [ "PAYMENTMODE" ] . Equals ( 3 ) )
{
destination [ "PAYMENTMODE" ] = "Provision" ;
}
destination [ "ACCOUNTNO" ] = source [ "ACCOUNTNO" ] ;
destination [ "SalaryMonth" ] = Convert . ToDateTime ( source [ "SalaryMonth" ] ) . ToString ( "dd MMM yyyy" ) ;
destination [ "Description" ] = source [ "Description" ] ;
destination [ "ItemGroup" ] = source [ "ITEMGROUP" ] ;
destination [ "ItemCode" ] = source [ "ITEMCode" ] ;
destination [ "ItemID" ] = source [ "ITEMID" ] ;
if ( _SalaryMonth . Month > = 1 & & _SalaryMonth . Month < 7 )
{
_fiscalyearStart = new DateTime ( _SalaryMonth . Year - 1 , 7 , 1 ) ;
destination [ "TaxMonth" ] = _fiscalyearStart . ToString ( "MMM yyyy" ) ;
}
else
{
_fiscalyearStart = new DateTime ( _SalaryMonth . Year , 7 , 1 ) ;
destination [ "TaxMonth" ] = _fiscalyearStart . ToString ( "MMM yyyy" ) ;
}
// destination["TaxFiscalYearAmount"] = GlobalFunctions.Round(item.GetAmountOnRange(oEmp, _dFiscalYear, _SalaryMonth.AddMinutes(1), EnumSalaryGroup.Deductions, EnumSalaryItemCode.Inc_Tax_Deduction, (int)EnumSalaryItemCode.Inc_Tax_Deduction));
return destination ;
}
}
public double GetPFAmount ( Employee oEmp , DateTime salaryMonth )
{
double nAmout = 0.0 ;
DataSet ds = new PFTransactionService ( ) . GetPFBalance ( oEmp . ID , GlobalFunctions . LastDateOfMonth ( salaryMonth ) ) ;
double nServiceLength = ServiceYears ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , oEmp ) ;
foreach ( DataRow dr in ds . Tables [ 0 ] . Rows )
{
if ( Convert . ToInt16 ( dr [ "TranTP" ] ) = = 1 )
{
nAmout = Convert . ToDouble ( dr [ "Amount" ] ) ;
}
//if (nServiceLength > 5)
//{
// nAmout += Convert.ToDouble(dr["Amount"]);
//}
//else
//{
// if (Convert.ToInt16(dr["TranTP"]) != 2)
// {
// nAmout += Convert.ToDouble(dr["Amount"]);
// }
//}
}
return nAmout ;
}
private double ServiceYears ( DateTime dt , Employee oEmp )
{
double n = Global . DateFunctions . DateDiff ( "d" , oEmp . JoiningDate , dt ) ;
if ( n > = 365 )
return n / 365 ;
else
return 0.0 ;
}
//public void ShowReport(int payrollTypeId)
//{
// DataSet oFDST = new DataSet();
// _oGratuityParams = new ESBDefinitionService().Get();
// Employee oEmployee = null;
// List<Employee> oEmps = new List<Employee>();
// oEmps = Employee.Get();
// List<Designation> oDesigs = new DesignationService().Get(EnumStatus.Regardless, payrollTypeId);
// ReportProcessor form = new ReportProcessor();
// _SalaryMonth = _selectedParameter.FromDate.Value.LastDateOfMonth();
// string sEmpID = _selectedParameter.ReportItem.INSQL;
// List<SalaryProcess> oSaProcess = new List<SalaryProcess>();
// oSaProcess = SalaryProcess.Get(_SalaryMonth);
// DataSet oSalaryMonthlysGross = SalaryMonthly.GetEmpPaySlipGrossForOthers(_SalaryMonth, sEmpID);
// PayrollDataSet.PayrollDataSet.PayslipDataTable PayslipData = new Payroll.Report.PayrollDataSet.PayrollDataSet.PayslipDataTable();
// PayrollDataSet.PayrollDataSet.LoanDataDataTable loanDT = new Payroll.Report.PayrollDataSet.PayrollDataSet.LoanDataDataTable();
// //bool IsApproved = oSaProcess.GetBySMonth(GlobalFunctions.LastDateOfMonth(salaryMonth));
// if (oSaProcess != null && oSaProcess.Count > 0 && oSalaryMonthlysGross.Tables[0].Rows.Count > 0)
// {
// if (oSaProcess[0].PaymentDate != DateTime.MinValue)
// {
// _dMonthEndDate = Convert.ToDateTime(oSaProcess[0].PaymentDate);
// }
// else
// {
// _dMonthEndDate = DateTime.MinValue;
// }
// }
// foreach (DataRow odRow in oSalaryMonthlysGross.Tables[0].Rows)
// {
// double dbl = Convert.ToDouble(odRow["CHANGEDAMOUNT"].ToString());
// if (dbl == 0)
// {
// continue;
// }
// DataRow oRow = this.GetItem(PayslipData, Convert.ToString(odRow["EMPLOYEENO"]), (EnumSalaryGroup)Convert.ToInt32(odRow["ITEMGROUP"]), (EnumSalaryItemCode)Convert.ToInt32(odRow["ItemCode"]), Convert.ToInt32(odRow["ItemID"]));
// if (oRow == null)
// {
// oRow = PayslipData.NewRow();
// oRow = this.GrossMerge(oRow, odRow);
// PayslipData.Rows.Add(oRow);
// }
// if ((Convert.ToInt32(odRow["ITEMGROUP"]) == (int)EnumSalaryGroup.Gross))
// {
// oRow["Earning"] = odRow["CHANGEDAMOUNT"];
// }
// else if ((Convert.ToInt32(odRow["ITEMGROUP"]) == (int)EnumSalaryGroup.Arrear))
// {
// double dArrear = Convert.ToDouble(odRow["CHANGEDAMOUNT"].ToString());
// oRow["Arrear"] = dArrear;
// }
// else if ((Convert.ToInt32(odRow["ITEMGROUP"]) == (int)EnumSalaryGroup.UnauthLeave))
// {
// oRow["unAuthLeave"] = odRow["CHANGEDAMOUNT"];
// }
// }
// int nCount = 0;
// DataSet oSalaryMonthlysDeduct = SalaryMonthly.GetEmpPaySlipDeductForOthers(_SalaryMonth, sEmpID);
// string employeeNo = "";
// DataRow[] odros = null;
// if (oSalaryMonthlysDeduct.Tables[0].Rows.Count > 0)
// {
// employeeNo = oSalaryMonthlysDeduct.Tables[0].Rows[0]["EMPLOYEENO"].ToString();
// odros = PayslipData.Select(" EmployeeNo='" + oSalaryMonthlysDeduct.Tables[0].Rows[0]["EMPLOYEENO"].ToString() + "'");
// }
// double dGratuityAmount = 0;
// double dPFAmount = 0;
// string sTEmpEmpNo = "";
// double nCurrPFAmount = 0;
// foreach (DataRow odRow in oSalaryMonthlysDeduct.Tables[0].Rows)
// {
// double dbl = Convert.ToDouble(odRow["CHANGEDAMOUNT"].ToString());
// if (dbl == 0)
// {
// continue;
// }
// DataRow oRow = null;
// if (employeeNo != odRow["EMPLOYEENO"].ToString())
// {
// odros = PayslipData.Select(" EmployeeNo='" + odRow["EMPLOYEENO"].ToString() + "'");
// nCount = 0;
// }
// if (odros.Length <= nCount)
// {
// oRow = PayslipData.NewRow();
// oRow = this.GrossMerge(oRow, odRow);
// PayslipData.Rows.Add(oRow);
// }
// else oRow = odros[nCount];
// oRow["DeducDescription"] = odRow["Description"];
// if ((Convert.ToInt32(odRow["ITEMGROUP"]) == (int)EnumSalaryGroup.Deductions))
// oRow["DeducAmount"] = odRow["CHANGEDAMOUNT"];
// oRow["DeducDescription"] = odRow["Description"];
// //oEmployee = oEmps.Find(delegate(Employee oEmpItem) { return oEmpItem.EmployeeNo == odRow["EMPLOYEENO"].ToString().Trim(); });
// if (sTEmpEmpNo == "" || sTEmpEmpNo != odRow["EMPLOYEENO"].ToString())
// {
// nCurrPFAmount = 0;
// dPFAmount = 0;
// oEmployee = oEmps.Find(delegate (Employee oEmpItem) { return oEmpItem.EmployeeNo == odRow["EMPLOYEENO"].ToString().Trim(); });
// DataRow[] odrosPF = oSalaryMonthlysDeduct.Tables[0].Select(" ItemCode='" + (int)EnumSalaryItemCode.PF_Contribution + "' AND EMPLOYEENO='" + odRow["EMPLOYEENO"].ToString() + "'");
// if (odrosPF.Length > 0)
// {
// DataRow oRowPF = odrosPF[0];
// nCurrPFAmount = Convert.ToDouble(oRowPF["CHANGEDAMOUNT"]);
// }
// if (oEmployee != null)
// {
// if (_oGratuityParams.Count > 0 && _oGratuityParams != null)
// {
// dGratuityAmount = GetGratuityAmount(_oGratuityParams, oEmployee, _SalaryMonth);
// }
// else
// {
// dGratuityAmount = 0;
// }
// dPFAmount = GetPFAmount(oEmployee, _SalaryMonth);
// }
// }
// oRow["Gratuity"] = dGratuityAmount;
// //double nServiceLength = 0;
// //if (oEmployee != null)
// // nServiceLength = ServiceYears(_SalaryMonth, oEmployee);
// //if (nServiceLength > 5)
// //{
// // //oRow["PF"] = dPFAmount + nCurrPFAmount * 2;
// // oRow["PF"] = dPFAmount + nCurrPFAmount;
// //}
// //else
// //{
// // oRow["PF"] = dPFAmount + nCurrPFAmount;
// //}
// oRow["PF"] = dPFAmount + nCurrPFAmount;
// nCount = nCount + 1;
// employeeNo = odRow["EMPLOYEENO"].ToString();
// sTEmpEmpNo = odRow["EMPLOYEENO"].ToString();
// }
// nCount = 0;
// DataSet oSalaryMonthlysIncomeTax = SalaryMonthly.GetEmpPaySlipIncomeTaxAmountForOthers(_SalaryMonth, sEmpID);
// string employeeNo1 = "";
// DataRow[] odros1 = null;
// if (oSalaryMonthlysIncomeTax.Tables[0].Rows.Count > 0)
// {
// employeeNo1 = oSalaryMonthlysIncomeTax.Tables[0].Rows[0]["EMPLOYEENO"].ToString();
// odros1 = PayslipData.Select(" EmployeeNo='" + oSalaryMonthlysIncomeTax.Tables[0].Rows[0]["EMPLOYEENO"].ToString() + "'");
// }
// foreach (DataRow odRow in oSalaryMonthlysIncomeTax.Tables[0].Rows)
// {
// DataRow oRow = null;
// if (employeeNo1 != odRow["EMPLOYEENO"].ToString())
// {
// odros1 = PayslipData.Select(" EmployeeNo='" + odRow["EMPLOYEENO"].ToString() + "'");
// nCount = 0;
// }
// if (odros1.Length <= nCount) continue;
// oRow = odros1[nCount];
// if ((Convert.ToInt32(odRow["ITEMGROUP"]) == (int)EnumSalaryGroup.OtherItem) && (Convert.ToInt32(odRow["ItemCode"]) == (int)EnumSalaryItemCode.Inc_Tax_Deduction))
// oRow["IncomTaxAmount"] = odRow["CHANGEDAMOUNT"];
// nCount = nCount + 1;
// employeeNo1 = odRow["EMPLOYEENO"].ToString();
// }
// nCount = 0;
// DataSet oSalaryMonthlysLaonAmount = SalaryMonthly.GetEmpPaySlipDeductForLR(_SalaryMonth, sEmpID);
// string employeeNo12 = "";
// DataRow[] odros12 = null;
// if (oSalaryMonthlysLaonAmount.Tables[0].Rows.Count > 0)
// {
// employeeNo12 = oSalaryMonthlysLaonAmount.Tables[0].Rows[0]["EMPLOYEENO"].ToString();
// odros12 = PayslipData.Select(" EmployeeNo='" + oSalaryMonthlysLaonAmount.Tables[0].Rows[0]["EMPLOYEENO"].ToString() + "'");
// }
// foreach (DataRow odRow in oSalaryMonthlysLaonAmount.Tables[0].Rows)
// {
// DataRow oRow = null;
// if (employeeNo12 != odRow["EMPLOYEENO"].ToString())
// {
// odros12 = PayslipData.Select(" EmployeeNo='" + odRow["EMPLOYEENO"].ToString() + "'");
// nCount = 0;
// }
// if (odros12.Length <= nCount) continue;
// oRow = odros12[nCount];
// if ((Convert.ToInt32(odRow["ITEMGROUP"]) == (int)EnumSalaryGroup.Miscellaneous) && (Convert.ToInt32(odRow["ItemCode"]) == (int)EnumSalaryItemCode.Loan_Remain_Balance))
// {
// oRow["LoanDescription"] = odRow["Description"];
// oRow["LoanAmount"] = odRow["CHANGEDAMOUNT"];
// }
// nCount = nCount + 1;
// employeeNo12 = odRow["EMPLOYEENO"].ToString();
// }
// bool isDesigFromEmp = ConfigurationManager.GetBoolValue("designation", "desigfromdescriptiontext", EnumConfigurationType.Logic);
// foreach (DataRow oRow in PayslipData.Rows)
// {
// Employee oEmp = oEmps
// .Where(o => o.EmployeeNo.ToUpper().Trim() == oRow["EMPLOYEENO"].ToString().ToUpper().Trim())
// .SingleOrDefault();
// if (oEmp != null)
// {
// if (isDesigFromEmp)
// {
// oRow["Designation"] = oEmp.DescriptionText;
// }
// else
// {
// Designation oDesg = oDesigs.Where(o => o.ID == oEmp.DesignationID).SingleOrDefault();
// if (oDesg != null)
// {
// oRow["Designation"] = oDesg.Name;
// }
// }
// }
// }
// loanDT.TableName = "PayrollDataSet_LoanData";
// PayslipData.TableName = "PayrollDataSet_Payslip";
// oFDST.Tables.Add(PayslipData);
// oFDST.Tables.Add(loanDT);
// form.ShowDlgForPaySlipCiti1(_selectedParameter.ReportItem, oFDST);
//}
#endregion
#region SalarySheetEchoTex
public byte [ ] ShowSalarySheet ( int payrollTypeId , DateTime salaryMonth , int reportId , string sEmpID , string reportType )
{
ReportProcessor form = new ReportProcessor ( ) ;
string RDLCName = "HRM.Report.RDLC.SalarySheetEchoTex.rdlc" ;
string [ ] sEmp = sEmpID . Split ( ',' ) ;
TotalEmp = sEmp . Length ;
DataTable dTSalarySheet = SalarySheetEchoTex ( salaryMonth , sEmpID ) ;
dTSalarySheet . TableName = "PayrollDataSet_SalarySheet" ;
PayrollDataSet . PayrollDataSet . SalarySheetDataTable _SalarySheet ;
DataSet resultDataSet = new DataSet ( ) ;
resultDataSet . Tables . Add ( dTSalarySheet ) ;
_SalarySheet = new PayrollDataSet . PayrollDataSet . SalarySheetDataTable ( ) ;
List < ReportParameter > reportParameters = new List < ReportParameter > ( ) ;
ReportParameter rParam = new ReportParameter ( "PreparedBy" , "" ) ;
reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "CheckedBy" , "" ) ;
reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "HeadofHRApprovedBy" , "" ) ;
reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "CCOApprovedBy" , "" ) ;
reportParameters . Add ( rParam ) ;
return form . CommonReportView ( null , RDLCName , resultDataSet , null , reportParameters , true , payrollTypeId , reportType ) ;
}
public DataTable SalarySheetEchoTex ( DateTime dSalaryMonth , string sEmpID )
{
//fReportViewer form = new fReportViewer();
//_SalaryMonth = dSalaryMonth;
//ID nReportID = _selectedParameter.ReportItem.ReportID;
//string sEmpID = _selectedParameter.ReportItem.INSQL;
DataRow oDR = null ;
DataSet oSalarySheets = null ;
oSalarySheets = new EchoTexExceptionReportService ( ) . GetEmpSalarySheetEchoTex ( GlobalFunctions . LastDateOfMonth ( dSalaryMonth ) , sEmpID ) ;
PayrollDataSet . PayrollDataSet . SalarySheetDataTable dTSalarySheet = new PayrollDataSet . PayrollDataSet . SalarySheetDataTable ( ) ;
foreach ( DataRow source in oSalarySheets . Tables [ "GrossItem" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
foreach ( DataRow source in oSalarySheets . Tables [ "TotalGross" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
foreach ( DataRow source in oSalarySheets . Tables [ "AttendenceDays" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
foreach ( DataRow source in oSalarySheets . Tables [ "DeductItem" ] . Rows )
{
//if (Convert.ToInt16(source["ItemCode"]) == (int)EnumSalaryItemCode.Loan_Monthly_Interest)
//{
// continue;
//}
//else
//{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopyDeductSalarySheetEchoTex ( oDR , source , oSalarySheets . Tables [ "DeductItem" ] ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
//}
}
foreach ( DataRow source in oSalarySheets . Tables [ "TotalDeduction" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
foreach ( DataRow source in oSalarySheets . Tables [ "NetPay" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
foreach ( DataRow source in oSalarySheets . Tables [ "CPF" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
foreach ( DataRow source in oSalarySheets . Tables [ "LeaveDays" ] . Rows )
{
oDR = dTSalarySheet . NewRow ( ) ;
this . CopySalarySheetEchoTex ( oDR , source ) ;
dTSalarySheet . Rows . Add ( oDR ) ;
}
return dTSalarySheet ;
//form.ShowDlgForSalarySheet(_selectedParameter.ReportItem, dTSalarySheet, nReportID);
}
private void CopySalarySheetEchoTex ( DataRow source , DataRow destination )
{
if ( tempEmpID = = string . Empty )
{
tempEmpID = Convert . ToString ( destination [ "EMPLOYEENO" ] ) ;
source [ "SLNo" ] = count ;
count + + ;
}
if ( tempEmpID ! = Convert . ToString ( destination [ "EMPLOYEENO" ] ) )
{
tempEmpID = Convert . ToString ( destination [ "EMPLOYEENO" ] ) ;
source [ "SLNo" ] = count ;
count + + ;
}
source [ "EmpNo" ] = destination [ "EMPLOYEENO" ] ;
source [ "EmpName" ] = destination [ "Name" ] ;
source [ "Grade" ] = destination [ "GName" ] ;
source [ "Department" ] = destination [ "DName" ] ;
source [ "Description" ] = destination [ "Description" ] ;
source [ "Amount" ] = destination [ "Amount" ] ;
source [ "SalaryMonth" ] = _SalaryMonth ;
source [ "JoiningDate" ] = destination [ "JoiningDate" ] ;
//source["SLNo"] = destination["EMPLOYEEID"];
}
private void CopyDeductSalarySheetEchoTex ( DataRow source , DataRow destination , DataTable oDt )
{
if ( tempEmpID = = string . Empty )
{
tempEmpID = Convert . ToString ( destination [ "EMPLOYEENO" ] ) ;
source [ "SLNo" ] = count ;
count + + ;
}
if ( tempEmpID ! = Convert . ToString ( destination [ "EMPLOYEENO" ] ) )
{
tempEmpID = Convert . ToString ( destination [ "EMPLOYEENO" ] ) ;
source [ "SLNo" ] = count ;
count + + ;
}
//if (Convert.ToInt16(destination["ItemCode"]) == (int)EnumSalaryItemCode.Loan_Monthly_Installment)
//{
// DataRow[] odrosAmount = oDt.Select(" ItemCode='" + (int)EnumSalaryItemCode.Loan_Monthly_Interest + "' AND EMPLOYEENO='" + destination["EMPLOYEENO"].ToString() + "'" + " AND ItemID='" + Convert.ToInt16(destination["ItemID"]) + "'");
// source["EmpNo"] = destination["EMPLOYEENO"];
// source["Grade"] = destination["GName"];
// source["EmpName"] = destination["Name"];
// source["Grade"] = destination["GName"];
// source["Department"] = destination["DName"];
// source["Description"] = destination["Description"];
// if (odrosAmount.Length > 0)
// {
// nCurrLoanInterstAmount = 0;
// DataRow oRowLoanInterest = odrosAmount[0];
// nCurrLoanInterstAmount = Convert.ToDouble(oRowLoanInterest["Amount"]);
// }
// source["Amount"] = Convert.ToDouble(destination["Amount"]) + nCurrLoanInterstAmount;
// source["SalaryMonth"] = _SalaryMonth;
// source["JoiningDate"] = destination["JoiningDate"];
//}
//else
//{
source [ "EmpNo" ] = destination [ "EMPLOYEENO" ] ;
source [ "Grade" ] = destination [ "GName" ] ;
source [ "EmpName" ] = destination [ "Name" ] ;
source [ "Grade" ] = destination [ "GName" ] ;
source [ "Department" ] = destination [ "DName" ] ;
source [ "Description" ] = destination [ "Description" ] ;
source [ "Amount" ] = destination [ "Amount" ] ;
source [ "SalaryMonth" ] = _SalaryMonth ;
source [ "JoiningDate" ] = destination [ "JoiningDate" ] ;
//source["SLNo"] = destination["EMPLOYEEID"];
//}
}
#endregion
#region BankAdvice
public byte [ ] ShowBankAdviceReportEcho ( int payrollTypeId , DateTime SalaryMonth , string sEmpID , int BankId , string reportType )
{
DateTime salaryMonth = SalaryMonth . LastDateOfMonth ( ) ;
int count = 1 ;
DataRow oDR = null ;
Bank oBank = new BankService ( ) . Get ( BankId ) ;
DataSet oEmpBankAcc = new EchoTexExceptionReportService ( ) . GetEmpBankAdvice ( GlobalFunctions . LastDateOfMonth ( salaryMonth ) , sEmpID ) ;
PayrollDataSet . dsCompany . BankAdviceDataTable bankAdvice = new PayrollDataSet . dsCompany . BankAdviceDataTable ( ) ;
double nTotal = 0.0 ;
foreach ( DataRow oDRow in oEmpBankAcc . Tables [ 0 ] . Rows )
{
//oDR = bankAdvice.NewRow();
//oDR["EmpNo"] = oDRow["EMPLOYEENO"];
//oDR["EmpName"] = oDRow["NAME"]; //Beneficiary Name(120)
//oDR["AccountNo"] = oDRow["ACCOUNTNO"]; //Beneficiary Account Number
//oDR["Amount"] = Math.Round(Convert.ToDouble(oDRow["CHANGEDAMOUNT"])); //Payment Amount
//oDR["SalaryMonth"] = salaryMonth; //Reason(140)
//oDR["PaymentDate"] = oDRow["PAYMENTDATE"]; //Payment Date(DD/MM/YYYY)
//oDR["Email"] = oDRow["EMAILADDRESS"]; //Beneficiary Email ID(Optional)
//oDR["SLNo"] = count;
////if(oDRow["EMAILADDRESS"] != null)
////{
//// oDR["Email"] = oDRow["EMAILADDRESS"];
////}
////oDR["CostCenter"] = oDRow["CostCenter"].ToString();
//bankAdvice.Rows.Add(oDR);
//nTotal += Convert.ToDouble(oDR["Amount"]);
//count++;
oDR = bankAdvice . NewRow ( ) ;
oDR [ "EmpNo" ] = oDRow [ "EMPLOYEENO" ] ;
oDR [ "EmpName" ] = oDRow [ "NAME" ] ;
oDR [ "AccountNo" ] = oDRow [ "ACCOUNTNO" ] ;
oDR [ "Amount" ] = Math . Round ( Convert . ToDouble ( oDRow [ "CHANGEDAMOUNT" ] ) ) ;
oDR [ "Email" ] = oDRow [ "EMAILADDRESS" ] ;
oDR [ "SalaryMonth" ] = salaryMonth ;
oDR [ "SLNo" ] = count ;
//oDR["CostCenter"] = oDRow["CostCenter"].ToString();
bankAdvice . Rows . Add ( oDR ) ;
nTotal + = Convert . ToDouble ( oDR [ "Amount" ] ) ;
count + + ;
}
// bankAdvice.TableName = "dsCompany_BankAdvice";
// resultDataSet.Tables.Add(bankAdvice);
//string RDLCName = "HRM.Report.RDLC.SalaryBankDisbursement.rdlc";
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
string rdlcName = "BankAdvice.rdlc" ;
return reportProcessor . ShowDlgForNewBankDisbursment ( null , bankAdvice , reportType , payrollTypeId , rdlcName , SalaryMonth ) ;
//return reportProcessor.CommonReportView(null, RDLCName, resultDataSet, null, null, true, payrollTypeId, reportType);
}
#endregion
#region EchotexSalarySheetnew
public byte [ ] ShowSalarySheetEchoNew ( int payrollTypeId , DateTime salaryMonth , int reportId , string sEmpID , string reportType )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
string RDLCName = ( salaryMonth . LastDateOfMonth ( ) = = new DateTime ( 2020 , 5 , 31 ) ) ?
"HRM.Report.RDLC.StaticSalarySheetModifyMay2020.rdlc" :
"HRM.Report.RDLC.StaticSalarySheetModify.rdlc" ;
SystemInformation systemInfo = new SystemInformationService ( ) . Get ( ) ;
string [ ] sEmp = sEmpID . Split ( ',' ) ;
TotalEmp = sEmp . Length ;
//DataTable dTSalarySheet = SalarySheetEchoTex(salaryMonth, sEmpID);
DataTable dTSalarySheet = ShowReportSalarySheetStaticModify ( salaryMonth , sEmpID , payrollTypeId ) ;
dTSalarySheet . TableName = "PayrollDataSet_SalarySheetStatic" ;
PayrollDataSet . PayrollDataSet . SalarySheetDataTable _SalarySheet ;
DataSet resultDataSet = new DataSet ( ) ;
resultDataSet . Tables . Add ( dTSalarySheet ) ;
_SalarySheet = new PayrollDataSet . PayrollDataSet . SalarySheetDataTable ( ) ;
List < ReportParameter > reportParameters = new List < ReportParameter > ( ) ;
ReportParameter rParam = new ReportParameter ( "SalaryMonth" , salaryMonth . ToString ( "MMM yyyy" ) ) ;
reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "SalaryDate" , salaryMonth . ToString ( "dd MMM yyyy" ) ) ;
reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "Fax" , string . Empty ) ;
reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "Email" , systemInfo . email ) ;
reportParameters . Add ( rParam ) ;
//rParam = new ReportParameter("HeadofHRApprovedBy", "");
//reportParameters.Add(rParam);
//rParam = new ReportParameter("CCOApprovedBy", "");
//reportParameters.Add(rParam);
return reportProcessor . CommonReportView ( null , RDLCName , resultDataSet , null , reportParameters , true , payrollTypeId , reportType ) ;
}
public DataTable ShowReportSalarySheetStaticModify ( DateTime dSalaryMonth , string sEmpID , int payrollTypeId )
{
int roundofdegit = Convert . ToInt32 ( new SystemConfigarationService ( ) . GetconfigValue ( EnumConfigurationType . Logic , "root" , "roundofdegit" ) ) ;
PayrollType payrollType = new PayrollTypeService ( ) . Get ( payrollTypeId ) ;
TermParameter termParameter = new TermParameter ( ) ;
_SalaryMonth = dSalaryMonth ;
//int nReportID = reportId;
//string sEmpID = _selectedParameter.ReportItem.INSQL;
EnumBankCash ? eBnkCash = EnumBankCash . All ;
double fractionamount = 0.0 ;
DataSet oSalarySheets = new DataSet ( ) ;
double basicEarned , houserentEarned , conveyanceEarned , medicalEarned , foodEarned , grossEarned ;
double totalDaysInMonth = _SalaryMonth . TotalDaysInMonth ( ) ;
double totalDays ;
List < SalaryMonthly > oSalaryMonthlys = new List < SalaryMonthly > ( ) ;
if ( eBnkCash ! = null & & eBnkCash . Value ! = EnumBankCash . All )
{
oSalaryMonthlys = eBnkCash . Value = = EnumBankCash . Bank ? new SalaryMonthlyService ( ) . Get ( sEmpID , _SalaryMonth . LastDateOfMonth ( ) , payrollTypeId )
. Where ( x = > ! x . AccountNo . IsNullOrWhiteSpace ( ) )
. ToList ( )
: new SalaryMonthlyService ( ) . Get ( sEmpID , _SalaryMonth . LastDateOfMonth ( ) , payrollTypeId )
. Where ( x = > x . AccountNo . IsNullOrWhiteSpace ( ) )
. ToList ( ) ;
sEmpID = oSalaryMonthlys . Aggregate ( new StringBuilder ( ) , ( sb , sm ) = > sb . AppendFormat ( "{0}," , sm . EmployeeID ) , sb = > sb . ToString ( ) . Trim ( ',' ) ) ;
}
else
{
oSalaryMonthlys = new SalaryMonthlyService ( ) . Get ( sEmpID , _SalaryMonth . LastDateOfMonth ( ) , payrollTypeId ) ;
}
//if (sEmpID.IsNullOrWhiteSpace())
//{
// MessageBox.Show("No Employee Found");
// return;
//}
//DateTime dSalaryDate = (new fDateSelection()).ShowDlg("Salary Date");
DataTable dTblEmps = new EmployeeService ( ) . GetAllEmpBasicInfo ( sEmpID ) . Tables [ 0 ] ;
DataTable dTblCC = new EmployeeService ( ) . GetCostCenterInfo ( sEmpID ) ;
List < Designation > oDesignations = new DesignationService ( ) . Get ( EnumStatus . Regardless , payrollTypeId ) ;
//List<Grade> oGrades = new GradeService().Get(EnumStatus.Regardless);
List < Grade > oGrades = new GradeService ( ) . GetAllPayrollTypes ( EnumStatus . Regardless ) ;
List < Department > oDepartments = new DepartmentService ( ) . Get ( EnumStatus . Regardless , payrollTypeId ) ;
List < Leave > oLeaves = new LeaveService ( ) . Get ( ) ;
List < AllowanceDeduction > oAllDeducts = new AllowanceDeductionService ( ) . Get ( EnumStatus . Regardless ) ;
//List<ADParameter> oAllADParameters = new ADParameterService().Get(EnumStatus.Active);
List < ADParameter > oAllADParameters = new ADParameterService ( ) . GetWithPayrollType ( EnumStatus . Active , payrollTypeId ) ;
foreach ( ADParameter item in oAllADParameters )
{
if ( item . ADParameterGrades = = null )
item . ADParameterGrades = new ADParameterService ( ) . GetGrades ( item . ID ) ;
}
oAllADParameters . ForEach ( x = > x . ADParameterGrades = x . ADParameterGrades ) ;
//List<TermParameter> oAllTermParameters = new TermParameterService().Get(true);
List < TermParameter > oAllTermParameters = new TermParameterService ( ) . Get ( true , payrollTypeId ) ;
SalaryCalculator salaryCalculator = new SalaryCalculator ( ) ;
//salaryCalculator.SalaryMonthlies = null;
//salaryCalculator.SalaryMonthlies(oSalaryMonthlys);
//salaryCalculator.SalaryMonthlies.Add(oSalaryMonthlys);
List < SalaryMonthly > salMon = new List < SalaryMonthly > ( ) ;
foreach ( SalaryMonthly item in oSalaryMonthlys )
{
//salaryCalculator.SalaryMonthlies.Add(item);
salMon . Add ( item ) ;
}
Func < int , double > invertedGrossRatio = ( empID ) = > salaryCalculator . CalculateInvertedGrossFraction ( _SalaryMonth . LastDateOfMonth ( ) , empID ) ;
PayrollDataSet . PayrollDataSet . SalarySheetStaticDataTable dTable = new PayrollDataSet . PayrollDataSet . SalarySheetStaticDataTable ( ) ;
foreach ( SalaryMonthly itemMonthly in oSalaryMonthlys )
{
SalaryMonthlyService itemMonthlyService = new SalaryMonthlyService ( ) ;
grossEarned = basicEarned = basicEarned = houserentEarned = conveyanceEarned = medicalEarned = foodEarned = totalDays = 0 ;
//Employee oEmp = oEmployees.FirstOrDefault(x => x.ID == itemMonthly.EmployeeID);
DataRow drEmp = dTblEmps . AsEnumerable ( ) . FirstOrDefault ( x = > itemMonthly . EmployeeID = = x . Field < int > ( "EmployeeID" ) ) ;
DataRow drCC = dTblCC . AsEnumerable ( ) . FirstOrDefault ( x = > itemMonthly . EmployeeID = = x . Field < int > ( "EmployeeID" ) ) ;
TermParameter oEmpTermParameter = null ;
if ( drEmp = = null ) continue ;
if ( drEmp [ "GradeID" ] ! = DBNull . Value & & ! string . IsNullOrWhiteSpace ( drEmp [ "GradeID" ] . ToString ( ) ) )
{
oEmpTermParameter = oAllTermParameters . FirstOrDefault ( x = > x . SetupDetails . Any ( y = > y . TranID = = drEmp . Field < int > ( "GradeID" ) ) ) ;
}
DataRow dr = dTable . NewRow ( ) ;
#region Employee General Information
dr [ "Name" ] = drEmp [ "Name" ] . ToString ( ) ;
DateTime joiningDate = Convert . ToDateTime ( drEmp [ "JoiningDate" ] . ToString ( ) ) ;
dr [ "JoiningDate" ] = joiningDate . ToString ( "dd MMM yyyy" ) ;
//dr["Remarks"] = joiningDate.Date < Payroll.BO.SystemInformation.CurrentSysInfo.NextPayProcessDate.FirstDateOfMonth() ? "" : " (New) ";
dr [ "Remarks" ] = joiningDate . Date < payrollType . NextPayProcessDate . FirstDateOfMonth ( ) ? "" : " (New) " ;
dr [ "EmpNo" ] = drEmp [ "EmployeeNo" ] . ToString ( ) ;
dr [ "ACCNO" ] = drEmp [ "ACCOUNTNO" ] . ToString ( ) ;
dr [ "Designation" ] = drEmp [ "Designation" ] . ToString ( ) ;
dr [ "Department" ] = drEmp [ "Department" ] . ToString ( ) ;
dr [ "FLOOR" ] = drEmp [ "Floor" ] . ToString ( ) ;
dr [ "Line" ] = drEmp [ "Line" ] . ToString ( ) ;
dr [ "Section" ] = drEmp [ "Section" ] . ToString ( ) ;
dr [ "TINNO" ] = dTblEmps . Columns . Contains ( "TINNO" ) ? drEmp [ "TINNO" ] . ToString ( ) : "" ;
dr [ "Grade" ] = drEmp [ "GradeName" ] . ToString ( ) ;
dr [ "GroosSalary" ] = Convert . ToDouble ( drEmp [ "GROSSSALARY" ] . ToString ( ) ) ;
dr [ "CostCenter" ] = drCC = = null ? string . Empty : drCC [ "CostCenter" ] . ToString ( ) ;
dr [ "CostCenterCode" ] = drCC = = null ? string . Empty : drCC [ "CostCenterCode" ] . ToString ( ) ;
#endregion
#region Days Calcullation
totalDays = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Total_Days , itemMonthly ) ;
fractionamount = totalDays = = 0 ? 0.0 : ( double ) totalDaysInMonth / totalDays ;
dr [ "TotalDays" ] = totalDays ;
dr [ "WorkingDays" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Tot_Attend_Days , itemMonthly ) ;
dr [ "Holiday" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Total_HoliDays , itemMonthly ) ;
dr [ "Absent" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Tot_UnauthLeave_Days , itemMonthly ) ;
// test
//fractionamount = 1;
#endregion
#region Gross Payment
basicEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Basic_Salary , itemMonthly )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ;
dr [ "Basic" ] = Math . Round ( fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Basic_Salary , itemMonthly ) )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ) ;
// House rent code: 008
dr [ "HouseRent" ] = 0 ;
AllowanceDeduction oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "008" ) ;
if ( oAllDeduct ! = null )
{
houserentEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
//double y = (double)invertedGrossRatio(itemMonthly.EmployeeID) *( new SalaryMonthlyService().GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)) + new SalaryMonthlyService().GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
//double x = (double)(fractionamount * invertedGrossRatio(itemMonthly.EmployeeID) * (new SalaryMonthlyService().GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID))) + new SalaryMonthlyService().GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
//double z = Math.Round(x);
dr [ "HouseRent" ] = Math . Round ( fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) + new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) , 0 ) ;
}
// medical code: 011
dr [ "Medical" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "011" ) ;
if ( oAllDeduct ! = null )
{
medicalEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
dr [ "Medical" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) + new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
// Conveyance code: 010
dr [ "Conveyance" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "010" ) ;
if ( oAllDeduct ! = null )
{
conveyanceEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
dr [ "Conveyance" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) + new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
// FoodAllowance code: 006
dr [ "FoodAllowance" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "006" ) ;
if ( oAllDeduct ! = null )
{
foodEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
dr [ "FoodAllowance" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) + new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
grossEarned = basicEarned +
houserentEarned +
medicalEarned +
conveyanceEarned +
foodEarned ;
dr [ "GrossSalaryOriginal" ] = Convert . ToDouble ( dr [ "Basic" ] ) +
Convert . ToDouble ( dr [ "HouseRent" ] ) +
Convert . ToDouble ( dr [ "Medical" ] ) +
Convert . ToDouble ( dr [ "Conveyance" ] ) +
Convert . ToDouble ( dr [ "FoodAllowance" ] ) ;
#endregion
#region Deductions
//double shopAdvance = new SalaryMonthlyService().GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Installment, itemMonthly, "Shop Advance");
double shopAdvance = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Loan_Monthly_Installment , itemMonthly , "Shop Advance Principle" ) ;
dr [ "ShopAdvance" ] = Math . Round ( shopAdvance , 0 ) ;
double DeductSalaryAdvance = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Loan_Monthly_Installment , itemMonthly ) - shopAdvance ;
dr [ "DeductSalaryAdvance" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Loan_Monthly_Installment , itemMonthly ) - shopAdvance ;
dr [ "DeductBasic" ] = Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . UnauthLeave , EnumSalaryItemCode . Basic_Salary , itemMonthly ) , 0 ) ;
dr [ "PF" ] = Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . PF_Contribution , itemMonthly ) , 0 ) ;
dr [ "TDS" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Inc_Tax_Deduction , itemMonthly ) ;
dr [ "DeductPF" ] = Math . Round ( Convert . ToDouble ( dr [ "PF" ] ) , 0 ) ;
// Deduct Conduct Bonus code: 005
dr [ "ConductBonusDeduct" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Deduction & & x . Code . Trim ( ) = = "005" ) ;
if ( oAllDeduct ! = null )
{
dr [ "ConductBonusDeduct" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Deduction , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Deduction , itemMonthly , oAllDeduct . ID ) ;
}
#endregion
dr [ "SalaryPayment" ] = Math . Round ( grossEarned -
( Convert . ToDouble ( dr [ "DeductBasic" ] ) +
Convert . ToDouble ( dr [ "DeductSalaryAdvance" ] ) +
Convert . ToDouble ( dr [ "ShopAdvance" ] ) +
Convert . ToDouble ( dr [ "DeductPF" ] ) +
Convert . ToDouble ( dr [ "ConductBonusDeduct" ] ) +
Convert . ToDouble ( dr [ "TDS" ] ) ) , 0 ) ;
#region Overtime
dr [ "OtHour" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Over_Time_Hours , itemMonthly ) ;
//double otPayment = GlobalFunctions.Round(new SalaryMonthlyService().GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Over_Time_Amount, itemMonthly));
double otPayment = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Over_Time_Amount , itemMonthly ) ;
//double test = GlobalFunctions.Round(otPayment, 0);//For Echotex
dr [ "OtPayment" ] = Math . Round ( otPayment , 0 , MidpointRounding . AwayFromZero ) ;
dr [ "OtRate" ] = 0.0 ;
if ( oEmpTermParameter ! = null )
{
dr [ "OtRate" ] = new TermParameterService ( ) . ConvertToHourlyRate ( Convert . ToDouble ( dr [ "Basic" ] ) , 200 ) ;
}
#endregion
#region Other Allowance
// Attendence Bonus code: 001
dr [ "AttnBonus" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "001" ) ;
if ( oAllDeduct ! = null )
{
dr [ "AttnBonus" ] = GlobalFunctions . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
}
// Conduct Bonus code: 002
dr [ "ConductBonus" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "002" ) ;
if ( oAllDeduct ! = null )
{
dr [ "ConductBonus" ] = GlobalFunctions . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
}
// Production Bonus code: 013
dr [ "TtlBonus" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "013" ) ;
if ( oAllDeduct ! = null )
{
double prodBonus = GlobalFunctions . Round ( itemMonthly . Details . Where ( x = > x . itemGroupCode = = EnumSalaryGroup . Gross & & x . ItemCode = = EnumSalaryItemCode . Allowance & & x . SalaryMonthlyID = = itemMonthly . ID & & x . ItemID = = oAllDeduct . ID ) . Sum ( x = > x . ChangedAmount )
+ itemMonthly . Details . Where ( x = > x . itemGroupCode = = EnumSalaryGroup . Arrear & & x . ItemCode = = EnumSalaryItemCode . Allowance & & x . ID = = itemMonthly . ID & & x . ItemID = = oAllDeduct . ID ) . Sum ( x = > x . ChangedAmount ) , 0 ) ;
//dr["TtlBonus"] = Math.Round(prodBonus);
dr [ "TtlBonus" ] = prodBonus ;
}
// Iftari Allowance code: 012
dr [ "IfterBill" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "012" ) ;
if ( oAllDeduct ! = null )
{
dr [ "IfterBill" ] = GlobalFunctions . Round ( itemMonthly . Details . Where ( x = > x . itemGroupCode = = EnumSalaryGroup . Gross & & x . ItemCode = = EnumSalaryItemCode . Allowance & & x . ItemID = = oAllDeduct . ID ) . Sum ( x = > x . ChangedAmount )
+ itemMonthly . Details . Where ( x = > x . itemGroupCode = = EnumSalaryGroup . Arrear & & x . ItemCode = = EnumSalaryItemCode . Allowance & & x . ID = = itemMonthly . ID & & x . ItemID = = oAllDeduct . ID ) . Sum ( x = > x . ChangedAmount ) ) ;
}
// Extra Allowance
dr [ "ExtraAmount" ] = 0 ;
dr [ "ExtraDay" ] = 0 ;
dr [ "ExtraRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "004" ) ;
if ( oAllDeduct ! = null )
{
ADParameter tempADParameter = ( drEmp [ "GradeID" ] ! = DBNull . Value & & ! string . IsNullOrWhiteSpace ( drEmp [ "GradeID" ] . ToString ( ) ) ) ?
oAllADParameters . FirstOrDefault ( x = > x . AllowDeductID = = oAllDeduct . ID & & x . ADParameterGrades . Any ( y = > y . GradeID = = Convert . ToInt32 ( drEmp [ "GradeID" ] . ToString ( ) ) ) ) :
null ;
dr [ "ExtraRate" ] = tempADParameter ! = null ? tempADParameter . FlatAmount : 0 ;
dr [ "ExtraAmount" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
dr [ "ExtraDay" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Extra_Allowance_Days , itemMonthly , oAllDeduct . ID ) ;
}
// Lunch Allowance
dr [ "LunchAmount" ] = 0 ;
dr [ "LunchDays" ] = 0 ;
dr [ "LunchRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "015" ) ;
if ( oAllDeduct ! = null )
{
dr [ "LunchAmount" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "LunchDays" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Lunch_Allowance_Days , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "LunchRate" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Lunch_Allowance_Rate , itemMonthly , oAllDeduct . ID ) ) ;
}
// Night Shift Allowance
dr [ "NightShiftAmount" ] = 0 ;
dr [ "NightShiftDays" ] = 0 ;
dr [ "NightShiftRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "023" ) ;
if ( oAllDeduct ! = null )
{
dr [ "NightShiftAmount" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "NightShiftDays" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Night_Allowance_Days , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "NightShiftRate" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Night_Allowance_Rate , itemMonthly , oAllDeduct . ID ) ) ;
}
// Special Allowance
dr [ "SpecialAmount" ] = 0 ;
dr [ "SpecialDays" ] = 0 ;
dr [ "SpecialRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "022" ) ;
if ( oAllDeduct ! = null )
{
dr [ "SpecialAmount" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "SpecialDays" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Special_Allowance_Days , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "SpecialRate" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Special_Allowance_Rate , itemMonthly , oAllDeduct . ID ) ) ;
}
// NationalHoliday Allowance
dr [ "NHAmount" ] = 0 ;
dr [ "NHDays" ] = 0 ;
dr [ "NHRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "028" ) ;
if ( oAllDeduct ! = null )
{
dr [ "NHAmount" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "NHDays" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . National_Holiday_Allowance_Days , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "NHRate" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . National_Holiday_Allowance_Rate , itemMonthly , oAllDeduct . ID ) ) ;
}
// Tiffin Allowance
dr [ "TiffinAmount" ] = 0 ;
dr [ "TiffinDay" ] = 0 ;
dr [ "TiffinRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "016" ) ;
if ( oAllDeduct ! = null )
{
dr [ "TiffinAmount" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "TiffinDay" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Tifin_Allowance_Days , itemMonthly , oAllDeduct . ID ) ) ;
dr [ "TiffinRate" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Tifin_Allowance_Rate , itemMonthly , oAllDeduct . ID ) ) ;
}
dr [ "GrossPercentage" ] = 0 ;
if ( _SalaryMonth . LastDateOfMonth ( ) = = new DateTime ( 2020 , 5 , 31 ) ) //MAY_2020
{
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "020" ) ;
if ( oAllDeduct ! = null )
{
dr [ "GrossPercentage" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
}
#endregion
#region Bonus Amount
dr [ "EidBonus" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Bonus , itemMonthly ) ;
#endregion
dr [ "NetPayment" ] = Math . Round ( Convert . ToDouble ( dr [ "SalaryPayment" ] ) +
Convert . ToDouble ( dr [ "AttnBonus" ] ) +
Convert . ToDouble ( dr [ "OtPayment" ] ) +
Convert . ToDouble ( dr [ "ConductBonus" ] ) +
Convert . ToDouble ( dr [ "TtlBonus" ] ) +
Convert . ToDouble ( dr [ "IfterBill" ] ) +
Convert . ToDouble ( dr [ "EidBonus" ] ) +
Convert . ToDouble ( dr [ "ExtraAmount" ] ) +
Convert . ToDouble ( dr [ "LunchAmount" ] ) +
Convert . ToDouble ( dr [ "NightShiftAmount" ] ) +
Convert . ToDouble ( dr [ "SpecialAmount" ] ) +
Convert . ToDouble ( dr [ "TiffinAmount" ] ) +
Convert . ToDouble ( dr [ "NHAmount" ] ) +
Convert . ToDouble ( dr [ "GrossPercentage" ] ) ) ;
//dr["NetPayment"] = itemMonthly.Details.Find(x => x.ItemCode == EnumSalaryItemCode.Net_Payable).ChangedAmount;
List < SalaryMonthlyDetail > oSMDLeaveList
= itemMonthly
. Details
. Where ( x = > x . itemGroupCode = = EnumSalaryGroup . Miscellaneous & &
x . ItemCode = = EnumSalaryItemCode . Leave_Days )
. ToList ( ) ;
#region Leave Calculation
Leave currentLeave = null ;
dr [ "CL" ] = dr [ "SL" ] = dr [ "EL" ] = dr [ "PL" ] = dr [ "ML" ] = dr [ "LWP" ] = dr [ "SPL" ] = dr [ "COM" ] = dr [ "LOWT" ] = 0 ;
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "CL" ) ;
if ( currentLeave ! = null )
{
dr [ "CL" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "SL" ) ;
if ( currentLeave ! = null )
{
dr [ "SL" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "EL" ) ;
if ( currentLeave ! = null )
{
dr [ "EL" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "PL" ) ;
if ( currentLeave ! = null )
{
dr [ "PL" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "ML" ) ;
if ( currentLeave ! = null )
{
dr [ "ML" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "LWOP" ) ;
if ( currentLeave ! = null )
{
dr [ "LWP" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "SPL" ) ;
if ( currentLeave ! = null )
{
dr [ "SPL" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "COM" ) ;
if ( currentLeave ! = null )
{
dr [ "COM" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
currentLeave = oLeaves . SingleOrDefault ( x = > x . Code . ToUpper ( ) . Trim ( ) = = "L/OUT" ) ;
if ( currentLeave ! = null )
{
dr [ "LOWT" ] = oSMDLeaveList . Where ( x = > x . ItemID = = currentLeave . ID )
. Sum ( x = > x . ChangedAmount ) ;
}
#endregion
dr [ "Remarks" ] = itemMonthly . Remarks ;
dTable . Rows . Add ( dr ) ;
}
//dTable.TableName = "PayrollDataSet_SalarySheetStatic";
//oSalarySheets.Tables.Add(dTable);
return dTable ;
}
#endregion
#region BanglaPaySlip
public byte [ ] ShowBanglaPaySlip ( int payrollTypeID , DateTime salaryMonth , string sEmpID , int reportId , string reportType , EnumBankCash reportItem )
{
string empNo = string . Empty ;
try
{
#region Initialize Components
ReportProcessor form = new ReportProcessor ( ) ;
//string RDLCName = "HRM.Report.RDLC.BanglaPayslip.rdlc";
string RDLCName = "BanglaPSlip.rdlc" ;
_SalaryMonth = salaryMonth ;
//fReportViewer form = new fReportViewer();
//string sEmpID = _selectedParameter.ReportItem.INSQL;
//EnumBankCash? eBnkCash = _selectedParameter.BankCash;
DateTime MAY_2020 = new DateTime ( 2020 , 5 , 31 ) ;
//string sEmpID = null;
EnumBankCash ? eBnkCash = null ;
List < SalaryMonthly > salarymonthlies = null ;
//int payrollTypeID = 0;
DataSet oSalaryMonthlyDetails = new SalaryMonthlyService ( ) . GetEmpPaySlipGrossForOthers ( _SalaryMonth . LastDateOfMonth ( ) , sEmpID ) ;
if ( eBnkCash ! = null & & eBnkCash . Value ! = EnumBankCash . All )
{
salarymonthlies = eBnkCash . Value = = EnumBankCash . Bank ? new SalaryMonthlyService ( ) . Get ( sEmpID , _SalaryMonth . LastDateOfMonth ( ) , payrollTypeID )
. Where ( x = > ! GlobalExtensions . IsNullOrWhiteSpace ( x . AccountNo ) )
. ToList ( )
: new SalaryMonthlyService ( ) . Get ( sEmpID , _SalaryMonth . LastDateOfMonth ( ) , payrollTypeID )
. Where ( x = > GlobalExtensions . IsNullOrWhiteSpace ( x . AccountNo ) )
. ToList ( ) ;
sEmpID = salarymonthlies . Aggregate ( new StringBuilder ( ) , ( sb , sm ) = > sb . AppendFormat ( "{0}," , sm . EmployeeID ) , sb = > sb . ToString ( ) . Trim ( ',' ) ) ;
}
else
{
salarymonthlies = new SalaryMonthlyService ( ) . Get ( sEmpID , _SalaryMonth . LastDateOfMonth ( ) , payrollTypeID ) ;
}
SalaryCalculator salaryCalculator = new SalaryCalculator ( ) ;
//salaryCalculator.SetSalaryMontlys(salarymonthlies);
Func < int , double > invertedGrossRatio = ( empID ) = > salaryCalculator . CalculateInvertedGrossFraction ( _SalaryMonth . LastDateOfMonth ( ) , empID ) ;
//if (sEmpID.IsNullOrWhiteSpace())
//{
// //MessageBox.Show("No Employee Found");
// throw new Exception("No Employee Found");
// return;
//}
List < AllowanceDeduction > oAllDeducts = new AllowanceDeductionService ( ) . Get ( EnumStatus . Regardless ) ;
List < Leave > oLeaves = new LeaveService ( ) . GetAll ( ) ;
List < Employee > oEmployees = new EmployeeService ( ) . GetByEmpIDs ( sEmpID ) ;
List < AccessCard > oCards = new AccessCardService ( ) . Get ( ) ;
//List<TermParameter> oAllTermParameters = new TermParameterService().Get(true);
List < TermParameter > oAllTermParameters = new TermParameterService ( ) . GetByPayrollTypeID ( payrollTypeID ) ;
//List<ADParameter> oAllADParameters = new ADParameterService().Get(status, payrollTypeID);
int status = ( int ) EnumStatus . Active ;
ADParameter oADParameter = new ADParameterService ( ) . Get ( status , payrollTypeID ) ;
List < ADParameter > oAllADParameters = new List < ADParameter > ( ) ;
if ( oADParameter ! = null )
{
oAllADParameters . Add ( oADParameter ) ;
}
oAllADParameters . ForEach ( x = > x . ADParameterGrades = x . ADParameterGrades ) ;
double totalDaysInMonth = _SalaryMonth . TotalDaysInMonth ( ) ;
DataRow oDR = null ;
double totalGross = 0.0 , totalDays = 0.0 , fractionamount = 0.0 ;
double basicEarned , houserentEarned , conveyanceEarned , medicalEarned , foodEarned , grossEarned ;
PayrollDataSet . PayrollDataSet . BanglaPaySlipNewDataTable banglaPaySlipData = new PayrollDataSet . PayrollDataSet . BanglaPaySlipNewDataTable ( ) ;
PayrollDataSet . PayrollDataSet . BanglaPaySlipNewProdBonusDataTable banglaPaySlipProdData = new PayrollDataSet . PayrollDataSet . BanglaPaySlipNewProdBonusDataTable ( ) ;
PayrollDataSet . dsBonusDataSet . BanglaPSlipBonusDataTable banglaPaySlipBonusData = new PayrollDataSet . dsBonusDataSet . BanglaPSlipBonusDataTable ( ) ;
DataSet dsProdBonus = new ProdBonusProcessService ( ) . GetDetailItems ( _SalaryMonth . LastDateOfMonth ( ) ) ;
//DataSet dsEmpBasicInfo = new EmployeeService().GetEmpReportRelatedInfo(sEmpID);
DataSet dsEmpBasicInfo = new EmployeeService ( ) . GetAllEmpBasicInfo ( sEmpID ) ;
#region Calcullate Bangla Month
string printDateBangla = DateTime . Today . Day + " " + GlobalExtensions . BanglaMonth ( DateTime . Today ) + " " + DateTime . Today . Year ;
string month = GlobalExtensions . BanglaMonth ( _SalaryMonth ) + "-" + _SalaryMonth . Year + " gv‡mi Rb¨" ;
#endregion
#endregion
#region Production Bonus Related
if ( dsProdBonus . Tables ! = null & & dsProdBonus . Tables . Count > 0 )
{
foreach ( DataRow dRow in dsProdBonus . Tables [ 0 ] . Rows )
{
DataRow ToRow = banglaPaySlipProdData . NewRow ( ) ;
ToRow [ "EmployeeNo" ] = dRow [ "EMPLOYEENO" ] ;
ToRow [ "Name" ] = dRow [ "Description" ] ;
ToRow [ "Amount" ] = dRow [ "Amount" ] ;
banglaPaySlipProdData . Rows . Add ( ToRow ) ;
}
}
#endregion
foreach ( SalaryMonthly itemMonthly in salarymonthlies )
{
totalGross = 0.0 ; grossEarned = basicEarned = houserentEarned = conveyanceEarned = medicalEarned = foodEarned = totalDays = 0 ;
DataRow drEmpInfo = dsEmpBasicInfo . Tables [ 0 ] . AsEnumerable ( ) . FirstOrDefault ( x = > Convert . ToInt32 ( x [ "EmployeeID" ] . ToString ( ) ) = = itemMonthly . EmployeeID ) ;
oDR = banglaPaySlipData . NewRow ( ) ;
TermParameter oEmpTermParameter = null ;
//SalaryMonthlyService new SalaryMonthlyService() = new SalaryMonthlyService();
if ( drEmpInfo ! = null )
{
//Need to change
//oEmpTermParameter = drEmpInfo["GradeID"] != DBNull.Value ? oAllTermParameters.FirstOrDefault(x => x.SetupDetails.Any(y => y.TranID == Convert.ToInt32(drEmpInfo["GradeID"].ToString())))
//: null;
oDR [ "Division" ] = drEmpInfo [ "Department" ] ;
oDR [ "BanglaDivision" ] = drEmpInfo [ "DepartmentBangla" ] ;
oDR [ "Line" ] = drEmpInfo [ "Line" ] ;
oDR [ "BanglaLine" ] = drEmpInfo [ "LineBangla" ] ;
oDR [ "Floor" ] = drEmpInfo [ "Floor" ] ;
oDR [ "FloorBangla" ] = drEmpInfo [ "FloorBangla" ] ;
oDR [ "Section" ] = drEmpInfo [ "Section" ] ;
oDR [ "SectionBangla" ] = drEmpInfo [ "SectionBangla" ] ;
oDR [ "EmpNo" ] = drEmpInfo [ "EmployeeNo" ] ;
empNo = drEmpInfo [ "EmployeeNo" ] . ToString ( ) ;
oDR [ "Name" ] = drEmpInfo [ "Name" ] ;
oDR [ "BanglaName" ] = drEmpInfo [ "BanglaName" ] ;
oDR [ "Designation" ] = drEmpInfo [ "Designation" ] ;
oDR [ "BanglaDesignation" ] = drEmpInfo [ "BanglaDesignation" ] ;
DateTime joiningDate = Convert . ToDateTime ( drEmpInfo [ "JoiningDate" ] . ToString ( ) ) ;
oDR [ "DOfJoining" ] = joiningDate . Day . ToString ( ) + " " + GlobalExtensions . BanglaMonth ( joiningDate ) + " " + joiningDate . Year . ToString ( ) ;
AccessCard ac = drEmpInfo [ "CardID" ] ! = DBNull . Value ? oCards . FirstOrDefault ( x = > x . ID = = Convert . ToInt32 ( drEmpInfo [ "CardID" ] . ToString ( ) ) )
: null ;
oDR [ "CardNo" ] = ac ! = null ? ac . CardNumber : string . Empty ;
oDR [ "BankAccountNo" ] = drEmpInfo [ "AccountNo" ] ;
oDR [ "TINNO" ] = drEmpInfo [ "TINNO" ] ;
}
oDR [ "SalaryMonth" ] = _SalaryMonth ;
#region Day Calcullation
//totalDays = itemMonthly.GetAmount(EnumSalaryGroup.Miscellaneous, EnumSalaryItemCode.Total_Days);
totalDays = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Total_Days , itemMonthly ) ;
fractionamount = totalDays = = 0 ? 1 : totalDaysInMonth / totalDays ;
// test
//fractionamount = 1;
oDR [ "TotalWorkDays" ] = totalDays ;
oDR [ "PresentDays" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Tot_Attend_Days , itemMonthly ) ;
oDR [ "HolidayDays" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Total_HoliDays , itemMonthly ) ;
oDR [ "AbsentDays" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Tot_UnauthLeave_Days , itemMonthly ) ;
#endregion
#region Gross Payment
basicEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Basic_Salary , itemMonthly )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ;
oDR [ "BasicSalary" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ) +
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ;
double definedBasic = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ;
#region Calcullate Basic Allowances
// House rent code: 008
AllowanceDeduction oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "008" ) ;
if ( oAllDeduct ! = null )
{
houserentEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
oDR [ "HouseRent" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) +
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
else
{
oDR [ "HouseRent" ] = 0 ;
}
// medical code: 011
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "011" ) ;
if ( oAllDeduct ! = null )
{
medicalEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
oDR [ "Medical" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
else
{
oDR [ "Medical" ] = 0 ;
}
// Conveyance code: 010
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "010" ) ;
if ( oAllDeduct ! = null )
{
conveyanceEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
oDR [ "Conveynce" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
else
{
oDR [ "Conveynce" ] = 0 ;
}
// FoodAllowance code: 006
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance & & x . Code . Trim ( ) = = "006" ) ;
if ( oAllDeduct ! = null )
{
foodEarned = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
oDR [ "Food" ] = fractionamount * invertedGrossRatio ( itemMonthly . EmployeeID ) * ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
else
{
oDR [ "Food" ] = 0 ;
}
#endregion
grossEarned = basicEarned +
houserentEarned +
medicalEarned +
conveyanceEarned +
foodEarned ;
totalGross = Convert . ToDouble ( oDR [ "BasicSalary" ] ) +
Convert . ToDouble ( oDR [ "HouseRent" ] ) +
Convert . ToDouble ( oDR [ "Medical" ] ) +
Convert . ToDouble ( oDR [ "Conveynce" ] ) +
Convert . ToDouble ( oDR [ "Food" ] ) ;
oDR [ "NetPayment" ] = totalGross ;
#endregion
#region Deductions
// variable used if muliple basic deduction exist
double deductBasic = 0 ;
// UnAuthorize Leave Basic Deduct
deductBasic = new SalaryMonthlyService ( )
. GetAmount ( EnumSalaryGroup . UnauthLeave , EnumSalaryItemCode . Basic_Salary , itemMonthly ) ;
oDR [ "DeductAmnt" ] = deductBasic ;
oDR [ "DeductPF" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . PF_Contribution , itemMonthly ) ;
double shopAdvance = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Loan_Monthly_Installment , itemMonthly , "Shop Advance" ) ;
double salaryAdvance = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Loan_Monthly_Installment , itemMonthly )
- shopAdvance ;
oDR [ "ShopAdvance" ] = shopAdvance ;
oDR [ "DeductSalaryAdvance" ] = salaryAdvance ;
// Deduct Conduct Bonus code: 005
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . AllowOrDeductType = = EnumAllowOrDeduct . Deduction & & x . Code . Trim ( ) = = "005" ) ;
if ( oAllDeduct ! = null )
{
oDR [ "ConductBonusDeduct" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Deduction , itemMonthly , oAllDeduct . ID )
+ new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Deduction , itemMonthly , oAllDeduct . ID ) ;
}
else
{
oDR [ "ConductBonusDeduct" ] = 0 ;
}
oDR [ "TDS" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Deductions , EnumSalaryItemCode . Inc_Tax_Deduction , itemMonthly ) ;
// For Now Only Deduct Basic
oDR [ "DeductOther" ] = 0 ;
double givenTaka = 0.0 ;
double allDeductions = Convert . ToDouble ( oDR [ "DeductPF" ] ) +
Convert . ToDouble ( oDR [ "DeductSalaryAdvance" ] ) +
Convert . ToDouble ( oDR [ "ShopAdvance" ] ) +
Convert . ToDouble ( oDR [ "DeductAmnt" ] ) +
Convert . ToDouble ( oDR [ "ConductBonusDeduct" ] ) +
Convert . ToDouble ( oDR [ "TDS" ] )
;
oDR [ "DeductOther" ] = allDeductions ;
#endregion
givenTaka = Math . Round ( grossEarned - allDeductions , 0 ) ;
oDR [ "GivenSalary" ] = givenTaka ;
#region Calcullate Other Allowances
// Attendence Bonus code: 001
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "001" ) ;
oDR [ "AttBon" ] = oAllDeduct ! = null ?
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) +
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
: 0 ;
// Conduct Bonus code: 002
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "002" ) ;
oDR [ "ConductBonus" ] = oAllDeduct ! = null ?
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) +
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
: 0 ;
// Production Bonus code: 012
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "012" ) ;
oDR [ "ProdBonus" ] = oAllDeduct ! = null ?
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) +
new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Arrear , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID )
: 0 ;
// Extra Allowance Code : 004
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "004" ) ;
if ( oAllDeduct ! = null )
{
oDR [ "ExtraAllowance" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
oDR [ "ExtraAllowanceDays" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Extra_Allowance_Days , itemMonthly , oAllDeduct . ID ) ;
ADParameter TempADParameter = oAllADParameters . FirstOrDefault ( x = > x . AllowDeductID = = oAllDeduct . ID & & x . ADParameterGrades . Any ( y = > y . GradeID = = itemMonthly . Employee . GradeID ) ) ;
oDR [ "ExtraAllowanceRate" ] = TempADParameter ! = null ? TempADParameter . FlatAmount : 0 ;
}
else
{
oDR [ "ExtraAllowance" ] = 0 ;
oDR [ "ExtraAllowanceDays" ] = 0 ;
oDR [ "ExtraAllowanceRate" ] = 0 ;
}
double tiffinAndLunch = 0 ;
// Lunch Allowance Code : 015
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "015" ) ;
if ( oAllDeduct ! = null )
{
tiffinAndLunch + = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
// Tiffin Allowance Code : 016
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "016" ) ;
if ( oAllDeduct ! = null )
{
tiffinAndLunch + = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
oDR [ "TifinLunch" ] = tiffinAndLunch ;
#region SpecialNightShift
double special = 0 ;
// Specisl Allowance Code : 015
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "022" ) ;
if ( oAllDeduct ! = null )
{
special = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
oDR [ "Special" ] = special ;
// NightShift Allowance Code : 016
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "023" ) ;
double NightShift = 0 ;
if ( oAllDeduct ! = null )
{
NightShift = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
oDR [ "NightShift" ] = NightShift ;
#endregion
double ifterBill = 0 ;
// ifterBill Allowance Code : 012
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "012" ) ;
if ( oAllDeduct ! = null )
{
ifterBill + = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
oDR [ "IfterBill" ] = ifterBill ;
oDR [ "GrossPercentage" ] = 0 ;
// ifterBill Allowance Code : 012
if ( _SalaryMonth . LastDateOfMonth ( ) = = MAY_2020 ) //if (_SalaryMonth.LastDateOfMonth() == SalaryCalculator.MAY_2020)
{
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "020" ) ;
if ( oAllDeduct ! = null )
{
oDR [ "GrossPercentage" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ;
}
}
#endregion
#region Bonus
double totalBonus = 0 ;
foreach ( var item in itemMonthly . Details . Where ( x = > x . ItemCode = = EnumSalaryItemCode . Bonus & &
x . itemGroupCode = = EnumSalaryGroup . Gross ) )
{
DataRow dRB = banglaPaySlipBonusData . NewRow ( ) ;
dRB [ "EmpNo" ] = drEmpInfo [ "EmployeeNo" ] ;
dRB [ "Description" ] = item . Description ;
dRB [ "Amount" ] = item . ChangedAmount ;
totalBonus + = item . ChangedAmount ;
banglaPaySlipBonusData . Rows . Add ( dRB ) ;
}
oDR [ "EidBonus" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Bonus , itemMonthly ) ;
//oDR["Bonus"] = itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Bonus,);
#endregion
#region Production Bonus
if ( dsProdBonus . Tables ! = null & & dsProdBonus . Tables . Count > 0 )
{
if ( dsProdBonus . Tables [ 0 ] ! = null & & dsProdBonus . Tables [ 0 ] . Rows . Count > 0 )
{
DataTable dt2 = new DataTable ( ) ;
oDR [ "ProdBonus" ] = 0 ;
var accItems = dsProdBonus . Tables [ 0 ] . AsEnumerable ( ) . Where ( x = > x [ "EMPLOYEENO" ] . ToString ( ) . Trim ( ) = = oDR [ "EmpNo" ] . ToString ( ) ) ;
if ( accItems . Count ( ) > 0 )
dt2 = accItems . CopyToDataTable ( ) ;
if ( dt2 ! = null & & dt2 . Rows . Count > 0 )
{
//int i = 1;
foreach ( DataRow dr in dt2 . Rows )
{
// This is not needed as we show detail in a subreport
//oDR["ProdBonusName" + i.ToString()] = dr["LineName"];
//oDR["ProdBonusAmount" + i.ToString()] = Convert.ToDouble(dr["Amount"]);
oDR [ "ProdBonus" ] = Convert . ToDouble ( oDR [ "ProdBonus" ] ) + Convert . ToDouble ( dr [ "Amount" ] ) ;
//i++;
}
}
}
}
#endregion
// NationalHoliday Allowance
oDR [ "NHAmount" ] = 0 ;
oDR [ "NHDays" ] = 0 ;
oDR [ "NHRate" ] = 0 ;
oAllDeduct = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) = = "028" ) ;
if ( oAllDeduct ! = null )
{
oDR [ "NHAmount" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Allowance , itemMonthly , oAllDeduct . ID ) ) ;
oDR [ "NHDays" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . National_Holiday_Allowance_Days , itemMonthly , oAllDeduct . ID ) ) ;
oDR [ "NHRate" ] = ( int ) Math . Round ( new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . National_Holiday_Allowance_Rate , itemMonthly , oAllDeduct . ID ) ) ;
}
#region Overtime
oDR [ "OTHours" ] = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Miscellaneous , EnumSalaryItemCode . Over_Time_Hours , itemMonthly ) ;
double otPayment = new SalaryMonthlyService ( ) . GetAmount ( EnumSalaryGroup . Gross , EnumSalaryItemCode . Over_Time_Amount , itemMonthly ) ;
oDR [ "OTPayable" ] = GlobalFunctions . Round ( otPayment ) ;
if ( Convert . ToDouble ( oDR [ "OTHours" ] ) > 0 )
{
oDR [ "OTRate" ] = Math . Round ( Convert . ToDouble ( oDR [ "OTPayable" ] ) / Convert . ToDouble ( oDR [ "OTHours" ] ) , 2 ) ;
}
else
{
if ( oEmpTermParameter ! = null )
{
//Need to Solve
//oDR["OTRate"] = Math.Round(new TermParameterService().GetOTRate(Math.Round(definedBasic * fractionamount), _SalaryMonth.LastDateOfMonth()), 2);
oDR [ "OTRate" ] = "" ;
}
else
{
oDR [ "OTRate" ] = 0.00 ;
}
}
#endregion
double totalTaka = givenTaka + Convert . ToDouble ( oDR [ "AttBon" ] ) +
Convert . ToDouble ( oDR [ "ConductBonus" ] ) +
Convert . ToDouble ( oDR [ "ExtraAllowance" ] ) +
Convert . ToDouble ( oDR [ "TifinLunch" ] ) +
totalBonus +
Convert . ToDouble ( oDR [ "ProdBonus" ] ) +
Convert . ToDouble ( oDR [ "IfterBill" ] ) +
Convert . ToDouble ( oDR [ "OTPayable" ] ) +
Convert . ToDouble ( oDR [ "GrossPercentage" ] ) +
special + NightShift ;
oDR [ "TotalTaka" ] = totalTaka ;
banglaPaySlipData . Rows . Add ( oDR ) ;
}
DataSet ds = new DataSet ( ) ;
//banglaPaySlipData.TableName = "PayrollDataSet_BanglaPaySlipNew";
banglaPaySlipData . TableName = "PayrollDataSet_BanglaPaySlipNew" ;
ds . Tables . Add ( banglaPaySlipData ) ;
DataSet dsSub = new DataSet ( ) ;
banglaPaySlipProdData . TableName = "PayrollDataSet_BanglaPaySlipNewProdBonus" ;
dsSub . Tables . Add ( banglaPaySlipProdData ) ;
banglaPaySlipBonusData . TableName = "dsBonusDataSet_BanglaPSlipBonus" ;
dsSub . Tables . Add ( banglaPaySlipBonusData ) ;
List < ReportParameter > _parameters = new List < ReportParameter > ( ) ;
ReportParameter parameter = new ReportParameter ( "rptMonth" , month ) ;
_parameters . Add ( parameter ) ;
parameter = new ReportParameter ( "printDate" , DateTime . Today . ToString ( "dd-MMM-yy" ) ) ;
_parameters . Add ( parameter ) ;
parameter = new ReportParameter ( "printDateBangla" , printDateBangla ) ;
_parameters . Add ( parameter ) ;
parameter = new ReportParameter ( "companyName" , System . Configuration . ConfigurationManager . AppSettings [ "CompanyName" ] ) ;
_parameters . Add ( parameter ) ;
parameter = new ReportParameter ( "companyNameBangla" , System . Configuration . ConfigurationManager . AppSettings [ "CompanyNameBangla" ] ) ;
_parameters . Add ( parameter ) ;
parameter = new ReportParameter ( "salaryMonthEng" , _SalaryMonth . ToString ( "MMM-yy" ) ) ;
_parameters . Add ( parameter ) ;
//string RDLC = (_SalaryMonth.LastDateOfMonth() == MAY_2020) ?//string RDLC = (_SalaryMonth.LastDateOfMonth() == SalaryCalculator.MAY_2020) ?
// "Payroll.Report.RDLC.BanglaPSlipMay2020.rdlc" :
// "Payroll.Report.RDLC.BanglaPSlip.rdlc";
return form . CommonReportViewForReports ( null , ds , dsSub , RDLCName , _parameters , false , payrollTypeID , reportType ) ;
//return form.CommonReportView(null, RDLCName, resultDataSet, null, reportParameters, true, payrollTypeId, reportType);
}
catch ( Exception ex )
{
throw new Exception ( ex . Message , ex ) ;
}
}
#endregion
#region DailyPresent
public byte [ ] ShowDailyPresent ( DateTime dFromDate , string sEmpID , string reportType , int payrollTypeID )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
DateTime attnDate = dFromDate ;
//string sEmpID = sEmpID;
DataRow oDR = null ;
DataSet oDailyInOut = null ;
//new DailyAttnProcessService().GetDailyDataByStatus(attnDate, sEmpID, EnumAttendanceType.Present, EnumAttendanceType.Late, EnumAttendanceType.Early, EnumAttendanceType.Delay, EnumAttendanceType.On_Business_Travel, EnumAttendanceType.OutSideDuty);
oDailyInOut = new DailyAttnProcessService ( ) . GetDailyDataByStatus ( attnDate , sEmpID , EnumAttendanceType . Present , EnumAttendanceType . Late , EnumAttendanceType . Early , EnumAttendanceType . Delay , EnumAttendanceType . HalfDay , EnumAttendanceType . OutSideDuty ) ;
HRM . Report . Attendence . AttendenceDataSet . AttendenceDataSet . DailyInOutDataTable dTable = new HRM . Report . Attendence . AttendenceDataSet . AttendenceDataSet . DailyInOutDataTable ( ) ;
foreach ( DataRow Dr in oDailyInOut . Tables [ 0 ] . Rows )
{
oDR = dTable . NewRow ( ) ;
oDR [ "EmployeeNo" ] = Dr [ "EMPLOYEENO" ] ;
oDR [ "Name" ] = Dr [ "Name" ] ;
oDR [ "Designation" ] = Dr [ "Designation" ] ;
oDR [ "InTime" ] = Dr [ "InTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "InTime" ] ) . ToString ( "HH:mm" ) ;
oDR [ "OutTime" ] = Dr [ "OutTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "OutTime" ] ) . ToString ( "HH:mm" ) ;
oDR [ "EmpType" ] = Dr [ "EmpType" ] . ToString ( ) ;
oDR [ "Status" ] = GlobalFunctions . GetShortAttnType ( ( EnumAttendanceType ) Convert . ToInt32 ( Dr [ "Status" ] ) ) ;
oDR [ "OTHour" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( Convert . ToDouble ( Dr [ "OTHour" ] ) ) ;
oDR [ "OTHourDBL" ] = Convert . ToDouble ( Dr [ "OTHour" ] ) ;
oDR [ "DeptID" ] = Convert . ToInt32 ( Dr [ "DeptID" ] . ToString ( ) ) ;
oDR [ "DeptName" ] = Dr [ "DeptName" ] . ToString ( ) ;
oDR [ "Department" ] = Dr [ "Department" ] . ToString ( ) ;
oDR [ "Section" ] = Dr [ "Section" ] . ToString ( ) ;
oDR [ "Line" ] = Dr [ "Line" ] . ToString ( ) ;
oDR [ "Floor" ] = Dr [ "Floor" ] . ToString ( ) ;
oDR [ "Shift" ] = Dr [ "Shift" ] . ToString ( ) ;
oDR [ "CardNo" ] = Dr [ "CardNo" ] . ToString ( ) ;
dTable . Rows . Add ( oDR ) ;
}
DataSet dSet = new DataSet ( ) ;
dTable . TableName = "AttendenceDataSet_DailyInOut" ;
dSet . Tables . Add ( dTable ) ;
//string RDLC = "HRM.Report.Attendence.RDLC.DailyPresent.rdlc";
string RDLC = "DailyPresentEcho.rdlc" ;
List < ReportParameter > _reportParameters = new List < ReportParameter > ( ) ;
ReportParameter rParam = new ReportParameter ( "AttnDate" , attnDate . ToString ( "dd MMM yyyy" ) ) ;
_reportParameters . Add ( rParam ) ;
//rParam = new ReportParameter("Fax", "");
//_reportParameters.Add(rParam);
//rParam = new ReportParameter("Email", systemInfo.email);
//_reportParameters.Add(rParam);
//return new ReportProcessor().CommonReportView(null, RDLC, dSet, null, _reportParameters, true, payrollTypeID, reportType);
return reportProcessor . AttendanceReportsView ( null , dSet , null , RDLC , _reportParameters , true , payrollTypeID , reportType ) ;
//AttendanceReportView(reportItem, dSet, dSubReportDataSet, reportName, parameters, defaultParameterNeeded, payrollTypeId, reportType)
}
#endregion
#region Absent
public byte [ ] ShowDailyAbsent ( DateTime dFromDate , string sEmpID , string reportType , int payrollTypeID )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
DateTime attnDate = dFromDate ;
DataSet oDailyInOut = null ;
DataRow oDR = null ;
oDailyInOut = new DailyAttnProcessService ( ) . GetDailyDataByStatus ( attnDate , sEmpID , EnumAttendanceType . Absent ) ;
HRM . Report . Attendence . AttendenceDataSet . AttendenceDataSet . DailyInOutDataTable dTable = new Attendence . AttendenceDataSet . AttendenceDataSet . DailyInOutDataTable ( ) ;
foreach ( DataRow Dr in oDailyInOut . Tables [ 0 ] . Rows )
{
oDR = dTable . NewRow ( ) ;
oDR [ "EmployeeNo" ] = Dr [ "EMPLOYEENO" ] ;
oDR [ "Name" ] = Dr [ "Name" ] ;
oDR [ "Designation" ] = Dr [ "Designation" ] ;
oDR [ "InTime" ] = Dr [ "InTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "InTime" ] ) . ToString ( "HH:mm tt" ) ;
oDR [ "OutTime" ] = Dr [ "OutTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "OutTime" ] ) . ToString ( "HH:mm tt" ) ;
oDR [ "EmpType" ] = Dr [ "EmpType" ] . ToString ( ) ;
oDR [ "Status" ] = GlobalFunctions . GetShortAttnType ( ( ( EnumAttendanceType ) Convert . ToInt32 ( Dr [ "Status" ] ) ) ) ;
oDR [ "OTHour" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( Convert . ToDouble ( Dr [ "OTHour" ] ) ) ;
oDR [ "OTHourDBL" ] = Convert . ToDouble ( Dr [ "OTHour" ] ) ;
oDR [ "DeptID" ] = Convert . ToInt32 ( Dr [ "DeptID" ] . ToString ( ) ) ;
oDR [ "DeptName" ] = Dr [ "DeptName" ] . ToString ( ) ;
oDR [ "Department" ] = Dr [ "Department" ] . ToString ( ) ;
oDR [ "Section" ] = Dr [ "Section" ] . ToString ( ) ;
oDR [ "Line" ] = Dr [ "Line" ] . ToString ( ) ;
oDR [ "Floor" ] = Dr [ "Floor" ] . ToString ( ) ;
oDR [ "Shift" ] = Dr [ "Shift" ] . ToString ( ) ;
oDR [ "CardNo" ] = Dr [ "CardNo" ] . ToString ( ) ;
dTable . Rows . Add ( oDR ) ;
}
DataSet dSet = new DataSet ( ) ;
dTable . TableName = "AttendenceDataSet_DailyInOut" ;
dSet . Tables . Add ( dTable ) ;
string RDLC = "DailyAbsentEcho.rdlc" ;
ReportParameter rParam ;
List < ReportParameter > _reportParameters = new List < ReportParameter > ( ) ;
rParam = new ReportParameter ( "AttnDate" , attnDate . ToString ( "dd MMM yyyy" ) ) ;
_reportParameters . Add ( rParam ) ;
return reportProcessor . AttendanceReportsView ( null , dSet , null , RDLC , _reportParameters , true , payrollTypeID , reportType ) ;
}
#endregion
#region Attendance Reports
#region Monthly Detail
public byte [ ] GetMonthlyDetailAttendance ( DateTime dFromDate , string sEmpID , string reportType , int payrollTypeID )
{
//DateTime dFromDate = _selectedParameter.FromDate.Value;
//DateTime dToDate = _selectedParameter.ToDate.Value;
//string sEmpID = _selectedParameter.ReportItem.INSQL;
DataSet oMonthlyDetail = null ;
DataRow oDR = null ;
oMonthlyDetail = new EchoTexExceptionReportService ( ) . GetMonthlyAttendanceDetail ( GlobalFunctions . FirstDateOfMonth ( dFromDate ) , GlobalFunctions . LastDateOfMonth ( dFromDate ) , sEmpID ) ;
Attendence . AttendenceDataSet . AttendenceDataSet . MonthlyDetailDataTable dTable = new Attendence . AttendenceDataSet . AttendenceDataSet . MonthlyDetailDataTable ( ) ;
//int serial = 1;
foreach ( DataRow Dr in oMonthlyDetail . Tables [ 0 ] . Rows )
{
oDR = dTable . NewRow ( ) ;
//oDR["Serial"] = serial.ToString();
oDR [ "EmployeeNo" ] = Dr [ "EMPLOYEENO" ] ;
oDR [ "Name" ] = Dr [ "Name" ] ;
oDR [ "CardNo" ] = Dr [ "CardNo" ] . ToString ( ) ;
oDR [ "Designation" ] = Dr [ "Designation" ] ;
oDR [ "JoinDate" ] = Convert . ToDateTime ( Dr [ "JOININGDATE" ] ) . ToString ( "dd MMM yyyy" ) ;
oDR [ "Gross" ] = Convert . ToDouble ( Dr [ "GROSSSALARY" ] ) ;
oDR [ "AttnDate" ] = Convert . ToDateTime ( Dr [ "AttnDate" ] ) . ToString ( "dd/MM/yy" ) ;
oDR [ "AttnType" ] = GlobalFunctions . GetShortAttnType ( ( ( EnumAttendanceType ) Convert . ToInt32 ( Dr [ "AttenType" ] ) ) ) ;
oDR [ "Department" ] = Dr [ "Department" ] . ToString ( ) ;
oDR [ "Section" ] = Dr [ "Section" ] . ToString ( ) ;
oDR [ "Line" ] = Dr [ "Line" ] . ToString ( ) ;
oDR [ "Floor" ] = Dr [ "Floor" ] . ToString ( ) ;
dTable . Rows . Add ( oDR ) ;
//serial++;
}
DataSet dSet = new DataSet ( ) ;
dTable . TableName = "AttendenceDataSet_MonthlyDetail" ;
string RDLC = "HRM.Report.Attendence.RDLC.MonthlyDetailAttnEcho.rdlc" ;
dSet . Tables . Add ( dTable ) ;
List < ReportParameter > _parameters = new List < ReportParameter > ( ) ;
ReportParameter rParam = new ReportParameter ( "Fromdate" , GlobalFunctions . FirstDateOfMonth ( dFromDate ) . ToString ( "dd MMM yyyy" ) ) ;
_parameters . Add ( rParam ) ;
rParam = new ReportParameter ( "ToDate" , GlobalFunctions . LastDateOfMonth ( dFromDate ) . ToString ( "dd MMM yyyy" ) ) ;
_parameters . Add ( rParam ) ;
return new ReportProcessor ( ) . CommonReportView ( null , RDLC , dSet , null , _parameters , true , payrollTypeID , reportType ) ;
}
#endregion
#region Multiple Employee Job Card
public byte [ ] ShowJobCardMultiple ( DateTime dFromDate , DateTime dToDate , string sEmpIDs , string reportType , int payrollTypeID )
{
//DateTime dFromDate = _selectedParameter.FromDate.Value.Date.FirstDateOfMonth();
//DateTime dToDate = _selectedParameter.ToDate.Value.Date.LastDateOfMonth();
if ( dFromDate > dToDate )
{
var temp = dFromDate ;
dFromDate = dToDate ;
dToDate = temp ;
}
//string sEmpID = _selectedParameter.ReportItem.INSQL;
DataSet dsEmployee = new EmployeeService ( ) . GetAllEmpBasicInfo ( sEmpIDs ) ;
var employees = new EmployeeService ( ) . GetByEmpIDs ( sEmpIDs ) ;
var dAttnProcessess = new DailyAttnProcessService ( ) . Get ( sEmpIDs , dFromDate , dToDate ) ;
//List<ADParameter> _adps = ADParameter.Get(EnumStatus.Regardless, EnumAllowOrDeduct.Allowance);
//AllowanceDeduction oAttnNightAllowance = oAllDeducts.FirstOrDefault(x => x.Code.Trim().ToUpper() == "023" && x.AllowOrDeductType == EnumAllowOrDeduct.Allowance);
//AllowanceDeduction oAttnSpacialAllowance = oAllDeducts.FirstOrDefault(x => x.Code.Trim().ToUpper() == "022" && x.AllowOrDeductType == EnumAllowOrDeduct.Allowance);
//oShiftIDs = (_adps != null && _adps.Count > 0) ? _adps.Where(y => y.AllowDeductID == oAttnNightAllowance.ID).SelectMany(z => z.ADParameterShifts).Select(a => a.ShiftID).ToList() : null;
//oShiftIDsSpecial = (_adps != null && _adps.Count > 0) ? _adps.Where(y => y.AllowDeductID == oAttnSpacialAllowance.ID).SelectMany(z => z.ADParameterShifts).Select(a => a.ShiftID).ToList() : null;
List < ADParameter > _adps = new ADParameterService ( ) . Get ( EnumStatus . Regardless , EnumAllowOrDeduct . Allowance , payrollTypeID ) ;
List < AllowanceDeduction > oAllowanceDeduction = new AllowanceDeductionService ( ) . Get ( EnumStatus . Regardless ) ;
List < ADParameterEmployee > oADParameterEmployee = new ADParameterEmployeeService ( ) . Get ( EnumADEmpType . NotApplicable ) ;
List < ADParameter . ADParameterShift > oADParameterShift = new ADParameterService ( ) . GetAllShifts ( ) ;
foreach ( ADParameter item in _adps )
{
item . AllowanceDeduction = oAllowanceDeduction . Where ( x = > x . ID = = item . AllowDeductID ) . FirstOrDefault ( ) ;
item . NotApplicable = oADParameterEmployee . Where ( x = > x . ADParameterID = = item . ID & & x . ADEmpType = = EnumADEmpType . NotApplicable ) . ToList ( ) ;
item . ADParameterShifts = oADParameterShift . Where ( x = > x . ADParameterID = = item . ID ) . ToList ( ) ;
}
List < AllowanceDeduction > oAllDeducts = new AllowanceDeductionService ( ) . Get ( EnumStatus . Regardless ) ;
AllowanceDeduction oAttnNightAllowance = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) . ToUpper ( ) = = "023" & & x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance ) ;
AllowanceDeduction oAttnSpacialAllowance = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) . ToUpper ( ) = = "022" & & x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance ) ;
List < int > oShiftIDs = ( _adps ! = null & & _adps . Count > 0 ) ? _adps . Where ( y = > y . AllowDeductID = = oAttnNightAllowance . ID ) . SelectMany ( z = > z . ADParameterShifts ) . Select ( a = > Convert . ToInt32 ( a . ShiftID ) ) . ToList ( ) : null ;
List < int > oShiftIDsSpecial = ( _adps ! = null & & _adps . Count > 0 ) ? _adps . Where ( y = > y . AllowDeductID = = oAttnSpacialAllowance . ID ) . SelectMany ( z = > z . ADParameterShifts ) . Select ( a = > Convert . ToInt32 ( a . ShiftID ) ) . ToList ( ) : null ;
Attendence . AttendenceDataSet . AttendenceDataSet . EmpDailyAttnParentDataTable dTableParent = new Attendence . AttendenceDataSet . AttendenceDataSet . EmpDailyAttnParentDataTable ( ) ;
Attendence . AttendenceDataSet . AttendenceDataSet . EmpDailyAttnDataTable dTableChild = new Attendence . AttendenceDataSet . AttendenceDataSet . EmpDailyAttnDataTable ( ) ;
List < AttnNationalHoliday > oNationalHolidays = new AttnNationalHolidayService ( ) . GetByMonth ( PayrollGlobalFunctions . FirstDateOfYear ( dFromDate ) , PayrollGlobalFunctions . LastDateOfYear ( dToDate ) ) ;
List < Leave > oLeaves = new LeaveService ( ) . Get ( ) ;
List < Shift > oShifts = new ShiftService ( ) . GetAllShift ( ) ;
List < int > oOverlappingShiftIDs = oShifts . Where ( x = > x . IsOverlapingDay ) . Select ( x = > x . ID ) . ToList ( ) ;
AllowanceDeduction oAttnLunchAssistanceAllowance = oAllDeducts . FirstOrDefault ( x = > x . Code . Trim ( ) . ToUpper ( ) = = "015" & & x . AllowOrDeductType = = EnumAllowOrDeduct . Allowance ) ;
string lunchAllowDaysString = new SystemConfigarationService ( ) . GetconfigStringValue ( EnumConfigurationType . Logic , "attendence" , "lunchallowanceday" ) ;
DayOfWeek lunchAllowanceDOW ;
if ( ! Enum . TryParse ( lunchAllowDaysString , out lunchAllowanceDOW ) ) lunchAllowanceDOW = DayOfWeek . Friday ;
string tiffinAllowanceCodeString = new SystemConfigarationService ( ) . GetconfigStringValue ( EnumConfigurationType . Logic , "attendence" , "nightshiftcodes" ) ;
List < string > tiffinAllowanceCodes = tiffinAllowanceCodeString . Trim ( ) . Split ( ',' ) . ToList ( ) ;
List < int > oNightShiftIDs = oShifts . Where ( x = > tiffinAllowanceCodes . Contains ( x . Code . Trim ( ) ) ) . Select ( x = > x . ID ) . ToList ( ) ;
List < ADParameter > _Adparameters = new ADParameterService ( ) . Get ( EnumStatus . Active , EnumAllowOrDeduct . Allowance , payrollTypeID ) . Where ( x = > x . AllowDeductID = = 4 ) . ToList ( ) ; // AllowDeductID = 4 is Extra Allowance in ALLOWANCEDEDUCTION table
//AllowanceDeduction oAttnExtraAllowance = oAllDeducts.FirstOrDefault(x => x.Code.Trim().ToUpper() == "004" && x.AllowOrDeductType == EnumAllowOrDeduct.Allowance);
//_Adparameters = new ADParameterService().Get(EnumStatus.Active, EnumAllowOrDeduct.Allowance).Where(x => x.AllowDeductID == ID.FromInteger(4)).ToList(); // AllowDeductID = 4 is Extra Allowance in ALLOWANCEDEDUCTION table
List < Grade > ogrades = new GradeService ( ) . GetAllPayrollTypes ( EnumStatus . Regardless ) ;
foreach ( DataRow drEmployee in dsEmployee . Tables [ 0 ] . Rows )
{
for ( DateTime currentMonth = dFromDate . LastDateOfMonth ( ) ; currentMonth < = dToDate ; currentMonth = currentMonth . AddDays ( 1 ) . LastDateOfMonth ( ) )
{
var firstDateOfMonth = currentMonth . FirstDateOfMonth ( ) ;
var lastDateOfMonth = currentMonth . LastDateOfMonth ( ) ;
var month = currentMonth . ToString ( "MMM yyyy" ) ;
double totalOTHour = 0 ;
double totalLateHour = 0 ;
var employee = employees . FirstOrDefault ( x = > x . ID = = Convert . ToInt32 ( drEmployee [ "EmployeeID" ] . ToString ( ) ) ) ;
if ( employee = = null )
{
continue ;
}
var empDailyAttnProcess = dAttnProcessess . Where ( x = > x . EmployeeID = = employee . ID & &
x . AttnDate > = firstDateOfMonth & & x . AttnDate < = lastDateOfMonth ) . ToList ( ) ;
if ( empDailyAttnProcess . Count > 0 )
{
GetEmpDailyAttn ( employee , empDailyAttnProcess , dTableChild , month , out totalOTHour , out totalLateHour , _adps , _Adparameters , oShiftIDs , oShiftIDsSpecial , oNationalHolidays ,
lunchAllowanceDOW , oOverlappingShiftIDs , oNightShiftIDs , ogrades , oLeaves , oShifts ) ;
var dRowParent = dTableParent . NewRow ( ) ;
dRowParent [ "EmpNo" ] = employee . EmployeeNo . ToString ( ) ;
dRowParent [ "Month" ] = month ;
dRowParent [ "Name" ] = drEmployee [ "Name" ] . ToString ( ) ;
dRowParent [ "Designation" ] = drEmployee [ "Designation" ] . ToString ( ) ;
dRowParent [ "JoiningDate" ] = Convert . ToDateTime ( drEmployee [ "JoiningDate" ] . ToString ( ) ) . ToString ( "dd MMM yyyy" ) ;
dRowParent [ "Department" ] = drEmployee [ "Department" ] . ToString ( ) ;
dRowParent [ "Section" ] = drEmployee [ "Section" ] . ToString ( ) ;
dRowParent [ "Floor" ] = drEmployee [ "Floor" ] . ToString ( ) ;
dRowParent [ "TotalOT" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( totalOTHour ) ;
dRowParent [ "TotalLateHour" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( totalLateHour ) ;
dRowParent [ "FromDate" ] = firstDateOfMonth . ToString ( "dd MMM yyyy" ) ;
dRowParent [ "ToDate" ] = lastDateOfMonth . ToString ( "dd MMM yyyy" ) ;
dTableParent . Rows . Add ( dRowParent ) ;
}
}
}
DataSet dSetParent = new DataSet ( ) ;
dTableParent . TableName = "AttendenceDataSet_EmpDailyAttnParent" ;
dSetParent . Tables . Add ( dTableParent ) ;
DataSet dSetChild = new DataSet ( ) ;
dTableChild . TableName = "AttendenceDataSet_EmpDailyAttn" ;
dSetChild . Tables . Add ( dTableChild ) ;
string RDLC = "HRM.Report.Attendence.RDLC.MultipleJobCard.rdlc" ;
List < ReportParameter > _parameters = null ;
//new fReportViewer().CommonReportView(_selectedParameter.ReportItem, dSetParent, dSetChild, RDLC, null, true);
return new ReportProcessor ( ) . CommonReportView ( null , RDLC , dSetParent , dSetChild , _parameters , true , payrollTypeID , reportType ) ;
}
public void GetEmpDailyAttn ( Employee employee , List < DailyAttnProcess > dAttnProcessess , Attendence . AttendenceDataSet . AttendenceDataSet . EmpDailyAttnDataTable dTableChild , string Month , out double totalOTHour , out double totalLateHour ,
List < ADParameter > _adps , List < ADParameter > _Adparameters , List < int > oShiftIDs , List < int > oShiftIDsSpecial , List < AttnNationalHoliday > oNationalHolidays ,
DayOfWeek lunchAllowanceDOW , List < int > oOverlappingShiftIDs , List < int > oNightShiftIDs ,
List < Grade > ogrades , List < Leave > oLeaves , List < Shift > oShifts )
{
DateTime fromDate = DateTime . Now ;
if ( dAttnProcessess ! = null & & dAttnProcessess . Count > 0 )
{
fromDate = dAttnProcessess [ 0 ] . AttnDate ;
}
totalOTHour = 0 ; totalLateHour = 0 ;
string sLeaveName = string . Empty ;
Employee emp = new EmployeeService ( ) . Get ( employee . ID ) ;
//string sExtraAllowanceHour = Ease.CoreV35.Utility.ConfigUtility.GetAppSettings("ExtraAllowanceHour");
//double dExtraAllowanceHours = 0;
//if (!double.TryParse(sExtraAllowanceHour, out dExtraAllowanceHours))
//{
// dExtraAllowanceHours = 13.5; // Default if Hour not given
//}
double dExtraAllowanceHours = 13.5 ;
DateTime ? startTime , endTime ;
string shortAttnType = "" ;
if ( ! ( dAttnProcessess = = null | | dAttnProcessess . Count < = 0 ) )
{
foreach ( DailyAttnProcess dAttnProcess in dAttnProcessess )
{
sLeaveName = string . Empty ;
StringBuilder sRemarks ;
DataRow Rowbody = dTableChild . NewRow ( ) ;
DailyAttnProcess dap = dAttnProcessess . Where ( x = > x . ShiftID ! = null & &
x . ShiftID ! = 0 & &
oShiftIDs . Contains ( Convert . ToInt32 ( x . ShiftID ) ) & &
x . AttenType ! = EnumAttendanceType . Absent & &
x . AttenType ! = EnumAttendanceType . Holiday & &
x . AttenType ! = EnumAttendanceType . Leave & &
x . AttenType ! = EnumAttendanceType . WeeklyHoliday
& & x . AttnDate = = dAttnProcess . AttnDate ) . FirstOrDefault ( ) ;
Rowbody [ "NightShiftAllowance" ] = dap ! = null ? 1 : 0 ;
DailyAttnProcess dapSpecial = dAttnProcessess . Where ( x = > x . ShiftID ! = null & &
x . ShiftID ! = 0 & &
oShiftIDsSpecial . Contains ( Convert . ToInt32 ( x . ShiftID ) ) & &
x . AttenType ! = EnumAttendanceType . Absent & &
x . AttenType ! = EnumAttendanceType . Holiday & &
x . AttenType ! = EnumAttendanceType . Leave & &
x . AttenType ! = EnumAttendanceType . WeeklyHoliday & & x . AttnDate = = dAttnProcess . AttnDate ) . FirstOrDefault ( ) ;
Rowbody [ "SpecialAllowance" ] = dapSpecial ! = null ? 1 : 0 ;
Rowbody [ "EmployeeNo" ] = employee . EmployeeNo . ToString ( ) ;
Rowbody [ "Month" ] = Month ;
Rowbody [ "Date" ] = dAttnProcess . AttnDate . ToString ( "dd MMM yy" ) ;
Rowbody [ "Day" ] = dAttnProcess . AttnDate . ToString ( "ddd" ) ;
if ( dAttnProcess . InTime = = DateTime . MinValue | | dAttnProcess . InTime = = null )
{
Rowbody [ "InTime" ] = "00:00" ;
}
else
{
Rowbody [ "InTime" ] = ( ( DateTime ) dAttnProcess . InTime ) . ToString ( "HH:mm:ss" ) ;
}
if ( dAttnProcess . OutTime = = DateTime . MinValue | | dAttnProcess . OutTime = = null )
{
Rowbody [ "OutTime" ] = "00:00" ;
}
else
{
Rowbody [ "OutTime" ] = ( ( DateTime ) dAttnProcess . OutTime ) . ToString ( "HH:mm:ss" ) ;
}
totalLateHour + = dAttnProcess . LateHour ;
Rowbody [ "LateBy" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( dAttnProcess . LateHour ) ;
totalOTHour + = dAttnProcess . OTHour ;
Rowbody [ "OTHr" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( dAttnProcess . OTHour ) ;
shortAttnType = GlobalFunctions . GetShortAttnType ( dAttnProcess . AttenType ) ;
Rowbody [ "Status" ] = shortAttnType ;
AttnNationalHoliday nh = oNationalHolidays . Find ( x = > dAttnProcess . AttnDate > = x . FromDate & & dAttnProcess . AttnDate < = x . ToDate ) ;
if ( nh ! = null )
Rowbody [ "Status" ] = "N" ;
Rowbody [ "Lunch" ] = 0 ;
//if (dAttnProcess.AttnDate != Convert.ToDateTime("18 Feb 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("25 Feb 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("29 Apr 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("27 May 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("10 Jun 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("24 Jun 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("05 Aug 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("12 Aug 2022") &&
// dAttnProcess.AttnDate != Convert.ToDateTime("19 Aug 2022"))
//{
// if (dAttnProcess.AttnDate.DayOfWeek == lunchAllowanceDOW &&
// dAttnProcess.AttenType != EnumAttendanceType.Absent &&
// dAttnProcess.AttenType != EnumAttendanceType.Holiday &&
// dAttnProcess.AttenType != EnumAttendanceType.Leave &&
// dAttnProcess.AttenType != EnumAttendanceType.WeeklyHoliday &&
// !oOverlappingShiftIDs.Contains((dAttnProcess.ShiftID != null && !dAttnProcess.ShiftID.IsUnassigned) ? dAttnProcess.ShiftID : 0))
// {
// Rowbody["Lunch"] = 1;
// }
//}
if ( dAttnProcess . AttnDate . DayOfWeek = = lunchAllowanceDOW & &
dAttnProcess . AttenType ! = EnumAttendanceType . Absent & &
dAttnProcess . AttenType ! = EnumAttendanceType . Holiday & &
dAttnProcess . AttenType ! = EnumAttendanceType . Leave & &
dAttnProcess . AttenType ! = EnumAttendanceType . WeeklyHoliday & &
! oOverlappingShiftIDs . Contains ( ( dAttnProcess . ShiftID ! = null & & dAttnProcess . ShiftID ! = 0 ) ? Convert . ToInt32 ( dAttnProcess . ShiftID ) : 0 ) )
{
Rowbody [ "Lunch" ] = 1 ;
}
Rowbody [ "Tiffin" ] = 0 ;
if ( dAttnProcess . ShiftID ! = null & &
dAttnProcess . ShiftID ! = 0 & &
oNightShiftIDs . Contains ( Convert . ToInt32 ( dAttnProcess . ShiftID ) ) & &
dAttnProcess . AttenType ! = EnumAttendanceType . Absent & &
dAttnProcess . AttenType ! = EnumAttendanceType . Holiday & &
dAttnProcess . AttenType ! = EnumAttendanceType . Leave & &
dAttnProcess . AttenType ! = EnumAttendanceType . WeeklyHoliday )
{
Rowbody [ "Tiffin" ] = 1 ;
}
ADParameter ad = _adps . Where ( x = > x . AllowanceDeduction . Code = = "016" ) . FirstOrDefault ( ) ;
if ( ad ! = null & & ad . NotApplicable ! = null & & ad . NotApplicable . Count > 0 )
{
ADParameterEmployee adpe = ad . NotApplicable . Where ( x = > x . EmployeeID = = emp . ID ) . FirstOrDefault ( ) ;
if ( adpe ! = null )
{
Rowbody [ "Tiffin" ] = 0 ;
}
}
Rowbody [ "ExtraAllowance" ] = 0 ;
if ( _Adparameters ! = null & & emp ! = null )
{
foreach ( ADParameter adparam in _Adparameters )
{
foreach ( ADParameter . ADParameterGrade grn in adparam . ADParameterGrades )
{
//Grade gr = ogrades.GetItem(grn.GradeID);
Grade gr = ogrades . Where ( x = > x . ID = = grn . GradeID ) . FirstOrDefault ( ) ;
if ( gr ! = null & & gr . ID = = emp . GradeID )
{
if ( /*dAttnProcess.InTime != DateTime.MinValue ||*/ dAttnProcess . InTime ! = null )
{
Shift sft = oShifts . FirstOrDefault ( x = > x . ID = = dAttnProcess . ShiftID ) ;
if ( sft ! = null | | dAttnProcess . ShiftID ! = null )
{
startTime = dAttnProcess . InTime . Value . Add ( sft . InTime . TimeOfDay ) ;
startTime = startTime . Value . AddMinutes ( - 15 ) > dAttnProcess . InTime ? startTime . Value . AddMinutes ( - 15 ) : dAttnProcess . InTime ;
endTime = dAttnProcess . OutTime ;
if ( endTime ! = null )
{
if ( endTime . Value . Subtract ( startTime . Value ) . Add ( TimeSpan . FromMinutes ( 1 ) ) . TotalHours > = dExtraAllowanceHours )
{
Rowbody [ "ExtraAllowance" ] = 1 ;
}
}
}
}
}
}
}
}
if ( dAttnProcess . AttenType = = EnumAttendanceType . Leave )
{
var oLeave = oLeaves . FirstOrDefault ( x = > x . ID = = dAttnProcess . ReferenceID ) ;
if ( oLeave ! = null )
{
sLeaveName = oLeave . Description ;
}
}
sRemarks = new StringBuilder ( ) ;
sRemarks . AppendFormat ( "{0}." , sLeaveName ) ;
sRemarks . AppendFormat ( "{0}." , dAttnProcess . Comments ) ;
Rowbody [ "Remarks" ] = sRemarks . ToString ( ) . Trim ( '.' ) ;
Shift oSft = oShifts . Where ( o = > o . ID = = dAttnProcess . ShiftID ) . FirstOrDefault ( ) ;
if ( oSft ! = null )
{
Rowbody [ "Shift" ] = oSft . ShortName ;
}
else
{
Rowbody [ "Shift" ] = string . Empty ;
}
Rowbody [ "IsManualEntry" ] = dAttnProcess . IsManualEntry ;
dTableChild . Rows . Add ( Rowbody ) ;
}
}
}
#endregion
#region Attendance Information
public byte [ ] GetEmpAttenInfo ( int payrollTypeID , string sEmpIDs , string reportType )
{
ReportProcessor form = new ReportProcessor ( ) ;
DataSet oEmpAttenInfo = null ;
DataRow oDR = null ;
oEmpAttenInfo = new DailyAttnProcessService ( ) . GetEmpAttenInfo ( sEmpIDs ) ;
Attendence . AttendenceDataSet . AttendenceDataSet . EmpAttenInfoDataTable dTable = new Attendence . AttendenceDataSet . AttendenceDataSet . EmpAttenInfoDataTable ( ) ;
//int serial = 1;
foreach ( DataRow Dr in oEmpAttenInfo . Tables [ 0 ] . Rows )
{
oDR = dTable . NewRow ( ) ;
//oDR["Serial"] = serial.ToString();
oDR [ "EmpNo" ] = Dr [ "EMPLOYEENO" ] ;
oDR [ "EmpName" ] = Dr [ "Name" ] ;
oDR [ "AccessCardID" ] = Dr [ "CardNumber" ] ;
oDR [ "Shift" ] = Dr [ "ShortName" ] ;
oDR [ "WorkPlanGroup" ] = Dr [ "Name1" ] ;
oDR [ "DeptName" ] = Dr [ "Department" ] . ToString ( ) ;
oDR [ "Section" ] = Dr [ "Section" ] . ToString ( ) ;
oDR [ "Line" ] = Dr [ "Line" ] . ToString ( ) ;
oDR [ "Floor" ] = Dr [ "Floor" ] . ToString ( ) ;
dTable . Rows . Add ( oDR ) ;
//serial++;
}
DataSet dSet = new DataSet ( ) ;
dTable . TableName = "AttendenceDataSet_EmpAttenInfo" ;
string RDLC = "EmpAttenInfo.rdlc" ;
dSet . Tables . Add ( dTable ) ;
return form . CommonReportViewForReports ( null , dSet , null , RDLC , null , true , payrollTypeID , reportType ) ;
}
#endregion
#region DailyInOut
public byte [ ] ShowDailyInOut ( DateTime dFromDate , string sEmpID , string reportType , int payrollTypeID )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
int position = 0 ;
DateTime attnDate = dFromDate ;
DateTime PreviousAttnDate = attnDate . AddDays ( - 1 ) ;
DataSet oDailyInOut = null ;
DataSet oPreviousDayInOut = null ;
DataRow oDR = null ;
oDailyInOut = new EchoTexExceptionReportService ( ) . GetDailyInOut ( attnDate , sEmpID ) ;
oPreviousDayInOut = new EchoTexExceptionReportService ( ) . GetDailyInOut ( PreviousAttnDate , sEmpID ) ;
position = 1 ;
//DailyAttnProcess dailyData = null;
Attendence . AttendenceDataSet . AttendenceDataSet . DailyInOutDataTable dTable = new Attendence . AttendenceDataSet . AttendenceDataSet . DailyInOutDataTable ( ) ;
foreach ( DataRow Dr in oDailyInOut . Tables [ 0 ] . Rows )
{
oDR = dTable . NewRow ( ) ;
DataRow dailyData = oPreviousDayInOut . Tables [ 0 ] . AsEnumerable ( )
. Where ( x = > x [ "EMPLOYEENO" ] . ToString ( ) = = Dr [ "EMPLOYEENO" ] . ToString ( ) ) . FirstOrDefault ( ) ;
string previousShift = dailyData = = null ? "" : dailyData [ "Shift" ] . ToString ( ) ;
oDR [ "EmployeeNo" ] = Dr [ "EMPLOYEENO" ] ;
oDR [ "Name" ] = Dr [ "Name" ] ;
position = 2 ;
oDR [ "PreviousDayShift" ] = previousShift ;
oDR [ "Designation" ] = Dr [ "Designation" ] ;
position = 3 ;
oDR [ "InTime" ] = Dr [ "InTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "InTime" ] ) . ToString ( "HH:mm" ) ;
oDR [ "OutTime" ] = Dr [ "OutTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "OutTime" ] ) . ToString ( "HH:mm" ) ;
oDR [ "ShiftInTime" ] = Dr [ "ShiftInTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "ShiftInTime" ] ) . ToString ( "HH:mm" ) ;
oDR [ "ShiftOutTime" ] = Dr [ "ShiftOutTime" ] is DBNull ? "00:00" : Convert . ToDateTime ( Dr [ "ShiftOutTime" ] ) . ToString ( "HH:mm" ) ;
position = 3 ;
oDR [ "Department" ] = Dr [ "Department" ] . ToString ( ) ;
oDR [ "Section" ] = Dr [ "Section" ] . ToString ( ) ;
oDR [ "Line" ] = Dr [ "Line" ] . ToString ( ) ;
oDR [ "Floor" ] = Dr [ "Floor" ] . ToString ( ) ;
position = 4 ;
oDR [ "EmpType" ] = Dr [ "EmpType" ] . ToString ( ) ;
oDR [ "Status" ] = GlobalFunctions . GetShortAttnType ( ( EnumAttendanceType ) Convert . ToInt32 ( Dr [ "Status" ] . ToString ( ) ) ) ;
oDR [ "OTHour" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( Convert . ToDouble ( Dr [ "OTHour" ] . ToString ( ) ) ) ;
oDR [ "OTHourDBL" ] = Convert . ToDouble ( Dr [ "OTHour" ] . ToString ( ) ) ;
oDR [ "DeptID" ] = Convert . ToInt32 ( Dr [ "DeptID" ] . ToString ( ) ) ;
position = 5 ;
oDR [ "DeptName" ] = Dr [ "DeptName" ] . ToString ( ) ;
oDR [ "Shift" ] = Dr [ "Shift" ] . ToString ( ) ;
oDR [ "CardNo" ] = Dr [ "CardNo" ] . ToString ( ) ;
dTable . Rows . Add ( oDR ) ;
}
position = 6 ;
DataSet dSet = new DataSet ( ) ;
dTable . TableName = "AttendenceDataSet_DailyInOut" ;
dSet . Tables . Add ( dTable ) ;
string RDLC = "DailyInOutEcho.rdlc" ;
ReportParameter rParam ;
List < ReportParameter > _reportParameters = new List < ReportParameter > ( ) ;
rParam = new ReportParameter ( "AttnDate" , attnDate . ToString ( "dd MMM yyyy" ) ) ;
_reportParameters . Add ( rParam ) ;
position = 7 ;
return reportProcessor . AttendanceReportsView ( null , dSet , null , RDLC , _reportParameters , true , payrollTypeID , reportType ) ;
}
#endregion
#region DailyAttenSummary
public byte [ ] ShowDailyAttnSummary ( DateTime dFromDate , string sEmpID , string reportType , int payrollTypeID )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
DateTime attnDate = dFromDate ;
double totalMale = 0 , totalFemale = 0 , totalOther = 0 ;
DataSet oDailyAttnSummary = null ;
oDailyAttnSummary = new EchoTexExceptionReportService ( ) . GetDailyAttnSummary ( attnDate , sEmpID ) ;
totalMale = oDailyAttnSummary . Tables [ 0 ] . AsEnumerable ( )
. Where ( x = > Convert . ToInt32 ( x [ "GenderSerial" ] ) = = ( int ) EnumGender . Male )
. Sum ( x = > Convert . ToDouble ( x [ "HeadCount" ] . ToString ( ) ) ) ;
totalFemale = oDailyAttnSummary . Tables [ 0 ] . AsEnumerable ( )
. Where ( x = > Convert . ToInt32 ( x [ "GenderSerial" ] ) = = ( int ) EnumGender . Female ) // && Convert.ToInt32(x["StatusSerial"]) == 0)
. Sum ( x = > Convert . ToDouble ( x [ "HeadCount" ] . ToString ( ) ) ) ;
totalOther = oDailyAttnSummary . Tables [ 0 ] . AsEnumerable ( )
. Where ( x = > Convert . ToInt32 ( x [ "GenderSerial" ] ) = = ( int ) EnumGender . Other )
. Sum ( x = > Convert . ToDouble ( x [ "HeadCount" ] . ToString ( ) ) ) ;
string RDLC = "DailyAttnSummary.rdlc" ;
ReportParameter rParam ;
List < ReportParameter > _reportParameters = new List < ReportParameter > ( ) ;
rParam = new ReportParameter ( "AttnDate" , attnDate . ToString ( "dd MMM yyyy" ) ) ;
_reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "TotalMale" , totalMale . ToString ( ) ) ;
_reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "TotalFemale" , totalFemale . ToString ( ) ) ;
_reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "TotalOther" , totalOther . ToString ( ) ) ;
_reportParameters . Add ( rParam ) ;
oDailyAttnSummary . Tables [ 0 ] . TableName = "tblSummary" ;
return reportProcessor . AttendanceReportsView ( null , oDailyAttnSummary , null , RDLC , _reportParameters , true , payrollTypeID , reportType ) ;
}
#endregion
#region InOutMissing
public byte [ ] ShowInOutMissing ( DateTime dFromDate , DateTime dToDate , string sEmpID , string reportType , int payrollTypeID )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
DateTime attnFromDate , attnToDate ;
var sinMissingHour = new SystemConfigarationService ( ) . GetconfigValue ( EnumConfigurationType . Logic , "overtime" , "inmissinghour" ) ;
double inMissingHour = 0 ;
if ( sinMissingHour ! = null ) inMissingHour = Convert . ToDouble ( sinMissingHour ) ;
if ( dFromDate < = dToDate )
{
attnFromDate = dFromDate ;
attnToDate = dToDate . Date . AddDays ( 1 ) . AddSeconds ( - 1 ) ;
}
else
{
attnFromDate = dToDate ;
attnToDate = dFromDate . Date . AddDays ( 1 ) . AddSeconds ( - 1 ) ;
}
List < Shift > shifts = new ShiftService ( ) . GetAllShift ( ) ;
DataSet oDailyInOut = null ;
DataRow oDR = null ;
oDailyInOut = new EchoTexExceptionReportService ( ) . GetDateRangeDataByStatus ( attnFromDate , attnToDate , sEmpID , EnumAttendanceType . Present , EnumAttendanceType . Delay , EnumAttendanceType . Late , EnumAttendanceType . Early , EnumAttendanceType . OutSideDuty , EnumAttendanceType . HalfDay ) ;
Attendence . AttendenceDataSet . AttendenceDataSet . InOutMissingDataTable dTable = new Attendence . AttendenceDataSet . AttendenceDataSet . InOutMissingDataTable ( ) ;
DateTime Intime , OutTime , AttnDate , ShiftInTime , ShiftOutTime ;
foreach ( DataRow Dr in oDailyInOut . Tables [ 0 ] . AsEnumerable ( ) . Where ( x = > x [ "OutTime" ] is DBNull | | x [ "InTime" ] is DBNull ) )
{
Intime = DateTime . MinValue ; OutTime = DateTime . MinValue ;
oDR = dTable . NewRow ( ) ;
oDR [ "EmployeeNo" ] = Dr [ "EMPLOYEENO" ] ;
oDR [ "Name" ] = Dr [ "Name" ] ;
oDR [ "Designation" ] = Dr [ "Designation" ] ;
oDR [ "EmpType" ] = Dr [ "EmpType" ] . ToString ( ) ;
oDR [ "Status" ] = GlobalFunctions . GetShortAttnType ( ( EnumAttendanceType ) Convert . ToInt32 ( Dr [ "Status" ] ) ) ;
oDR [ "OTHour" ] = GlobalFunctions . ConvertDoubleHourToHourMinute ( Convert . ToDouble ( Dr [ "OTHour" ] ) ) ;
oDR [ "OTHourDBL" ] = Convert . ToDouble ( Dr [ "OTHour" ] ) ;
oDR [ "DeptID" ] = Convert . ToInt32 ( Dr [ "DeptID" ] . ToString ( ) ) ;
oDR [ "DeptName" ] = Dr [ "Department" ] . ToString ( ) ;
oDR [ "Shift" ] = Dr [ "Shift" ] . ToString ( ) ;
oDR [ "CardNo" ] = Dr [ "CardNo" ] . ToString ( ) ;
oDR [ "AttnDate" ] = Convert . ToDateTime ( Dr [ "AttnDate" ] ) ;
if ( Dr [ "OutTime" ] is DBNull )
{
Intime = Convert . ToDateTime ( Dr [ "InTime" ] ) ;
AttnDate = Intime . Date ;
oDR [ "InTime" ] = Intime . ToString ( "HH:mm" ) ;
oDR [ "OutTime" ] = string . Empty ;
oDR [ "MissingStatus" ] = "Out Missing" ;
}
else
{
OutTime = Convert . ToDateTime ( Dr [ "OutTime" ] ) ;
AttnDate = OutTime . Date ;
oDR [ "InTime" ] = string . Empty ;
oDR [ "OutTime" ] = OutTime . ToString ( "HH:mm" ) ;
oDR [ "MissingStatus" ] = "In Missing" ;
}
oDR [ "Floor" ] = Dr [ "Floor" ] . ToString ( ) ;
oDR [ "Section" ] = Dr [ "Section" ] . ToString ( ) ;
oDR [ "Line" ] = Dr [ "Line" ] . ToString ( ) ;
Shift shft = shifts . SingleOrDefault ( x = > x . ID = = Convert . ToInt32 ( Dr [ "ShiftID" ] . ToString ( ) ) ) ;
if ( shft ! = null )
{
ShiftInTime = new DateTime ( AttnDate . Year , AttnDate . Month , AttnDate . Day , shft . InTime . Hour , shft . InTime . Minute , shft . InTime . Second ) ;
ShiftOutTime = new DateTime ( AttnDate . Year , AttnDate . Month , AttnDate . Day , shft . OutTime . Hour , shft . OutTime . Minute , shft . OutTime . Second ) ;
if ( ShiftInTime > ShiftOutTime )
ShiftOutTime = ShiftOutTime . AddDays ( 1 ) ;
oDR [ "ShiftIn" ] = ShiftInTime . ToString ( "HH:mm" ) ;
oDR [ "ShiftOut" ] = ShiftOutTime . ToString ( "HH:mm" ) ;
if ( Intime = = DateTime . MinValue & & ShiftInTime . AddHours ( inMissingHour ) < Intime )
{
oDR [ "OutTime" ] = oDR [ "InTime" ] . ToString ( ) ;
oDR [ "InTime" ] = string . Empty ;
oDR [ "MissingStatus" ] = "In Missing" ;
}
}
dTable . Rows . Add ( oDR ) ;
}
DataSet dSet = new DataSet ( ) ;
dTable . TableName = "AttendenceDataSet_InOutMissing" ;
dSet . Tables . Add ( dTable ) ;
string RDLC = "InOutMissing.rdlc" ;
ReportParameter rParam ;
List < ReportParameter > _reportParameters = new List < ReportParameter > ( ) ;
rParam = new ReportParameter ( "AttnFromDate" , attnFromDate . ToString ( "dd MMM yyyy" ) ) ;
_reportParameters . Add ( rParam ) ;
rParam = new ReportParameter ( "AttnToDate" , attnToDate . ToString ( "dd MMM yyyy" ) ) ;
_reportParameters . Add ( rParam ) ;
return reportProcessor . AttendanceReportsView ( null , dSet , null , RDLC , _reportParameters , true , payrollTypeID , reportType ) ;
}
#endregion
#region MonthlyKPI
public byte [ ] ShowMonthlyKPI ( DateTime dFromDate , DateTime dToDate , string sEmpID , string reportType , int payrollTypeID )
{
ReportProcessor reportProcessor = new ReportProcessor ( ) ;
DataSet oMonthlyKPIDetail = null ;
oMonthlyKPIDetail = new EchoTexExceptionReportService ( ) . GetMonthlyKPIDetail ( dFromDate , dToDate , sEmpID ) ;
2025-01-23 16:34:05 +06:00
#region Extra
oMonthlyKPIDetail . Tables [ 0 ] . Columns . Add ( "ExtraAllowance" , typeof ( double ) ) ;
if ( oMonthlyKPIDetail ! = null & & oMonthlyKPIDetail . Tables . Count > 0 )
{
List < DailyAttnProcess > dAttnProcessess = dAttnProcessess = new DailyAttnProcessService ( ) . Get ( sEmpID , dFromDate , dToDate ) ;
//List<AttnNationalHoliday> oNationalHolidays = AttnNationalHoliday.GetByMonth(dFromDate.FirstDateOfYear(), dFromDate.LastDateOfYear());
List < Shift > oShifts = new ShiftService ( ) . Get ( EnumStatus . Active , payrollTypeID ) ;
List < Employee > oemps = new EmployeeService ( ) . GetByEmpIDs ( sEmpID ) ;
List < ADParameter > oAdparameters = new ADParameterService ( ) . Get ( EnumStatus . Active , EnumAllowOrDeduct . Allowance , payrollTypeID ) . Where ( x = > x . AllowDeductID = = 4 ) . ToList ( ) ; // AllowDeductID = 4 is Extra Allowance in ALLOWANCEDEDUCTION table
List < Grade > ogrades = new GradeService ( ) . Get ( EnumStatus . Regardless ) ;
foreach ( DataRow monthlyRow in oMonthlyKPIDetail . Tables [ 0 ] . Rows )
{
Employee emp = oemps . Find ( x = > x . EmployeeNo . ToString ( ) = = monthlyRow [ "IDNo" ] . ToString ( ) ) ;
if ( emp = = null ) continue ;
DateTime attnDate = Convert . ToDateTime ( monthlyRow [ "AttnDate" ] ) ;
List < DailyAttnProcess > dEmpAttn = dAttnProcessess . FindAll ( x = > x . EmployeeID = = emp . ID & & x . AttnDate . Date = = attnDate . Date ) . ToList ( ) ;
DataTable oDataTable = new rptEcho ( ) . GetEmpDailyAttnNewKPI ( emp . ID , dEmpAttn , emp , oShifts , oAdparameters , ogrades ) ;
if ( oDataTable ! = null & & oDataTable . Rows . Count > 0 )
{
monthlyRow [ "ExtraAllowance" ] = oDataTable . Rows [ 0 ] [ "ExtraAllowance" ] ;
}
else
{
monthlyRow [ "ExtraAllowance" ] = 0 ;
}
}
}
#endregion
2024-10-14 10:01:49 +06:00
DataTable oMnthlyKPIDtlSummary = new AttendenceDataSet . MnthlyKPIDtlSummaryDataTable ( ) ;
#region Summary Parts
if ( oMonthlyKPIDetail . Tables . Count > 0 & & oMonthlyKPIDetail . Tables [ 0 ] . Rows . Count > 0 )
{
var groupedData = oMonthlyKPIDetail . Tables [ 0 ]
. AsEnumerable ( )
. GroupBy ( x = > x . Field < string > ( "IDNo" ) )
. Select ( g = > new { EmployeeNo = g . Key , OTSum = g . Sum ( x = > Convert . ToDouble ( x [ "OTHour" ] . ToString ( ) ) ) , OTAvg = g . Sum ( x = > Convert . ToDouble ( x [ "OTHour" ] . ToString ( ) ) ) / g . Count ( ) , OTGreaterThan5 = g . Count ( x = > Convert . ToDouble ( x [ "OTHour" ] . ToString ( ) ) > 5 ) , WH = g . Sum ( x = > Convert . ToDouble ( x [ "Minutes" ] . ToString ( ) ) ) } )
. ToList ( ) ;
DataRow dRow = oMnthlyKPIDtlSummary . NewRow ( ) ;
dRow [ "ManPower" ] = groupedData . Count ( ) ;
dRow [ "PerAvgOTGreater2" ] = groupedData . Count ( x = > x . OTAvg > 2 ) ;
dRow [ "PerSumOTGreater75" ] = groupedData . Count ( x = > x . OTSum > 75 ) ;
dRow [ "PerSumOTGreater100" ] = groupedData . Count ( x = > x . OTSum > 100 ) ;
dRow [ "PerSumOTGreater52" ] = groupedData . Count ( x = > x . OTSum > 52 ) ;
dRow [ "PerOneOTGreater5" ] = groupedData . Count ( x = > x . OTGreaterThan5 > 0 ) ;
double wh = groupedData . Sum ( c = > c . WH ) ;
oMnthlyKPIDtlSummary . Rows . Add ( dRow ) ;
}
#endregion
oMnthlyKPIDtlSummary . TableName = "MnthlyKPIDtlSummary" ;
oMonthlyKPIDetail . Tables . Add ( oMnthlyKPIDtlSummary ) ;
string RDLC = "rptMonthlyKPI.rdlc" ;
List < ReportParameter > _parameters = new List < ReportParameter > ( ) ;
ReportParameter rParam = new ReportParameter ( "FromDate" , dFromDate . ToString ( "dd MMM yyyy" ) ) ;
_parameters . Add ( rParam ) ;
rParam = new ReportParameter ( "ToDate" , dToDate . LastDateOfMonth ( ) . ToString ( "dd MMM yyyy" ) ) ;
_parameters . Add ( rParam ) ;
return reportProcessor . AttendanceReportsView ( null , oMonthlyKPIDetail , null , RDLC , _parameters , true , payrollTypeID , reportType ) ;
}
2025-01-23 16:34:05 +06:00
public DataTable GetEmpDailyAttnNewKPI ( int EmpID , List < DailyAttnProcess > dAttnProcessess , Employee emp , List < Shift > oShifts , List < ADParameter > oADPrams , List < Grade > ogrades )
{
AttendenceDataSet . EmpDailyAttnDataTable dTable = new AttendenceDataSet . EmpDailyAttnDataTable ( ) ;
var builder = new ConfigurationBuilder ( ) . SetBasePath ( Directory . GetCurrentDirectory ( ) ) . AddJsonFile ( "appsettings.json" ) ;
IConfiguration Configuration = builder . Build ( ) ;
string sExtraAllowanceHour = Configuration . GetSection ( "Attendance" ) [ "ExtraAllowanceHour" ] ;
double dExtraAllowanceHours = 0 ;
if ( ! double . TryParse ( sExtraAllowanceHour , out dExtraAllowanceHours ) )
{
dExtraAllowanceHours = 13.5 ; // Default if Hour not given
}
DateTime startTime , endTime ;
if ( ! ( dAttnProcessess = = null | | dAttnProcessess . Count < = 0 ) )
{
foreach ( DailyAttnProcess dAttnProcess in dAttnProcessess )
{
DataRow Rowbody = dTable . NewRow ( ) ;
Rowbody [ "ExtraAllowance" ] = 0 ;
if ( oADPrams ! = null & & emp ! = null )
{
foreach ( ADParameter adparam in oADPrams )
{
foreach ( ADParameter . ADParameterGrade grn in adparam . ADParameterGrades )
{
//Grade gr = ogrades.GetItem(grn.GradeID);
Grade gr = ogrades . Find ( delegate ( Grade item ) { return item . ID = = grn . GradeID ; } ) ;
if ( gr ! = null & & gr . ID = = emp . GradeID )
{
if ( dAttnProcess . InTime ! = null & & dAttnProcess . InTime ! = DateTime . MinValue )
{
Shift sft = oShifts . FirstOrDefault ( x = > x . ID = = dAttnProcess . ShiftID ) ;
startTime = dAttnProcess . InTime . Value . Date . Add ( sft . InTime . TimeOfDay ) ;
startTime = ( DateTime ) startTime . AddMinutes ( - 15 ) > ( DateTime ) dAttnProcess . InTime ? ( DateTime ) startTime . AddMinutes ( - 15 ) : ( DateTime ) dAttnProcess . InTime ;
endTime = dAttnProcess . OutTime ! = null ? ( DateTime ) dAttnProcess . OutTime : DateTime . MinValue ;
if ( endTime ! = DateTime . MinValue )
{
if ( endTime . Subtract ( startTime ) . Add ( TimeSpan . FromMinutes ( 1 ) ) . TotalHours > = dExtraAllowanceHours )
{
Rowbody [ "ExtraAllowance" ] = 1 ; // ncount++;
}
}
}
}
}
}
}
dTable . Rows . Add ( Rowbody ) ;
}
}
return dTable ;
}
2024-10-14 10:01:49 +06:00
#endregion
#endregion
}
}