788 lines
42 KiB
C#
788 lines
42 KiB
C#
using HRM.BO;
|
|
using HRM.DA.Fund;
|
|
using HRM.DA;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using iTextSharp.text.pdf.codec;
|
|
using Microsoft.Reporting.NETCore;
|
|
|
|
namespace HRM.Report
|
|
{
|
|
public class rptEmpMaternityReport
|
|
{
|
|
public byte[] getEmployeeMaternityLeaveReport(int empId, string EmpShift, int payrollTypeId)
|
|
{
|
|
DataRow dRow = null;
|
|
DataSet loanApplicationData = null;
|
|
DataSet resultDataSet = new DataSet();
|
|
|
|
HREmployee hrEmp = null;
|
|
DateTime dtBirthDate = DateTime.MinValue;
|
|
string birthCertificate = string.Empty;
|
|
DateTime dTimeTemp = DateTime.MinValue;
|
|
DateTime dTimeTemp2 = DateTime.MinValue;
|
|
DateTime dTimeTemp3 = DateTime.MinValue;
|
|
DateTime dFirstDate = DateTime.MinValue;
|
|
DateTime dLastDate = DateTime.MinValue;
|
|
List<Leave> _oLeaves = new LeaveService().Get();
|
|
DataTable dTable = new EmployeeService().GetMaternityLeaveEmployeeBasicInfo(empId);
|
|
|
|
dTable.Columns.Add("AfterLeaveJoinDate", typeof(string));
|
|
dTable.Columns.Add("Department", typeof(string));
|
|
dTable.Columns.Add("AccountNo", typeof(string));
|
|
dTable.Columns.Add("Male", typeof(string));
|
|
dTable.Columns.Add("Female", typeof(string));
|
|
|
|
dTable.Columns.Add("CL", typeof(string));
|
|
dTable.Columns.Add("SL", typeof(string));
|
|
dTable.Columns.Add("EL", typeof(string));
|
|
|
|
string sEmpID = empId.ToString();
|
|
|
|
DataTable dTblEmps = new EmployeeService().GetAllEmpBasicInfo(sEmpID).Tables[0];
|
|
//_rImageManager = new RemoteImageManager();
|
|
string empImage = null;//_rImageManager.GetImage(oemp.PhotoPath);
|
|
|
|
List<SalaryMonthly> oSalaryMonthlys = new List<SalaryMonthly>();
|
|
SalaryMonthly oSalaryMonthly = null;
|
|
List<AllowanceDeduction> oAllDeducts = new AllowanceDeductionService().Get(EnumStatus.Regardless);
|
|
double tiffinBill = 0;
|
|
double lunchBill = 0;
|
|
int presentDays = 0;
|
|
int totalPresentDays = 0;
|
|
int leaveDays = 0;
|
|
int abscentDays = 0;
|
|
double netPay = 0;
|
|
double halfPayment = 0;
|
|
double pfAmount = 0;
|
|
double subTotal = 0;
|
|
double basicEarned, houserentEarned, conveyanceEarned, medicalEarned, foodEarned, grossEarned, pf = 0, deductBasic, deductSalaryAdvance, deductPF, conductBonusDeduct, grossDeduct;
|
|
List<TermParameter> oAllTermParameters = new TermParameterService().Get(true, payrollTypeId);
|
|
|
|
bool isEchoTex = new SystemConfigarationService().GetconfigBooleanValue(EnumConfigurationType.Logic, "attendence", "echotexprocess");
|
|
|
|
List<DailyAttnProcess> dAttnProcessess = new List<DailyAttnProcess>();
|
|
foreach (DataRow item in dTable.Rows)
|
|
{
|
|
string[] strArrs = item["LeavePeriodFrom"].ToString().Split('/', '-', ' ');
|
|
dTimeTemp = Convert.ToDateTime(item["LeavePeriodFrom"].ToString()); //new DateTime(Convert.ToInt32(strArrs[2]), Convert.ToInt32(strArrs[0]), Convert.ToInt32(strArrs[1]));
|
|
|
|
string[] strArrs2 = item["LeavePeriodTo"].ToString().Split('/', '-', ' ');
|
|
dTimeTemp2 = Convert.ToDateTime(item["LeavePeriodTo"].ToString()); //new DateTime(Convert.ToInt32(strArrs2[2]), Convert.ToInt32(strArrs2[0]), Convert.ToInt32(strArrs2[1]));
|
|
|
|
string[] strArrs3 = item["AfterLeaveNextDate"].ToString().Split('/', '-', ' ');
|
|
dTimeTemp3 = Convert.ToDateTime(item["AfterLeaveNextDate"].ToString()); //new DateTime(Convert.ToInt32(strArrs3[2]), Convert.ToInt32(strArrs3[0]), Convert.ToInt32(strArrs3[1]));
|
|
|
|
HolidayCalendar oHoliCal = new HolidayCalendarService().GetByDate(dTimeTemp3);
|
|
|
|
while (oHoliCal != null)
|
|
{
|
|
dTimeTemp3 = dTimeTemp3.AddDays(1);
|
|
oHoliCal = new HolidayCalendarService().GetByDate(dTimeTemp3);
|
|
}
|
|
item["AfterLeaveJoinDate"] = dTimeTemp3.ToString("dd MMM yyyy");
|
|
Employee oemp = new EmployeeService().Get(empId);
|
|
DataTable dep = null;
|
|
if (isEchoTex)
|
|
dep = new EmployeeService().GetDepartmentName(empId, true);
|
|
else
|
|
dep = new EmployeeService().GetDepartmentName(empId, false);
|
|
|
|
item["Department"] = (dep != null && dep.Rows.Count > 0) ? (dep.Rows[0]["Department"] != DBNull.Value ? dep.Rows[0]["Department"].ToString() : string.Empty) : string.Empty;
|
|
item["AccountNo"] = oemp.AccountNo != null ? oemp.AccountNo : string.Empty;
|
|
int male = 0;
|
|
int female = 0;
|
|
hrEmp = new HREmployeeService().Get(empId);
|
|
|
|
|
|
if (hrEmp != null)
|
|
{
|
|
if (hrEmp.ChildrenList != null && hrEmp.ChildrenList.Count > 0)
|
|
{
|
|
foreach (EmpChildren child in hrEmp.ChildrenList)
|
|
{
|
|
if (child.Gender == EnumGender.Male)
|
|
male++;
|
|
else if (child.Gender == EnumGender.Female)
|
|
female++;
|
|
|
|
dtBirthDate = child.BirthDate;
|
|
// birthCertificate = child.BirthCertificateNo;
|
|
}
|
|
}
|
|
}
|
|
item["Male"] = male.ToString();
|
|
item["Female"] = female.ToString();
|
|
|
|
|
|
}
|
|
|
|
DataSet dSet = new DataSet();
|
|
dTable.TableName = "dsEmpLeaveLedger_MLPayment";
|
|
dSet.Tables.Add(dTable.Copy());
|
|
|
|
if (dTimeTemp != DateTime.MinValue)
|
|
{
|
|
dTimeTemp = dTimeTemp.AddMonths(-3).LastDateOfMonth();
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
oSalaryMonthly = new SalaryMonthlyService().Get(empId, dTimeTemp);
|
|
if (oSalaryMonthly != null)
|
|
{
|
|
oSalaryMonthlys.Add(oSalaryMonthly);
|
|
dTimeTemp = dTimeTemp.AddMonths(1).LastDateOfMonth();
|
|
}
|
|
}
|
|
}
|
|
|
|
dTable = new PayrollDataSet.dsEmpLeaveLedger.MLBenefitDataTable();
|
|
|
|
|
|
foreach (SalaryMonthly itemMonthly in oSalaryMonthlys)
|
|
{
|
|
SalaryMonthlyService itemMonthlyService = new SalaryMonthlyService();
|
|
|
|
grossEarned = basicEarned = houserentEarned = conveyanceEarned = medicalEarned = foodEarned = pf = deductBasic = deductSalaryAdvance = deductPF = conductBonusDeduct = grossDeduct = 0;
|
|
DataRow drEmp = dTblEmps.AsEnumerable().FirstOrDefault(x => itemMonthly.EmployeeID == x.Field<int>("EmployeeID"));
|
|
TermParameter oEmpTermParameter = null;
|
|
if (drEmp != null && drEmp["GradeID"] != DBNull.Value && !string.IsNullOrWhiteSpace(drEmp["GradeID"].ToString()))
|
|
{
|
|
oEmpTermParameter = oAllTermParameters.FirstOrDefault(x => x.SetupDetails.Any(y => y.TranID == drEmp.Field<int>("GradeID")));
|
|
}
|
|
|
|
dLastDate = itemMonthly.SalaryMonth.LastDateOfMonth();
|
|
dFirstDate = itemMonthly.SalaryMonth.FirstDateOfMonth();
|
|
dAttnProcessess = new DailyAttnProcessService().GetNew(itemMonthly.EmployeeID, dFirstDate, dLastDate);
|
|
presentDays = 0;
|
|
leaveDays = 0;
|
|
abscentDays = 0;
|
|
double cl = 0;
|
|
double sl = 0;
|
|
double el = 0;
|
|
|
|
if (!(dAttnProcessess == null || dAttnProcessess.Count <= 0))
|
|
{
|
|
foreach (DailyAttnProcess dAttnProcess in dAttnProcessess)
|
|
{
|
|
switch (dAttnProcess.AttenType)
|
|
{
|
|
case EnumAttendanceType.Present:
|
|
case EnumAttendanceType.Delay:
|
|
case EnumAttendanceType.Early:
|
|
case EnumAttendanceType.Late:
|
|
presentDays++;
|
|
break;
|
|
case EnumAttendanceType.Leave:
|
|
Leave oLeave = _oLeaves.FirstOrDefault(x => x.ID == dAttnProcess.ReferenceID);
|
|
if (oLeave != null && oLeave.Code.Trim().ToLower() == "cl")
|
|
{
|
|
cl++;
|
|
}
|
|
else if (oLeave != null && oLeave.Code.Trim().ToLower() == "sl")
|
|
{
|
|
sl++;
|
|
}
|
|
else if (oLeave != null && oLeave.Code.Trim().ToLower() == "el")
|
|
{
|
|
el++;
|
|
}
|
|
leaveDays++;
|
|
break;
|
|
case EnumAttendanceType.Absent:
|
|
abscentDays++;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
List<HolidayCalendar> oHolidayCalender = new HolidayCalendarService().GetbyDateRange(dFirstDate, dLastDate);
|
|
int monthHoliday = new HolidayCalendarService().GetTotalMonthlyHolidays(dFirstDate, dLastDate);
|
|
DataRow dr = dTable.NewRow();
|
|
dr["Month"] = itemMonthly.SalaryMonth.ToString("MMM yy");
|
|
dr["ActualWorkingDays"] = presentDays.ToString();
|
|
totalPresentDays = totalPresentDays + presentDays;
|
|
dr["LeaveDays"] = leaveDays.ToString();
|
|
dr["AbscentDays"] = abscentDays.ToString();
|
|
|
|
dr["CL"] = cl.ToString();
|
|
dr["SL"] = sl.ToString();
|
|
dr["EL"] = el.ToString();
|
|
|
|
dr["TotalWorkingDays"] = dFirstDate.TotalDaysInMonth() - monthHoliday;
|
|
|
|
if (isEchoTex)
|
|
{
|
|
|
|
#region Gross Payment
|
|
|
|
basicEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Basic_Salary, itemMonthly)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Basic_Salary, itemMonthly);
|
|
|
|
|
|
// House rent code: 008
|
|
AllowanceDeduction oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "008");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
houserentEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
houserentEarned = 0;
|
|
}
|
|
// medical code: 011
|
|
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "011");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
medicalEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
medicalEarned = 0;
|
|
}
|
|
// Conveyance code: 010
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "010");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
conveyanceEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
conveyanceEarned = 0;
|
|
}
|
|
// FoodAllowance code: 006
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "006");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
foodEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
foodEarned = 0;
|
|
}
|
|
|
|
|
|
grossEarned = basicEarned +
|
|
houserentEarned +
|
|
medicalEarned +
|
|
conveyanceEarned +
|
|
foodEarned;
|
|
|
|
#endregion
|
|
|
|
#region Deductions
|
|
|
|
pf = itemMonthlyService.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.PF_Contribution, itemMonthly);
|
|
|
|
deductBasic = itemMonthlyService.GetAmount(EnumSalaryGroup.UnauthLeave, EnumSalaryItemCode.Basic_Salary, itemMonthly);
|
|
|
|
deductSalaryAdvance = itemMonthlyService.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Installment, itemMonthly);
|
|
|
|
|
|
deductPF = Math.Round(Convert.ToDouble(pf), 0);
|
|
|
|
// Deduct Conduct Bonus code: 005
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Deduction && x.Code.Trim() == "005");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
|
|
conductBonusDeduct = itemMonthlyService.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Deduction, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Deduction, itemMonthly, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
conductBonusDeduct = 0;
|
|
}
|
|
|
|
grossDeduct = deductBasic;// + deductSalaryAdvance + deductPF + conductBonusDeduct;
|
|
|
|
#endregion
|
|
|
|
dr["GrossWagesTaka"] = Math.Round(grossEarned - grossDeduct);
|
|
|
|
#region Overtime
|
|
|
|
//otHour = itemMonthly.GetAmount(EnumSalaryGroup.Miscellaneous, EnumSalaryItemCode.Over_Time_Hours);
|
|
|
|
//double otPayment = itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Over_Time_Amount);
|
|
|
|
//otPayment = GlobalFunctions.Round(otPayment);
|
|
|
|
|
|
//if (Convert.ToDouble(otHour) > 0)
|
|
//{
|
|
// otRate = Math.Round(Convert.ToDouble(otPayment) / Convert.ToDouble(otHour), 2);
|
|
//}
|
|
//else
|
|
//{
|
|
// if (oEmpTermParameter != null)
|
|
// {
|
|
// //otRate = Math.Round(oEmpTermParameter.GetOTRate(oEmp.BasicSalary, _SalaryMonth.LastDateOfMonth()), 2);
|
|
// otRate = Math.Round(oEmpTermParameter.GetOTRate(Convert.ToDouble(drEmp["BasicSalary"].ToString()), _SalaryMonth.LastDateOfMonth()), 2);
|
|
// }
|
|
// else
|
|
// {
|
|
// otRate = 0.00;
|
|
// }
|
|
//}
|
|
#endregion
|
|
|
|
double otPayment = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Over_Time_Amount, itemMonthly);
|
|
dr["TotalOTTaka"] = GlobalFunctions.Round(otPayment);
|
|
|
|
// Attendence Bonus code: 010
|
|
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "001");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["AttnBonus"] = GlobalFunctions.Round(itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID));
|
|
else
|
|
dr["AttnBonus"] = 0;
|
|
|
|
// Conduct Bonus code: 011
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "002");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["ConductBonus"] = GlobalFunctions.Round(itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID));
|
|
else
|
|
dr["ConductBonus"] = 0;
|
|
|
|
|
|
// Production Bonus code: 013
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "013");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["ProBonus"] = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
else
|
|
dr["ProBonus"] = 0;
|
|
|
|
// Sp. Food Allowance (Ramadan) Bonus code: 012
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "012");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["SPFoodAllowance"] = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
else
|
|
dr["SPFoodAllowance"] = 0;
|
|
|
|
|
|
// Lunch Bonus code: 015
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "015");
|
|
lunchBill = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
// Tiffin Bonus code: 016
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "016");
|
|
tiffinBill = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
|
|
|
|
dr["TiffinLunchBill"] = lunchBill;
|
|
dr["Tiffin"] = tiffinBill;
|
|
dr["EidBonus"] = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Bonus, itemMonthly);
|
|
|
|
dr["Total"] = Math.Round(Convert.ToDouble(dr["GrossWagesTaka"]) +
|
|
Convert.ToDouble(dr["TotalOTTaka"]) +
|
|
Convert.ToDouble(dr["AttnBonus"]) +
|
|
Convert.ToDouble(dr["ConductBonus"]) +
|
|
Convert.ToDouble(dr["ProBonus"]) +
|
|
Convert.ToDouble(dr["SPFoodAllowance"]) +
|
|
Convert.ToDouble(dr["TiffinLunchBill"]) +
|
|
Convert.ToDouble(dr["Tiffin"]) +
|
|
Convert.ToDouble(dr["EidBonus"]));
|
|
dr["NetPayment"] = dr["Total"];
|
|
|
|
netPay = netPay + Convert.ToDouble(dr["NetPayment"]);
|
|
dr["PF"] = pf * 2;
|
|
dTable.Rows.Add(dr);
|
|
}
|
|
else
|
|
{
|
|
#region Dupliicate
|
|
//grossEarned = basicEarned = houserentEarned = conveyanceEarned = medicalEarned = foodEarned = pf = deductBasic = deductSalaryAdvance = deductPF = conductBonusDeduct = grossDeduct = 0;
|
|
//DataRow drEmp = dTblEmps.AsEnumerable().FirstOrDefault(x => itemMonthly.EmployeeID == x.Field<int>("EmployeeID"));
|
|
//TermParameter oEmpTermParameter = null;
|
|
//if (drEmp != null && drEmp["GradeID"] != DBNull.Value && !string.IsNullOrWhiteSpace(drEmp["GradeID"].ToString()))
|
|
//{
|
|
// oEmpTermParameter = oAllTermParameters.FirstOrDefault(x => x.SetupDetails.Any(y => y.TranID == drEmp.Field<int>("GradeID")));
|
|
//}
|
|
//dLastDate = itemMonthly.SalaryMonth.LastDateOfMonth();
|
|
//dFirstDate = itemMonthly.SalaryMonth.FirstDateOfMonth();
|
|
//dAttnProcessess = new DailyAttnProcessService().GetNew(itemMonthly.EmployeeID, dFirstDate, dLastDate);
|
|
//presentDays = 0;
|
|
//leaveDays = 0;
|
|
//abscentDays = 0;
|
|
//double cl = 0;
|
|
//double sl = 0;
|
|
//double el = 0;
|
|
//if (!(dAttnProcessess == null || dAttnProcessess.Count <= 0))
|
|
//{
|
|
// foreach (DailyAttnProcess dAttnProcess in dAttnProcessess)
|
|
// {
|
|
// switch (dAttnProcess.AttenType)
|
|
// {
|
|
// case EnumAttendanceType.Present:
|
|
// case EnumAttendanceType.Delay:
|
|
// case EnumAttendanceType.Early:
|
|
// case EnumAttendanceType.Late:
|
|
// presentDays++;
|
|
// break;
|
|
// case EnumAttendanceType.Leave:
|
|
// Leave oLeave = _oLeaves.FirstOrDefault(x => x.ID == dAttnProcess.ReferenceID);
|
|
// if (oLeave != null && oLeave.Code.Trim().ToLower() == "cl")
|
|
// {
|
|
// cl++;
|
|
// }
|
|
// else if (oLeave != null && oLeave.Code.Trim().ToLower() == "sl")
|
|
// {
|
|
// sl++;
|
|
// }
|
|
// else if (oLeave != null && oLeave.Code.Trim().ToLower() == "el")
|
|
// {
|
|
// el++;
|
|
// }
|
|
// leaveDays++;
|
|
// break;
|
|
// case EnumAttendanceType.Absent:
|
|
// abscentDays++;
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
|
|
// }
|
|
//}
|
|
//List<HolidayCalendar> oHolidayCalender = new HolidayCalendarService().GetbyDateRange(dFirstDate, dLastDate);
|
|
//int monthHoliday = new HolidayCalendarService().GetTotalMonthlyHolidays(dFirstDate, dLastDate);
|
|
//DataRow dr = dTable.NewRow();
|
|
//dr["Month"] = itemMonthly.SalaryMonth.ToString("MMM yy");
|
|
//dr["ActualWorkingDays"] = presentDays.ToString();
|
|
//totalPresentDays = totalPresentDays + presentDays;
|
|
//dr["LeaveDays"] = leaveDays.ToString();
|
|
//dr["AbscentDays"] = abscentDays.ToString();
|
|
|
|
//dr["CL"] = cl.ToString();
|
|
//dr["SL"] = sl.ToString();
|
|
//dr["EL"] = el.ToString();
|
|
|
|
//dr["TotalWorkingDays"] = dFirstDate.TotalDaysInMonth() - monthHoliday;
|
|
|
|
#endregion dupliicate
|
|
|
|
#region Gross Payment
|
|
|
|
basicEarned = itemMonthly.GetGrossAmount(EnumSalaryItemCode.Basic_Salary, itemMonthly.ID);
|
|
|
|
|
|
//basicEarned = itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Basic_Salary)
|
|
// + itemMonthly.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Basic_Salary);
|
|
|
|
|
|
// House rent code: 008
|
|
AllowanceDeduction oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "008");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
houserentEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
|
|
//itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, oAllDeduct.ID)
|
|
// + itemMonthly.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
houserentEarned = 0;
|
|
}
|
|
// medical code: 011
|
|
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "011");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
medicalEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
|
|
//itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, oAllDeduct.ID)
|
|
//+ itemMonthly.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
medicalEarned = 0;
|
|
}
|
|
// Conveyance code: 010
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "010");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
conveyanceEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
|
|
//itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, oAllDeduct.ID)
|
|
// + itemMonthly.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
conveyanceEarned = 0;
|
|
}
|
|
// FoodAllowance code: 006
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Allowance && x.Code.Trim() == "006");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
foodEarned = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID);
|
|
|
|
// itemMonthly.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, oAllDeduct.ID)
|
|
// + itemMonthly.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
foodEarned = 0;
|
|
}
|
|
|
|
|
|
grossEarned = basicEarned +
|
|
houserentEarned +
|
|
medicalEarned +
|
|
conveyanceEarned +
|
|
foodEarned;
|
|
|
|
#endregion
|
|
|
|
#region Deductions
|
|
|
|
pf = itemMonthlyService.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.PF_Contribution, itemMonthly);
|
|
|
|
deductBasic = itemMonthlyService.GetAmount(EnumSalaryGroup.UnauthLeave, EnumSalaryItemCode.Basic_Salary, itemMonthly);
|
|
|
|
deductSalaryAdvance = itemMonthlyService.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Installment, itemMonthly);
|
|
|
|
|
|
deductPF = Math.Round(Convert.ToDouble(pf), 0);
|
|
|
|
// Deduct Conduct Bonus code: 005
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.AllowOrDeductType == EnumAllowOrDeduct.Deduction && x.Code.Trim() == "005");
|
|
|
|
if (oAllDeduct != null)
|
|
{
|
|
|
|
conductBonusDeduct = itemMonthlyService.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Deduction, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Deduction, itemMonthly, oAllDeduct.ID);
|
|
|
|
//itemMonthly.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Deduction, oAllDeduct.ID)
|
|
// + itemMonthly.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Deduction, oAllDeduct.ID);
|
|
}
|
|
else
|
|
{
|
|
conductBonusDeduct = 0;
|
|
}
|
|
|
|
grossDeduct = deductBasic;// + deductSalaryAdvance + deductPF + conductBonusDeduct;
|
|
|
|
#endregion
|
|
|
|
dr["GrossWagesTaka"] = Math.Round(grossEarned - grossDeduct);
|
|
|
|
double otPayment = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Over_Time_Amount, itemMonthly);
|
|
dr["TotalOTTaka"] = GlobalFunctions.Round(otPayment);
|
|
|
|
// Attendence Bonus code: 010
|
|
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "001");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["AttnBonus"] = GlobalFunctions.Round(itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID));
|
|
else
|
|
dr["AttnBonus"] = 0;
|
|
|
|
// Conduct Bonus code: 011
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "002");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["ConductBonus"] = GlobalFunctions.Round(itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID)
|
|
+ itemMonthlyService.GetAmount(EnumSalaryGroup.Arrear, EnumSalaryItemCode.Allowance, itemMonthly, oAllDeduct.ID));
|
|
else
|
|
dr["ConductBonus"] = 0;
|
|
|
|
// Production Bonus code: 013
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "013");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["ProBonus"] = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
else
|
|
dr["ProBonus"] = 0;
|
|
|
|
// Sp. Food Allowance (Ramadan) Bonus code: 012
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "012");
|
|
|
|
if (oAllDeduct != null)
|
|
dr["SPFoodAllowance"] = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
else
|
|
dr["SPFoodAllowance"] = 0;
|
|
|
|
// Lunch Bonus code: 015
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "015");
|
|
if(oAllDeduct != null)
|
|
lunchBill = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
|
|
// Tiffin Bonus code: 016
|
|
oAllDeduct = oAllDeducts.FirstOrDefault(x => x.Code.Trim() == "016");
|
|
if (oAllDeduct != null)
|
|
tiffinBill = 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.ItemID == oAllDeduct.ID).Sum(x => x.ChangedAmount));
|
|
|
|
dr["TiffinLunchBill"] = lunchBill;
|
|
dr["Tiffin"] = tiffinBill;
|
|
dr["EidBonus"] = itemMonthlyService.GetAmount(EnumSalaryGroup.Gross, EnumSalaryItemCode.Bonus, itemMonthly);
|
|
|
|
dr["Total"] = Math.Round(Convert.ToDouble(dr["GrossWagesTaka"]) +
|
|
Convert.ToDouble(dr["TotalOTTaka"]) +
|
|
Convert.ToDouble(dr["AttnBonus"]) +
|
|
Convert.ToDouble(dr["ConductBonus"]) +
|
|
Convert.ToDouble(dr["ProBonus"]) +
|
|
Convert.ToDouble(dr["SPFoodAllowance"]) +
|
|
Convert.ToDouble(dr["TiffinLunchBill"]) +
|
|
Convert.ToDouble(dr["Tiffin"]) +
|
|
Convert.ToDouble(dr["EidBonus"]));
|
|
dr["NetPayment"] = dr["Total"];
|
|
|
|
netPay = netPay + Convert.ToDouble(dr["NetPayment"]);
|
|
dr["PF"] = pf * 2;
|
|
dTable.Rows.Add(dr);
|
|
}
|
|
|
|
}
|
|
|
|
dTable.TableName = "dsEmpLeaveLedger_MLBenefit";
|
|
dSet.Tables.Add(dTable.Copy());
|
|
|
|
|
|
//dTable.TableName = "dsEmpLeaveLedger_MLBenefit";
|
|
//dSet.Tables.Add(dTable.Copy());
|
|
|
|
halfPayment = ((netPay * 112) / totalPresentDays) / 2;
|
|
string amountInWords = NumWordsWrapper(Math.Round(halfPayment));
|
|
|
|
LeaveEntry le = new LeaveEntryService().GetMaternityLeave(empId, "ML");
|
|
List<ReportParameter> parameters = new List<ReportParameter>();
|
|
parameters.Add(new ReportParameter("EmpImage", empImage));
|
|
parameters.Add(new ReportParameter("AmountInWords", amountInWords));
|
|
parameters.Add(new ReportParameter("PFAmount", (pf * 2).ToString()));
|
|
parameters.Add(new ReportParameter("FromDate", le.ApprovedFromDate.ToString("dd MMM yyyy")));
|
|
//parameters.Add(new ReportParameter("ToDate", le.PaymentDate != null ? le.PaymentDate.ToString("dd MMM yyyy") : string.Empty));
|
|
parameters.Add(new ReportParameter("ToDate", DateTime.Now.ToString("dd MMM yyyy")));// Test
|
|
parameters.Add(new ReportParameter("DeliveryDate", le.ApprovedFromDate != null ? le.ApprovedFromDate.AddDays(56).ToString("dd MMM yyyy") : string.Empty));
|
|
parameters.Add(new ReportParameter("LastChildBirthDate", dtBirthDate != DateTime.MinValue ? dtBirthDate.ToString("dd MMM yyyy") : string.Empty));
|
|
parameters.Add(new ReportParameter("LastChildBirthCertificate", birthCertificate));
|
|
parameters.Add(new ReportParameter("PFMonth", le.ApprovedFromDate.ToString("MMMM,yyyy") + " - " + le.ApprovedFromDate.AddMonths(1).ToString("MMMM,yyyy")));
|
|
|
|
string RDLC = null;
|
|
if (EmpShift == "First Half")
|
|
{
|
|
RDLC = "MLFirstPayment.rdlc";
|
|
|
|
}
|
|
else
|
|
{
|
|
RDLC = "MLSecondPayment.rdlc";
|
|
|
|
}
|
|
|
|
ReportProcessor reportProcessor = new ReportProcessor();
|
|
return reportProcessor.CommonReportViewForReports(null, dSet, null, RDLC, parameters, true, payrollTypeId, "PDF");
|
|
//return reportProcessor.CommonReportView(null, RDLC, dSet, null, parameters, true, 1, "PDF");
|
|
//return null;
|
|
}
|
|
|
|
#region wrapper
|
|
public static String NumWordsWrapper(double value)
|
|
{
|
|
string words = "";
|
|
double intPart;
|
|
double decPart = 0;
|
|
if (value == 0)
|
|
return "zero";
|
|
|
|
try
|
|
{
|
|
string[] splitter = value.ToString().Split('.');
|
|
intPart = double.Parse(splitter[0]);
|
|
if (splitter.Length > 1)
|
|
{
|
|
decPart = double.Parse(splitter[1]);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
intPart = value;
|
|
}
|
|
|
|
words = NumWords(Convert.ToInt32(intPart));
|
|
|
|
if (decPart > 0)
|
|
{
|
|
if (words != "")
|
|
words += " and ";
|
|
int counter = decPart.ToString().Length;
|
|
switch (counter)
|
|
{
|
|
case 1: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// tenths
|
|
case 2: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// hundredths
|
|
case 3: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// thousandths
|
|
case 4: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// ten-thousandths
|
|
case 5: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// hundred-thousandths
|
|
case 6: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// millionths
|
|
case 7: words += NumWords(Convert.ToInt32(decPart)) + ""; break;// ten-millionths
|
|
}
|
|
}
|
|
return words + " Taka Only";
|
|
}
|
|
private static string NumWords(int Num)
|
|
{
|
|
string[] Below20 = { "", "One ", "Two ", "Three ", "Four ",
|
|
"Five ", "Six " , "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ",
|
|
"Twelve " , "Thirteen ", "Fourteen ","Fifteen ",
|
|
"Sixteen " , "Seventeen ","Eighteen " , "Nineteen " };
|
|
string[] Below100 = { "", "", "Twenty ", "Thirty ",
|
|
"Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety " };
|
|
string InWords = "";
|
|
if (Num >= 1 && Num < 20)
|
|
InWords += Below20[Num];
|
|
if (Num >= 20 && Num <= 99)
|
|
InWords += Below100[Num / 10] + Below20[Num % 10];
|
|
if (Num >= 100 && Num <= 999)
|
|
InWords += NumWords(Num / 100) + " Hundred " + NumWords(Num % 100);
|
|
if (Num >= 1000 && Num <= 99999)
|
|
InWords += NumWords(Num / 1000) + " Thousand " + NumWords(Num % 1000);
|
|
if (Num >= 100000 && Num <= 9999999)
|
|
InWords += NumWords(Num / 100000) + " Lac " + NumWords(Num % 100000);
|
|
if (Num >= 10000000)
|
|
InWords += NumWords(Num / 10000000) + " Crore " + NumWords(Num % 10000000);
|
|
|
|
return InWords;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|