2984 lines
		
	
	
		
			159 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			2984 lines
		
	
	
		
			159 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Data;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using System.Text;
 | 
						|
using System.Threading.Tasks;
 | 
						|
using Ease.Core.Model;
 | 
						|
using Ease.Core.Utility;
 | 
						|
using HRM.BO;
 | 
						|
using HRM.BO.Configuration;
 | 
						|
using HRM.DA;
 | 
						|
using HRM.Report.Attendence.AttendenceDataSet;
 | 
						|
using Microsoft.Extensions.Configuration;
 | 
						|
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);
 | 
						|
 | 
						|
 | 
						|
            #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
 | 
						|
 | 
						|
 | 
						|
            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);
 | 
						|
        }
 | 
						|
        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;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |