EchoTex_Payroll/HRM.UI/Controllers/Payroll/BonusController.cs
2024-10-17 12:56:12 +06:00

1760 lines
80 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using HRM.BO;
using System.Data;
using HRM.DA;
using System.Text;
using Newtonsoft.Json;
using static System.Runtime.InteropServices.JavaScript.JSType;
using Microsoft.CodeAnalysis.VisualBasic.Syntax;
using NPOI.SS.Formula.Functions;
using NPOI.POIFS.Crypt.Dsig;
using Microsoft.AspNetCore.Authorization;
using System.IO;
using Payroll.Service;
using System.Drawing.Drawing2D;
using static iTextSharp.awt.geom.Point2D;
using NPOI.SS.Formula.Eval;
using System.Globalization;
using Payroll.BO;
using Ease.Core.Model;
namespace HRM.UI.Controllers.Payroll
{
[Route("api/Bonus")]
[ApiController]
public class BonusController : ControllerBase
{
private readonly IBonusService _bonusService;
private readonly IBonusParameterService _bonusParameterService;
private readonly IBonusProcessService _bonusProcessService;
private readonly IEmployeeService _empService;
private readonly IProdBonusAttnService _prodBonusAttnService;
private readonly IProdBonusLineService _prodBonusLineService;
private readonly IProdBonusParameterService _prodBonusParameterService;
private readonly IProdBonusProcessService _prodBonusProcessService;
private readonly IProdBonusSupervisorService _prodBonusSupervisorService;
private readonly IProdBonusWorkScheduleService _prodBonusWorkScheduleService;
private readonly IProductionBonusSetupService _productionBonusSetupService;
private readonly IPRBCalculationService _prbCalculationService;
private readonly IPRBKpiService _prbKpiService;
private readonly IWFMovementTranService _wfMovementTranService;
private readonly IGradeService _gradeService;
private DataTable _uplodedData;
private static List<UploadErrorOrSuccess> _errorOrSuccessList = new List<UploadErrorOrSuccess>();
public BonusController(IBonusService bonusService, IBonusParameterService bonusParameterService,
IBonusProcessService bonusProcessService, IEmployeeService empService, IProdBonusAttnService prodBonusAttnService,
IProdBonusLineService prodBonusLineService, IProdBonusParameterService prodBonusParameterService,
IProdBonusProcessService prodBonusProcessService, IProdBonusSupervisorService prodBonusSupervisorService,
IProdBonusWorkScheduleService prodBonusWorkScheduleService, IProductionBonusSetupService productionBonusSetupService,
IPRBCalculationService prbCalculationService, IPRBKpiService prbKpiService, IWFMovementTranService wfMovementTranService,
IGradeService gradeService)
{
_bonusService = bonusService;
_bonusParameterService = bonusParameterService;
_bonusProcessService = bonusProcessService;
_empService = empService;
_prodBonusAttnService = prodBonusAttnService;
_prodBonusLineService = prodBonusLineService;
_prodBonusParameterService = prodBonusParameterService;
_prodBonusProcessService = prodBonusProcessService;
_prodBonusSupervisorService = prodBonusSupervisorService;
_prodBonusWorkScheduleService = prodBonusWorkScheduleService;
_productionBonusSetupService = productionBonusSetupService;
_prbCalculationService = prbCalculationService;
_prbKpiService = prbKpiService;
_wfMovementTranService = wfMovementTranService;
_gradeService = gradeService;
}
[HttpPost]
[Route("saveBonusParameter")]
public ActionResult saveBonusParameter(BonusParameter termParameter)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
termParameter.PayrollTypeID = (int)currentUser.PayrollTypeID;
if (termParameter.IsNew == true)
{
termParameter.CreatedBy = currentUser.UserID;
termParameter.CreatedDate = DateTime.Today;
}
else
{
termParameter.ModifiedBy = currentUser.UserID;
termParameter.ModifiedDate = DateTime.Today;
}
_bonusParameterService.Save(termParameter);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(termParameter);
}
[HttpPost]
[Route("DeleteBonusParameter")]
public ActionResult DeleteBonusParameter(BonusParameter termParameter)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
_bonusParameterService.Delete(termParameter.ID);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(termParameter);
}
[HttpGet("getAllBonusParameters")]
public ActionResult GetAllBonusParameters()
{
List<BonusParameter> bonusParameters = new List<BonusParameter>();
CurrentUser ouser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
bonusParameters = _bonusParameterService.Get(EnumStatus.Active, (int)ouser.PayrollTypeID);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(bonusParameters);
}
[HttpGet("GetUsedGrades/{termID}")]
public ActionResult GetUsedGrades(int termID)
{
List<BonusParameter.BonusParamGrade> items = new List<BonusParameter.BonusParamGrade>();
try
{
items = _bonusParameterService.GetUsedGrades(termID);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(items);
}
[HttpPost]
[Route("BonusProcess")]
public ActionResult BonusProcess(dynamic processItems)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
var items = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
int index = 0;
List<SearchEmployee> searhemp = new List<SearchEmployee>();
string empid = "";
int? bonusid = null;
DateTime? dBasicMonth = null;
DateTime? dPayDate = null;
DateTime? dCuttOfDate = null;
double? CurrProcess = null;
bool? IsDisburseWithSalary = null;
bool? IsTaxProcess = null;
foreach (var item in items)
{
if (index == 0)
{
bonusid = (int)item["bonusid"].ToObject<int>();
dBasicMonth = (DateTime)item["basicMonth"].ToObject<DateTime>();
dPayDate = (DateTime)item["payDate"].ToObject<DateTime>();
dCuttOfDate = (DateTime)item["cuttOfDate"].ToObject<DateTime>();
CurrProcess = (double)item["currProcess"].ToObject<double>();
IsDisburseWithSalary = (bool)item["isDisburseWithSalary"].ToObject<bool>();
IsTaxProcess = (bool)item["isDisburseWithSalary"].ToObject<bool>();
IsTaxProcess = (bool)item["isTaxProcess"].ToObject<bool>();
}
empid = empid + (string)item["empid"].ToObject<string>() + ",";
}
if (empid.Length > 0)
{
empid = empid.Substring(0, empid.Length - 1);
}
List<SalaryProcessStatus> errorOrSucess = new List<SalaryProcessStatus>();
BonusProcess prc = null;
try
{
List<Employee> employees = this._empService.GetByEmpIDs(empid, (int)currentUser.PayrollTypeID);
prc = this._bonusProcessService.CalculateBonus((int)currentUser.PayrollTypeID, employees, (int)bonusid, (DateTime)dBasicMonth,
(DateTime)dPayDate, (DateTime)dCuttOfDate, (double)CurrProcess, (bool)IsDisburseWithSalary, (bool)IsTaxProcess);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(prc);
}
[HttpPost]
[Route("saveBonusProcess")]
public ActionResult saveBonusProcess(BonusProcess bonusPrss)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
bonusPrss.PayrollTypeID = (int)currentUser.PayrollTypeID;
if (bonusPrss.IsNew == true)
{
bonusPrss.CreatedBy = currentUser.UserID;
bonusPrss.CreatedDate = DateTime.Today;
}
else
{
bonusPrss.ModifiedBy = currentUser.UserID;
bonusPrss.ModifiedDate = DateTime.Today;
}
_bonusProcessService.Save(bonusPrss);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(true);
}
[HttpPost]
[Route("CalculateBonusTax")]
public ActionResult CalculateBonusTax(List<BonusProcess.BonusProcessDetail> items)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
int bonusid = items[0].BonusID;
List<Employee> emps = new List<Employee>();
items.ForEach(x =>
{
emps.Add(x.Employee);
});
items = _bonusProcessService.CalculateBonusTax(items, emps, bonusid, (int)currentUser.PayrollTypeID);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(items);
}
[HttpPost]
[Route("UndoBonusProcess")]
public ActionResult UndoBonusProcess(BonusProcess bonusPrss)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
_bonusProcessService.UndoBonusProcess(bonusPrss);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(true);
}
[HttpPost]
[Route("ApproveBonus")]
public ActionResult ApproveBonus(dynamic processItems)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
int? bonusid = (int)item["bonusid"].ToObject<int>();
DateTime? dBasicMonth = (DateTime)item["bonusMonth"].ToObject<DateTime>();
try
{
this._bonusProcessService.ApproveBonus((int)bonusid, (DateTime)dBasicMonth, (int)currentUser.PayrollTypeID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(true);
}
[HttpGet("GetBonusProcessDetail/{bonusID}/{bonusMonth}")]
public ActionResult GetBonusProcessDetail(int bonusid, string bonusMonth)
{
List<BonusProcess.BonusProcessDetail> details = new List<BonusProcess.BonusProcessDetail>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
DateTime dDate = GlobalFunctions.GetApiDefaultDateData(bonusMonth);
try
{
details = this._bonusProcessService.GetBonusDetails((int)currentUser.PayrollTypeID, bonusid, dDate);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(details);
}
[HttpGet("GetUnApprovedBonusses")]
public ActionResult GetUnApprovedBonusses()
{
DataTable ot = null;
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
ot = this._bonusProcessService.GetUnApprovedBonuses((DateTime)currentUser.NextPayProcessDate, (int)currentUser.PayrollTypeID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(ot);
}
[HttpGet("IsBonusApproved/{bonusID}/{bonusMonth}")]
public ActionResult IsBonusApproved(int bonusID, string bonusMonth)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
DateTime? bMonth = GlobalFunctions.GetApiDefaultDateData(bonusMonth);
bool isApproved = false;
try
{
isApproved = this._bonusProcessService.IsApproved(bonusID, (DateTime)bMonth, (int)currentUser.PayrollTypeID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(isApproved);
}
[HttpGet("GetBonusItemsForESSBonusPayslip")]
public ActionResult GetBonusItemsForESSBonusPayslip()
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
DataTable olist = null;
try
{
olist = _bonusProcessService.GetBonusItemsForESSBonusPayslip((int)currentUser.EmployeeID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(olist);
}
#region Production Bonus
[HttpPost]
[Route("saveProductionBonusSetup")]
public ActionResult saveProductionBonusSetup(ProductionBonusSetup prodBonusSet)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
if (prodBonusSet.IsNew == true)
{
prodBonusSet.CreatedBy = currentUser.UserID;
prodBonusSet.CreatedDate = DateTime.Today;
}
else
{
prodBonusSet.ModifiedBy = currentUser.UserID;
prodBonusSet.ModifiedDate = DateTime.Today;
}
_productionBonusSetupService.Save(prodBonusSet);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(true);
}
[HttpPost]
[Route("getLayout")]
public ActionResult getLayout(dynamic processItems)
{
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
DateTime? dBasicMonth = (DateTime)item["createdDate"].ToObject<DateTime>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
//List<ProductionBonusSetup> item = new List<ProductionBonusSetup>();
DataTable dt = null;
try
{
dt = _productionBonusSetupService.GetLayout((DateTime)dBasicMonth);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(dt);
}
[HttpPost]
[Route("GetLayoutMonthly")]
public ActionResult GetLayoutMonthly(dynamic processItems)
{
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
DateTime? dBasicMonth = (DateTime)item["salaryMonth"].ToObject<DateTime>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
//List<ProductionBonusSetup> item = new List<ProductionBonusSetup>();
DataTable dt = null;
try
{
dt = _productionBonusSetupService.GetLayoutMonthly((DateTime)dBasicMonth);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(dt);
}
[HttpGet("getLayoutDetails/{ID}")]
public ActionResult getLayoutDetails(int ID)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
ProductionBonusSetup item = new ProductionBonusSetup();
//ProdBonusLine item = new ProdBonusLine();
try
{
item = _productionBonusSetupService.Get(ID);
item.ProductionBonusLines = _prodBonusLineService.GetLineBySetupId(ID);
foreach (ProdBonusLine prodLine in item.ProductionBonusLines)
{
prodLine.ProdBonusSupervisors = _prodBonusSupervisorService.GetByLineID(prodLine.ID);
Employee oEmp = new Employee();
foreach (ProdBonusSupervisor prodSupervisor in prodLine.ProdBonusSupervisors)
{
oEmp = new EmployeeService().Get(prodSupervisor.EmployeeID);
prodSupervisor.empName = oEmp.Name;
prodSupervisor.employeeNo = oEmp.EmployeeNo;
}
prodLine.ProdBonusParameters = _prodBonusParameterService.GetByLineID(prodLine.ID);
Department oDept = new Department();
foreach (ProdBonusParameter prodParameter in prodLine.ProdBonusParameters)
{
oDept = new DepartmentService().Get(prodParameter.ItemID);
prodParameter.ItemType = 0;
prodParameter.ItemID = oDept.ID;
}
prodLine.ProdBonusWorkSchedules = _prodBonusWorkScheduleService.GetByLineID(prodLine.ID);
}
item.ProdBonusWorkSchedules = _prodBonusWorkScheduleService.GetWithSetupID(ID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(item);
}
[HttpGet("getLines/{setupID}")]
public ActionResult getLines(int setupID)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<ProdBonusLine> item = new List<ProdBonusLine>();
try
{
item = _prodBonusLineService.GetLineBySetupId(setupID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(item);
}
[HttpPost]
[Route("getProdBonusAtten")]
public ActionResult getProdBonusAtten(dynamic processItems)
{
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
int setupID = (int)item["setupId"].ToObject<int>();
DateTime date = (DateTime)item["date"].ToObject<DateTime>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<ProdBonusAttn> AttnItems = new List<ProdBonusAttn>();
try
{
AttnItems = _prodBonusAttnService.Get(setupID, date);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(AttnItems);
}
[HttpPost]
[Route("getProdBonusAttnEmployeeList")]
public ActionResult getProdBonusAttnEmployeeList(dynamic pItem)
{
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(pItem));
DateTime date = (DateTime)item["date"].ToObject<DateTime>();
ProdBonusLine _oProdBonusLine = (ProdBonusLine)item["prodLine"].ToObject<ProdBonusLine>();
List<Employee> _oEmployees = new List<Employee>();
List<Employee> _oFinalEmployees = new List<Employee>();
List<ProdBonusParameter> _oProdBonusParameters = new List<ProdBonusParameter>();
List<ProdBonusSupervisor> _oProdBonusSupervisors = new List<ProdBonusSupervisor>();
List<DailyAttnProcess> _oDailyAttnProsess = new List<DailyAttnProcess>();
try
{
_oProdBonusParameters = _oProdBonusLine.ProdBonusParameters;
_oProdBonusSupervisors = _oProdBonusLine.ProdBonusSupervisors;
if (_oProdBonusParameters != null && _oProdBonusParameters.Count > 0)
{
List<ProdBonusParameter> desigparam = _oProdBonusParameters.Where(o => o.ItemType == EnumBonusItemType.Designation).ToList();
foreach (ProdBonusParameter pbp in _oProdBonusParameters)
{
List<Employee> oTempEmployees = null;
if (pbp.ItemType == EnumBonusItemType.Department)
{
oTempEmployees = _oEmployees.FindAll(delegate (Employee e1) { return e1.DepartmentID == pbp.ItemID && e1.DesignationID != 2; }); //Employee other than supervisor
}
foreach (ProdBonusSupervisor svsr in _oProdBonusSupervisors)
{
Employee emp = _oEmployees.FirstOrDefault(o => o.ID == svsr.EmployeeID);
if (emp != null)
{
oTempEmployees.Add(emp);
}
}
//else
//{
// oTempEmployees = _oEmployees.FindAll(delegate(Employee e1) { return e1.DesignationID == pbp.ItemID; });
//}
if (oTempEmployees != null)
{
foreach (Employee ee in oTempEmployees)
_oFinalEmployees.Add(ee);
}
}
//foreach (ProdBonusParameter item in desigparam)
//{
// if (_oFinalEmployees != null && _oFinalEmployees.Count > 0)
// {
// _oFinalEmployees = _oFinalEmployees.Where(o => o.DesignationID != item.ItemID).ToList();
// }
//}
}
string emIds = _oFinalEmployees.Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.ID + ","), sb => sb.ToString().Trim(','));
if (emIds != "")
{
_oDailyAttnProsess = new DailyAttnProcessService().Get(emIds, date.Date, date.Date.AddHours(23.9));
}
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(_oFinalEmployees);
}
[HttpGet("getByLineID/{lineID}")]
public ActionResult getByLineID(int lineID)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<ProdBonusAttn> item = new List<ProdBonusAttn>();
try
{
item = _prodBonusAttnService.GetByLineID(lineID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(item);
}
[HttpPost]
[Route("saveAllProdBonusAttn")]
public ActionResult saveAllProdBonusAttn(dynamic processItems)
{
var prodBonusAttnItems = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems["prodBonusAttn"]));
List<ProdBonusAttn> oProdBonusAttns = new List<ProdBonusAttn>();
foreach (var prodBonusAttnItem in prodBonusAttnItems)
{
ProdBonusAttn oProdBonusAttn = (ProdBonusAttn)prodBonusAttnItem.ToObject<ProdBonusAttn>();
oProdBonusAttns.Add(oProdBonusAttn);
}
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
int setupId = (int)item["setupId"].ToObject<int>();
int scheduleId = (int)item["scheduleId"].ToObject<int>();
DateTime date = (DateTime)item["date"].ToObject<DateTime>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
//List<ProductionBonusSetup> item = new List<ProductionBonusSetup>();
DataTable dt = null;
try
{
_prodBonusAttnService.Save(oProdBonusAttns, setupId, scheduleId, date);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(dt);
}
//[HttpGet("getAllLine/{ID}")]
//public ActionResult getAllLine(int ID)
//{
// CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
// List<ProdBonusLine> items = new List<ProdBonusLine>();
// //ProdBonusLine prodLine = new ProdBonusLine();
// try
// {
// items = _prodBonusLineService.GetLines(ID);
// //item.ProductionBonusLines = _prodBonusLineService.GetLineBySetupId(ID);
// foreach (ProdBonusLine item in items)
// {
// item.ProdBonusSupervisors = _prodBonusSupervisorService.GetByLineID(item.ID);
// items.ProdBonusParameters = _prodBonusParameterService.GetWithSetupID(item.ID);
// }
// items.ProdBonusParameters = _prodBonusWorkScheduleService.GetWithSetupID(ID);
// }
// catch (Exception e)
// {
// return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
// }
// return Ok(items);
//}
[HttpPost]
[Route("getProdBonusProcessBySalaryMonth")]
public ActionResult getProdBonusProcessBySalaryMonth(dynamic processItems)
{
var processItem = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
DateTime dtpSalaryMonth = (DateTime)processItem["salaryMonthDate"].ToObject<DateTime>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<ProdBonusProcess> items = new List<ProdBonusProcess>();
try
{
items = _prodBonusProcessService.Get(GlobalFunctions.LastDateOfMonth(dtpSalaryMonth));
foreach (ProdBonusProcess item in items)
{
item.ProdBonusProcessEmps = _prodBonusProcessService.GetProdBonusProcessEmps(item.ID);
item.ProdBonusProcessItems = _prodBonusProcessService.GetProdBonusProcessItems(item.ID);
}
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(items);
}
[HttpPost]
[Route("getProdBonusSetupBySalaryMonth")]
public ActionResult getProdBonusSetupBySalaryMonth(dynamic processItems)
{
var processItem = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
DateTime dtpSalaryMonth = (DateTime)processItem["salaryMonthDate"].ToObject<DateTime>();
List<ProductionBonusSetup> items = new List<ProductionBonusSetup>();
try
{
items = _productionBonusSetupService.Get(GlobalFunctions.LastDateOfMonth(dtpSalaryMonth));
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(items);
}
[HttpPost]
[Route("processProdBonusProcess")]
public ActionResult processProdBonusProcess(dynamic processItems)
{
var prodBonusSetupItems = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems["prodBonusSetup"]));
List<ProductionBonusSetup> _oProductionBonusSetups = new List<ProductionBonusSetup>();
foreach (var prodBonusSetupItem in prodBonusSetupItems)
{
ProductionBonusSetup _oProductionBonusSetup = (ProductionBonusSetup)prodBonusSetupItem.ToObject<ProductionBonusSetup>();
_oProductionBonusSetups.Add(_oProductionBonusSetup);
}
var pItem = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
DateTime dtpSalaryMonth = (DateTime)pItem["salaryMonthDate"].ToObject<DateTime>();
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
int payrollTypeId = currentUser.PayrollTypeID.GetValueOrDefault();
//int setupID = ConfigurationManager.GetIntValue("bonus", "productionbonussetupid", EnumConfigurationType.Logic);
int setupID = 21;
ProdBonusProcess _oProdBonusProcess = new ProdBonusProcess();
try
{
_oProdBonusProcess = _prodBonusProcessService.Process(_oProductionBonusSetups, dtpSalaryMonth, payrollTypeId);
_prodBonusProcessService.Save(_oProdBonusProcess);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(_oProdBonusProcess);
}
[HttpPost]
[Route("undoProdBonusProcess")]
public ActionResult undoProdBonusProcess(dynamic processItems)
{
var processItem = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(processItems));
DateTime dtpSalaryMonth = (DateTime)processItem["salaryMonthDate"].ToObject<DateTime>();
try
{
//ProdBonusProcess oProdBonusPross = new ProdBonusProcess();
//SystemInformation oSystemInformation = new SystemInformation();
//oSystemInformation.CurrentSysInfo = new SystemInformationService().Get();
//DateTime nextPayProcessDate = new SystemInformationService().Get().NextPayProcessDate;
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
DateTime nextPayProcessDate = currentUser.NextPayProcessDate.GetValueOrDefault();
int payrollTypeId = currentUser.PayrollTypeID.GetValueOrDefault();
if (dtpSalaryMonth.Month == nextPayProcessDate.Month && dtpSalaryMonth.Year == nextPayProcessDate.Year)
{
List<ProdBonusProcess> oProdBonusProsses = _prodBonusProcessService.Get(GlobalFunctions.LastDateOfMonth(dtpSalaryMonth));
// if (MessageBox.Show("Do you want to Undo Bonus process?", "Bonus Process", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
// {
if (oProdBonusProsses.Count > 0)
{
//int setupID = ConfigurationManager.GetIntValue("bonus", "productionbonussetupid", EnumConfigurationType.Logic);
int setupID = 21;
ADParameter _ADParam = new ADParameterService().Get(setupID, payrollTypeId);
_prodBonusProcessService.UndoProcess(oProdBonusProsses, _ADParam, GlobalFunctions.LastDateOfMonth(dtpSalaryMonth));
//MessageBox.Show("Bonus process deleted successfully.", "Undo Bonus Process", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//}
}
else
{
throw new Exception("Can not undo previous month Production Bonus process.");
//MessageBox.Show("Can not undo previous month Production Bonus process.", "Undo Bonus Process", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok();
}
//[HttpPost]
//[Route("saveProdBonusProcess")]
//public ActionResult saveProdBonusProcess(List<ProdBonusProcess> oProdBonusProcessItems)
//{
// CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
// int payrollTypeId = currentUser.PayrollTypeID.GetValueOrDefault();
// //int setupID = ConfigurationManager.GetIntValue("bonus", "productionbonussetupid", EnumConfigurationType.Logic);
// int setupID = 21;
// ADParameter oADParam = new ADParameterService().Get(setupID, payrollTypeId);
// try
// {
// _prodBonusProcessService.Save(oProdBonusProcessItems);
// new ADParameterService().Save(oADParam);
// }
// catch (Exception e)
// {
// return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
// }
// return Ok();
//}
#endregion
[HttpPost]
[Route("savePrbCalculation")]
public ActionResult savePrbCalculation(List<PRBCalculation> oPrbItems)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
foreach (PRBCalculation oPRBCalculation in oPrbItems)
{
oPRBCalculation.CreatedBy = currentUser.UserID;
}
_prbCalculationService.Save(oPrbItems);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok();
}
[HttpPost]
[Route("savePrbCalculations")]
public ActionResult savePrbCalculations(dynamic data)
{
List<PRBCalculation> oPrbItems = new List<PRBCalculation>();
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
oPrbItems = item["prbCalculation"].ToObject<List<PRBCalculation>>();
DateTime prbYear = (DateTime)item["prbYear"].ToObject<DateTime>();
DateTime prbMonth = (DateTime)item["prbMonth"].ToObject<DateTime>();
try
{
foreach (PRBCalculation oPRBCalculation in oPrbItems)
{
var monthStart = new DateTime(prbYear.Year, prbMonth.Month, 1);
oPRBCalculation.EndDate = monthStart.AddMonths(1).AddDays(-1); // last date of month of selected month and year
oPRBCalculation.Year = new DateTime(prbYear.Year, 12, 31); // last day of month of selected year
oPRBCalculation.CreatedBy = currentUser.UserID;
}
_prbCalculationService.Save(oPrbItems, prbMonth, prbYear, currentUser.UserID);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok();
}
[HttpPost]
[Route("savePrbKpi")]
public ActionResult savePrbKpi(PRBKpi prbkpi)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
try
{
var lastdayofmonth = DateTime.DaysInMonth(DateTime.Now.Year, prbkpi.PRBMonth.Month);
var monthEnd = new DateTime(DateTime.Now.Year, prbkpi.PRBMonth.Month, lastdayofmonth);
prbkpi.PRBMonth = monthEnd;
_prbKpiService.Save(prbkpi);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok();
}
[HttpPost("getPrevPrbByEmployeeIds")]
public ActionResult GetPrevPrbByEmployeeIds(dynamic data)
{
List<PRBCalculation> prbCalcList = new List<PRBCalculation>();
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
int? payrolltypeid = null;
if (currentUser.PayrollTypeID != null)
payrolltypeid = (int)currentUser.PayrollTypeID;
string empIds = (string)item["dataList"].ToObject<string>();
DateTime prbYear = (DateTime)item["prbYear"].ToObject<DateTime>();
DateTime prbMonth = (DateTime)item["prbMonth"].ToObject<DateTime>();
try
{
prbCalcList = _prbCalculationService.GetByEmpIds(empIds, prbYear, prbMonth);
List<Grade> grades = new GradeService().Get(EnumStatus.Regardless, (int)payrolltypeid);
List<Designation> designations =
new DesignationService().Get(EnumStatus.Regardless, (int)payrolltypeid);
List<Department> departments =
new DepartmentService().Get(EnumStatus.Regardless, (int)payrolltypeid);
if (prbCalcList.Count > 0)
{
foreach (var prb in prbCalcList)
{
if (prb.EmployeeID > 0)
{
prb.Employee = new Employee();
prb.Employee = new EmployeeService().Get(prb.EmployeeID);
// prb.BonusAmount = prb.Employee.BasicSalary;
var grd = grades.FirstOrDefault(d => d.ID == prb.Employee.GradeID);
if (grd != null) prb.Employee.GradeName = grd.Name;
var designation = designations.FirstOrDefault(d => d.ID == prb.Employee.DesignationID);
if (designation != null) prb.Employee.DesignationName = designation.Name;
var department = departments.FirstOrDefault(d => d.ID == prb.Employee.DepartmentID);
if (department != null) prb.Employee.DepartmentName = department.Name;
prb.BonusAmountString = string.Format("{0:N2}", prb.BonusAmount);
prb.TotalPRBString = string.Format("{0:N2}", prb.TotalPRB);
prb.TotalAcheiveString = string.Format("{0:N2}", prb.TotalAcheive);
prb.T1AcheiveTemp = prb.TargetT1 * (prb.AcheiveT1 / 100);
prb.T2AcheiveTemp = prb.TargetT2 * (prb.AcheiveT2 / 100);
prb.T3AcheiveTemp = prb.TargetT3 * (prb.AcheiveT3 / 100);
prb.T4AcheiveTemp = prb.TargetT4 * (prb.AcheiveT4 / 100);
prb.T5AcheiveTemp = prb.TargetT5 * (prb.AcheiveT5 / 100);
prb.T6AcheiveTemp = prb.TargetT6 * (prb.AcheiveT6 / 100);
prb.T7AcheiveTemp = prb.TargetT7 * (prb.AcheiveT7 / 100);
prb.T8AcheiveTemp = prb.TargetT8 * (prb.AcheiveT8 / 100);
prb.T9AcheiveTemp = prb.TargetT9 * (prb.AcheiveT9 / 100);
prb.T10AcheiveTemp = prb.TargetT10 * (prb.AcheiveT10 / 100);
}
}
}
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(prbCalcList);
}
[HttpGet("getPrbKpi")]
public ActionResult GetPrbKpi()
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<PRBKpi> prbKpiList = new List<PRBKpi>();
try
{
prbKpiList = _prbKpiService.GetAll();
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(prbKpiList);
}
[HttpGet("getPrbByMonth/{bonusMonth}")]
public ActionResult getPrbByMonth(string bonusMonth)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<PRBKpi> prbKpiList = new List<PRBKpi>();
List<PRBKpi> temoKpiList = new List<PRBKpi>();
DateTime dDate = GlobalFunctions.GetApiDefaultDateData(bonusMonth);
try
{
prbKpiList = _prbKpiService.GetAll();
foreach (var item in prbKpiList)
{
if (item.PRBMonth.Month == dDate.Month)
{
temoKpiList.Add(item);
}
}
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(temoKpiList);
}
[HttpGet("getKpiByPrbMonth/{bonusMonth}")]
public ActionResult getKpiByPrbMonth(string bonusMonth)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<PRBKpi> prbKpiList = new List<PRBKpi>();
DateTime dDate = GlobalFunctions.GetApiDefaultDateData(bonusMonth);
try
{
prbKpiList = _prbKpiService.GetKpiByPrbMonth(dDate);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(prbKpiList);
}
[HttpGet("savePrbKpiFullYear")]
public ActionResult savePrbKpiFullYear()
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<PRBKpi> prbKpiListJan = new List<PRBKpi>();
List<PRBKpi> prbKpiListFullYear = new List<PRBKpi>();
try
{
var firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);
var startDate = new DateTime(DateTime.Now.Year, 2, 1);
var endDate = new DateTime(DateTime.Now.Year, 12, 31);
int monthsApart = 12 * (startDate.Year - endDate.Year) + startDate.Month - endDate.Month;
var monthCount = Math.Abs(monthsApart) + 1;
prbKpiListJan = _prbKpiService.GetKpiByPrbMonth(firstDayOfYear);
bool isDataExistForDec = _prbKpiService.IsKpiByPrbMonth(endDate);
if (isDataExistForDec)
{
throw new Exception("Target already set up to december month");
}
if (prbKpiListJan != null && prbKpiListJan.Count > 0 && isDataExistForDec == false)
{
DateTime? prbMonth = null;
for (int i = 1; i <= monthCount; i++)
{
prbMonth = new DateTime(DateTime.Now.Year, i + 1, 1);
foreach (var item in prbKpiListJan)
{
var prbTarget = new PRBKpi();
prbTarget.Serial = item.Serial;
prbTarget.KpiName = item.KpiName;
prbTarget.PRBMonth = (DateTime)prbMonth;
prbTarget.Description = item.Description;
prbKpiListFullYear.Add(prbTarget);
}
}
}
else
{
throw new Exception("Please set the target of January Month");
}
_prbKpiService.Save(prbKpiListFullYear);
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok();
}
private static DataTable ExtractFromExcel(System.IO.Stream fileStream, string sheetName = "")
{
ImportHelper iHelper = new ImportHelper();
DataSet dDataSet = iHelper.Import(ImportHelper.Formats.Excel, fileStream, true);
try
{
return dDataSet.Tables[0].Copy();
}
catch (Exception)
{
if (string.IsNullOrEmpty(sheetName))
{
throw new Exception("No sheet Found in Excel");
}
else
{
throw new Exception("Could not Find sheet with name:" + sheetName);
}
}
}
[HttpPost]
[Route("uploadPrbCalculation")]
public ActionResult uploadPrbCalculation()
{
_errorOrSuccessList = new List<UploadErrorOrSuccess>();
// List<UploadErrorOrSuccess> errorOrSuccessList = new List<UploadErrorOrSuccess>();
DateTime selectedDate = DateTime.Today;
DateTime selectedYear = DateTime.Today;
int userid = 0;
int payrollTypeid = 0;
try
{
string date = Request.Form["selectedDate"];
string year = Request.Form["selectedYear"];
string userId = Request.Form["userId"];
string payrollTypeId = Request.Form["payrollTypeId"];
if (!string.IsNullOrEmpty(date))
{
selectedDate = DateTime.Parse(date);
}
if (!string.IsNullOrEmpty(year))
{
selectedYear = DateTime.Parse(year);
}
if (!string.IsNullOrEmpty(userId))
{
userid = int.Parse(userId);
}
if (!string.IsNullOrEmpty(payrollTypeId))
{
payrollTypeid = int.Parse(payrollTypeId);
}
var files = Request.Form.Files;
foreach (var formFile in files)
{
_uplodedData = ExtractFromExcel(formFile.OpenReadStream(), "Sheet1");
break;
}
PRBcalculation(selectedDate, selectedYear, userid, payrollTypeid);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(_errorOrSuccessList);
}
private static void fillPrbData(PRBCalculation prbCal, DataRow oDR, int nRow, DateTime prbMonth)
{
List<PRBKpi> kpis = new PRBKpiService().GetAll();
if (prbCal != null)
{
var kpi = kpis.Find(item => item.KpiName.ToLower().Trim() == Convert.ToString(oDR["KPIName"]).ToLower().Trim() && item.PRBMonth.ToString("MMM").ToLower() == prbMonth.ToString("MMM").ToLower());
if (kpi != null)
{
if (kpi.Serial.Trim() == "T1")
{
prbCal.TargetT1 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT1 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT1 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T2")
{
prbCal.TargetT2 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT2 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT2 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T3")
{
prbCal.TargetT3 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT3 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT3 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T4")
{
prbCal.TargetT4 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT4 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT4 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T5")
{
prbCal.TargetT5 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT5 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT5 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T6")
{
prbCal.TargetT6 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT6 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT6 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T7")
{
prbCal.TargetT7 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT7 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT7 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T8")
{
prbCal.TargetT5 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT5 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT8 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T9")
{
prbCal.TargetT9 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT9 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT9 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
if (kpi.Serial.Trim() == "T10")
{
prbCal.TargetT10 = Convert.ToDouble(oDR["Target"]);
prbCal.AcheiveT10 = Convert.ToDouble(oDR["Achieve"]);
double acheiveTemp = Convert.ToDouble(oDR["Target"]) * (Convert.ToDouble(oDR["Achieve"]) / 100);
prbCal.TotalAcheive += acheiveTemp;
prbCal.AmountT10 = (prbCal.BonusAmount * acheiveTemp) / 100;
}
}
else
{
_errorOrSuccessList.Add(UploadErrorOrSuccess.Create("Employee ID", nRow, "Target not found: " + oDR["KPIName"].ToString()));
}
}
}
public void PRBcalculation(DateTime selectedDate, DateTime selectedYear, int userId, int payrollId)
{
try
{
//CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
int nRow = 0;
List<PRBCalculation> oPrbCalculations = new List<PRBCalculation>();
List<Employee> employees = new EmployeeService().GetAllEmps(payrollId); // should be changed
List<Grade> grades = new GradeService().Get(EnumStatus.Active, payrollId);
Employee tempEmployee = null;
try
{
foreach (DataRow oDR in _uplodedData.Rows)
{
nRow = nRow + 1;
tempEmployee = employees.Find(item => item.EmployeeNo.ToLower().Trim() == Convert.ToString(oDR["EmployeeNo"]).ToLower().Trim());
var IsExist = oPrbCalculations.Where(x => x.EmployeeID == tempEmployee.ID).Any();
PRBCalculation prbCal = new PRBCalculation();
if (tempEmployee != null && IsExist == false)
{
prbCal.Employee = new Employee();
prbCal.EmployeeID = tempEmployee.ID;
prbCal.Employee.GradeID = tempEmployee.GradeID;
prbCal.Employee.GradeName = grades?.Where(x => x.ID == tempEmployee.GradeID)?.FirstOrDefault().Code;
//DateTime firstDay = new DateTime(DateTime.Now.Year, 1, 1);
//DateTime lastDay = new DateTime(DateTime.Now.Year, 12, 31);
DateTime firstDay = new DateTime(selectedYear.Year, 1, 1);
DateTime lastDay = new DateTime(selectedYear.Year, 12, 31);
int whole_year_in_days = (lastDay - firstDay).Days + 1; //365 days
//int whole_year_in_days = 365; //365 days
if (firstDay > tempEmployee.JoiningDate)
{
prbCal.Employee.JoiningDate = firstDay;
}
var monthStart = new DateTime(selectedYear.Year, selectedDate.Month, 1);
var monthEnd = monthStart.AddMonths(1).AddDays(-1); // last date of month of selected month and year
prbCal.EndDate = monthEnd;// last date of month of selected month and year
prbCal.Year = lastDay; // last day of Selected Year
int number_of_Days = (prbCal.EndDate - prbCal.Employee.JoiningDate).Days + 1;
var houseRent = tempEmployee.BasicSalary * (60.00 / 100.00);
var conveyance = tempEmployee.BasicSalary * (10.00 / 100.00);
var special = tempEmployee.BasicSalary * (10.00 / 100.00);
var grossSalary = tempEmployee.BasicSalary + houseRent + conveyance + special;
if (number_of_Days >= whole_year_in_days)
{
prbCal.NoOFDays = whole_year_in_days;
}
else
{
prbCal.NoOFDays = number_of_Days;
}
var annualBaseSalary = (grossSalary * 12) + tempEmployee.BasicSalary; // 12 gross + 1 basic
prbCal.AnnualBasicSalary = annualBaseSalary;
var bonusTarget = (annualBaseSalary * 20) / 100; // 20% target in excel
prbCal.ProrataCal = (bonusTarget / whole_year_in_days) * prbCal.NoOFDays;
prbCal.BonusAmount = prbCal.ProrataCal;
fillPrbData(prbCal, oDR, nRow, selectedDate);
//prbCal.TotalPRB = prbCal.BonusAmount * (prbCal.TotalAcheive / 100);
prbCal.TotalPRB = prbCal.AmountT1 + prbCal.AmountT2 + prbCal.AmountT3 + prbCal.AmountT4 + prbCal.AmountT5 + prbCal.AmountT6 + prbCal.AmountT7 + prbCal.AmountT8 + prbCal.AmountT9 + prbCal.AmountT10;
prbCal.CreatedBy = userId;
prbCal.PRBStatus = EnumPRBStatus.Draft;
oPrbCalculations.Add(prbCal);
}
else if (tempEmployee != null && IsExist == true)
{
var existingPrbCal = oPrbCalculations.Find(x => x.EmployeeID == tempEmployee.ID);
prbCal = existingPrbCal;
prbCal.PRBStatus = EnumPRBStatus.Draft;
fillPrbData(prbCal, oDR, nRow, selectedDate);
// prbCal.TotalPRB = prbCal.BonusAmount * (prbCal.TotalAcheive / 100);
prbCal.TotalPRB = prbCal.AmountT1 + prbCal.AmountT2 + prbCal.AmountT3 + prbCal.AmountT4 + prbCal.AmountT5 + prbCal.AmountT6 + prbCal.AmountT7 + prbCal.AmountT8 + prbCal.AmountT9 + prbCal.AmountT10;
}
else
{
_errorOrSuccessList.Add(UploadErrorOrSuccess.Create("Employee ID", nRow, "Employee ID not found: " + oDR["Employee-ID"].ToString()));
}
}
}
catch (Exception ex)
{
throw new ServiceException("Error occured on row:" + nRow + " Reason:" + ex.Message);
}
if (_errorOrSuccessList.Count == 0 && oPrbCalculations.Count > 0)
{
//total acheive count
//foreach (PRBCalculation prbCal in oPrbCalculations)
//{
// double totalAchiveTemp = 0.0;
// if (prbCal.Employee.GradeName != null)
// {
// string grade = prbCal.Employee.GradeName;
// if (grade.Trim().ToLower() == "a" || grade.Trim().ToLower() == "b1" || grade.Trim().ToLower() == "b2" || grade.Trim().ToLower() == "b3"
// || grade.Trim().ToLower() == "n1")
// {
// if (prbCal.TotalAcheive > 100)
// {
// var acheiveCount = (double)(prbCal.TotalAcheive - 100);
// if (acheiveCount > 0)
// {
// double achiveForManager = 100 + (3 * acheiveCount);
// totalAchiveTemp = achiveForManager;
// }
// }
// else if (prbCal.TotalAcheive > 90 && prbCal.TotalAcheive < 100)
// {
// var acheiveCount = (100 - prbCal.TotalAcheive);
// if (acheiveCount > 0)
// {
// var achiveForManager = (double)(100 - (2 * acheiveCount));
// totalAchiveTemp = achiveForManager;
// }
// }
// else if (prbCal.TotalAcheive < 90)
// {
// totalAchiveTemp = 0;
// }
// prbCal.TotalAcheive = totalAchiveTemp;
// prbCal.TotalPRB = prbCal.BonusAmount * (prbCal.TotalAcheive / 100);
// }
// else if (grade.Trim().ToLower() == "c" || grade.Trim().ToLower() == "c1" || grade.Trim().ToLower() == "d" || grade.Trim().ToLower() == "e"
// || grade.Trim().ToLower() == "f1" || grade.Trim().ToLower() == "f2" || grade.Trim().ToLower() == "g1" || grade.Trim().ToLower() == "g2"
// || grade.Trim().ToLower() == "h1" || grade.Trim().ToLower() == "h2" || grade.Trim().ToLower() == "h3"
// || grade.Trim().ToLower() == "i" || grade.Trim().ToLower() == "j")
// { //stuff grade
// if (prbCal.TotalAcheive > 100)
// {
// var acheiveCount = prbCal.TotalAcheive - 100;
// if (acheiveCount > 0)
// {
// var achiveForStaff = (double)(100 + (2 * acheiveCount));
// totalAchiveTemp = achiveForStaff;
// }
// }
// else if (prbCal.TotalAcheive < 100)
// {
// var acheiveCount = (100 - prbCal.TotalAcheive);
// if (acheiveCount > 0)
// {
// var achiveForStaff = 100 - (1 * acheiveCount);
// prbCal.TotalAcheive = achiveForStaff;
// }
// }
// prbCal.TotalAcheive = totalAchiveTemp;
// prbCal.TotalPRB = prbCal.BonusAmount * (prbCal.TotalAcheive / 100);
// }
// }
//}
new PRBCalculationService().Save(oPrbCalculations, selectedDate, selectedYear, userId);
}
else if (_errorOrSuccessList.Count > 0)
{
string message = "";
foreach (var item in _errorOrSuccessList)
{
message += " Error occured on row: " + item.RowNo + " Column Name: " + item.ColumName + " : " + item.Message +"; ";
}
throw new Exception(message);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
[HttpGet("getprbbonusbytranid/{tranid}")]
public ActionResult getPrbBonusbyTranid(int tranid)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
WFMovementTran wfTran = new WFMovementTran();
// PRBCalculation prbCalculation = null;
List<PRBCalculation> prbCalculations = null;
List<PRBCalculationReport> prbcalculationReports = new List<PRBCalculationReport>();
var grades = _gradeService.Get(EnumStatus.Active, (int)currentUser.PayrollTypeID);
try
{
wfTran = _wfMovementTranService.Get(tranid);
if (wfTran != null)
{
var batchId = wfTran.ObjectID;
if (batchId > 0)
{
prbCalculations = new List<PRBCalculation>();
prbCalculations = _prbCalculationService.GetByBatchId(batchId);
foreach(var prbCalculation in prbCalculations)
{
prbCalculation.Employee = _empService.Get(prbCalculation.EmployeeID);
var grade = grades.Find(x => x.ID == prbCalculation.Employee.GradeID).Name;
prbCalculation.Employee.GradeName = grade;
var prbcalculationReport = new PRBCalculationReport();
prbcalculationReport.PrbKpiList = _prbKpiService.GetKpiByPrbMonth(prbCalculation.EndDate);
prbcalculationReport.ID = prbCalculation.ID;
prbcalculationReport.Employee = prbCalculation.Employee;
prbcalculationReport.BonusAmount = string.Format("{0:N2}", prbCalculation.BonusAmount);
prbcalculationReport.TargetT1 = (double)prbCalculation.TargetT1;
prbcalculationReport.TargetT2 = (double)prbCalculation.TargetT2;
prbcalculationReport.TargetT3 = (double)prbCalculation.TargetT3;
prbcalculationReport.TargetT4 = (double)prbCalculation.TargetT4;
prbcalculationReport.TargetT5 = (double)prbCalculation.TargetT5;
prbcalculationReport.TargetT6 = (double)prbCalculation.TargetT6;
prbcalculationReport.TargetT7 = (double)prbCalculation.TargetT7;
prbcalculationReport.TargetT8 = (double)prbCalculation.TargetT8;
prbcalculationReport.TargetT9 = (double)prbCalculation.TargetT9;
prbcalculationReport.TargetT10 = (double)prbCalculation.TargetT10;
prbcalculationReport.AcheiveT1 = (double)prbCalculation.AcheiveT1;
prbcalculationReport.AcheiveT2 = (double)prbCalculation.AcheiveT2;
prbcalculationReport.AcheiveT3 = (double)prbCalculation.AcheiveT3;
prbcalculationReport.AcheiveT4 = (double)prbCalculation.AcheiveT4;
prbcalculationReport.AcheiveT5 = (double)prbCalculation.AcheiveT5;
prbcalculationReport.AcheiveT6 = (double)prbCalculation.AcheiveT6;
prbcalculationReport.AcheiveT7 = (double)prbCalculation.AcheiveT7;
prbcalculationReport.AcheiveT8 = (double)prbCalculation.AcheiveT8;
prbcalculationReport.AcheiveT9 = (double)prbCalculation.AcheiveT9;
prbcalculationReport.AcheiveT10 = (double)prbCalculation.AcheiveT10;
prbcalculationReport.AmountT1 = string.Format("{0:N2}", prbCalculation.AmountT1);
prbcalculationReport.AmountT2 = string.Format("{0:N2}", prbCalculation.AmountT2);
prbcalculationReport.AmountT3 = string.Format("{0:N2}", prbCalculation.AmountT3);
prbcalculationReport.AmountT4 = string.Format("{0:N2}", prbCalculation.AmountT4);
prbcalculationReport.AmountT5 = string.Format("{0:N2}", prbCalculation.AmountT5);
prbcalculationReport.AmountT6 = string.Format("{0:N2}", prbCalculation.AmountT6);
prbcalculationReport.AmountT7 = string.Format("{0:N2}", prbCalculation.AmountT7);
prbcalculationReport.AmountT8 = string.Format("{0:N2}", prbCalculation.AmountT8);
prbcalculationReport.AmountT9 = string.Format("{0:N2}", prbCalculation.AmountT9);
prbcalculationReport.AmountT10 = string.Format("{0:N2}", prbCalculation.AmountT10);
prbcalculationReport.TotalAcheive = string.Format("{0:N2}", prbCalculation.TotalAcheive);
prbcalculationReport.TotalPRBString = string.Format("{0:N2}", prbCalculation.TotalPRB);
prbcalculationReport.AnnualBasicSalary = string.Format("{0:N2}", prbCalculation.AnnualBasicSalary);
prbcalculationReport.NoOFDays = prbCalculation.NoOFDays;
prbcalculationReport.JoiningDate = prbCalculation.Employee.JoiningDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
prbcalculationReport.EndDate = prbCalculation.EndDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
prbcalculationReports.Add(prbcalculationReport);
}
}
}
}
catch (Exception e)
{
return StatusCode(StatusCodes.Status500InternalServerError, e.Message);
}
return Ok(prbcalculationReports);
}
[HttpPost]
[Route("ApprovePRB")]
public ActionResult ApprovePRB(WFMovementTran _wftran)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
WFMovementTran wfTran = new WFMovementTran();
// wfTran.FromEmployeeID = (int)currentUser.EmployeeID;
var remarks = _wftran.Remarks;
try
{
wfTran = _wfMovementTranService.Get(_wftran.ID);
wfTran.Remarks = remarks;
wfTran.UserID = currentUser.UserID;
wfTran.FromEmployeeID = (int)currentUser.EmployeeID;
_prbCalculationService.ApprovePRBBonus(wfTran);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(true);
}
[HttpPost]
[Route("RejectPRB")]
public ActionResult RejectPRB(WFMovementTran _wftran)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
WFMovementTran wfTran = new WFMovementTran();
var remarks = _wftran.Remarks;
try
{
wfTran = _wfMovementTranService.Get(_wftran.ID);
wfTran.Remarks = remarks;
wfTran.UserID = currentUser.UserID;
wfTran.FromEmployeeID = (int)currentUser.EmployeeID;
_prbCalculationService.RejectPRBBonus(wfTran);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(true);
}
[HttpPost("submitForPrbApproval")]
public ActionResult submitForPrbApproval(dynamic data)
{
List<PRBCalculation> prbCalcList = new List<PRBCalculation>();
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
DateTime prbYear = (DateTime)item["prbYear"].ToObject<DateTime>();
DateTime prbMonth = (DateTime)item["prbMonth"].ToObject<DateTime>();
int getYear = (prbYear.Year) % 100; //last two digit
int getMonth = prbMonth.Month;
var builder = new StringBuilder();
int batchId = Convert.ToInt32(builder.Append(getMonth).Append(getYear).ToString());
try
{
prbCalcList = _prbCalculationService.GetByBatchId(batchId);
List<Employee> employees = _empService.GetAllLive(); // all live employee
if (prbCalcList.Count == employees.Count)
{
_prbCalculationService.InitiatePRBCalculationWorkFlow(batchId, currentUser.UserID, prbCalcList[0].EmployeeID); //employeID should be changed
}
else
{
throw new Exception("Pleaase calculate for all employee");
}
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(prbCalcList);
}
[HttpPost]
[Route("getPrbAmountOfCurrentMonth")]
public ActionResult GetPrbAmountOfCurrentMonth(WFMovementTran _wftran)
{
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
WFMovementTran wfTran = new WFMovementTran();
DataTable olist = null;
try
{
wfTran = _wfMovementTranService.Get(_wftran.ID);
olist = _prbCalculationService.GetPrbAmountOfCurrentMonth(wfTran.ObjectID);
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(olist);
}
[HttpPost("checkStatus")]
public ActionResult checkStatus(dynamic data)
{
List<PRBCalculation> prbCalcList = new List<PRBCalculation>();
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
DateTime prbYear = (DateTime)item["prbYear"].ToObject<DateTime>();
DateTime prbMonth = (DateTime)item["prbMonth"].ToObject<DateTime>();
int getYear = (prbYear.Year) % 100; //last two digit
int getMonth = prbMonth.Month;
var builder = new StringBuilder();
int batchId = Convert.ToInt32(builder.Append(getMonth).Append(getYear).ToString());
bool isSubmitForApproval = false;
try
{
List<Employee> employees = _empService.GetAllLive();
prbCalcList = _prbCalculationService.GetByBatchId(batchId);
if(prbCalcList.Count > 0 && prbCalcList.Count == employees.Count)
{
var isExit= prbCalcList.Where(y => y.PRBStatus == EnumPRBStatus.Draft || y.PRBStatus == EnumPRBStatus.None).Any();
if(!isExit)
{
isSubmitForApproval = true;
}
}
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(isSubmitForApproval);
}
[HttpPost("getReportbyBatchId")]
public ActionResult GetReportbyBatchId(dynamic data)
{
List<PRBCalculation> prbCalcList = new List<PRBCalculation>();
var item = Newtonsoft.Json.JsonConvert.DeserializeObject(Convert.ToString(data));
DateTime prbYear = (DateTime)item["prbYear"].ToObject<DateTime>();
DateTime prbMonth = (DateTime)item["prbMonth"].ToObject<DateTime>();
int getYear = (prbYear.Year) % 100; //last two digit
int getMonth = prbMonth.Month;
var builder = new StringBuilder();
int batchId = Convert.ToInt32(builder.Append(getMonth).Append(getYear).ToString());
CurrentUser currentUser = CurrentUser.GetCurrentUser(HttpContext.User);
List<PRBCalculationReport> prbcalculationReports = new List<PRBCalculationReport>();
try
{
var grades = _gradeService.Get(EnumStatus.Active, (int)currentUser.PayrollTypeID);
prbCalcList = _prbCalculationService.GetByBatchId(batchId);
if(prbCalcList != null && prbCalcList.Count > 0)
{
foreach (var prbCalculation in prbCalcList)
{
prbCalculation.Employee = _empService.Get(prbCalculation.EmployeeID);
var grade = grades.Find(x => x.ID == prbCalculation.Employee.GradeID).Name;
prbCalculation.Employee.GradeName = grade;
var prbcalculationReport = new PRBCalculationReport();
prbcalculationReport.PrbKpiList = _prbKpiService.GetKpiByPrbMonth(prbCalculation.EndDate);
prbcalculationReport.ID = prbCalculation.ID;
prbcalculationReport.Employee = prbCalculation.Employee;
prbcalculationReport.BonusAmount = string.Format("{0:N2}", prbCalculation.BonusAmount);
prbcalculationReport.TargetT1 = (double)prbCalculation.TargetT1;
prbcalculationReport.TargetT2 = (double)prbCalculation.TargetT2;
prbcalculationReport.TargetT3 = (double)prbCalculation.TargetT3;
prbcalculationReport.TargetT4 = (double)prbCalculation.TargetT4;
prbcalculationReport.TargetT5 = (double)prbCalculation.TargetT5;
prbcalculationReport.TargetT6 = (double)prbCalculation.TargetT6;
prbcalculationReport.TargetT7 = (double)prbCalculation.TargetT7;
prbcalculationReport.TargetT8 = (double)prbCalculation.TargetT8;
prbcalculationReport.TargetT9 = (double)prbCalculation.TargetT9;
prbcalculationReport.TargetT10 = (double)prbCalculation.TargetT10;
prbcalculationReport.AcheiveT1 = (double)prbCalculation.AcheiveT1;
prbcalculationReport.AcheiveT2 = (double)prbCalculation.AcheiveT2;
prbcalculationReport.AcheiveT3 = (double)prbCalculation.AcheiveT3;
prbcalculationReport.AcheiveT4 = (double)prbCalculation.AcheiveT4;
prbcalculationReport.AcheiveT5 = (double)prbCalculation.AcheiveT5;
prbcalculationReport.AcheiveT6 = (double)prbCalculation.AcheiveT6;
prbcalculationReport.AcheiveT7 = (double)prbCalculation.AcheiveT7;
prbcalculationReport.AcheiveT8 = (double)prbCalculation.AcheiveT8;
prbcalculationReport.AcheiveT9 = (double)prbCalculation.AcheiveT9;
prbcalculationReport.AcheiveT10 = (double)prbCalculation.AcheiveT10;
prbcalculationReport.AmountT1 = string.Format("{0:N2}", prbCalculation.AmountT1);
prbcalculationReport.AmountT2 = string.Format("{0:N2}", prbCalculation.AmountT2);
prbcalculationReport.AmountT3 = string.Format("{0:N2}", prbCalculation.AmountT3);
prbcalculationReport.AmountT4 = string.Format("{0:N2}", prbCalculation.AmountT4);
prbcalculationReport.AmountT5 = string.Format("{0:N2}", prbCalculation.AmountT5);
prbcalculationReport.AmountT6 = string.Format("{0:N2}", prbCalculation.AmountT6);
prbcalculationReport.AmountT7 = string.Format("{0:N2}", prbCalculation.AmountT7);
prbcalculationReport.AmountT8 = string.Format("{0:N2}", prbCalculation.AmountT8);
prbcalculationReport.AmountT9 = string.Format("{0:N2}", prbCalculation.AmountT9);
prbcalculationReport.AmountT10 = string.Format("{0:N2}", prbCalculation.AmountT10);
prbcalculationReport.TotalAcheive = string.Format("{0:N2}", prbCalculation.TotalAcheive);
prbcalculationReport.TotalPRBString = string.Format("{0:N2}", prbCalculation.TotalPRB);
prbcalculationReport.AnnualBasicSalary = string.Format("{0:N2}", prbCalculation.AnnualBasicSalary);
prbcalculationReport.NoOFDays = prbCalculation.NoOFDays;
prbcalculationReport.JoiningDate = prbCalculation.Employee.JoiningDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
prbcalculationReport.EndDate = prbCalculation.EndDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
prbcalculationReports.Add(prbcalculationReport);
}
}
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
return Ok(prbcalculationReports);
}
}
}