using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Dynamic; using System.IO; using System.Linq; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using AutoMapper.Configuration; using Ease.Core; using HRM.BO; using HRM.DA; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.Configuration; using Payroll.BO; using IConfiguration = Microsoft.Extensions.Configuration.IConfiguration; // For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace HRM.UI.Controllers { [ApiController] [Route("api/finalsettlement")] [Authorize] public class FinalSettlementController : Controller { #region Declerations private readonly IClaimBasicService _claimBasicService; private readonly IClaimBasicItemService _claimBasicItemService; private readonly IClaimRuleService _claimRuleService; private readonly IConfiguration _config; private readonly IEmployeeService _employeeService; private readonly IClaimRequisitionService _claimRequisitionService; private readonly IFSHeadService _ifsHeadService; private readonly IWFMovementTranService _wfMovementTranService; private readonly IResignationRequestService _resignationRequestService; private readonly ISearchEmployeeService _serachManager; private readonly IFSTranDetailService _fsTranDetailService; private readonly IFSTranService _fsTranService; private readonly IADParameterService _adpParameterService; private readonly IADParameterEmployeeService _adpParameterEmployeeService; private readonly IAllowanceDeductionService _allowanceDeductionService; private readonly ILoanService _loanService; private readonly ILoanIssueService _loanIssueService; private readonly ILoanScheduleService _loanScheduleService; private readonly IUserService _userService; private readonly ILeaveProcessService _leaveService; private readonly IFinalSettlementService _finalSettlementService; private readonly ISettlementClearanceService _settlementClearanceService; private readonly ISettlementAdvanceService _settlementAdviceService; List fracSalaryFillList = new List(); List grossSalaryFillList = new List(); private int _resignationReqId=0; //SendEma sendEmailNotification = null; #endregion #region Constructor public FinalSettlementController(IConfiguration config, IClaimBasicService claimBasicService, IClaimBasicItemService claimBasicItemService, IClaimRuleService claimRuleService, IEmployeeService employeeService, IClaimRequisitionService claimRequisitionService, IWFMovementTranService wfMovementTranService, IFSHeadService ifsHeadService, IResignationRequestService resignationRequestService, ISearchEmployeeService searchManager, IFSTranDetailService fsTranDetailService, IFSTranService fsTranService, IADParameterService adpParameterService, IADParameterEmployeeService adpParameterEmployeeService, IAllowanceDeductionService allowanceDeductionService, ILoanService loanService, ILoanIssueService loanIssueService, ILoanScheduleService loanScheduleService, IUserService userService, ILeaveProcessService leaveProcessService, IFinalSettlementService finalSettlementService, ISettlementClearanceService settlementClearanceService, ISettlementAdvanceService settlementAdvanceService) { _config = config; _claimBasicService = claimBasicService; _claimBasicItemService = claimBasicItemService; _claimRuleService = claimRuleService; _employeeService = employeeService; _claimRequisitionService = claimRequisitionService; _wfMovementTranService = wfMovementTranService; _ifsHeadService = ifsHeadService; _resignationRequestService = resignationRequestService; _serachManager = searchManager; _fsTranDetailService = fsTranDetailService; _fsTranService = fsTranService; _adpParameterService = adpParameterService; _adpParameterEmployeeService = adpParameterEmployeeService; _allowanceDeductionService = allowanceDeductionService; _loanService = loanService; _loanIssueService = loanIssueService; _loanScheduleService = loanScheduleService; _userService = userService; _leaveService = leaveProcessService; _finalSettlementService = finalSettlementService; _settlementClearanceService = settlementClearanceService; _settlementAdviceService = settlementAdvanceService; } #endregion #region Functions [HttpPost] [Route("savefinalsettementhead")] public ActionResult SaveFinalSettlementHead(FSHead item) { int ans; var isNew = item.ID <= 0; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); if (isNew) { item.CreatedBy = currentUser.UserID; item.CreatedDate = DateTime.Today; //item.PayrollTypeID = (int)currentUser.PayrollTypeID; } else { item.ModifiedBy = currentUser.UserID; item.ModifiedDate = DateTime.Today; } try { if (item.EmpID == 0) item.EmpID = null; if (item.EmpIDTwo == 0) item.EmpIDTwo = null; ans = _ifsHeadService.Save(item); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(ans); } [HttpGet("getFSHeads")] public ActionResult GetFSHeads() { List obs = new List(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { obs = _ifsHeadService.Get(); if (obs.Count > 0) { foreach (FSHead item in obs) { item.TypeString = EnumDescription.GetEnumDescription(item.Type); } } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(obs); } [HttpPost] [Route("deleteFsHead")] public ActionResult DeleteFsHead(FSHead item) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { _ifsHeadService.Delete(item.ID); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(true); } [HttpPost] [Route("updateResignationRequestStatus")] public ActionResult updateResignationRequestStatus(EmpResignationRequest item) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { this._resignationRequestService.updateStatus(item.ID, item.WFStatus); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(true); } [HttpPost] [Route("saveResignationRequest")] public ActionResult SaveResignationRequest(EmpResignationRequest item) { string connectionString = _config.GetSection("dbSettings").GetSection("SqlCommandConnection").Value; int ans; var isNew = item.ID <= 0; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); item.ConnectionString = connectionString; if (isNew) { item.CreatedBy = currentUser.UserID; item.CreatedDate = DateTime.Today; // item.EmployeeID = (int)currentUser.EmployeeID; } else { item.ModifiedBy = currentUser.UserID; item.ModifiedDate = DateTime.Today; } try { if (item.EmpResgAttachmentList != null && item.EmpResgAttachmentList.Count > 0) { foreach (var tempItem in item.EmpResgAttachmentList) { if (tempItem.ID <= 0 && tempItem.TempFileTobase64 != null) { string[] items = tempItem.TempFileTobase64.Split(new char[] { ',', ' ' }, StringSplitOptions.None); byte[] newBytes = Convert.FromBase64String(items[1]); tempItem.FileAsByteArray = newBytes; } } } ans = _resignationRequestService.Save(item); //if (ans > 0) //{ // // _resignationRequestService.InitiateResignationRequestWorkFlow(item, (int)currentUser.EmployeeID, item.CreatedBy); // _resignationRequestService.InitiateResignationRequestWorkFlow(item, (int)item.EmployeeID, item.CreatedBy); //} } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(ans); } [HttpGet] [Route("getResignationRequestByEmp/{employeeId}")] public ActionResult getResignationRequestByEmp(int employeeId) { EmpResignationRequest item = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { item = _resignationRequestService.GetByEmployeeId(employeeId); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(item); } [HttpGet] [Route("getResignationRequest/{id}/{employeeId}")] public ActionResult GetResignationRequest(int id, int employeeId) { EmpResignationRequest item = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List designations = new DesignationService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID); List departments = new DepartmentService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID); try { item = _resignationRequestService.Get(id); if (item.JoiningDate == DateTime.MinValue) { item.JoiningDate = null; } if (item != null) { Employee employee = new Employee(); employee = _employeeService.Get(employeeId); item.EmpNo = employee.EmployeeNo; item.EmpName = employee.Name; var designation = designations?.FirstOrDefault(d => d.ID == employee.DesignationID); if (designation != null) item.EmpDeg = designation.Name; var department = departments.FirstOrDefault(d => d.ID == employee.DepartmentID); if (department != null) item.EmpDept = department.Name; item.EmpResgAttachmentList = new List(); item.EmpResgAttachmentList = _resignationRequestService.GetResignationAttachments(item.ID); } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(item); } [HttpGet] [Route("getPrevReg/{employeeId}")] public ActionResult GetPrevReg(int employeeId) { EmpResignationRequest item = null; try { if(employeeId == 0) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); employeeId = (int)currentUser.EmployeeID; } item = _resignationRequestService.GetByEmpIDForSettlement(employeeId); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(item); } [HttpGet] [Route("getResignationRequestByStatus/{status}")] public ActionResult getResignationRequestByStatus(EnumResignStatus status) { List items = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { items = _resignationRequestService.Get(status); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(items); } [HttpPost("approveResignationRequest")] public ActionResult ApproveResignationRequest(dynamic data) { var items = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data)); WFMovementTran otran = (WFMovementTran)items["wfTran"].ToObject(); DateTime LastWorkingDate = (DateTime)items["lastWorkingDate"].ToObject(); string Remarks = (string)items["remarks"].ToObject(); string ResignationReason = (string)items["resignationReason"].ToObject(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); otran.FromEmployeeID = (int)currentUser.EmployeeID; otran.UserID = (int)currentUser.UserID; try { _resignationRequestService.ApproveResignationRequest(otran, LastWorkingDate, Remarks, ResignationReason); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); } return Ok(true); } [HttpPost] [Route("rejectResignationRequest")] public ActionResult RejectResignationRequest(WFMovementTran otran) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); otran.FromEmployeeID = (int)currentUser.EmployeeID; try { _resignationRequestService.ResignationRequestReject(otran); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(true); } [HttpGet] [Route("getEmpInfoResignation")] public ActionResult GetEmpInfoResignation() { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List employees = new List(); List departments = new List(); List designations = new List(); List categories = new List(); Employee employee = new Employee(); try { employees = _employeeService.GetAllEmps(); departments = new DepartmentService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID); designations = new DesignationService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID); categories = new CategoryService().GetAll(); employee = _employeeService.Get((int)currentUser.EmployeeID); var designation = designations?.FirstOrDefault(d => d.ID == employee.DesignationID); if (designation != null) employee.DesignationName = designation.Name; var department = departments?.FirstOrDefault(d => d.ID == employee.DepartmentID); if (department != null) employee.DepartmentName = department.Name; var lineManager = employees?.Find(x => x.ID == employee.LineManagerID); employee.LineManager = lineManager == null ? "" : lineManager.Name; var LMdesignation = designations?.FirstOrDefault(d => d.ID == lineManager.DesignationID); if (LMdesignation != null) employee.LineManagerDeg = LMdesignation.Name; var category = categories?.FirstOrDefault(d => d.ID == employee.CategoryID); if (category != null) employee.CategoryName = category.Name; } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(employee); } [HttpGet] [Route("getResignationEmployeeInfo/{employeeId}")] public ActionResult getResignationEmployeeInfo(int employeeId) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); Employee employee = new Employee(); List departments = new List(); List designations = new List(); List categories = new List(); EmpResignationRequest empReg = new EmpResignationRequest(); try { departments = new DepartmentService().Get(EnumStatus.Regardless, (int)employee.PayrollTypeID); designations = new DesignationService().Get(EnumStatus.Regardless, (int)employee.PayrollTypeID); categories = new CategoryService().GetAll(); employee = _employeeService.Get(employeeId); var designation = designations?.FirstOrDefault(d => d.ID == employee.DesignationID); if (designation != null) employee.DesignationName = designation.Name; var department = departments?.FirstOrDefault(d => d.ID == employee.DepartmentID); if (department != null) employee.DepartmentName = department.Name; var category = categories?.FirstOrDefault(d => d.ID == employee.CategoryID); if (category != null) employee.CategoryName = category.Name; empReg = _resignationRequestService.GetByEmployeeId(employeeId); if (empReg != null) { employee.DiscontinueDate = empReg.DiscontinueDate; employee.LastWorkingDate = empReg.LastWorkingDate; employee.ResignationDate = empReg.ResignationDate; } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(employee); } [HttpGet] [Route("getResignationRequests/{fromDate}/{toDate}")] public ActionResult GetResignationRequests(string fromDate, string toDate) { DateTime dfromDate = GlobalFunctions.GetApiDefaultDateData(fromDate); DateTime dtoDate = GlobalFunctions.GetApiDefaultDateData(toDate); List items = new List(); try { items = _resignationRequestService.Get(dfromDate, dtoDate); if (items != null) { //foreach (var item in items) //{ // item.StatusString = EnumDescription.GetEnumDescription(item.WFStatus); // item.ClearanceStatusString = item.ClearanceStatus == null ? null : EnumDescription.GetEnumDescription(item.ClearanceStatus); //} } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(items); } [HttpGet("getEssFinalSettlementData/{fromDate}/{toDate}/{employeeId}")] public ActionResult getEssFinalSettlementData(string fromDate, string toDate,int? employeeId) { DateTime dfromDate = GlobalFunctions.GetApiDefaultDateData(fromDate); DateTime dtoDate = GlobalFunctions.GetApiDefaultDateData(toDate); List obs = new List(); //List resignations = new List(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List resignationPermissions = new List(); List finalList = new List(); EmpResignationRequest speccificEmployee = new EmpResignationRequest(); List requests = null; List otrans = null; if (employeeId > 0) { otrans = this._fsTranService.GetByEmpIdForRegEmployee((int)employeeId); speccificEmployee = this._resignationRequestService.GetByEmpIDForSettlement((int)employeeId); } else { otrans = this._fsTranService.Get(dfromDate, dtoDate, true); requests = this._resignationRequestService.Get(dfromDate, dtoDate); } try { obs = _ifsHeadService.GetByEmpId((int)currentUser.EmployeeID); // resignationPermissions = _resignationRequestService.GetFsHeadRegPermission(); foreach(FSTran tran in otrans) { FSHeadResignationPermission newitem = new FSHeadResignationPermission(); newitem.EmployeeNo = tran.EmployeeNo; newitem.EmployeeName = tran.EmployeeName; newitem.EmployeeId = tran.EmployeeID; newitem.ResignationDate = tran.DiscontinueDate; newitem.StatusString = "Completed"; finalList.Add(newitem); foreach (FSTranDetail detail in tran.Details) { if(detail.CreatedBy == currentUser.UserID) { if (detail.ItemCode == EnumFSItemCode.LeaveEncashment) newitem.LeaveEncashmentAmount = newitem.LeaveEncashmentAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.OT) newitem.OTAmount = newitem.OTAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Loan) newitem.LoanAmount = newitem.LoanAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Other) newitem.OtherAmount = newitem.OtherAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Bonus) newitem.BonusAmount = newitem.BonusAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Gross) newitem.GrossAmount = newitem.GrossAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.FractionateSalary) newitem.SalaryAdjustmentAmount = newitem.SalaryAdjustmentAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.NoticePay) newitem.NoticeAmount = newitem.NoticeAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.PF || detail.ItemCode == EnumFSItemCode.CPF || detail.ItemCode == EnumFSItemCode.WPPF || detail.ItemCode == EnumFSItemCode.WPPFTax || detail.ItemCode == EnumFSItemCode.PFLoan || detail.ItemCode == EnumFSItemCode.PFLoanInterest || detail.ItemCode == EnumFSItemCode.PFLapsAndForfeiture) newitem.PFAmount = newitem.PFAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Gratuity) newitem.GratuityAmount = newitem.GratuityAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Basic) newitem.BasicAmount = newitem.BasicAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Asset) newitem.AssetAmount = newitem.AssetAmount + detail.ChangedValue; else if (detail.ItemCode == EnumFSItemCode.Claim) newitem.ClaimAmount = newitem.ClaimAmount + detail.ChangedValue; // } } } } if(employeeId > 0) { if (speccificEmployee != null) { if (speccificEmployee.WFStatus == EnumResignStatus.Clearance_initiated) { var temp = finalList.Find(x => x.EmployeeId == speccificEmployee.EmployeeID); finalList = new List(); if (temp != null) { FSHeadResignationPermission newitem = new FSHeadResignationPermission(); newitem = temp; finalList.Add(newitem); } else{ FSHeadResignationPermission newitem = new FSHeadResignationPermission(); newitem.EmployeeNo = speccificEmployee.EmpNo; newitem.EmployeeName = speccificEmployee.EmpName; newitem.StatusString = "working"; newitem.joiningDate = (DateTime)speccificEmployee.JoiningDate; newitem.EmployeeId = speccificEmployee.EmployeeID; newitem.ResignationDate =(DateTime) speccificEmployee.ResignationDate; finalList.Add(newitem); } } } } else { foreach (EmpResignationRequest item in requests) { if (item.WFStatus == EnumResignStatus.Clearance_initiated && finalList.FindIndex(x => x.EmployeeId == item.EmployeeID) == -1) { FSHeadResignationPermission newitem = new FSHeadResignationPermission(); newitem.EmployeeNo = item.EmpNo; newitem.EmployeeName = item.EmpName; newitem.EmployeeId = item.EmployeeID; finalList.Add(newitem); } } } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(finalList); } [HttpGet("getMySettlmentHeads")] public ActionResult getMySettlmentHeads() { List obs = new List(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { obs = _ifsHeadService.GetByEmpId((int)currentUser.EmployeeID); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(obs); } [HttpGet("getTypeByEmployeeForAdmin/{employeeId}")] public ActionResult getTypeByEmployeeForAdmin(int employeeId) { List obs = new List(); try { obs = _ifsHeadService.GetByEmpId(employeeId); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(obs); } [HttpGet] [Route("getCurrentEmployeeInfo")] public ActionResult getCurrentEmployeeInfo() { Employee olist = new Employee(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { olist = _employeeService.Get((int)currentUser.EmployeeID); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(olist); } [HttpPost] [Route("saveFStran")] public ActionResult saveFStran(FSTran item) { bool isSubmit = item.IsSubmit; _resignationReqId = item.ResignationReqId; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List tempSc = new List(); int ans = 0; if(item.IsNew) { item.CreatedBy = currentUser.UserID; item.CreatedDate = DateTime.Today; } else { item.ModifiedBy = currentUser.UserID; item.ModifiedDate = DateTime.Today; } foreach(FSTranDetail detail in item.Details) { if(detail.CreatedBy == 0 || detail.CreatedBy <0) { detail.CreatedBy = currentUser.UserID; detail.CreatedDate = DateTime.Today; } else { detail.ModifiedBy = currentUser.UserID; detail.ModifiedDate = DateTime.Today; } } //item.EmployeeID = currentUser.EmployeeID == null ? 0 : (int)currentUser.EmployeeID; //FSTran fstran = null; try { _fsTranService.Save(item); //fstran = _fsTranService.GetByEmpdId(item.EmployeeID); //if (fstran == null) fstran = new FSTran(); //fstran.IsSubmit = isSubmit; //fstran.CurrentEmployee = (int)currentUser.EmployeeID; //fstran.EmployeeID = (int)currentUser.EmployeeID; //if (fstran != null && fstran.ID > 0) //{ // _fsTranDetailService.DeleteByUserId(fstran.ID, currentUser.UserID); // fstran.Details = new List(); // foreach (var tempitem in item.Details) // { // var childItem = new FSTranDetail(); // childItem = tempitem; // fstran.Details.Add(childItem); // } // ans = _fsTranService.Save(fstran); //} //else //{ //item.CreatedBy = currentUser.UserID; //item.CreatedDate = DateTime.Today; //item.LastSalaryPaidMonth = DateTime.Now; //item.DiscontinueDate = DateTime.Now; //ans = _fsTranService.Save(item); //} } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(ans); } [HttpGet("getFStranDetail/{employeeId}")] public ActionResult GetFStranDetail(int employeeId) { FSTran fstran = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { fstran = _fsTranService.GetByEmpdId(employeeId); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(fstran); } [HttpGet("getGrossAmount/{nNumber}/{code}/{employeeId}")] public ActionResult GetGrossAmount(int nNumber, EnumFSItemCode code, int employeeId) { FSTran fstran = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); Employee _oEmployee = null; try { #region Allowance List adParams = null; List adParamEmps = null; EmployeeGradeSalary oEmpGSalary = new EmployeeGradeSalary(); _oEmployee = _employeeService.Get(employeeId); int totalDaysInLastMonth = 30; //if (_oEmployee.EndOfContractDate != null) //{ // totalDaysInLastMonth = ((DateTime)_oEmployee.EndOfContractDate).TotalDaysInMonth(); //} if (code == EnumFSItemCode.FractionateSalary) FillGrid("Basic", ((_oEmployee.BasicSalary / totalDaysInLastMonth) * nNumber).ToString(), code, EnumAllowOrDeduct.Allowance, ((int)EnumSalaryItemCode.Basic_Salary).ToString()); else FillGrid("Basic", (_oEmployee.BasicSalary * nNumber).ToString(), code, EnumAllowOrDeduct.Allowance, ((int)EnumSalaryItemCode.Basic_Salary).ToString()); adParams = new List(); adParams = _adpParameterService.Get((int)_oEmployee.GradeID, EnumEntitleType.Grade, EnumAllowOrDeduct.Allowance, (int)currentUser.PayrollTypeID); if (adParams != null) { foreach (ADParameter adParam in adParams) { adParam.AllowanceDeduction = new AllowanceDeduction(); adParam.AllowanceDeduction = _allowanceDeductionService.Get(adParam.AllowDeductID); if (code == EnumFSItemCode.FractionateSalary) { FillGrid(adParam.AllowanceDeduction.Name, ((_adpParameterService.GetGradeDefinedAmount(_oEmployee, _oEmployee.BasicSalary, _oEmployee.GrossSalary, new EmployeeGradeSalary(), adParam) / totalDaysInLastMonth) * nNumber).ToString(), code, EnumAllowOrDeduct.Allowance, adParam.AllowanceDeduction.ID.ToString()); } else { FillGrid(adParam.AllowanceDeduction.Name, (_adpParameterService.GetGradeDefinedAmount(_oEmployee, _oEmployee.BasicSalary, _oEmployee.GrossSalary, new EmployeeGradeSalary(), adParam) * nNumber).ToString(), code, EnumAllowOrDeduct.Allowance, adParam.AllowanceDeduction.ID.ToString()); } } } adParamEmps = _adpParameterEmployeeService.GetByEmployee(_oEmployee.ID, EnumAllowOrDeduct.Allowance, EnumADEmpType.AppliedToIndividual, (int)currentUser.PayrollTypeID, (DateTime)currentUser.NextPayProcessDate); //adParamEmps = new ObjectsTemplate(); if (adParamEmps != null) { foreach (ADParameterEmployee adEmp in adParamEmps) { if (adEmp.AllowDeduct == null) { adEmp.AllowDeduct = new AllowanceDeduction(); adEmp.AllowDeduct = _allowanceDeductionService.Get(adEmp.AllowDeductID); } if (code == EnumFSItemCode.FractionateSalary) FillGrid(adEmp.AllowDeduct.Name, ((adEmp.MonthlyAmount / totalDaysInLastMonth) * nNumber).ToString(), code, EnumAllowOrDeduct.Allowance, adEmp.AllowDeduct.ID.ToString()); else FillGrid(adEmp.AllowDeduct.Name, (adEmp.MonthlyAmount * nNumber).ToString(), code, EnumAllowOrDeduct.Allowance, adEmp.AllowDeduct.ID.ToString()); } } #endregion #region Deduction adParams = new List(); adParamEmps = new List(); adParams = new List(); adParams = _adpParameterService.Get((int)_oEmployee.GradeID, EnumEntitleType.Grade, EnumAllowOrDeduct.Deduction, (int)currentUser.PayrollTypeID); if (adParams != null) { foreach (ADParameter adParam in adParams) { adParam.AllowanceDeduction = new AllowanceDeduction(); adParam.AllowanceDeduction = _allowanceDeductionService.Get(adParam.AllowDeductID); if (code == EnumFSItemCode.FractionateSalary) { FillGrid(adParam.AllowanceDeduction.Name, ((_adpParameterService.GetGradeDefinedAmount(_oEmployee, _oEmployee.BasicSalary, _oEmployee.GrossSalary, new EmployeeGradeSalary(), adParam) / 30) * nNumber).ToString(), code, EnumAllowOrDeduct.Deduction, adParam.AllowanceDeduction.ID.ToString()); } else { FillGrid(adParam.AllowanceDeduction.Name, (_adpParameterService.GetGradeDefinedAmount(_oEmployee, _oEmployee.BasicSalary, _oEmployee.GrossSalary, new EmployeeGradeSalary(), adParam) * nNumber).ToString(), code, EnumAllowOrDeduct.Deduction, adParam.AllowanceDeduction.ID.ToString()); } } } adParamEmps = _adpParameterEmployeeService.GetByEmployee(_oEmployee.ID, EnumAllowOrDeduct.Deduction, EnumADEmpType.AppliedToIndividual, (int)currentUser.PayrollTypeID, (DateTime)currentUser.NextPayProcessDate); if (adParamEmps != null) { foreach (ADParameterEmployee adEmp in adParamEmps) { if (adEmp.AllowDeduct == null) { adEmp.AllowDeduct = new AllowanceDeduction(); adEmp.AllowDeduct = _allowanceDeductionService.Get(adEmp.AllowDeductID); } if (code == EnumFSItemCode.FractionateSalary) FillGrid(adEmp.AllowDeduct.Name, ((adEmp.MonthlyAmount / 30) * nNumber).ToString(), code, EnumAllowOrDeduct.Deduction, adEmp.AllowDeduct.ID.ToString()); else FillGrid(adEmp.AllowDeduct.Name, (adEmp.MonthlyAmount * nNumber).ToString(), code, EnumAllowOrDeduct.Deduction, adEmp.AllowDeduct.ID.ToString()); } } #endregion } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } if (code == EnumFSItemCode.FractionateSalary) return Ok(fracSalaryFillList); else return Ok(grossSalaryFillList); } private void FillGrid(string nName, string sAmount, EnumFSItemCode nItemCode, EnumAllowOrDeduct nType, string nItemID) { if (nItemCode == EnumFSItemCode.Gross) { if (nType == EnumAllowOrDeduct.Allowance) { var temp = new GrossSalaryList(); temp.AllowanceItemID = nItemID; temp.AllowanceName = nName; temp.AllowanceGrossValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); temp.ActualGrossValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); this.grossSalaryFillList.Add(temp); } else { var temp = new GrossSalaryList(); temp.DeductItemID = nItemID; temp.DeductName = nName; temp.DeductGrossValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); temp.ActualGrossDeductValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); } } else { if (nType == EnumAllowOrDeduct.Allowance) { var temp = new ProportionateSalaryFill(); temp.AllowanceItemID = nItemID; temp.AllowanceName = nName; temp.AllowanceFracValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); temp.AllowanceActualFracValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); this.fracSalaryFillList.Add(temp); } else { var temp = new ProportionateSalaryFill(); temp.DeductItemID = nItemID; temp.DeductName = nName; temp.FracDeductValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); temp.ActualFracDeductValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); //this.fracSalaryFillList.Add(temp); bool newItem = true; foreach (var item in this.fracSalaryFillList) { if (item.DeductItemID == null || item.DeductItemID == "") { item.DeductItemID = nItemID; item.DeductName = nName; item.FracDeductValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); item.ActualFracDeductValue = GlobalFunctions.Round(Convert.ToDouble(sAmount)); newItem = false; break; } } if (newItem == true) { this.fracSalaryFillList.Add(temp); } } } } [HttpGet("IsClearanceEmp/{empid}")] public ActionResult IsClearanceEmp(int empid) { bool item = false; try { item = this._settlementClearanceService.IsClearanceEmp(empid); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); } return Ok(item); } [HttpGet("GetClearanceEmployee")] public ActionResult GetClearanceEmployee() { DataTable items = null; try { items = this._settlementClearanceService.GetClearanceEmployee(); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e.Message); } return Ok(items); } [HttpGet] [Route("getNoticeDaysAndAmout/{employeeId}")] public ActionResult getNoticeDaysAndAmout(int employeeId) { Employee _oEmployee = new Employee(); int nNoticeShortFallDays = 0; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); FSTranDetail noticeDays = new FSTranDetail(); List items = null; try { _oEmployee = _employeeService.Get(employeeId); var resignationByEmployee = new EmpResignationRequest(); if (_oEmployee.IsConfirmed == true) { Grade oGrade = new Grade(); oGrade = new GradeService().Get((int)_oEmployee.GradeID); // int nNoticeDays = oGrade != null ? oGrade.RequiredDays : 30; int nNoticeDays = 30; resignationByEmployee = _resignationRequestService.GetByEmployeeId(employeeId); int dDateDiff = resignationByEmployee.ResignationDate.Value.Date < resignationByEmployee.LastWorkingDate.Value.Date ? ((resignationByEmployee.LastWorkingDate.Value.Date - resignationByEmployee.ResignationDate.Value.Date).Days + 1) : 0; //int dDateDiff = resignationByEmployee.ResignationDate.Value.Date < resignationByEmployee.LastWorkingDate.Value.Date ? (resignationByEmployee.LastWorkingDate.Value.Date - resignationByEmployee.ResignationDate.Value.Date).Days : 0; nNoticeShortFallDays = nNoticeDays > dDateDiff ? (nNoticeDays - dDateDiff) : 0; } if (nNoticeShortFallDays > 0) { items = new List(); noticeDays.Amount = nNoticeShortFallDays; noticeDays.AmountType = EnumValueType.Other; noticeDays.Description = "Notice Pay Days"; noticeDays.IncomeTaxItemType = enumIncomeTaxItemType.None; noticeDays.ItemCode = EnumFSItemCode.NoticePay; noticeDays.ItemID = null; noticeDays.ReferenceItemID = null; items.Add(noticeDays); FSTranDetail noticeAmount = new FSTranDetail(); noticeAmount.Amount = (_oEmployee.BasicSalary / GlobalFunctions.GetDaysInMonth((DateTime) resignationByEmployee.LastWorkingDate)) * nNoticeShortFallDays; noticeAmount.Amount = Math.Round(noticeAmount.Amount); noticeAmount.AmountType = EnumValueType.Amount; noticeAmount.Description = "Notice Pay Amount"; noticeAmount.IncomeTaxItemType = enumIncomeTaxItemType.NoticePay; noticeAmount.ItemCode = EnumFSItemCode.NoticePay; noticeAmount.ItemID = null; noticeAmount.ReferenceItemID = null; items.Add(noticeAmount); } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(items); } [HttpGet] [Route("getBasicAmout/{employeeId}/{days}")] public ActionResult getBasicDaysAndAmout(int employeeId,int days) { Employee _oEmployee = new Employee(); double basicAmount = 0; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); //List items = null; try { _oEmployee = _employeeService.Get(employeeId); var resignationByEmployee = new EmpResignationRequest(); resignationByEmployee = _resignationRequestService.GetByEmployeeId(employeeId); basicAmount = (_oEmployee.BasicSalary / GlobalFunctions.GetDaysInMonth((DateTime) resignationByEmployee.LastWorkingDate)) * days; basicAmount = Math.Round(basicAmount); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(basicAmount); } [HttpGet] [Route("getEarnedLeaveDaysAndAmout/{employeeId}")] public ActionResult getEarnedLeaveDaysAndAmout(int employeeId) { double EarnedLeaveDays = 0; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); FSTranDetail itemone = new FSTranDetail(); List items = null; try { var resignationByEmployee = new EmpResignationRequest(); resignationByEmployee = _resignationRequestService.GetByEmployeeId(employeeId); Employee _oEmployee = this._employeeService.Get(employeeId); EarnedLeaveDays = this._leaveService.GetSettlementEarnLeaveBalance(_oEmployee, (DateTime)resignationByEmployee.LastWorkingDate); if (EarnedLeaveDays > 0) { items = new List(); itemone.Amount = EarnedLeaveDays; itemone.AmountType = EnumValueType.Other; itemone.Description = "Earned Leave Days"; itemone.IncomeTaxItemType = enumIncomeTaxItemType.None; itemone.ItemCode = EnumFSItemCode.LeaveEncashment; itemone.ItemID = null; itemone.ReferenceItemID = null; items.Add(itemone); FSTranDetail tiemtwo = new FSTranDetail(); tiemtwo.Amount = _oEmployee.GrossSalary / 30 * EarnedLeaveDays; tiemtwo.Amount = Math.Round(tiemtwo.Amount); tiemtwo.AmountType = EnumValueType.Amount; tiemtwo.Description = "Leave Encashment Amount"; tiemtwo.IncomeTaxItemType = enumIncomeTaxItemType.Earned_Leave; tiemtwo.ItemCode = EnumFSItemCode.LeaveEncashment; tiemtwo.ItemID = null; tiemtwo.ReferenceItemID = null; items.Add(tiemtwo); } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(items); } [HttpGet] [Route("getAllowancesDeductions")] public ActionResult GetAllowancesDeductions() { Employee _oEmployee = new Employee(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List allowanceDeductions = new List(); try { var tempList = _allowanceDeductionService.Get(EnumStatus.Active); allowanceDeductions = tempList.Where(x => x.payrolltypeid == currentUser.PayrollTypeID).ToList(); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(allowanceDeductions); } [HttpGet] [Route("getGratuityAmount/{employeeId}")] public ActionResult getGratuityAmount(int employeeId) { Employee _oEmployee = new Employee(); GratuityCount _gratuityCount = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List allowanceDeductions = new List(); double _nGratuityAmount = 0.0; string gratuityAmount; string _serviceLength = null; try { _oEmployee = _employeeService.Get(employeeId); var resignationByEmployee = new EmpResignationRequest(); resignationByEmployee = _resignationRequestService.GetByEmployeeId(employeeId); if (_oEmployee.Status != EnumEmployeeStatus.Live) { if (_oEmployee.EndOfContractDate != null && _oEmployee.EndOfContractDate != DateTime.MinValue) { _nGratuityAmount = GlobalFunctions.Round(CalculatedGratuityAmount(resignationByEmployee.LastWorkingDate.Value.Date, _oEmployee));//reg date _serviceLength = GlobalFunctions.AgeCalculate(_oEmployee.JoiningDate, resignationByEmployee.LastWorkingDate.Value.Date); } } gratuityAmount = GlobalFunctions.TakaFormat(_nGratuityAmount); _gratuityCount = new GratuityCount { GratuityAmount = gratuityAmount, ServiceLength = _serviceLength }; } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(_gratuityCount); } [Route("getAgeCalculation/{employeeId}")] public ActionResult GetAgeCalculation(int employeeId) { Employee _oEmployee = new Employee(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); string _serviceLength = null; try { _oEmployee = _employeeService.Get(employeeId); var resignationByEmployee = new EmpResignationRequest(); resignationByEmployee = _resignationRequestService.GetByEmployeeId(employeeId); if (_oEmployee.Status != EnumEmployeeStatus.Live) { if (_oEmployee.EndOfContractDate != null && _oEmployee.EndOfContractDate != DateTime.MinValue) { _serviceLength = GlobalFunctions.AgeCalculate(_oEmployee.JoiningDate, resignationByEmployee.LastWorkingDate.Value.Date); } } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(_serviceLength); } private double CalculatedGratuityAmount(DateTime dt, Employee _oEmployee) { double nAmount; double nServiceLength; double basicCount = 0; double yearCount = 0; //double nDiff; nServiceLength = 0; nAmount = 0.0; if (dt <= new DateTime(2021, 1, 1)) { nServiceLength = ServiceYears(dt, _oEmployee); // Non-Management if (IsNonManagement(_oEmployee)) { if (nServiceLength < 0.5) nAmount = 0.0; else if (nServiceLength >= 10) nAmount = _oEmployee.BasicSalary * Math.Round(nServiceLength) * 1.5; else nAmount = _oEmployee.BasicSalary * Math.Round(nServiceLength); } // Management else { if (nServiceLength < 5) nAmount = 0.0; else if (dt >= new DateTime(2021, 1, 2) && nServiceLength >= 10) { nAmount = _oEmployee.BasicSalary * nServiceLength * 1.5; } else nAmount = _oEmployee.BasicSalary * nServiceLength; } } else { nServiceLength = ServiceYearsForNewRules(dt, _oEmployee); if (nServiceLength <= 0.5) nAmount = 0.0; else if (nServiceLength > .5 && nServiceLength <= 1.5) nAmount = _oEmployee.BasicSalary * 1; else if (nServiceLength > 1.5 && nServiceLength <= 2.5) nAmount = _oEmployee.BasicSalary * 2; else if (nServiceLength > 2.5 && nServiceLength <= 3.5) nAmount = _oEmployee.BasicSalary * 3; else if (nServiceLength > 3.5 && nServiceLength <= 4.5) nAmount = _oEmployee.BasicSalary * 4; else if (nServiceLength > 4.5 && nServiceLength <= 5.5) nAmount = _oEmployee.BasicSalary * 5; else if (nServiceLength > 5.5 && nServiceLength <= 6.5) nAmount = _oEmployee.BasicSalary * 6; else if (nServiceLength > 6.5 && nServiceLength <= 7.5) nAmount = _oEmployee.BasicSalary * 7; else if (nServiceLength > 7.5 && nServiceLength <= 8.5) nAmount = _oEmployee.BasicSalary * 8; else if (nServiceLength > 8.5 && nServiceLength <= 9.5) nAmount = _oEmployee.BasicSalary * 9; else if (nServiceLength > 9.5 && nServiceLength <= 10) nAmount = _oEmployee.BasicSalary * 10; else if (nServiceLength > 10 && nServiceLength <= 10.5) nAmount = _oEmployee.BasicSalary * 10 * 1.5; else if (nServiceLength > 10.5 && nServiceLength <= 11.5) nAmount = _oEmployee.BasicSalary * 11 * 1.5; else { yearCount = Math.Round(nServiceLength); if (yearCount > 11) { nAmount = 1.5 * yearCount * _oEmployee.BasicSalary; } } } nAmount = Math.Round(nAmount); return nAmount; } private double ServiceYears(DateTime discontinueDate, Employee _oEmployee) { double n = discontinueDate.Subtract(_oEmployee.JoiningDate).TotalDays + 1; double serviceYears = 0; // Non Management if (IsNonManagement(_oEmployee)) { serviceYears = Math.Round(n / 365); } // Management else { serviceYears = Math.Floor(n / 365); } return serviceYears; } private bool IsNonManagement(Employee _oEmployee) { List _Grades = new List(); List _GradeSegments = new List(); GradeSegment _nonManaghementGS = null; _Grades = new GradeService().Get(EnumStatus.Active); _GradeSegments = new GradeSegmentService().Get(EnumStatus.Active); _nonManaghementGS = _GradeSegments.FirstOrDefault(x => x.Code.Trim().ToUpper() == "002"); //Non Management if (_nonManaghementGS != null && _Grades.Any(x => x.ID == _oEmployee.GradeID && x.GradeSegmentID == _nonManaghementGS.ID)) { return true; } // Management else { return false; } } private double ServiceYearsForNewRules(DateTime discontinueDate, Employee _oEmployee) { double n = discontinueDate.Subtract(_oEmployee.JoiningDate).TotalDays; double serviceYears = 0; serviceYears = n / 365; return serviceYears; } [HttpGet] [Route("getPFAmount/{employeeId}")] public ActionResult getPFAmount(int employeeId) { Employee _oEmployee = new Employee(); PFCount _pfCount = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); string PFAmountText; string CPFAmountText; string PFLoanText = null; string PFLoanInterestText = null; string PFLapsText; string WPPFAmountText; string WPPFTaxAmountText; List _oLoans = null; try { _oEmployee = _employeeService.Get(employeeId); double _nPFAmount = 0.0; //_nPFAmount = FSTran.GetPFAmount(_oEmployee.EmployeeNo); PFAmountText = GlobalFunctions.TakaFormat(_nPFAmount); double _nCPFAmount = 0.0; _nCPFAmount = _nPFAmount; CPFAmountText = GlobalFunctions.TakaFormat(0); double _nPFLapsAmount = 0.0; PFLapsText = GlobalFunctions.TakaFormat(_nPFLapsAmount); double _nWPPFAmount = 0.0; WPPFAmountText = GlobalFunctions.TakaFormat(_nWPPFAmount); double _nWPPFTaxAmount = 0.0; WPPFTaxAmountText = GlobalFunctions.TakaFormat(_nWPPFTaxAmount); double _nLoanTotal = 0.0; _oLoans = new List(); DataSet oLoanIDs = new DataSet(); Loan oLoan = new Loan(); //lvwLoan.Items.Clear(); //ListViewItem li; _oLoans = _loanService.Get(EnumStatus.Active); List issuedLoans = _loanIssueService.GetExistingLoan(_oEmployee.ID); DateTime dtDis = _oEmployee.EndOfContractDate == DateTime.MinValue ? DateTime.Now : (DateTime)_oEmployee.EndOfContractDate; dtDis = dtDis.AddMonths(-1); foreach (LoanIssue lis in issuedLoans) { DataSet oItems = _loanScheduleService.GetByEmpIDANDLoanID(_oEmployee.ID, lis.LoanID); foreach (DataRow odRow in oItems.Tables[0].Rows) { oLoan = _oLoans.Find(delegate (Loan t) { return t.ID == lis.LoanID; }); if (lis.LoanID == 1) { PFLoanText = GlobalFunctions.TakaFormat(Convert.ToDouble(odRow[1])); PFLoanInterestText = GlobalFunctions.TakaFormat(Convert.ToDouble(odRow[2])); } else // loan tab { //li = new ListViewItem(); //li.Text = oLoan.Name; //li.SubItems.Add(GlobalFunctions.TakaFormat(Convert.ToDouble(odRow[1]))); //lvwLoan.Items.Add(li); //_nLoanTotal += Convert.ToDouble(odRow[1]); } } } _pfCount = new PFCount { PFAmount = PFAmountText, CPFAmount = CPFAmountText, PFLoan = PFLoanText == null ? "0.0" : PFLoanText, PFLoanInterest = PFLoanInterestText == null ? "0.0" : PFLoanInterestText, PFLaps = PFLapsText, WPPFAmount = WPPFTaxAmountText, WPPFTaxAmount = WPPFTaxAmountText }; } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(_pfCount); } [HttpGet] [Route("getClearanceNotifications/{empregId}")] public ActionResult GetClearanceNotifications(int empregId) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); EmpResignationRequest rg = this._resignationRequestService.Get(empregId); List items = null; try { items = _finalSettlementService.GetClearanceNotifications(rg.EmployeeID); if (items != null) { foreach (var item in items) { if (item.SendDate == DateTime.MinValue) { item.SendDate = null; } if (item.ClearanceDate == DateTime.MinValue) { item.ClearanceDate = null; } } } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(items); } [HttpGet] [Route("checkSettlementClearanceStatus/{empResignationID}/{employeeid}")] public ActionResult checkSettlementClearanceStatus(int empResignationID ,int employeeid) { bool isallCompleted = false; List oSettlementClearance = new List(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { oSettlementClearance = _settlementClearanceService.GetByRegEmp(empResignationID, employeeid); if(oSettlementClearance != null && oSettlementClearance.Count > 0) { if(oSettlementClearance[0].SettlementClearanceStatus == EnumSettlementClearanceStatus.Completed) isallCompleted = true; } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(isallCompleted); } [HttpGet] [Route("sendMailNotification/{employeeIds}/{empresignationId}")] public ActionResult SendMailNotification(string employeeIds, int empresignationId) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); int id = 0; try { _settlementClearanceService.SaveAll(employeeIds, currentUser, empresignationId); //List empIds = employeeIds.Split(',').Select(int.Parse).ToList(); //empIds = empIds.Distinct().ToList(); //List emps = new EmployeeService().GetByEmpIDs(employeeIds,(int) currentUser.PayrollTypeID); //EmpResignationRequest rg = this._resignationRequestService.Get(empresignationId); //Employee emp = this._employeeService.Get(rg.EmployeeID); //if (empIds != null && empIds.Count > 0) //{ // foreach (var item in empIds) // { // SettlementClearance sc = new SettlementClearance(); // sc.NotificationEmployee = emps.FirstOrDefault(x => x.ID == item); // sc.EmployeeID = item; // sc.UserID = currentUser.UserID; // sc.EmpClearanceID = emp.ID; // sc.SentDate = DateTime.Today; // sc.ClearanceDate = null; // sc.CreatedDate = DateTime.Today; // sc.ResignationEmployee = emp; // sc.CreatedBy = currentUser.UserID; // sc.SettlementClearanceStatus = EnumSettlementClearanceStatus.Initiated; // sc.ResignationEmployee = emp; // sc.ResignationRequestID = empresignationId; // id = _settlementClearanceService.Save(sc); // } //} } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(id); } [HttpPost] [Route("saveSettlementAdvice")] public ActionResult saveSettlementAdvice(SettlmentAdvice item) { int id = 0; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); if (item.IsNew) { item.CreatedBy = currentUser.UserID; item.CreatedDate = DateTime.Today; } else { item.ModifiedBy = currentUser.UserID; item.ModifiedDate = DateTime.Today; } try { id= _settlementAdviceService.Save(item); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(id); } [HttpPost] [Route("CalulateSettlementTax")] public ActionResult CalulateSettlementTax(FSTran item) { List taxes = null; CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); if (item.IsNew) { item.CreatedBy = currentUser.UserID; item.CreatedDate = DateTime.Today; } else { item.ModifiedBy = currentUser.UserID; item.ModifiedDate = DateTime.Today; } try { taxes = new FSTranService().CalculateTax(item, currentUser.UserID,(int) currentUser.PayrollTypeID); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(taxes); } [HttpGet] [Route("GetSettlementAdvices/{fromDate}/{toDate}")] public ActionResult GetSettlementAdvices(string fromDate, string toDate) { DateTime dfromDate = GlobalFunctions.GetApiDefaultDateData(fromDate); DateTime dtoDate = GlobalFunctions.GetApiDefaultDateData(toDate); List items = new List(); try { items = _settlementAdviceService.Get(dfromDate, dtoDate); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(items); } [HttpGet] [Route("checkSettlementClearanceStatus/{resignationReqId}")] public ActionResult checkSettlementClearanceStatus(int resignationReqId) { bool isNotAllCompleted = true; List oSettlementClearance = new List(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { oSettlementClearance = _settlementClearanceService.GetByResignationId(resignationReqId); if(oSettlementClearance != null && oSettlementClearance.Count > 0) { isNotAllCompleted = oSettlementClearance.Where(x => x.ResignationRequestID == resignationReqId && x.SettlementClearanceStatus != EnumSettlementClearanceStatus.Completed).Any(); } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(isNotAllCompleted); } [HttpGet] [Route("getMySettlementClearanceStatus/{resignationReqId}")] public ActionResult getMySettlementClearanceStatus(int resignationReqId) { List oSettlementClearance = new List(); CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); try { oSettlementClearance = _settlementClearanceService.GetByResignationId(resignationReqId); SettlementClearance item = oSettlementClearance.FirstOrDefault(x => x.EmployeeID == (int)currentUser.EmployeeID); if (item == null) return Ok(false); else { if (item.SettlementClearanceStatus == EnumSettlementClearanceStatus.Completed) return Ok(true); else return Ok(false); } } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } } [HttpGet("getFinalSettlementData/{employeeId}")] public ActionResult getFinalSettlementData(int employeeId) { CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User); List resignationPermissions = new List(); List finalList = new List(); //List requests = this._resignationRequestService.Get(dfromDate, dtoDate); try { FSTran otran = _fsTranService.GetByEmpdId(employeeId); //obs = _ifsHeadService.GetByEmpId((int)currentUser.EmployeeID); // resignationPermissions = _resignationRequestService.GetFsHeadRegPermission(); if (otran != null) { int fractionnateSalaryCount = 0; //foreach (FSTranDetail tran in otran.Details) //{ // if(tran.ItemID == EnumFSItemCode.) //} } //foreach (FSTran tran in otrans) //{ // FSHeadResignationPermission newitem = new FSHeadResignationPermission(); // newitem.EmployeeNo = tran.EmployeeNo; // newitem.EmployeeName = tran.EmployeeName; // newitem.EmployeeId = tran.EmployeeID; // finalList.Add(newitem); // foreach (FSTranDetail detail in tran.Details) // { // if (detail.CreatedBy == currentUser.UserID) // { // if (detail.ItemCode == EnumFSItemCode.LeaveEncashment) // newitem.LeaveEncashmentAmount = newitem.LeaveEncashmentAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.OT) // newitem.OTAmount = newitem.OTAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.Loan) // newitem.LoanAmount = newitem.LoanAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.Other) // newitem.OtherAmount = newitem.OtherAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.Bonus) // newitem.BonusAmount = newitem.BonusAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.Gross) // newitem.GrossAmount = newitem.GrossAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.FractionateSalary) // newitem.SalaryAdjustmentAmount = newitem.SalaryAdjustmentAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.NoticePay) // newitem.NoticeAmount = newitem.NoticeAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.PF || detail.ItemCode == EnumFSItemCode.CPF || detail.ItemCode == EnumFSItemCode.WPPF // || detail.ItemCode == EnumFSItemCode.WPPFTax || detail.ItemCode == EnumFSItemCode.PFLoan || detail.ItemCode == EnumFSItemCode.PFLoanInterest // || detail.ItemCode == EnumFSItemCode.PFLapsAndForfeiture) // newitem.PFAmount = newitem.PFAmount + detail.ChangedValue; // else if (detail.ItemCode == EnumFSItemCode.Gratuity) // newitem.GratuityAmount = newitem.GratuityAmount + detail.ChangedValue; // // } // } // } //} //foreach (EmpResignationRequest item in requests) //{ // if (item.WFStatus == EnumResignStatus.Clearance_initiated && finalList.FindIndex(x => x.EmployeeId == item.EmployeeID) == -1) // { // FSHeadResignationPermission newitem = new FSHeadResignationPermission(); // newitem.EmployeeNo = item.EmpNo; // newitem.EmployeeName = item.EmpName; // newitem.EmployeeId = item.EmployeeID; // finalList.Add(newitem); // } //} } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(finalList); } [HttpGet] [Route("getFractionateSalaryDays/{employeeId}")] public ActionResult getFractionateSalaryDays(int employeeId) { int dDateDiff = 0; try { var resignationByEmployee = new EmpResignationRequest(); resignationByEmployee = _resignationRequestService.GetByEmployeeId(employeeId); Employee _oEmployee = this._employeeService.Get(employeeId); DateTime? dLastSalaryMonth = new SalaryMonthlyService().GetLastPaidSalaryMonth(employeeId); if (dLastSalaryMonth != null) dDateDiff = (resignationByEmployee.LastWorkingDate.Value.Date - dLastSalaryMonth.Value.Date).Days; else dDateDiff = resignationByEmployee.LastWorkingDate.Value.Date > _oEmployee.JoiningDate.Date ? (resignationByEmployee.LastWorkingDate.Value.Date - _oEmployee.JoiningDate.Date).Days : 0; } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } return Ok(dDateDiff); } #endregion } }