public DataTable ExportStandardBonusTemplate(bool IsIncludeCurrentPositionInfo)
        {
            DataTable tmpDataTable = new DataTable(TABLE_NAME_S);

            tmpDataTable.Columns.Add(HROne.Import.ImportBonusProcess.FIELD_EMP_NO, typeof(string));
            if (IsIncludeCurrentPositionInfo)
            {
                ImportEmpPersonalInfoProcess.AddEmployeeInfoHeader(tmpDataTable);
                ImportEmpPositionInfoProcess.AddEmployeePositionInfoHeader(dbConn, tmpDataTable);
            }
            tmpDataTable.Columns.Add(HROne.Import.ImportBonusProcess.FIELD_TARGET_SALARY, typeof(double));
            tmpDataTable.Columns.Add(HROne.Import.ImportBonusProcess.FIELD_STD_RATE, typeof(double));
            tmpDataTable.Columns.Add(HROne.Import.ImportBonusProcess.FIELD_YEAR_OF_SERVICE, typeof(double));
            tmpDataTable.Columns.Add(HROne.Import.ImportBonusProcess.FIELD_BONUS_AMOUNT, typeof(double));

            DBFilter m_filter = new DBFilter();

            m_filter.add(new Match("BonusProcessID", m_BonusProcessID));
            m_filter.add(new Match("EmpBonusProcessType", "S"));
            m_filter.add("EmpID", true);

            EBonusProcess m_bonusProcess = EBonusProcess.GetObject(dbConn, m_BonusProcessID);

            foreach (EEmpBonusProcess m_empBonusProcess in EEmpBonusProcess.db.select(dbConn, m_filter))
            {
                EEmpPersonalInfo empInfo = EEmpPersonalInfo.GetObject(dbConn, m_empBonusProcess.EmpID);

                DataRow row = tmpDataTable.NewRow();

                row[FIELD_EMP_NO] = empInfo.EmpNo;

                if (IsIncludeCurrentPositionInfo)
                {
                    ImportEmpPersonalInfoProcess.AddEmployeeInfo(dbConn, row, empInfo.EmpID);
                    ImportEmpPositionInfoProcess.AddEmployeePositionInfo(dbConn, row, empInfo.EmpID);
                }
                row[FIELD_TARGET_SALARY]   = m_empBonusProcess.EmpBonusProcessTargetSalary;
                row[FIELD_STD_RATE]        = m_bonusProcess.BonusProcessStdRate;
                row[FIELD_YEAR_OF_SERVICE] = Math.Round(m_empBonusProcess.EmpBonusProcessBonusProportion, 4);
                row[FIELD_BONUS_AMOUNT]    = Math.Round(m_empBonusProcess.EmpBonusProcessBonusAmount, 2);

                tmpDataTable.Rows.Add(row);
            }

            if (IsIncludeCurrentPositionInfo)
            {
                ImportEmpPositionInfoProcess.RetriveHierarchyLevelHeader(dbConn, tmpDataTable);
            }

            return(tmpDataTable);
        }
    protected void btnConfirm_Click(object sender, EventArgs e)
    {
        PageErrors errors = PageErrors.getErrors(db, Page.Master);

        errors.clear();

        if (CurID > 0)
        {
            ESalaryIncrementBatch m_process = ESalaryIncrementBatch.GetObject(dbConn, CurID);

            if (m_process.Status == ESalaryIncrementBatch.STATUS_OPEN) // not Confirmed/Applied
            {
                DBFilter m_filterByBatchID = new DBFilter();
                m_filterByBatchID.add(new Match("BatchID", m_process.BatchID));
                m_filterByBatchID.add("EmpID", true);

                try
                {
                    WebUtils.StartFunction(Session, FUNCTION_CODE, true);
                    dbConn.BeginTransaction();
                    foreach (ESalaryIncrementBatchDetail d in ESalaryIncrementBatchDetail.db.select(dbConn, m_filterByBatchID))
                    {
                        if (d.CurrentPoint != d.NewPoint)
                        {
                            DBFilter m_cpFilter = new DBFilter();
                            m_cpFilter.add(new NullTerm("EmpRPEffTo"));
                            m_cpFilter.add(new Match("EmpID", d.EmpID));
                            m_cpFilter.add(new Match("SchemeCode", AppUtils.Encode(EEmpRecurringPayment.db.getField("SchemeCode"), d.SchemeCode)));
                            m_cpFilter.add(new Match("Capacity", AppUtils.Encode(EEmpRecurringPayment.db.getField("Capacity"), d.Capacity)));
                            m_cpFilter.add(new Match("Point", d.CurrentPoint));

                            DBFilter m_payTypeCodeFilter = new DBFilter();
                            m_payTypeCodeFilter.add(new Match("PaymentTypeCode", "BASICSAL"));

                            DBFilter m_payTypeFilter = new DBFilter();
                            m_payTypeFilter.add(new IN("PaymentTypeID", "SELECT PaymentTypeID FROM PaymentType", m_payTypeCodeFilter));
                            m_cpFilter.add(new IN("PayCodeID", "SELECT PaymentCodeID FROM PaymentCode", m_payTypeFilter));

                            foreach (EEmpRecurringPayment m_cp in EEmpRecurringPayment.db.select(dbConn, m_cpFilter))
                            {
                                DBFilter m_payScaleFilter = new DBFilter();

                                m_payScaleFilter.add(new Match("SchemeCode", AppUtils.Encode(EEmpRecurringPayment.db.getField("SchemeCode"), d.SchemeCode)));
                                m_payScaleFilter.add(new Match("EffectiveDate", "<=", m_process.AsAtDate));

                                OR m_orDate = new OR();
                                m_orDate.add(new Match("ExpiryDate", ">=", m_process.AsAtDate));
                                m_orDate.add(new NullTerm("ExpiryDate"));

                                m_payScaleFilter.add(m_orDate);
                                m_payScaleFilter.add(new Match("Point", d.NewPoint));

                                ArrayList m_payScaleMapList = EPayScaleMap.db.select(dbConn, m_payScaleFilter);
                                if (m_payScaleMapList.Count > 0)
                                {
                                    EEmpRecurringPayment m_newCp = new EEmpRecurringPayment();

                                    m_newCp.EmpRPAmount = System.Convert.ToDouble(((EPayScaleMap)m_payScaleMapList[0]).Salary);
                                    m_newCp.EmpRPAmount = Math.Round(m_newCp.EmpRPAmount, 2);
                                    m_newCp.EmpRPEffFr  = m_process.AsAtDate;
                                    m_newCp.Point       = d.NewPoint;

                                    //m_newCp.EmpRPEffTo = m_cp.EmpRPEffTo;
                                    m_newCp.Capacity                        = m_cp.Capacity;
                                    m_newCp.CostCenterID                    = m_cp.CostCenterID;
                                    m_newCp.CurrencyID                      = m_cp.CurrencyID;
                                    m_newCp.EmpAccID                        = m_cp.EmpAccID;
                                    m_newCp.EmpID                           = m_cp.EmpID;
                                    m_newCp.EmpRPID                         = m_cp.EmpRPID;
                                    m_newCp.EmpRPIsNonPayrollItem           = m_cp.EmpRPIsNonPayrollItem;
                                    m_newCp.EmpRPMethod                     = m_cp.EmpRPMethod;
                                    m_newCp.EmpRPRemark                     = m_cp.EmpRPRemark;
                                    m_newCp.EmpRPUnit                       = m_cp.EmpRPUnit;
                                    m_newCp.EmpRPUnitPeriodAsDaily          = m_cp.EmpRPUnitPeriodAsDaily;
                                    m_newCp.EmpRPUnitPeriodAsDailyPayFormID = m_cp.EmpRPUnitPeriodAsDailyPayFormID;
                                    m_newCp.PayCodeID                       = m_cp.PayCodeID;
                                    m_newCp.SchemeCode                      = m_cp.SchemeCode;

                                    m_cp.EmpRPEffTo = m_process.AsAtDate.AddDays(-1);
                                    if (EEmpRecurringPayment.db.update(dbConn, m_cp))
                                    {
                                        EEmpRecurringPayment.db.insert(dbConn, m_newCp);
                                    }
                                }
                                else
                                {
                                    errors.addError(string.Format("Cannot map salary setting (Scheme Code={0}, Capacity={1}, Point={2})", new string[] { d.SchemeCode, d.Capacity, d.NewPoint.ToString("0.00") }));
                                    dbConn.RollbackTransaction();
                                    WebUtils.EndFunction(dbConn);
                                    return;
                                }
                            }
                        }
                        EEmpPersonalInfo m_empInfo = EEmpPersonalInfo.GetObject(dbConn, d.EmpID);
                        if (m_empInfo.EmpNextSalaryIncrementDate == m_process.AsAtDate)
                        {
                            m_empInfo.EmpNextSalaryIncrementDate = m_process.AsAtDate.AddYears(1);
                            EEmpPersonalInfo.db.update(dbConn, m_empInfo);
                        }
                    }

                    m_process.Status          = ESalaryIncrementBatch.STATUS_CONFIRMED;
                    m_process.ConfirmDateTime = AppUtils.ServerDateTime();
                    m_process.ConfirmBy       = WebUtils.GetCurUser(Session).UserID;

                    ESalaryIncrementBatch.db.update(dbConn, m_process);

                    //errors.addError("Salary Increment Batch confirmed!");

                    dbConn.CommitTransaction();
                    WebUtils.EndFunction(dbConn);
                }
                catch (Exception ex)
                {
                    dbConn.RollbackTransaction();
                    errors.addError(ex.Message);
                    WebUtils.EndFunction(dbConn);
                    return;
                }
                if (errors.isEmpty())
                {
                    string m_message = "Salary Increment Batch confirmed!";
                    string m_url     = "Payroll_SalaryIncrementBatch_View.aspx?BatchID=" + CurID;

                    WebUtils.RegisterRedirectJavaScript(this, m_url, HROne.Common.WebUtility.GetLocalizedString(m_message));
                }
            }
            else
            {
                errors.addError("Batch is confirmed.");
            }
        }
    }
示例#3
0
        protected DataTable LoadORSODetail()
        {
            DataTable _table = new DataSet.Payroll_MPFRemittanceStatement.ExistingMemberDataTable();

            DBFilter _payPeriodFilter = new DBFilter();

            _payPeriodFilter.add(new Match("PayPeriodFr", "<=", this.PayPeriodTo));
            _payPeriodFilter.add(new Match("PayPeriodTo", ">=", this.PayPeriodFr));

            DBFilter _empPayrollFilter = new DBFilter();

            _empPayrollFilter.add(new IN("PayPeriodID", "SELECT PayPeriodID FROM PayrollPeriod", _payPeriodFilter));

            DBFilter _orsoRecordFilter = new DBFilter();

            _orsoRecordFilter.add(new Match("ORSOPlanID", this.ORSOPlanID));
            _orsoRecordFilter.add(new IN("EmpPayrollID", "SELECT EmpPayrollID FROM EmpPayroll", _empPayrollFilter));

            foreach (EORSORecord _orsoRecord in EORSORecord.db.select(dbConn, _orsoRecordFilter))
            {
                DataRow _newRow = _table.NewRow();

                EEmpPayroll      _payroll = EEmpPayroll.GetObject(dbConn, _orsoRecord.EmpPayrollID);
                EEmpPersonalInfo _empInfo = EEmpPersonalInfo.GetObject(dbConn, _payroll.EmpID);

                _newRow["EmpID"]          = _empInfo.EmpID;
                _newRow["MPFPlanID"]      = _orsoRecord.ORSOPlanID;
                _newRow["EmpNo"]          = _empInfo.EmpNo;
                _newRow["EmpName"]        = _empInfo.EmpEngFullName;
                _newRow["SchemeJoinDate"] = _empInfo.EmpDateOfJoin;

                if (string.IsNullOrEmpty(_empInfo.EmpHKID))
                {
                    _newRow["HKID"] = _empInfo.EmpPassportNo;
                }
                else
                {
                    _newRow["HKID"] = _empInfo.EmpHKID;
                }

                _newRow["PeriodFrom"] = _orsoRecord.ORSORecPeriodFr;
                _newRow["PeriodTo"]   = _orsoRecord.ORSORecPeriodTo;

                _newRow["RelevantIncome"] = 0; //_orsoRecord.ORSORecActRI;
                _newRow["MCEE"]           = _orsoRecord.ORSORecActEE;
                _newRow["MCER"]           = _orsoRecord.ORSORecActER;
                _newRow["VCEE"]           = 0;
                _newRow["VCER"]           = 0;

                EEmpTermination _empTermination = EEmpTermination.GetObjectByEmpID(dbConn, _empInfo.EmpID);
                if (_empTermination != null && _empTermination.EmpTermLastDate.Ticks != 0)
                {
                    _newRow["LastEmploymentDate"] = _empTermination.EmpTermLastDate;
                    _newRow["IsBackPayRecord"]    = (_empTermination.EmpTermLastDate > this.PayPeriodFr);
                }
                else
                {
                    _newRow["LastEmploymentDate"] = DBNull.Value;
                    _newRow["IsBackPayRecord"]    = false;
                }
                _newRow["IsLSP"]               = false;
                _newRow["IsSP"]                = false;
                _newRow["LSPSPAmount"]         = 0;
                _newRow["LSPSPAmountPaidByER"] = 0;

                _table.Rows.Add(_newRow);
            }
            return(_table);
        }
        public DataSet GenerateCND()
        {
            EBonusProcess m_process = EBonusProcess.GetObject(dbConn, m_BonusProcessID);
            //        EPaymentCode m_paymentCode = EPaymentCode.GetObject(dbConn, m_process.BonusProcessPayCodeID);

            DataSet   dataSet   = new DataSet();//export.GetDataSet();
            DataTable dataTable = new DataTable("ClaimsAndDeduction$");

            dataSet.Tables.Add(dataTable);

            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_EMP_NO, typeof(string));
            dataTable.Columns.Add("English Name", typeof(string));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_EFFECTIVE_DATE, typeof(DateTime));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_PAYMENT_CODE, typeof(string));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_PAYMENT_METHOD, typeof(string));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_BANK_ACCOUNT_NO, typeof(string));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_AMOUNT, typeof(double));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_NUM_OF_DAY_ADJUST, typeof(double));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_REST_PAYMENT, typeof(string));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_REMARK, typeof(string));
            dataTable.Columns.Add(HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_COST_CENTER, typeof(string));

            DBFilter m_detailFilter = new DBFilter();

            m_detailFilter.add(new Match("BonusProcessID", m_BonusProcessID));
            m_detailFilter.add("EmpID", true);
            m_detailFilter.add("EmpBonusProcessType", false);  // Standard > Discretionary

            double m_bonusAmount     = 0;
            double m_targetSalary    = 0;
            int    m_currentEmpID    = -1;
            string m_payMethod       = "";
            string m_remarks         = "";
            string m_bankAccountCode = "";
            string m_costCenterCode  = "";

            DataRow          m_row        = null;
            EEmpPersonalInfo m_empInfo    = null;
            double           m_proportion = 0; // the proportion of bonus recieved, depending on the join date

            EBonusProcess m_bonusProcess = EBonusProcess.GetObject(dbConn, m_BonusProcessID);

            foreach (EEmpBonusProcess m_detail in EEmpBonusProcess.db.select(dbConn, m_detailFilter))
            {
                if (m_detail.EmpID != m_currentEmpID)
                {
                    if (m_currentEmpID > -1)
                    {
                        dataTable.Rows.Add(m_row);
                    }
                    m_currentEmpID = m_detail.EmpID;
                    m_row          = dataTable.NewRow();
                    GetEmpRecurringPaymentInfo(m_detail.EmpID, m_process.BonusProcessSalaryMonth, out m_targetSalary, out m_payMethod, out m_bankAccountCode, out m_costCenterCode);
                    m_empInfo = EEmpPersonalInfo.GetObject(dbConn, m_detail.EmpID);

                    System.TimeSpan m_totalDaysInPeriod = m_bonusProcess.BonusProcessPeriodTo.Subtract(m_bonusProcess.BonusProcessPeriodFr);
                    System.TimeSpan m_totalDaysJoint    = m_bonusProcess.BonusProcessPeriodTo.Subtract((m_empInfo.EmpDateOfJoin < m_bonusProcess.BonusProcessPeriodFr) ? m_bonusProcess.BonusProcessPeriodFr : m_empInfo.EmpDateOfJoin);

                    m_proportion  = Math.Round(Convert.ToDouble(m_totalDaysJoint.Days + 1) / Convert.ToDouble(m_totalDaysInPeriod.Days + 1), 4);
                    m_remarks     = "";
                    m_bonusAmount = 0;

                    //re-take targetSalary from RecurringPayment
                    //m_targetSalary = m_detail.EmpBonusProcessTargetSalary;
                }
                else // same EmpID
                {
                    m_remarks += " + ";
                }

                if (m_detail.EmpBonusProcessType == "S")
                {
                    m_bonusAmount = m_targetSalary * m_proportion * m_bonusProcess.BonusProcessStdRate;
                    m_remarks     = m_remarks + "(" + m_targetSalary.ToString("#,##0.00") + " * " + m_proportion.ToString("0.0000") + " * " + m_process.BonusProcessStdRate.ToString("0.0000") + ")";
                }
                else if (m_detail.EmpBonusProcessType == "D")
                {
                    if (m_detail.EmpBonusProcessRank == "1")
                    {
                        m_bonusAmount = m_bonusAmount + m_targetSalary * m_proportion * m_process.BonusProcessRank1 / 100;
                        m_remarks     = m_remarks + "(" + m_targetSalary.ToString("#,##0.00") + " * " + m_proportion.ToString("0.0000") + " * " + m_process.BonusProcessRank1.ToString("0.00") + "%)";
                    }
                    else if (m_detail.EmpBonusProcessRank == "2")
                    {
                        m_bonusAmount = m_bonusAmount + m_targetSalary * m_proportion * m_process.BonusProcessRank2 / 100;
                        m_remarks     = m_remarks + "(" + m_targetSalary.ToString("#,##0.00") + " * " + m_proportion.ToString("0.0000") + " * " + m_process.BonusProcessRank2.ToString("0.00") + "%)";
                    }
                    else if (m_detail.EmpBonusProcessRank == "3")
                    {
                        m_bonusAmount = m_bonusAmount + m_targetSalary * m_proportion * m_process.BonusProcessRank3 / 100;
                        m_remarks     = m_remarks + "(" + m_targetSalary.ToString("#,##0.00") + " * " + m_proportion.ToString("0.0000") + " * " + m_process.BonusProcessRank3.ToString("0.00") + "%)";
                    }
                    else if (m_detail.EmpBonusProcessRank == "4")
                    {
                        m_bonusAmount = m_bonusAmount + m_targetSalary * m_proportion * m_process.BonusProcessRank4 / 100;
                        m_remarks     = m_remarks + "(" + m_targetSalary.ToString("#,##0.00") + " * " + m_proportion.ToString("0.0000") + " * " + m_process.BonusProcessRank4.ToString("0.00") + "%)";
                    }
                    else if (m_detail.EmpBonusProcessRank == "5")
                    {
                        m_bonusAmount = m_bonusAmount + m_targetSalary * m_proportion * m_process.BonusProcessRank5 / 100;
                        m_remarks     = m_remarks + "(" + m_targetSalary.ToString("#,##0.00") + " * " + m_proportion.ToString("0.0000") + " * " + m_process.BonusProcessRank5.ToString("0.00") + "%)";
                    }
                }

                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_EMP_NO] = m_empInfo.EmpNo;
                m_row["English Name"] = m_empInfo.EmpEngFullName;
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_EFFECTIVE_DATE] = m_process.BonusProcessPayDate;

                EPaymentCode m_payCodeObj = EPaymentCode.GetObject(dbConn, m_process.BonusProcessPayCodeID);

                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_PAYMENT_CODE]      = m_payCodeObj.PaymentCode;
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_PAYMENT_METHOD]    = m_payMethod;
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_NUM_OF_DAY_ADJUST] = 0; //DateTime.DaysInMonth(m_process.AsAtDate);
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_REST_PAYMENT]      = "No";
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_AMOUNT]            = Math.Round(m_bonusAmount, 2);
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_REMARK]            = m_remarks;
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_BANK_ACCOUNT_NO]   = m_bankAccountCode;
                m_row[HROne.Import.ImportClaimsAndDeductionsProcess.FIELD_COST_CENTER]       = m_costCenterCode;
            }

            if (m_currentEmpID > -1)    // indicate there are CND records written into the table.
            {
                dataTable.Rows.Add(m_row);
            }
            return(dataSet);
        }