using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using Payroll.BO; using Ease.CoreV35; using Ease.Core.Model; using Ease.Core.Utility; using System.Windows.Forms; using HRM.BO; using HRM.DA; using System.IO; using HRM.Service; using Microsoft.Reporting.NETCore; using Ease.Core; namespace HRM.Report { public class rptFSTran { int count = 1; ReportParameter rParam = null; private List reportParameters = new List(); public byte[] ShowFSPaymentCalculationReport(int fsTranId, int payrollTypeId) { double nAddCount = 0; double nDeductCount = 0; double nAmount = 0.0; double nDeductAmount = 0.0; double nTaxAmount = 0.0; double nNetAmount = 0.0; double nReceivable = 0.0; double nPayable = 0.0; double nTotal = 0.0; double nALBalance = 0.0; double nEncashDays = 0.0; List dataSource; OPIProcess _oprocess = new OPIProcess(); Grade oGrade = new Grade(); Employee oEmp = new Employee(); DateTime? dLastSalaryMonth = null; DateTime? dtOPI = null; double dpf = 0; EmployeeHistory oEmployeeHistory = new EmployeeHistory(); FSTran otran = new FSTranService().Get(fsTranId); var resignationByEmployee = new EmpResignationRequest(); resignationByEmployee = new ResignationRequestService().GetByEmployeeId(otran.EmployeeID); int dDateDiff = resignationByEmployee.ResignationDate.Value.Date < resignationByEmployee.LastWorkingDate.Value.Date ? (resignationByEmployee.LastWorkingDate.Value.Date - resignationByEmployee.ResignationDate.Value.Date).Days : 0; SalaryMonthly _oSalaryMonthly = new SalaryMonthly(); otran.Details = new FSTranDetailService().GetDetailAmountType(otran.ID); oEmp = new EmployeeService().Get(otran.EmployeeID); oGrade = new GradeService().Get((int)oEmp.GradeID); oEmployeeHistory = new EmployeeHistoryService().GetEmpLastHistory(oEmp.ID); dLastSalaryMonth = new SalaryMonthlyService().GetLastPaidSalaryMonth(oEmp.ID); dtOPI = new OPIProcessService().GetLastPaidOPIMonth(oEmp.ID); // DateTime dtDiscontinue = oEmp.EndOfContractDate == DateTime.MinValue ? DateTime.Now : (DateTime)oEmp.EndOfContractDate; //if (dLastSalaryMonth == null) //{ // _oSalaryMonthly = new SalaryMonthlyService().Get(oEmp.ID, dtDiscontinue.AddMonths(-1)); //} //else //{ // dtDiscontinue = Convert.ToDateTime(dLastSalaryMonth); // _oSalaryMonthly = new SalaryMonthlyService().Get(oEmp.ID, dtDiscontinue); //} if (dtOPI != null) { _oprocess = new OPIProcessService().Get(Convert.ToDateTime(dtOPI), oEmp.ID); } PayrollDataSet.dsCompany.DTFSSDataTable dtFSS = new PayrollDataSet.dsCompany.DTFSSDataTable(); PayrollDataSet.dsCompany.DTFSSItemsDataTable dtItems = new PayrollDataSet.dsCompany.DTFSSItemsDataTable(); PayrollDataSet.dsCompany.DTFSSItemsDataTable dtItems1 = new PayrollDataSet.dsCompany.DTFSSItemsDataTable(); DataRow orow = null; orow = dtFSS.NewRow(); orow["Name"] = oEmp.Name; orow["EmpID"] = oEmp.EmployeeNo; orow["Designation"] = oEmp.Designation == null ? null : oEmp.Designation.Name; orow["Dept"] = oEmp.Department == null ? null : oEmp.Department.Name; orow["DOJ"] = oEmp.JoiningDate.ToString("dd MMM yyyy"); orow["SeparationMode"] = "Resignation"; foreach (SalaryMonthlyDetail oitem in _oSalaryMonthly.Details) { if ((int)EnumSalaryGroup.Gross == (int)oitem.itemGroupCode && (int)EnumSalaryItemCode.Basic_Salary == (int)oitem.ItemCode && (int)EnumSalaryItemCode.Basic_Salary == oitem.ItemID) { orow["MonthlyBasic"] = oitem.ChangedAmount; } else if ((int)EnumSalaryGroup.OtherItem == (int)oitem.itemGroupCode && (int)EnumSalaryItemCode.Net_Payable == (int)oitem.ItemCode && (int)EnumSalaryItemCode.Net_Payable == oitem.ItemID) { orow["Net"] = oitem.ChangedAmount; } } //discontinue date == last working Date orow["EffectiveDateofResigne"] = resignationByEmployee.LastWorkingDate.Value.Date.ToString("dd MMM yyyy"); orow["RequiredPeriod"] = 30; //temporary orow["GivenPeriod"] = dDateDiff; //oItem.ShortNoticePeriod; orow["LastWorkingDay"] = resignationByEmployee.LastWorkingDate.Value.Date.ToString("dd MMM yyyy"); orow["TerminationDate"] = resignationByEmployee.LastWorkingDate.Value.Date.ToString("dd MMM yyyy"); if ((int)oEmp.PFMemberType == (int)EnumPFMembershipType.Live) { orow["PFMembership"] = "Yes"; } else { orow["PFMembership"] = "No"; } TimeSpan ts = resignationByEmployee.LastWorkingDate.Value.Date - oEmp.JoiningDate; orow["LengthOfService"] = ts.Days; double dd = (double)ts.Days / 365; double dYear = Math.Round(dd, 1); dYear = dYear - (int)dYear; if (dYear > .6) { orow["YearRound"] = (int)Math.Round(dd); } else { orow["YearRound"] = (int)dd; } orow["Year"] = Math.Round(dd, 1); //if (!_oprocess.ID.IsUnassigned) //{ // foreach (OPIProcessDetail item in _oprocess.OPIProcessDetails) // { // foreach (OPIProcessDetailItem oDetail in item.OPIProcessDetailItems) // { // orow["MobileBill"] = oDetail.ChangeNetAmount; // } // } //} dtFSS.Rows.Add(orow); int nse = 6; double FractionateSalary = 0; double FractionateNet = 0; double FractionateDays = 0; double GrossSalary = 0; double GrossNet = 0; foreach (FSTranDetail oDetail in otran.Details) { if ((int)EnumValueType.Amount == (int)oDetail.AmountType) { orow = dtItems.NewRow(); if ((int)oDetail.FsTranType == (int)EnumFSTranType.FSReceivable && (int)oDetail.Side == (int)EnumSide.Add) { if ((int)EnumFSItemCode.LeaveEncashment == (int)oDetail.ItemCode && (int)EnumValueType.Amount == (int)oDetail.AmountType) { orow["Description"] = "Annual Leave Encashment"; orow["Amount"] = oDetail.ChangedValue; orow["Sequence"] = 1; } else if ((int)EnumFSItemCode.NoticePay == (int)oDetail.ItemCode && (int)EnumValueType.Amount == (int)oDetail.AmountType) { orow["Description"] = "Payment inclued of Notice Priod"; orow["Amount"] = oDetail.ChangedValue; orow["Sequence"] = 2; } else if ((int)EnumFSItemCode.PF == (int)oDetail.ItemCode)//||(int)EnumFSItemCode.CPF == (int)oDetail.ItemCode { orow["Description"] = "Provident Fund (Employer + Employee + Profit) 100%"; FSTranDetail oDetailCPF = otran.Details.FirstOrDefault(x => x.ItemCode == EnumFSItemCode.CPF && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Add); if (oDetailCPF != null) { dpf = oDetail.ChangedValue + oDetailCPF.ChangedValue; } orow["Amount"] = dpf; orow["Sequence"] = 3; } else if ((int)EnumFSItemCode.FractionateSalary == (int)oDetail.ItemCode) { FractionateSalary += oDetail.ChangedValue; double tmpDPamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Add).Sum(x => x.ChangedValue); double tmpDDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSPayable && x.Side == EnumSide.Deduct).Sum(x => x.ChangedValue); double tempDNet = tmpDPamount - tmpDDamount; FractionateNet = tempDNet; continue; } else if ((int)EnumFSItemCode.Gross == (int)oDetail.ItemCode) { GrossSalary += oDetail.ChangedValue; double tmpDPamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Add).Sum(x => x.ChangedValue); double tmpDDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSPayable && x.Side == EnumSide.Deduct).Sum(x => x.ChangedValue); double tempDNet = tmpDPamount - tmpDDamount; GrossNet = tempDNet; continue; } else if ((int)EnumFSItemCode.Benifit == (int)oDetail.ItemCode) { orow["Description"] = "Benifit Bonus"; orow["Amount"] = oDetail.ChangedValue; orow["Sequence"] = 4; } else if ((int)EnumFSItemCode.Other == (int)oDetail.ItemCode) { orow["Description"] = oDetail.Description; orow["Amount"] = oDetail.ChangedValue; orow["Sequence"] = 6; } else { if ((int)EnumFSItemCode.CPF == (int)oDetail.ItemCode) { continue; } nse++; orow["Description"] = oDetail.Description; orow["Amount"] = oDetail.ChangedValue; orow["Sequence"] = nse; } double dPamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Add).Sum(x => x.ChangedValue); double dDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && (x.FsTranType == EnumFSTranType.FSPayable && x.Side == EnumSide.Add) || (x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Deduct)).Sum(x => x.ChangedValue); double dNet = dPamount - dDamount; nTotal = dNet; orow["NetTotal"] = dNet; orow["Group"] = "Payment Calculation"; } else if (((int)oDetail.FsTranType == (int)EnumFSTranType.FSReceivable && (int)oDetail.Side == (int)EnumSide.Deduct) || ((int)oDetail.FsTranType == (int)EnumFSTranType.FSPayable && (int)oDetail.Side == (int)EnumSide.Add)) { double dDamount = 0; double dPamount = 0; orow["Description"] = oDetail.Description; orow["Amount"] = oDetail.ChangedValue; //if(((int)oDetail.FsTranType == (int)EnumFSTranType.FSReceivable && (int)oDetail.Side == (int)EnumSide.Deduct)){ // dDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Deduct).Sum(x => x.ChangedValue); //} //else //{ dPamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Add).Sum(x => x.ChangedValue); dDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && (x.FsTranType == EnumFSTranType.FSPayable && x.Side == EnumSide.Add) || (x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Deduct)).Sum(x => x.ChangedValue); // dDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSPayable && x.Side == EnumSide.Deduct).Sum(x => x.ChangedValue); // } double dNet = dPamount - dDamount; nTotal = dNet; orow["NetTotal"] = dNet; orow["Group"] = "Deduction"; nse++; orow["Sequence"] = nse; } //else if ((int)oDetail.FsTranType == (int)EnumFSTranType.FSPayable && (int)oDetail.Side == (int)EnumSide.Deduct) //{ // orow["Description"] = oDetail.Description; // orow["Amount"] = oDetail.ChangedValue; // double dPamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSReceivable && x.Side == EnumSide.Add).Sum(x => x.ChangedValue); // double dDamount = otran.Details.Where(x => x.AmountType == EnumValueType.Amount && x.FsTranType == EnumFSTranType.FSPayable && x.Side == EnumSide.Deduct).Sum(x => x.ChangedValue); // double dNet = dPamount - dDamount; // nTotal = dNet; // orow["NetTotal"] = dNet; // orow["Group"] = "Deduction"; // nse++; // orow["Sequence"] = nse; //} dtItems.Rows.Add(orow); } else { if ((int)EnumFSItemCode.FractionateSalary == (int)oDetail.ItemCode) FractionateDays = oDetail.ChangedValue; else orow["Days"] = Convert.ToString(oDetail.ChangedValue); } } //All fractionate salary to single row if (FractionateSalary > 0) { orow = dtItems.NewRow(); orow["Description"] = "Fractionate Salary"; orow["Amount"] = FractionateSalary; orow["Sequence"] = 5; orow["NetTotal"] = FractionateNet; orow["Group"] = "Payment Calculation"; orow["Days"] = Convert.ToString(FractionateDays); dtItems.Rows.Add(orow); } if (GrossSalary > 0) { orow = dtItems.NewRow(); orow["Description"] = "Gross Salary"; orow["Amount"] = GrossSalary; orow["Sequence"] = 6; orow["NetTotal"] = GrossNet; orow["Group"] = "Payment Calculation"; orow["Days"] = 0; dtItems.Rows.Add(orow); } string sNetAmount = "BDT - " + GlobalFunctions.NumWordsWrapper(Convert.ToDouble(nTotal)); var sortedTempData = from DataRow dr in dtItems.Rows orderby dr["Sequence"] ascending select dr; foreach (DataRow dr in dtItems.Rows) { if (dr["Group"] != DBNull.Value) { DataRow nDr = dtItems1.NewRow(); nDr.ItemArray = dr.ItemArray; dtItems1.Rows.Add(nDr); } } rParam = new ReportParameter("ReportType", "PDF"); reportParameters.Add(rParam); rParam = new ReportParameter("Amount", sNetAmount); reportParameters.Add(rParam); DataSet dSet = new DataSet(); string RDLCName = "HRM.Report.RDLC.rptNewFSS.rdlc"; dtFSS.TableName = "dsCompany_DTFSS"; dtItems1.TableName = "dsCompany_DTFSSItems"; dSet.Tables.Add(dtFSS); dSet.Tables.Add(dtItems1); // return new ReportProcessor().ShowFSSReport(dtFSS, dtItems1, sNetAmount,payrollTypeId); ReportProcessor reportProcessor = new ReportProcessor(); return reportProcessor.CommonReportView(null, RDLCName, dSet, null, reportParameters, true, payrollTypeId); } public byte[] ShowReport(int settlementAdviceId, string reportType, int payrollTypeId) { DataRow oDR = null; DataSet oSettlementAdviceItems = null; oSettlementAdviceItems = new FSTranService().GetEmpPaymentAdvice(settlementAdviceId); PayrollDataSet.PayrollDataSet.SettlementAdviceDataTable dTSettlementAdvice = new PayrollDataSet.PayrollDataSet.SettlementAdviceDataTable(); oSettlementAdviceItems.Tables[0].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[1].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[2].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[3].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[4].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[5].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[6].Columns.Add("SequenceNo"); oSettlementAdviceItems.Tables[7].Columns.Add("SequenceNo"); int seq = 0; foreach (DataRow dr in oSettlementAdviceItems.Tables["GrossItem"].AsEnumerable().Where(x => x.Field("Description") == "Basic")) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["GrossItem"].AsEnumerable().Where(x => (x.Field("Description") == "House Rent Allowance"))) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["GrossItem"].AsEnumerable().Where(x => (x.Field("Description") == "Medical Allowance"))) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["GrossItem"].AsEnumerable()) { if (dr.Field("Description") != "Basic" && dr.Field("Description") != "House Rent Allowance" && dr.Field("Description") != "Medical Allowance") { seq++; dr["SequenceNo"] = seq; } } foreach (DataRow dr in oSettlementAdviceItems.Tables["TotalGross"].Rows) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["BasicItem"].Rows) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["OtherItems"].Rows) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["DeductItem"].Rows) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["TotalDeduction"].Rows) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["TaxAmount"].Rows) { seq++; dr["SequenceNo"] = seq; } foreach (DataRow dr in oSettlementAdviceItems.Tables["NetPay"].Rows) { seq++; dr["SequenceNo"] = seq; } #region Loop Start foreach (DataRow source in oSettlementAdviceItems.Tables["GrossItem"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["TotalGross"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["BasicItem"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["OtherItems"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["DeductItem"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["TotalDeduction"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["TaxAmount"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } foreach (DataRow source in oSettlementAdviceItems.Tables["NetPay"].Rows) { oDR = dTSettlementAdvice.NewRow(); this.Copy(oDR, source); dTSettlementAdvice.Rows.Add(oDR); } #endregion #region Report Setup string RDLCName = "HRM.Report.RDLC.SettlementAdviceSheetNew.rdlc"; DataSet resultDs = new DataSet(); dTSettlementAdvice.TableName = "PayrollDataSet_SettlementAdvice"; resultDs.Tables.Add(dTSettlementAdvice); List rParams = new List(); ReportParameter rParam = new ReportParameter("ReportType", reportType); rParams.Add(rParam); #endregion return new ReportProcessor().CommonReportView(null, RDLCName, resultDs, null, rParams, true, payrollTypeId, reportType); } private void Copy(DataRow source, DataRow destination) { source["EmpNo"] = destination["EMPLOYEENO"]; source["EmpName"] = destination["Name"]; source["JoiningDate"] = destination["JoiningDate"]; source["Department"] = destination["Department"]; source["Designation"] = destination["DESIGNATION"]; source["Description"] = destination["Description"]; source["AccountNo"] = destination["ACCOUNTNO"]; source["Bank"] = destination["Bank"]; source["Remarks"] = destination["Remarks"]; source["Amount"] = destination["Amount"]; source["Location"] = destination["Location"]; source["CTC"] = destination["ctc"]; source["CalenderDays"] = destination["calenderDays"]; source["WorkDays"] = destination["workDays"]; source["TranDate"] = destination["TranDate"]; source["SequenceNo"] = Convert.ToInt32(destination["SequenceNo"]); source["EmpStatus"] = ((EnumEmployeeStatus)Convert.ToInt32(destination["STATUS"])).ToString(); } } }