CEL_Payroll/Payroll.BO/Budget/BudgetProcess.cs
2024-09-17 14:30:13 +06:00

726 lines
35 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ease.CoreV35.Model;
using Ease.CoreV35;
using Ease.CoreV35.DataAccess;
using System.Windows.Forms;
namespace Payroll.BO
{
[Serializable]
public class BudgetProcess
{
private BudgetMaster _bugetMaster=new BudgetMaster();
private ObjectsTemplate<Employee> _employees;
private ObjectsTemplate<BudgetProcessMonthly> _processMonthly;
private ObjectsTemplate<EmployeeCostCenter> _empCostCenters=null;
ObjectsTemplate<IncomeTax> _incomeTaxes = null;
public BudgetProcess()
{
}
public BudgetProcessMonthly createPRocessMonthly(Employee emp, DateTime processMonth)
{
BudgetProcessMonthly item = new BudgetProcessMonthly();
item.DepartmentID = emp.DepartmentID;
item.GradeID = emp.GradeID;
item.LocationID = emp.LocationID;
item.IsConfirm =emp.IsConfirmed==true?1:0;
item.Month = processMonth;
item.NewJoinerName = emp.Name;
if (emp.ID.IsUnassigned)
{
item.NewJoinerID = ID.FromInteger(Convert.ToInt32(emp.Name));
//item.EmployeeID = item.NewJoinerID;
}
else
item.EmployeeID = emp.ID;
return item;
}
public BudgetProcessMonthlyDetail CreateDetail(Employee emp, BudgetComponent component, DateTime processMonth,ID newJoinerID)
{
BudgetProcessMonthlyDetail item = new BudgetProcessMonthlyDetail();
if (emp.ID.IsUnassigned)
item.EmployeeID = newJoinerID;
else
item.EmployeeID = emp.ID;
item.Month = processMonth;
item.BudgetComponentID = component.ID;
item.Name = component.Name;
//item.Side = EnumSide.Add;
item.Calculatedamount = component.CalculateExceptionAmount(emp,processMonth);
item.Changedamount = item.Calculatedamount;
item.BugetComponent = component;
if (component.OriginID != null)
item.OriginID = component.OriginID;
if (component.ComponentType == EnumBudgetComponent.Allowance)
{
item.BudgetGroup = EnumBudgetGroup.Gross;
item.BudgetCode = EnumBudgetCode.Allowance;
}
else if (component.ComponentType == EnumBudgetComponent.Bonus)
{
item.BudgetGroup = EnumBudgetGroup.Gross;
item.BudgetCode = EnumBudgetCode.Bonus;
}
else if (component.ComponentType == EnumBudgetComponent.OPI)
{
item.BudgetGroup = EnumBudgetGroup.Gross;
item.BudgetCode = EnumBudgetCode.OPI;
}
else if (component.ComponentType == EnumBudgetComponent.Deduction)
{
item.BudgetGroup = EnumBudgetGroup.Deduction;
item.BudgetCode = EnumBudgetCode.Deduction;
}
return item;
}
public BudgetMonthlyCC CreateMonthlyCC(Employee emp, BudgetCostCenter bcc, DateTime processMonth, ID newJoinerID)
{
BudgetMonthlyCC item = new BudgetMonthlyCC();
if (emp.ID.IsUnassigned)
item.EmployeeID = newJoinerID;
else
item.EmployeeID = emp.ID;
item.Month = processMonth;
item.Percentage = bcc.Percentage;
//ObjectsTemplate<EmployeeCostCenter> empCCs = new ObjectsTemplate<EmployeeCostCenter>();
//if (!emp.ID.IsUnassigned)
//{
// empCCs = EmployeeCostCenter.GetByEmpID(emp.ID);
// if (empCCs.Count > 0)
// item.CCID = empCCs[0].CostCenterID;
//}
//else
item.CCID = bcc.CostCenterID;
return item;
}
public ObjectsTemplate<Employee> GetNewJoinerEmployee(DateTime startdate)
{
ObjectsTemplate<Employee> oEmployees = new ObjectsTemplate<Employee>();
//int nCount = 0;
int nCount = 0;
List<BudgetNewJoiner> newJoiners = _bugetMaster.GetNewJoiner(startdate);
foreach (BudgetNewJoiner newjo in newJoiners)
{
for (int i = 1; i <= newjo.NoofEmployee; i++)
{
nCount = nCount + 1;
string sID = DateTime.Today.ToString("yy") + DateTime.Today.Month + DateTime.Today.Day;
Employee emp = newjo.CreateEmployee(Convert.ToInt32(sID) + nCount);
oEmployees.Add(emp);
}
}
return oEmployees;
}
public void DoProcess(BudgetMaster _oItem, ProgressBar pgbar)
{
_empCostCenters = EmployeeCostCenter.Get();
string sDeptIDs = "";
_bugetMaster = _oItem;
foreach (BudgetDepartment dept in _oItem.BudgetDepartments)
{
sDeptIDs = sDeptIDs + dept.DepartmentID.ToString() + ", ";
}
if (sDeptIDs != "")
sDeptIDs = sDeptIDs.Substring(0, sDeptIDs.Length - 2);
if (sDeptIDs == "")
_employees = Employee.Get();
else
_employees = Employee.GetByDeptIDs(sDeptIDs);
DateTime startDate = _bugetMaster.FromDate;
DateTime endDate = _bugetMaster.ToDate;
_processMonthly = new ObjectsTemplate<BudgetProcessMonthly>();
pgbar.Value = 0;
TimeSpan ts = endDate - startDate;
pgbar.Maximum = (ts.Days / 30) + 1 + _employees.Count+50;
bool nSts;
#region Create Budget Process Monthly Object
while (startDate <= endDate)
{
ObjectsTemplate<Employee> oNewJoiners = GetNewJoinerEmployee(startDate);
foreach (Employee oemp in _employees)
{
nSts = false;
// Create Basic Salary Item
BudgetProcessMonthlyDetail basicSalaryItem = new BudgetProcessMonthlyDetail();
double nBasicSalary = oemp.BasicSalary;
basicSalaryItem.Name = "Basic Salary";
basicSalaryItem.Calculatedamount = CalculateBasic(oemp);
basicSalaryItem.Changedamount = basicSalaryItem.Calculatedamount;
basicSalaryItem.BudgetGroup = EnumBudgetGroup.Gross;
basicSalaryItem.BudgetCode = EnumBudgetCode.Basic_Salary;
basicSalaryItem.EmployeeID = oemp.ID;
basicSalaryItem.Month = startDate;
oemp.BasicSalary = basicSalaryItem.Calculatedamount;
// Create PF Item
BudgetProcessMonthlyDetail pfItem = new BudgetProcessMonthlyDetail();
pfItem.Name = "PF";
pfItem.Calculatedamount = CalculatePF(oemp);
pfItem.Changedamount = pfItem.Calculatedamount;
pfItem.BudgetGroup = EnumBudgetGroup.Deduction;
pfItem.BudgetCode = EnumBudgetCode.PF;
pfItem.EmployeeID = oemp.ID;
pfItem.Month = startDate;
// check the employee have an exception on the month
List<BudgetIndivisualChange> exceptions = _bugetMaster.getException(startDate, oemp);
foreach (BudgetIndivisualChange exp in exceptions)
{
if (exp != null)
{
// check which type of exception and update the employee;
// if the type is discontinue then continue the process.
switch ((int)exp.ButGetIndvChangeType)
{
case (int)EnumBudgetChangeType.Basic:
oemp.BasicSalary = exp.ChangedBasic;
break;
case (int)EnumBudgetChangeType.CC:
continue;
break;
case (int)EnumBudgetChangeType.Department:
oemp.DepartmentID = exp.Value;
break;
case (int)EnumBudgetChangeType.Function:
continue;
break;
case (int)EnumBudgetChangeType.Grade:
oemp.GradeID = exp.Value;
break;
case (int)EnumBudgetChangeType.Location:
oemp.LocationID = exp.Value;
break;
case (int)EnumBudgetChangeType.Discontinue:
nSts = true;
break;
}
}
}
// create a process monthly
if (!nSts)
{
BudgetProcessMonthly pmonthly = createPRocessMonthly(oemp, startDate);
pmonthly.OBudgetProcessMonthlyDetails.Add(basicSalaryItem);
pmonthly.OBudgetProcessMonthlyDetails.Add(pfItem);
// get applicable parameters/components
List<BudgetComponent> applicablecomponents = new List<BudgetComponent>();
if (!oemp.GradeID.IsUnassigned)
applicablecomponents = _bugetMaster.GetApplicableParameters(oemp, oemp.GradeID);
#region Calcualte components and create monthly detail
foreach (BudgetComponent ocomponent in applicablecomponents)
{
// add monthly detail to processMonthly
pmonthly.OBudgetProcessMonthlyDetails.Add(CreateDetail(oemp, ocomponent, startDate, null));
}
oemp.BasicSalary = nBasicSalary;
#endregion
#region Create costcenter information
List<BudgetCostCenter> oCCs = new List<BudgetCostCenter>();
oCCs = _bugetMaster.GetCC(startDate);
BudgetCostCenter oItem = oCCs.Find(delegate(BudgetCostCenter bcc) { return bcc.EmployeeID == oemp.ID; });
if (oItem == null)
{
EmployeeCostCenter empcc = _empCostCenters.Find(delegate(EmployeeCostCenter empcc1) { return empcc1.EmployeeID == oemp.ID; });
if (empcc != null)
{
BudgetCostCenter bcc1 = new BudgetCostCenter();
bcc1.CostCenterID = empcc.CostCenterID;
bcc1.EmployeeID = empcc.EmployeeID;
bcc1.FromMonth = empcc.MonthDate;
bcc1.Percentage = empcc.Percentage;
pmonthly.OBudgetMonthlyCCs.Add(CreateMonthlyCC(oemp, bcc1, startDate, null));
}
}
else
pmonthly.OBudgetMonthlyCCs.Add(CreateMonthlyCC(oemp, oItem, startDate, null));
#endregion
// Create CTC Item
double nAmount = 0.0;
double nDeductAmount = 0.0;
BudgetProcessMonthlyDetail CTCItem = new BudgetProcessMonthlyDetail();
CTCItem.Name = "CTC";
foreach (BudgetProcessMonthlyDetail pd in pmonthly.OBudgetProcessMonthlyDetails)
{
if (pd.BudgetGroup == EnumBudgetGroup.Deduction)
nDeductAmount += pd.Calculatedamount;
}
foreach (BudgetProcessMonthlyDetail pd in pmonthly.OBudgetProcessMonthlyDetails)
{
if (pd.BudgetGroup == EnumBudgetGroup.Gross)
nAmount += pd.Calculatedamount;
}
CTCItem.Calculatedamount = nAmount - nDeductAmount;
CTCItem.Changedamount = CTCItem.Calculatedamount;
CTCItem.BudgetGroup = EnumBudgetGroup.Miscellanies;
CTCItem.BudgetCode = EnumBudgetCode.CTC;
CTCItem.EmployeeID = oemp.ID;
CTCItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(CTCItem);
// Create Guranted Cash Item
double nGurantedAmount = 0.0;
//double nDeductAmount = 0.0;
BudgetProcessMonthlyDetail GurantedCashItem = new BudgetProcessMonthlyDetail();
GurantedCashItem.Name = "Guranted Cash";
nGurantedAmount += basicSalaryItem.Calculatedamount;
foreach (BudgetProcessMonthlyDetail pd in pmonthly.OBudgetProcessMonthlyDetails)
{
if (pd.BudgetCode == EnumBudgetCode.Allowance ||
pd.BudgetCode == EnumBudgetCode.Bonus)
nGurantedAmount += pd.Calculatedamount;
}
GurantedCashItem.Calculatedamount = nGurantedAmount;
GurantedCashItem.Changedamount = GurantedCashItem.Calculatedamount;
GurantedCashItem.BudgetGroup = EnumBudgetGroup.Miscellanies;
GurantedCashItem.BudgetCode = EnumBudgetCode.Guranted_Cash;
GurantedCashItem.EmployeeID = oemp.ID;
GurantedCashItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(GurantedCashItem);
// Create Income Tax Item
BudgetProcessMonthlyDetail incomeItem = new BudgetProcessMonthlyDetail();
incomeItem.Name = "Income Tax";
incomeItem.Calculatedamount = 0;
incomeItem.Changedamount = incomeItem.Calculatedamount;
incomeItem.BudgetGroup = EnumBudgetGroup.Miscellanies;
incomeItem.BudgetCode = EnumBudgetCode.IncomeTax;
incomeItem.EmployeeID = oemp.ID;
incomeItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(incomeItem);
_processMonthly.Add(pmonthly);
}
}
#region Find out the new joiner employee on the month
foreach (Employee newEmp in oNewJoiners)
{
if (Ease.CoreV35.Utility.Global.DateFunctions.FirstDateOfMonth(startDate) >= Ease.CoreV35.Utility.Global.DateFunctions.FirstDateOfMonth(newEmp.JoiningDate))
{
// create a process monthly
BudgetProcessMonthly pmonthly = createPRocessMonthly(newEmp, startDate);
newEmp.SetObjectID(Convert.ToInt32(newEmp.Name));
BudgetProcessMonthlyDetail basicSalaryItem = new BudgetProcessMonthlyDetail();
basicSalaryItem.Name = "Basic Salary";
basicSalaryItem.Calculatedamount = newEmp.BasicSalary;
basicSalaryItem.Changedamount = basicSalaryItem.Calculatedamount;
basicSalaryItem.BudgetGroup = EnumBudgetGroup.Gross;
basicSalaryItem.BudgetCode = EnumBudgetCode.Basic_Salary;
basicSalaryItem.EmployeeID = newEmp.ID;
basicSalaryItem.Month = startDate;
newEmp.BasicSalary = basicSalaryItem.Calculatedamount;
pmonthly.OBudgetProcessMonthlyDetails.Add(basicSalaryItem);
// Create PF Item
BudgetProcessMonthlyDetail pfItem = new BudgetProcessMonthlyDetail();
pfItem.Name = "PF";
pfItem.Calculatedamount = CalculatePF(newEmp);
pfItem.Changedamount = pfItem.Calculatedamount;
pfItem.BudgetGroup = EnumBudgetGroup.Deduction;
pfItem.BudgetCode = EnumBudgetCode.PF;
pfItem.EmployeeID = newEmp.ID;
pfItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(pfItem);
// get applicable parameters/components
List<BudgetComponent> applicablecomponents = _bugetMaster.GetApplicableParameters(newEmp, newEmp.GradeID);
// calcualte components and create monthly detail
foreach (BudgetComponent ocomponent in applicablecomponents)
{
// add monthly detail to processMonthly
pmonthly.OBudgetProcessMonthlyDetails.Add(CreateDetail(newEmp, ocomponent, startDate, pmonthly.NewJoinerID));
}
//_processMonthly.Add(pmonthly);
// create costcenter information
string s = "";
List<BudgetNewJoinerCrG> oNewCCs = new List<BudgetNewJoinerCrG>();
oNewCCs = _bugetMaster.GetNewJoinerCC(startDate);
foreach (BudgetNewJoinerCrG oItem in oNewCCs)
{
//BudgetNewJoinerCrG bnj=oNewCCs.Find(delegate(BudgetNewJoinerCrG nc){return nc.em
BudgetCostCenter bcc = new BudgetCostCenter();
bcc.CostCenterID = oItem.CCID;
bcc.Percentage = oItem.Percentage;
pmonthly.OBudgetMonthlyCCs.Add(CreateMonthlyCC(newEmp, bcc, startDate, pmonthly.NewJoinerID));
}
// Create CTC Item
double nAmount = 0.0;
double nDeductAmount = 0.0;
BudgetProcessMonthlyDetail CTCItem = new BudgetProcessMonthlyDetail();
CTCItem.Name = "CTC";
foreach (BudgetProcessMonthlyDetail pd in pmonthly.OBudgetProcessMonthlyDetails)
{
if (pd.BudgetGroup == EnumBudgetGroup.Deduction)
nDeductAmount += pd.Calculatedamount;
}
foreach (BudgetProcessMonthlyDetail pd in pmonthly.OBudgetProcessMonthlyDetails)
{
if (pd.BudgetGroup == EnumBudgetGroup.Gross)
nAmount += pd.Calculatedamount;
}
CTCItem.Calculatedamount = nAmount - nDeductAmount;
CTCItem.Changedamount = CTCItem.Calculatedamount;
CTCItem.BudgetGroup = EnumBudgetGroup.Miscellanies;
CTCItem.BudgetCode = EnumBudgetCode.CTC;
CTCItem.EmployeeID = newEmp.ID;
CTCItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(CTCItem);
// Create Guranted Cash Item
double nGurantedAmount = 0.0;
//double nDeductAmount = 0.0;
BudgetProcessMonthlyDetail GurantedCashItem = new BudgetProcessMonthlyDetail();
GurantedCashItem.Name = "Guranted Cash";
nGurantedAmount += basicSalaryItem.Calculatedamount;
foreach (BudgetProcessMonthlyDetail pd in pmonthly.OBudgetProcessMonthlyDetails)
{
if (pd.BudgetCode == EnumBudgetCode.Allowance ||
pd.BudgetCode == EnumBudgetCode.Bonus)
nGurantedAmount += pd.Calculatedamount;
}
GurantedCashItem.Calculatedamount = nGurantedAmount;
GurantedCashItem.Changedamount = GurantedCashItem.Calculatedamount;
GurantedCashItem.BudgetGroup = EnumBudgetGroup.Miscellanies;
GurantedCashItem.BudgetCode = EnumBudgetCode.Guranted_Cash;
GurantedCashItem.EmployeeID = newEmp.ID;
GurantedCashItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(GurantedCashItem);
// Create Income Tax Item
BudgetProcessMonthlyDetail incomeItem = new BudgetProcessMonthlyDetail();
incomeItem.Name = "Income Tax";
incomeItem.Calculatedamount = 0;
incomeItem.Changedamount = incomeItem.Calculatedamount;
incomeItem.BudgetGroup = EnumBudgetGroup.Miscellanies;
incomeItem.BudgetCode = EnumBudgetCode.IncomeTax;
incomeItem.EmployeeID = newEmp.ID;
incomeItem.Month = startDate;
pmonthly.OBudgetProcessMonthlyDetails.Add(incomeItem);
_processMonthly.Add(pmonthly);
}
}
#endregion
startDate = startDate.AddMonths(1);
pgbar.Value += 1;
pgbar.Refresh();
}
#endregion
//TaxCalculationForExistingEmployee(pgbar);
//TaxCalculationForNewEmployee(pgbar);
pgbar.Value = pgbar.Maximum;
pgbar.Refresh();
_bugetMaster.BudgetProcessMonthlys = new ObjectsTemplate<BudgetProcessMonthly>();
_bugetMaster.BudgetProcessMonthlys = _processMonthly;
}
private void TaxCalculationForExistingEmployee(ProgressBar pgbar)
{
DateTime startDate, endDate;
List<TaxRawItem> otaxRawItems = new List<TaxRawItem>();
enumIncomeTaxItemType eTaxItemType = enumIncomeTaxItemType.None;
int nTaxItemID = 0;
TaxRawItem taxRawItem;
foreach (Employee oemp in _employees)
{
otaxRawItems = new List<TaxRawItem>();
startDate = _bugetMaster.FromDate;
endDate = _bugetMaster.ToDate;
_incomeTaxes = new ObjectsTemplate<IncomeTax>();
double _nTaxAmount = 0.0;
List<BudgetProcessMonthly> bpms = _processMonthly.FindAll(delegate(BudgetProcessMonthly item) { return item.EmployeeID == oemp.ID; });
foreach (BudgetProcessMonthly bp in bpms)
{
foreach (BudgetProcessMonthlyDetail detail in bp.OBudgetProcessMonthlyDetails)
{
eTaxItemType = enumIncomeTaxItemType.None;
if (detail.BudgetCode == EnumBudgetCode.Allowance)
{
if (!detail.OriginID.IsUnassigned)
{
eTaxItemType = enumIncomeTaxItemType.Allowance;
nTaxItemID = detail.OriginID.Integer;
}
}
else if (detail.BudgetCode == EnumBudgetCode.Basic_Salary)
{
eTaxItemType = enumIncomeTaxItemType.Basic_Salary;
nTaxItemID = (int)EnumIncomeTaxItemGroup.Basic_Salary;
}
else if (detail.BudgetCode == EnumBudgetCode.Bonus)
{
eTaxItemType = enumIncomeTaxItemType.Bonus;
nTaxItemID = (int)EnumIncomeTaxItemGroup.Bonus;
}
else if (detail.BudgetCode == EnumBudgetCode.Deduction)
{
if (!detail.OriginID.IsUnassigned)
{
eTaxItemType = enumIncomeTaxItemType.Deduction;
nTaxItemID = detail.OriginID.Integer;
}
}
else if (detail.BudgetCode == EnumBudgetCode.OPI)
{
eTaxItemType = enumIncomeTaxItemType.OPI;
//nTaxItemID = (int)EnumIncomeTaxItemGroup.
}
else if (detail.BudgetCode == EnumBudgetCode.PF)
{
eTaxItemType = enumIncomeTaxItemType.PF;
nTaxItemID = (int)EnumIncomeTaxItemGroup.Company_Contri_PF;
}
taxRawItem = new TaxRawItem();
taxRawItem = TaxRawItem.Create(detail.Name, detail.Changedamount, eTaxItemType, nTaxItemID);
otaxRawItems.Add(taxRawItem);
}
}
TaxCalculator otaxCal = new TaxCalculator();
otaxCal.TaxParameter = TaxParameter.Get(Payroll.BO.SystemInformation.CurrentSysInfo.TaxParamID);
otaxCal.Employee = oemp;
try
{
_incomeTaxes = otaxCal.Calculate(otaxRawItems, ref _nTaxAmount);
}
catch (Exception exp)
{
throw new Exception(exp.ToString());
}
while (startDate <= endDate)
{
int nProcessIndex = GetIndex(oemp.ID, startDate);
if (nProcessIndex > 0)
{
int nIndex = GetIndex(EnumBudgetCode.IncomeTax, _processMonthly[nProcessIndex].OBudgetProcessMonthlyDetails);
if (nIndex > 0)
_processMonthly[nProcessIndex].OBudgetProcessMonthlyDetails[nIndex].Calculatedamount = (_nTaxAmount / 12) * 1;
}
startDate = startDate.AddMonths(1);
}
pgbar.Value += 1;
pgbar.Refresh();
}
}
private void TaxCalculationForNewEmployee(ProgressBar pgbar)
{
DateTime startDate, endDate;
startDate = _bugetMaster.FromDate;
ObjectsTemplate<Employee> oNewJs = GetNewJoinerEmployee(startDate);
List<TaxRawItem> otaxRawItems = new List<TaxRawItem>();
enumIncomeTaxItemType eTaxItemType = enumIncomeTaxItemType.None;
int nTaxItemID = 0;
foreach (Employee newEmp in oNewJs)
{
otaxRawItems = new List<TaxRawItem>();
startDate = _bugetMaster.FromDate;
endDate = _bugetMaster.ToDate;
newEmp.SetObjectID(Convert.ToInt32(newEmp.Name));
_incomeTaxes = new ObjectsTemplate<IncomeTax>();
double _nTaxAmount = 0.0;
List<BudgetProcessMonthly> bpmsNew = _processMonthly.FindAll(delegate(BudgetProcessMonthly item) { return item.EmployeeID == newEmp.ID ; });
foreach (BudgetProcessMonthly bp in bpmsNew)
{
foreach (BudgetProcessMonthlyDetail detail in bp.OBudgetProcessMonthlyDetails)
{
eTaxItemType = enumIncomeTaxItemType.None;
if (detail.BudgetCode == EnumBudgetCode.Allowance)
{
eTaxItemType = enumIncomeTaxItemType.Allowance;
nTaxItemID = detail.OriginID.Integer;
}
else if (detail.BudgetCode == EnumBudgetCode.Basic_Salary)
{
eTaxItemType = enumIncomeTaxItemType.Basic_Salary;
nTaxItemID = (int)EnumIncomeTaxItemGroup.Basic_Salary;
}
else if (detail.BudgetCode == EnumBudgetCode.Bonus)
{
eTaxItemType = enumIncomeTaxItemType.Bonus;
nTaxItemID = (int)EnumIncomeTaxItemGroup.Bonus;
}
else if (detail.BudgetCode == EnumBudgetCode.Deduction)
{
eTaxItemType = enumIncomeTaxItemType.Deduction;
nTaxItemID = detail.OriginID.Integer;
}
else if (detail.BudgetCode == EnumBudgetCode.OPI)
{
eTaxItemType = enumIncomeTaxItemType.OPI;
//nTaxItemID = (int)EnumIncomeTaxItemGroup.
}
else if (detail.BudgetCode == EnumBudgetCode.PF)
{
eTaxItemType = enumIncomeTaxItemType.PF;
nTaxItemID = (int)EnumIncomeTaxItemGroup.Company_Contri_PF;
}
TaxRawItem taxRawItem = new TaxRawItem();
taxRawItem = TaxRawItem.Create(detail.Name, detail.Changedamount, eTaxItemType, nTaxItemID);
otaxRawItems.Add(taxRawItem);
}
}
TaxCalculator otaxCal = new TaxCalculator();
otaxCal.Employee = newEmp;
otaxCal.TaxParameter = TaxParameter.Get(Payroll.BO.SystemInformation.CurrentSysInfo.TaxParamID);
try
{
_incomeTaxes = otaxCal.Calculate(otaxRawItems, ref _nTaxAmount);
}
catch (Exception exp)
{
throw new Exception(exp.ToString());
}
while (startDate <= endDate)
{
int nIndexProcess = GetIndex(newEmp.ID, startDate);
if (nIndexProcess > 0)
{
int nIndex = GetIndex(EnumBudgetCode.IncomeTax, _processMonthly[nIndexProcess].OBudgetProcessMonthlyDetails);
if (nIndex > 0)
_processMonthly[nIndexProcess].OBudgetProcessMonthlyDetails[nIndex].Calculatedamount = (_nTaxAmount / 12) * 1;
}
startDate = startDate.AddMonths(1);
}
pgbar.Value += 1;
pgbar.Refresh();
}
}
private int GetIndex(EnumBudgetCode budCode,ObjectsTemplate<BudgetProcessMonthlyDetail> bds)
{
int i = 0;
int nIndex = 0;
foreach (BudgetProcessMonthlyDetail item in bds)
{
if (item.BudgetCode == budCode)
{
nIndex = i;
break;
}
i++;
}
return nIndex;
}
private int GetIndex(ID empID, DateTime startdate)
{
int i = 0;
int nIndex = 0;
foreach (BudgetProcessMonthly item in _processMonthly)
{
if (item.EmployeeID == empID && item.Month.Date==startdate.Date)
{
nIndex = i;
break;
}
i++;
}
return nIndex;
}
private double CalculateBasic(Employee oEmp)
{
BudgetGrade budGrade = _bugetMaster.BudgetGrades.Find(delegate(BudgetGrade item) { return item.GradeID == oEmp.GradeID; });
if (budGrade != null)
{
double nAmount = (oEmp.BasicSalary * budGrade.ChangedPercentage) / 100;
oEmp.BasicSalary = oEmp.BasicSalary + nAmount;
return oEmp.BasicSalary;
}
else
return oEmp.BasicSalary;
}
private double CalculatePF(Employee oEmp)
{
double nAmount = 0.0;
nAmount=(oEmp.BasicSalary * SystemInformation.CurrentSysInfo.pFContriCompany ) / 100;
return nAmount;
}
public double GetBudgetAmountByCCEmp(int ccID, int empID, int budgetID)
{
BudgetMaster oBudMaster = BudgetMaster.Get(ID.FromInteger(budgetID));
List<BudgetProcessMonthly> oBudProsMonths = oBudMaster.BudgetProcessMonthlys;
double nAmount = 0.0;
foreach (BudgetProcessMonthly budMonthly in oBudProsMonths)
{
BudgetMonthlyCC budCC = budMonthly.OBudgetMonthlyCCs.Find(delegate(BudgetMonthlyCC cc) { return cc.CCID.Integer == ccID && empID == cc.EmployeeID.Integer; });
if (budCC != null)
{
BudgetProcessMonthlyDetail oDetal = budMonthly.OBudgetProcessMonthlyDetails.Find(delegate(BudgetProcessMonthlyDetail opd) { return opd.BudgetProcessMonthlyID == budCC.BudgetProcessMonthlyID && opd.EmployeeID == budCC.EmployeeID; });
if (oDetal != null)
{
nAmount += oDetal.Calculatedamount;
}
}
}
return nAmount;
}
public double GetBudgetAmountByEmp(int empID, int budgetID)
{
double nAmount = 0.0;
BudgetMaster oBudMaster = BudgetMaster.Get(ID.FromInteger(budgetID));
List<BudgetProcessMonthly> oBudProsMonths = oBudMaster.BudgetProcessMonthlys;
foreach (BudgetProcessMonthly budMonthly in oBudProsMonths)
{
BudgetProcessMonthlyDetail oDetal = budMonthly.OBudgetProcessMonthlyDetails.Find(delegate(BudgetProcessMonthlyDetail opd) { return opd.EmployeeID.Integer ==empID; });
if (oDetal != null)
{
nAmount += oDetal.Calculatedamount;
}
}
return nAmount;
}
}
public partial class BudgetTempCollection
{
public int position { get; set; }
public EnumBudgetCode enumBudgetCode { get; set; }
public int OriginID { get; set; }
}
}