CEL_Payroll/Payroll.BO/JV/JVSetup.cs

739 lines
26 KiB
C#
Raw Permalink Normal View History

2024-09-17 14:30:13 +06:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ease.CoreV35;
using Ease.CoreV35.Model;
using Ease.CoreV35.Caching;
using System.Data.Linq.Mapping;
namespace Payroll.BO
{
#region JVSetup
[Serializable]
public class JVSetup : BasicBaseObject
{
public delegate void ItemChanged();
#region Cache Store
private static Cache _cache = new Cache(typeof(JVSetup));
#endregion
#region Constructor
public JVSetup()
{
_description = string.Empty;
_gLCode = string.Empty;
_isConfirmed = false;
_isEmployeeDetail = false;
_jvTypeID = null;
_monthDate = DateTime.MinValue;
_sequenceNo = 0;
_showCC = false;
_bookToCC = false;
_bookToPC = false;
_side = (int)EnumSide.Add;
_sideCode = string.Empty;
_jvSetupDetails = null;
_EmpType = EnumJVEmpType.RegardLess;
}
#endregion
#region Properties
#region Description
private string _description;
public string Description
{
get
{
return _description;
}
set
{
base.OnPropertyChange<string>("description", _description, value);
_description = value;
}
}
#endregion
#region GLCode
private string _gLCode;
public string GLCode
{
get
{
return _gLCode;
}
set
{
base.OnPropertyChange<string>("glCode", _gLCode, value);
_gLCode = value;
}
}
#endregion
#region IsConfirmed
private bool _isConfirmed;
public bool IsConfirmed
{
get
{
return _isConfirmed;
}
set
{
base.OnPropertyChange<bool>("isConfirmed", _isConfirmed, value);
_isConfirmed = value;
}
}
#endregion
#region IsEmployeeDetail
private bool _isEmployeeDetail;
public bool IsEmployeeDetail
{
get
{
return _isEmployeeDetail;
}
set
{
base.OnPropertyChange<bool>("isEmployeeDetail", _isEmployeeDetail, value);
_isEmployeeDetail = value;
}
}
#endregion
#region JVTypeID
private ID _jvTypeID;
public ID JVTypeID
{
get
{
return _jvTypeID;
}
set
{
base.OnPropertyChange<ID>("jvTypeID", _jvTypeID, value);
_jvTypeID = value;
}
}
#endregion
#region EmployeeID
private ID _EmployeeID;
public ID EmployeeID
{
get
{
return _EmployeeID;
}
set
{
base.OnPropertyChange<ID>("EmployeeID", _EmployeeID, value);
_EmployeeID = value;
}
}
#endregion
#region jvType : JVType
private JVType _jvType;
public JVType JVType
{
get
{
if (JVTypeID.Integer > 0)
{
_jvType = new JVType();
_jvType = JVType.Get(JVTypeID);
}
return _jvType;
}
set
{
_jvType = value;
}
}
#endregion
#region MonthDate
private DateTime _monthDate;
public DateTime MonthDate
{
get
{
return _monthDate;
}
set
{
base.OnPropertyChange<DateTime>("monthDate", _monthDate, value);
_monthDate = value;
}
}
#endregion
#region SequenceNo
private int _sequenceNo;
public int SequenceNo
{
get
{
return _sequenceNo;
}
set
{
base.OnPropertyChange<int>("sequenceNo", _sequenceNo, value);
_sequenceNo = value;
}
}
#endregion
#region ShowCC
private bool _showCC;
public bool ShowCC
{
get
{
return _showCC;
}
set
{
base.OnPropertyChange<bool>("showCC", _showCC, value);
_showCC = value;
}
}
#endregion
#region BookToCC
private bool _bookToCC;
public bool BookToCC
{
get
{
return _bookToCC;
}
set
{
base.OnPropertyChange<bool>("BookToCC", _bookToCC, value);
_bookToCC = value;
}
}
#endregion
#region BookToPC
private bool _bookToPC;
public bool BookToPC
{
get
{
return _bookToPC;
}
set
{
base.OnPropertyChange<bool>("BookToPC", _bookToPC, value);
_bookToPC = value;
}
}
#endregion
#region Side
private int _side;
public int Side
{
get
{
return _side;
}
set
{
base.OnPropertyChange<int>("side", _side, value);
_side = value;
}
}
#endregion
#region SideCode
private string _sideCode;
public string SideCode
{
get
{
return _sideCode;
}
set
{
base.OnPropertyChange<string>("sideCode", _sideCode, value);
_sideCode = value;
}
}
#endregion
#region GroupCode
private string _GroupCode="";
public string GroupCode
{
get
{
return _GroupCode;
}
set
{
base.OnPropertyChange<string>("GroupCode", _GroupCode, value);
_GroupCode = value;
}
}
#endregion
#region payrollTypeID : ID
private ID _payrollTypeID;
public ID PayrollTypeID
{
get { return _payrollTypeID; }
set
{
base.OnPropertyChange<ID>("payrollTypeID", _payrollTypeID, value);
_payrollTypeID = value;
}
}
#endregion
#region EMPLOYEETYPE : EnumJVEmpType
private EnumJVEmpType _EmpType;
public EnumJVEmpType EMPLOYEETYPE
{
get { return _EmpType; }
set
{
_EmpType = value;
}
}
#endregion
#region Property JVSetupDetails : ObjectsTemplate<JVSetupDetail>
private ObjectsTemplate<JVSetupDetail> _jvSetupDetails;
public ObjectsTemplate<JVSetupDetail> JVSetupDetails
{
get
{
if (_jvSetupDetails == null && !this.ID.IsUnassigned && this.ID.Integer > 0)
{
_jvSetupDetails = JVSetupDetail.GetByJVSetup(this.ID);
}
if (_jvSetupDetails == null)
{
_jvSetupDetails = new ObjectsTemplate<JVSetupDetail>();
}
return _jvSetupDetails;
}
set
{
_jvSetupDetails = value;
}
}
#endregion Property JVSetupDetails : ObjectsTemplate<JVSetupDetail>
#region JVSetupCC : ObjectsTemplate<JVSetupCC>
private ObjectsTemplate<JVSetupCC> _jvSetupCCs;
public ObjectsTemplate<JVSetupCC> JVSetupCC
{
get
{
if (_jvSetupCCs == null && !this.ID.IsUnassigned && this.ID.Integer > 0)
{
_jvSetupCCs = Payroll.BO.JVSetupCC.GetByJVSetup(this.ID);
}
//if (_jvSetupDetails == null)
//{
// _jvSetupCCs = new ObjectsTemplate<JVSetupCC>();
//}
return _jvSetupCCs;
}
set
{
_jvSetupCCs = value;
}
}
#endregion
#endregion
#region Functions
public double GetAmount(SalaryMonthly salary, ObjectsTemplate<JVSetupDetail> jvsetupdetails)
{
double nAmount = 0;
foreach (JVSetupDetail oItem in jvsetupdetails)
{
switch (oItem.JVItemType)
{
case enumPayrollComponentType.Ordinary_Hour:
nAmount = nAmount + salary.GetGrossAmount(EnumSalaryItemCode.Basic_Salary, (int)EnumSalaryItemCode.Basic_Salary);
break;
case enumPayrollComponentType.Allowance:
nAmount = nAmount + salary.GetGrossAmount(EnumSalaryItemCode.Allowance, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Deduction:
nAmount = nAmount + salary.GetDeductAmount(EnumSalaryItemCode.Deduction, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Over_Time:
nAmount = nAmount + salary.GetGrossAmount(EnumSalaryItemCode.Over_Time_Amount, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Bonus:
nAmount = nAmount + salary.GetGrossAmount(EnumSalaryItemCode.Bonus, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Loan:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Installment, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.LoanInterest:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Interest, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.PF:
nAmount = nAmount + salary.GetDeductAmount(EnumSalaryItemCode.PF_Contribution, (int)EnumSalaryItemCode.PF_Contribution);
break;
case enumPayrollComponentType.CPF:
nAmount = nAmount + salary.GetDeductAmount(EnumSalaryItemCode.PF_Contribution, (int)EnumSalaryItemCode.PF_Contribution) * 2;
break;
case enumPayrollComponentType.Gratuity:
//nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.OPI, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.IncomeTax:
bool isOtherItem = ConfigurationManager.GetBoolValue("incometax", "taxissalaryotheritem", EnumConfigurationType.Logic);
if (isOtherItem == false)
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Inc_Tax_Deduction, (int)EnumSalaryItemCode.Inc_Tax_Deduction);
else
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.Inc_Tax_Deduction, (int)EnumSalaryItemCode.Inc_Tax_Deduction);
break;
case enumPayrollComponentType.Net_pay:
if (salary.BranchID != null && oItem.ItemID == salary.BranchID)
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.Net_Payable, (int)EnumSalaryItemCode.Net_Payable);
break;
//case enumPayrollComponentType.OPI:
// nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.OPI, oItem.ItemID.Integer);
// break;
case enumPayrollComponentType.Final_settlement:
break;
default:
break;
}
}
return nAmount;
}
public double GetAmount(FSTran ofsTran, ObjectsTemplate<JVSetupDetail> jvsetupdetails)
{
double nAmount = 0;
foreach (JVSetupDetail oItem in jvsetupdetails)
{
switch (oItem.JVItemType)
{
case enumPayrollComponentType.Ordinary_Hour:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.FractionateSalary, (int)EnumSalaryItemCode.Basic_Salary);
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Gross, (int)EnumSalaryItemCode.Basic_Salary);
break;
case enumPayrollComponentType.Allowance:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.FractionateSalary, oItem.ItemID.Integer);
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Gross, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Deduction:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.FractionateSalary, oItem.ItemID.Integer);
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Gross, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Over_Time:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.OT, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Bonus:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Bonus, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Loan:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Loan, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.PF:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.PF, (int)EnumFSItemCode.PF);
break;
case enumPayrollComponentType.CPF:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.CPF, (int)EnumFSItemCode.CPF);
break;
case enumPayrollComponentType.Gratuity:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Gratuity, (int)EnumFSItemCode.Gratuity);
break;
case enumPayrollComponentType.IncomeTax:
nAmount = nAmount + ofsTran.TaxAmount;
break;
//case enumPayrollComponentType.Net_pay:
// if (salary.BranchID != null && oItem.ItemID == salary.BranchID)
// nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.Net_Payable, (int)EnumSalaryItemCode.Net_Payable);
// break;
case enumPayrollComponentType.Final_settlement:
case enumPayrollComponentType.OPI:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Other, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Earn_Leave:
nAmount = nAmount + ofsTran.GetAmount(EnumFSItemCode.Leave, (int)EnumFSItemCode.Leave);
break;
//case enumPayrollComponentType.Final_settlement:
// break;
default:
break;
}
}
return nAmount;
}
public double GetAmount(SalaryMonthly salary)
{
double nAmount = 0;
foreach (JVSetupDetail oItem in this.JVSetupDetails)
{
switch (oItem.JVItemType)
{
case enumPayrollComponentType.Ordinary_Hour:
nAmount = nAmount + salary.GetGrossAmount(EnumSalaryItemCode.Basic_Salary, (int)EnumSalaryItemCode.Basic_Salary);
break;
case enumPayrollComponentType.Allowance:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Gross,EnumSalaryItemCode.Allowance,oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Deduction:
nAmount = nAmount + salary.GetDeductAmount(EnumSalaryItemCode.Deduction, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Over_Time:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Gross,EnumSalaryItemCode.Over_Time_Amount, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Bonus:
nAmount = nAmount + salary.GetGrossAmount(EnumSalaryItemCode.Bonus, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Loan:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Installment, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.LoanInterest:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Loan_Monthly_Interest, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.PF:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.PF_Contribution, (int)EnumSalaryItemCode.PF_Contribution);
break;
case enumPayrollComponentType.Gratuity:
//nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode., oItem.ItemID.Integer);
break;
case enumPayrollComponentType.IncomeTax:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.Deductions, EnumSalaryItemCode.Inc_Tax_Deduction, (int)EnumSalaryItemCode.Inc_Tax_Deduction);
break;
case enumPayrollComponentType.Net_pay:
if (salary.BranchID !=null && oItem.ItemID == salary.BranchID)
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.Net_Payable, (int) EnumSalaryItemCode.Net_Payable);
break;
case enumPayrollComponentType.Net_pay_Cash:
if (salary.AccountNo=="")
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.Net_Payable, (int)EnumSalaryItemCode.Net_Payable);
break;
case enumPayrollComponentType.OPI:
nAmount = nAmount + salary.GetAmount(EnumSalaryGroup.OtherItem, EnumSalaryItemCode.OPI, oItem.ItemID.Integer);
break;
case enumPayrollComponentType.Final_settlement:
break;
default:
break;
}
}
return nAmount;
}
public JVSetup Get(ID nJVSetupID)
{
JVSetup oJVSetup = null;
#region Cache Header
oJVSetup = (JVSetup)_cache["Get", nJVSetupID];
if (oJVSetup != null)
return oJVSetup;
#endregion
oJVSetup = JVSetup.Service.Get(nJVSetupID);
#region Cache Footer
_cache.Add(oJVSetup, "Get", nJVSetupID);
#endregion
return oJVSetup;
}
public static ObjectsTemplate<JVSetup> Get()
{
#region Cache Header
ObjectsTemplate<JVSetup> jvsetups = _cache["Get"] as ObjectsTemplate<JVSetup>;
if (jvsetups != null)
return jvsetups;
#endregion
try
{
jvsetups = Service.Get();
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(jvsetups, "Get");
#endregion
return jvsetups;
}
public static ObjectsTemplate<JVSetup> GetByJVType(ID jvSetupID)
{
#region Cache Header
ObjectsTemplate<JVSetup> jvsetups = _cache["GetByJVType", jvSetupID] as ObjectsTemplate<JVSetup>;
if (jvsetups != null)
return jvsetups;
#endregion
try
{
jvsetups = Service.GetByJVType(jvSetupID);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(jvsetups, "GetByJVType", jvSetupID);
#endregion
return jvsetups;
}
public static ObjectsTemplate<JVSetup> GetByJVTypeAndEffectDate(ID jvSetupID, DateTime dEffectDate)
{
#region Cache Header
ObjectsTemplate<JVSetup> jvsetups = _cache["GetByJVTypeAndEffectDate", jvSetupID, dEffectDate] as ObjectsTemplate<JVSetup>;
if (jvsetups != null)
return jvsetups;
#endregion
try
{
jvsetups = Service.GetByJVTypeAndEffectDate(jvSetupID, dEffectDate);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(jvsetups, "GetByJVTypeAndEffectDate", jvSetupID, dEffectDate);
#endregion
return jvsetups;
}
public static ObjectsTemplate<JVSetup> GetByMonthDate(DateTime dtMonthDate)
{
#region Cache Header
ObjectsTemplate<JVSetup> jvsetups = _cache["GetByMonthDate", dtMonthDate] as ObjectsTemplate<JVSetup>;
if (jvsetups != null)
return jvsetups;
#endregion
try
{
jvsetups = Service.GetByMonthDate(dtMonthDate);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(jvsetups, "GetByMonthDate", dtMonthDate);
#endregion
return jvsetups;
}
public static ObjectsTemplate<JVSetupDetail> GetChildByParentID(ID JVSetupID)
{
#region Cache Header
ObjectsTemplate<JVSetupDetail> jvsetupdetails = _cache["GetChildByParentID", JVSetupID] as ObjectsTemplate<JVSetupDetail>;
if (jvsetupdetails != null)
return jvsetupdetails;
#endregion
try
{
jvsetupdetails = Service.GetChildByParentID(JVSetupID);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(jvsetupdetails, "GetChildByParentID", JVSetupID);
#endregion
return jvsetupdetails;
}
public static ObjectsTemplate<JVSetup> GetByJVTypeAndMonth(ID jvTypeID, DateTime dDate)
{
#region Cache Header
ObjectsTemplate<JVSetup> jvsetups = _cache["GetByJVTypeAndMonth", jvTypeID, dDate] as ObjectsTemplate<JVSetup>;
if (jvsetups != null)
return jvsetups;
#endregion
try
{
jvsetups = Service.GetByJVTypeAndMonth(jvTypeID, dDate);
}
catch (ServiceException e)
{
throw new Exception(e.Message, e);
}
#region Cache Footer
_cache.Add(jvsetups, "GetByJVTypeAndMonth", jvTypeID, dDate);
#endregion
return jvsetups;
}
public int GetSequenceNo()
{
int nSeq = 0;
nSeq = JVSetup.Service.GetSequenceNo();
return nSeq;
}
public DateTime GetMaxDate(DateTime dGivenDate)
{
DateTime dMaxDate = DateTime.Now;
dMaxDate = JVSetup.Service.GetMaxDate(dGivenDate);
return dMaxDate;
}
public ID Save()
{
this.SetAuditTrailProperties();
return JVSetup.Service.Save(this);
}
public void UpdateSequence(ObjectsTemplate<JVSetup> jvSetups)
{
JVSetup.Service.UpdateSequence(jvSetups);
}
public void Delete()
{
JVSetup.Service.Delete(this.ID);
}
#endregion
#region Service Factory
internal static IJVSetupService Service
{
get
{
return Services.Factory.CreateService<IJVSetupService>(typeof(IJVSetupService));
}
}
#endregion
}
#endregion
#region IJVSetup Service
public interface IJVSetupService
{
JVSetup Get(ID id);
ObjectsTemplate<JVSetup> Get();
ObjectsTemplate<JVSetup> GetByJVType(ID jvSetupID);
ObjectsTemplate<JVSetup> GetByJVTypeAndEffectDate(ID jvSetupID, DateTime dEffectDate);
int GetSequenceNo();
DateTime GetMaxDate(DateTime dGivenDate);
ObjectsTemplate<JVSetup> GetByMonthDate(DateTime dtMonthDate);
ObjectsTemplate<JVSetupDetail> GetChildByParentID(ID JVSetupID);
ObjectsTemplate<JVSetup> GetByJVTypeAndMonth(ID jvTypeID, DateTime lastDate);
ID Save(JVSetup oJVSetup);
void UpdateSequence(ObjectsTemplate<JVSetup> oJVSetups);
void Delete(ID id);
}
#endregion
}