EchoTex_Payroll/HRM.UI/Controllers/Final-Settlement/FinalSettlementController.cs
2024-10-14 10:01:49 +06:00

1820 lines
78 KiB
C#

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<ProportionateSalaryFill> fracSalaryFillList = new List<ProportionateSalaryFill>();
List<GrossSalaryList> grossSalaryFillList = new List<GrossSalaryList>();
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<FSHead> obs = new List<FSHead>();
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<Designation> designations =
new DesignationService().Get(EnumStatus.Regardless, (int)currentUser.PayrollTypeID);
List<Department> 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<EmpResignationAttachment>();
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<EmpResignationRequest> 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<WFMovementTran>();
DateTime LastWorkingDate = (DateTime)items["lastWorkingDate"].ToObject<DateTime>();
string Remarks = (string)items["remarks"].ToObject<string>();
string ResignationReason = (string)items["resignationReason"].ToObject<string>();
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<Employee> employees = new List<Employee>();
List<Department> departments = new List<Department>();
List<Designation> designations = new List<Designation>();
List<Category> categories = new List<Category>();
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<Department> departments = new List<Department>();
List<Designation> designations = new List<Designation>();
List<Category> categories = new List<Category>();
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<EmpResignationRequest> items = new List<EmpResignationRequest>();
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<FSHead> obs = new List<FSHead>();
//List<EmpResignationRequest> resignations = new List<EmpResignationRequest>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<FSHeadResignationPermission> resignationPermissions = new List<FSHeadResignationPermission>();
List<FSHeadResignationPermission> finalList = new List<FSHeadResignationPermission>();
EmpResignationRequest speccificEmployee = new EmpResignationRequest();
List<EmpResignationRequest> requests = null;
List<FSTran> 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<FSHeadResignationPermission>();
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<FSHead> obs = new List<FSHead>();
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<FSHead> obs = new List<FSHead>();
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<SettlementClearance> tempSc = new List<SettlementClearance>();
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<FSTranDetail>();
// 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<ADParameter> adParams = null;
List<ADParameterEmployee> 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<ADParameter>();
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<ADParameterEmployee>();
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<ADParameter>();
adParamEmps = new List<ADParameterEmployee>();
adParams = new List<ADParameter>();
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<FSTranDetail> 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<FSTranDetail>();
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<FSTranDetail> 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<FSTranDetail> 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<FSTranDetail>();
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<AllowanceDeduction> allowanceDeductions = new List<AllowanceDeduction>();
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<AllowanceDeduction> allowanceDeductions = new List<AllowanceDeduction>();
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<Grade> _Grades = new List<Grade>();
List<GradeSegment> _GradeSegments = new List<GradeSegment>();
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<Loan> _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<Loan>();
DataSet oLoanIDs = new DataSet();
Loan oLoan = new Loan();
//lvwLoan.Items.Clear();
//ListViewItem li;
_oLoans = _loanService.Get(EnumStatus.Active);
List<LoanIssue> 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<FinalSettlementClerance> 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<SettlementClearance> oSettlementClearance = new List<SettlementClearance>();
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<int> empIds = employeeIds.Split(',').Select(int.Parse).ToList();
//empIds = empIds.Distinct().ToList();
//List<Employee> 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<IncomeTax> 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<SettlmentAdvice> items = new List<SettlmentAdvice>();
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<SettlementClearance> oSettlementClearance = new List<SettlementClearance>();
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<SettlementClearance> oSettlementClearance = new List<SettlementClearance>();
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<FSHeadResignationPermission> resignationPermissions = new List<FSHeadResignationPermission>();
List<FSHeadResignationPermission> finalList = new List<FSHeadResignationPermission>();
//List<EmpResignationRequest> 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
}
}