using System; using System.Collections.Generic; using System.Data; using System.Linq; using HRM.BO; using HRM.DA; using Microsoft.Reporting.NETCore; namespace HRM.Report { public class MultipleEmpLeaveBalance { List departments = new List(); List leaves = new List(); List designations = new List(); List categories = new List(); private List employees = new List(); private List balance = new List(); private LeaveYear leaveYear = new LeaveYear(); Leave leave = null; DataRow dr = null; Department dept = null; Designation desig = null; DataSet leaveApprover = new DataSet(); public byte[] ShowMultipleEmpLeaveBalance(int leaveYearId, int payrollTypeId, string empIds, string reportType) { departments = new DepartmentService().GetAll(); leaves = new LeaveService().Get(EnumStatus.Regardless, payrollTypeId); designations = new DesignationService().GetAll(); employees = new EmployeeService().GetByEmpIDs(empIds); leaveYear = new LeaveYearService().Get(leaveYearId); //balance = new LeaveProcessService().CurrentYearStatus(employees, leaveYear, payrollTypeId); List emps = new SearchEmployeeService().GetByEmpIDIn(empIds); LeaveYear lyy = new LeaveYear(); lyy = new LeaveYearService().Get(leaveYear.ID); List oleaves = new LeaveService().Get(EnumStatus.Regardless, payrollTypeId); LeaveYear cly = new LeaveYearService().GetCurrentYear(payrollTypeId); if (cly == lyy) { balance = new LeaveProcessService().GetLeaveBalance(employees, leaveYear, payrollTypeId); balance = balance.OrderBy(item => item.EmpId).ToList(); // must for the row sequence } else { balance =new LeaveProcessService().GetByEmpIDs(SearchEmployee.getEmpID(emps), lyy.ID); } categories = new CategoryService().GetAll(); int count = 1; PayrollDataSet.dsEmpLeaveLedger.MultipleEmployeeLeaveDataTable mulLeaveBalance = new PayrollDataSet.dsEmpLeaveLedger.MultipleEmployeeLeaveDataTable(); Employee oPreviousEmp = null; foreach (EmpLeaveStatus olevestatus in balance) { Employee oemp = employees.Find(oem => oem.ID == olevestatus.EmpId); leave = leaves.Find(x => x.ID == olevestatus.LeaveId); Category category = categories.Find(x => x.ID == oemp.CategoryID); dr = mulLeaveBalance.NewRow(); //leaveApprover = Employee.GetLineManager(oemp.ID.Integer); // workLocation = employeeLocations.FirstOrDefault(n => n.EmployeeLocationID.Integer == olevestatus.EmpId); dr["EmpNo"] = oemp.EmployeeNo; dr["Name"] = oemp.Name; dr["JoiningDate"] = oemp.JoiningDate.ToString("dd-MMM-yy"); dr["DateOfConfirmation"] = oemp.ConfirDate != null ? oemp.ConfirDate.Value.ToString("dd-MMM-yy") : ""; dr["JobStatus"] = category != null ? category.Name : ""; dept = departments.Find(o => o.ID == oemp.DepartmentID); desig = designations.Find(o => o.ID == oemp.DesignationID); dr["Designation"] = desig == null ? "" : desig.Name; dr["Department"] = dept == null ? "" : dept.Name; //dr["LeaveName"] = leave.Description; dr["LeaveName"] = leave != null ? leave.Description : ""; dr["OpeningBalance"] = olevestatus.OpeningBalance; dr["WORKLOCATION"] = ""; dr["CFDays"] = olevestatus.CFDays; dr["Consumed"] = olevestatus.LeaveAvailed; dr["ClosingBalance"] = olevestatus.ClosingBalance; dr["RowSequence"] = oPreviousEmp == null ? count : oemp.ID != oPreviousEmp.ID ? ++count : count; dr["LeaveNotifier"] = oemp.Name; dr["LeaveYear"] = leaveYearId.ToString(); mulLeaveBalance.Rows.Add(dr); oPreviousEmp = oemp; } //} //var sortedData = from DataRow odr in mulLeaveBalance.Rows orderby dr["EmpNo"], dr["RowSequence"] ascending select odr; //foreach (DataRow odr in sortedData) //{ // DataRow nDr = dTLeaveBalance.NewRow(); // nDr.ItemArray = odr.ItemArray; // dTLeaveBalance.Rows.Add(nDr); //} DataSet dSet = new DataSet(); mulLeaveBalance.TableName = "dsEmpLeaveLedger_MultipleEmployeeLeave"; dSet.Tables.Add(mulLeaveBalance); ReportProcessor reportProcessor = new ReportProcessor(); List oReportParameter = new List(); oReportParameter.Add(new ReportParameter("LeaveYear", leaveYear.Name)); return reportProcessor.CommonReportView(null, "HRM.Report.RDLC.MultipleLeaveEmp.rdlc", dSet, null, oReportParameter, true, payrollTypeId, reportType); //return reportProcessor.ShowMultipleEmpLeaveBalance(null, dSet, "MultipleLeaveEmp.rdlc", leaveYear.Name, payrollTypeId, reportType); } } }