#
#
#
#
#
#
# get settings
require "settings.php";
require "core-settings.php";
require "salwages/emp-functions.php";
require_lib("time");
## Decide
if (isset($_REQUEST["key"])) {
    switch (strtolower($_REQUEST["key"])) {
        case "emp":
            $OUTPUT = slctEmployee();
            break;
        case "slip":
            $OUTPUT = slip($_REQUEST);
            break;
        case "export to spreadsheet":
            $OUTPUT = export($_REQUEST);
            break;
        default:
            $OUTPUT = slctDate();
    }
} else {
    $OUTPUT = slctDate();
}
# display output
require "template.php";
function confirm($_POST)
{
    # get vars
    $_POST = var_makesafe($_POST);
    extract($_POST);
    if (isset($back)) {
        return slctEmployee();
    }
    $annual += 0;
    $bonus += 0;
    $mpaye_amount += 0;
    # validate input
    require_lib("validate");
    $v = new validate();
    if (isset($account)) {
        $v->isOk($account, "num", 1, 9, "Invalid ledger account.");
    }
    $v->isOk($empnum, "num", 1, 9, "Invalid employee number.");
    $v->isOk($accid, "num", 1, 9, "Invalid bank number.");
    $v->isOk($MON, "num", 1, 2, "Invalid month.");
    $v->isOk($bonus, "float", 1, 11, "Invalid bonus.");
    $v->isOk($mpaye_amount, "float", 1, 11, "Invalid manual PAYE amount.");
    $v->isOk($all_travel, "float", 1, 11, "Invalid travel allowance.");
    $v->isOk($comp_pension, "float", 1, 11, "Invalid company pension.");
    $v->isOk($comp_medical, "float", 1, 11, "Invalid company medical.");
    $v->isOk($emp_pension, "float", 1, 11, "Invalid employee pension.");
    $v->isOk($emp_medical, "float", 1, 11, "Invalid employee medical.");
    $v->isOk($comp_provident, "float", 1, 11, "Invalid company provident.");
    $v->isOk($emp_provident, "float", 1, 11, "Invalid employee provident.");
    //$v->isOk ($comp_uif, "float", 1, 11, "Invalid company uif.");
    //$v->isOk ($emp_uif, "float", 1, 11, "Invalid employee uif.");
    $v->isOk($comp_other, "float", 1, 11, "Invalid company other.");
    $v->isOk($emp_other, "float", 1, 11, "Invalid employee other.");
    $v->isOk($comp_ret, "float", 1, 11, "Invalid company ret.");
    $v->isOk($emp_ret, "float", 1, 11, "Invalid employee ret.");
    $v->isOk($basic_sal, "float", 1, 11, "Invalid basic salary.");
    $v->isOk($commission, "float", 0, 11, "Invalid commision.");
    $v->isOk($loaninstall, "float", 0, 11, "Invalid loan installment.");
    $v->isOk($loanint, "float", 0, 11, "Invalid loan interest.");
    if ($divisor != 1 && round($divisor, 2) != round(52 / 12, 2) && round($divisor) != round(26 / 12, 2)) {
        $v->addError("", "Invalid pay period (DIVIS).");
    }
    if ($saltyp == 'd' || $saltyp == 'h') {
        $salnarr = array("d" => "Days", "h" => "Hours");
        $salntype = $salnarr[$saltyp];
        $v->isOk($multi, "float", 1, 5, "Invalid number of {$salntype}.");
        if ($multi < 1) {
            $v->isOk("##", "num", 1, 1, "Error : Employee cannot be paid for {$multi} {$salntype}.");
        }
    }
    if (isset($allowances)) {
        foreach ($allowances as $key => $value) {
            $v->isOk($allowances[$key], "float", 0, 11, "Invalid allowance amount " . ($key + 1) . ".");
        }
    }
    if (isset($deductid)) {
        foreach ($deductid as $key => $value) {
            $v->isOk($deductid[$key], "num", 1, 9, "Invalid deductions ID.");
        }
    }
    if (isset($deductions)) {
        foreach ($deductions as $key => $value) {
            $v->isOk($deductions[$key], "float", 0, 11, "Invalid deduction amount" . ($key + 1) . ".");
        }
    }
    if (isset($allowid)) {
        foreach ($allowid as $key => $value) {
            $v->isOk($allowid[$key], "num", 1, 9, "Invalid allowance ID.");
        }
    }
    if (isset($allowtax)) {
        foreach ($allowtax as $key => $value) {
            $v->isOk($allowtax[$key], "string", 1, 3, "Invalid allowance tax option" . ($key + 1) . ".");
        }
    }
    $date = $day . "-" . $mon . "-" . $year;
    $ydate = $year . "-" . $mon . "-" . $day;
    if (!checkdate($mon, $day, $year)) {
        $v->isOk($date, "num", 1, 1, "Invalid date.");
    }
    # display errors, if any
    if ($v->isError()) {
        $confirmCust = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirmCust .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        return $confirmCust . process($_POST);
    }
    db_conn('cubit');
    $sql = "SELECT * FROM employees WHERE empnum='{$empnum}' AND div = '" . USER_DIV . "'";
    $empRslt = db_exec($sql) or errDie("Unable to select employees from database.");
    if (pg_numrows($empRslt) < 1) {
        return "Invalid employee ID.";
    }
    $myEmp = pg_fetch_array($empRslt);
    if ($myEmp['payprd'] == "d") {
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND saldate='{$ydate}'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND saldate='{$ydate}'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    } elseif ($myEmp['payprd'] == "w") {
        $yy = date("Y");
        $mm = $MON;
        $mm += 0;
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND substr(saldate,1,4)='{$yy}' AND week='{$week}'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND substr(saldate,1,4)='{$yy}' AND week='{$week}'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    } elseif ($myEmp['payprd'] == "f") {
        $yy = date("Y");
        $mm = $MON;
        $mm += 0;
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND substr(saldate,1,4)='{$yy}' AND week='{$week}'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND substr(saldate,1,4)='{$yy}' AND week='{$week}'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    }
    if (isset($paid) && $paid > 0) {
        return "<li class='err'>You have already processed a salary for that period</li>" . process($_POST);
    }
    $salconacc = gethook("accnum", "salacc", "name", "salaries control");
    $salconacc_orig = gethook("accnum", "salacc", "name", "salaries control original");
    if ($salconacc != $salconacc_orig) {
        block_check($salconacc);
    }
    block_check($uifbal = gethook("accnum", "salacc", "name", "uifbal"));
    block_check($intrec = gethook("accnum", "salacc", "name", "interestreceived"));
    block_check($sdlbal = gethook("accnum", "salacc", "name", "sdlbal"));
    block_check($pa = gethook("accnum", "salacc", "name", "pension"));
    block_check($ma = gethook("accnum", "salacc", "name", "medical"));
    block_check($cash_account = gethook("accnum", "salacc", "name", "cash"));
    block_check($retire = gethook("accnum", "salacc", "name", "retire"));
    block_check($provident = gethook("accnum", "salacc", "name", "provident"));
    block_check($commacc = gethook("accnum", "salacc", "name", "Commission"));
    block_check($payeacc = gethook("accnum", "salacc", "name", "PAYE"));
    block_check($uifacc = gethook("accnum", "salacc", "name", "UIF"));
    block_check($providente = $myEmp["expacc_provident"]);
    block_check($retiree = $myEmp["expacc_ret"]);
    block_check($pax = $myEmp["expacc_pension"]);
    block_check($uifexp = $myEmp["expacc_uif"]);
    block_check($max = $myEmp["expacc_medical"]);
    block_check($dedgenerale = $myEmp["expacc_other"]);
    block_check($sdlexp = $myEmp["expacc_sdl"]);
    block_check($salacc = $myEmp["expacc_salwages"]);
    if (($loanexp = $myEmp["expacc_loan"]) > 0) {
        block_check($loanexp);
    }
    if (isset($allowaccs)) {
        foreach ($allowaccs as $checkacc) {
            block_check($checkacc);
        }
    }
    if (isset($dedaccs)) {
        foreach ($dedaccs as $k => $checkacc) {
            block_check($checkacc);
        }
    }
    if (isset($bal_dedaccs)) {
        foreach ($bal_dedaccs as $checkacc) {
            if ($checkacc != 0) {
                block_check($checkacc);
            }
        }
    }
    finish_block_check();
    # The Paye
    $tyear = 12;
    switch ($saltyp) {
        case 'm':
            $tyear = 12;
            $perhr = sprint($basic_sal / ($myEmp['hpweek'] * 52 / 12));
            break;
        case 'w':
            $tyear = 52;
            $perhr = sprint($basic_sal / $myEmp['hpweek']);
            break;
        case 'f':
            $tyear = 26;
            $perhr = sprint($basic_sal / ($myEmp['hpweek'] * 2));
            break;
        case 'd':
            $tyear = 5 * 52;
            $perhr = sprint($basic_sal / ($myEmp['hpweek'] / 5));
            break;
        case 'h':
            $tyear = 45 * 52;
            $perhr = $basic_sal;
            break;
    }
    $overamt = $novert * ($perhr * $myEmp['novert']);
    $overamt += $hovert * ($perhr * $myEmp['hovert']);
    $overamt = sprint($overamt);
    # Multiply basic_sal add overtime
    if (isset($multi)) {
        $basic_sal = sprint($basic_sal * $multi);
        $tyear = $tyear / $multi;
    }
    # Zero if not specified
    $commission = $commission + 0;
    $loaninstall = $loaninstall + 0;
    //$basic_sal=$basic_sal+$commission;
    $all_before = "";
    $all_after = "";
    $all_beforeamount = 0;
    $all_afteramount = 0;
    if (isset($allowtax)) {
        foreach ($allowtax as $key => $perc) {
            if ($perc == "Yes" and $allowances[$key] > 0) {
                $all_before .= "\r\n\t\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t\t<td>{$allowname[$key]}</td>\r\n\t\t\t\t\t\t<td>" . CUR . " {$allowances[$key]}</td>\r\n\t\t\t\t\t</tr>";
                $all_beforeamount = $all_beforeamount + $allowances[$key];
            } elseif ($allowances[$key] > 0) {
                $all_after .= "\r\n\t\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t\t<td>{$allowname[$key]}</td>\r\n\t\t\t\t\t\t<td>" . CUR . " {$allowances[$key]}</td>\r\n\t\t\t\t\t</tr>";
                $all_afteramount = $all_afteramount + $allowances[$key];
            }
        }
    }
    $de_before = "\r\n\t\t<tr>\r\n\t\t\t<td colspan='2'>\r\n\t\t\t\t<table " . TMPL_tblDflts . ">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th>Details</th>\r\n\t\t\t\t\t\t<th>Employee Contribution</th>\r\n\t\t\t\t\t\t<!--<th>Employer Contribution</th>//-->\r\n\t\t\t\t\t</tr>";
    $de_after = "\r\n\t\t<tr>\r\n\t\t\t<td colspan='2'>\r\n\t\t\t\t<table " . TMPL_tblDflts . ">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th>Details</th>\r\n\t\t\t\t\t\t<th>Employee Contribution</th>\r\n\t\t\t\t\t\t<!--<th>Employer Contribution</th>//-->\r\n\t\t\t\t\t</tr>";
    $de_beforeamount = 0;
    $de_afteramount = 0;
    $de_beforeamount_emp = 0;
    $de_afteramount_emp = 0;
    if (isset($deducttax)) {
        foreach ($deducttax as $key => $perc) {
            if ($perc == "Yes" and $deductions[$key] > 0) {
                $de_before .= "\r\n\t\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t\t<td>{$deductname[$key]}</td>\r\n\t\t\t\t\t\t<td>" . CUR . " {$deductions[$key]}</td>\r\n\t\t\t\t\t\t<!--<td>" . CUR . " {$employer_deductions[$key]}</td>//-->\r\n\t\t\t\t\t</tr>";
                $de_beforeamount = $de_beforeamount + $deductions[$key] + $employer_deductions[$key];
                $de_beforeamount_emp += $employer_deductions[$key];
            } elseif ($deductions[$key] > 0) {
                $de_after .= "\r\n\t\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t\t<td>{$deductname[$key]}</td>\r\n\t\t\t\t\t\t<td>" . CUR . " {$deductions[$key]}</td>\r\n\t\t\t\t\t\t<!--<td>" . CUR . " {$employer_deductions[$key]}</td>//-->\r\n\t\t\t\t\t</tr>";
                $de_afteramount = $de_afteramount + $deductions[$key] + $employer_deductions[$key];
                $de_afteramount_emp += $employer_deductions[$key];
            }
        }
    }
    $de_before .= "</table></td></tr>";
    $de_after .= "</table></td></tr>";
    if ($all_beforeamount > 0) {
        $all_before = "<tr><th colspan='2'>Allowances</th></tr>" . $all_before;
    }
    if ($all_afteramount > 0) {
        $all_after = "<tr><th colspan='2'>Allowances</th></tr>" . $all_after;
    }
    if ($de_beforeamount > 0) {
        $de_before = "<tr><th colspan='2'>Deductions</th></tr>" . $de_before;
    } else {
        $de_before = "";
    }
    if ($de_afteramount > 0) {
        $de_after = "<tr><th colspan='2'>Deductions</th></tr>" . $de_after;
    } else {
        $de_after = "";
    }
    // calculate age of employee (if intl., ie has passport num only), act asif under 65
    if (!empty($myEmp["idnum"])) {
        $bd_year = 1900 + substr($myEmp["idnum"], 0, 2);
        $bd_month = substr($myEmp["idnum"], 2, 2);
        $bd_day = substr($myEmp["idnum"], 4, 2);
        /* get the current financial year */
        db_conn("core");
        $sql = "SELECT yrname FROM active";
        $rslt = db_exec($sql) or errDie("Error fetching financial year.");
        if (pg_num_rows($rslt) < 1) {
            return "Please run quick setup first.";
        }
        $fin_year = substr(pg_fetch_result($rslt, 0, 0), 1);
        $sql = "SELECT EXTRACT('year' FROM AGE('{$fin_year}-02-28', '{$bd_year}-{$bd_month}-{$bd_day}'))";
        $rslt = db_exec($sql) or errDie("Error calculating age at financial year end.");
        $age = pg_fetch_result($rslt, 0, 0);
    } else {
        $age = 1;
    }
    /* calculate uif */
    $tmp_uif = $basic_sal + $all_travel + $overamt + $comp_provident + $comp_pension + $comp_ret + $all_beforeamount + $all_afteramount + $comp_medical + $bonus;
    $comp_uif = sprint($tmp_uif * ($myEmp["comp_uif"] / 100));
    $emp_uif = sprint($tmp_uif * ($myEmp["emp_uif"] / 100));
    db_conn("cubit");
    $sql = "SELECT value FROM settings WHERE constant='UIF_MAX'";
    $percrslt = db_exec($sql);
    $perc = pg_fetch_array($percrslt);
    $uifmax = $perc['value'];
    if ($emp_uif > $uifmax) {
        $emp_uif = sprint($uifmax);
    }
    if ($comp_uif > $uifmax) {
        $comp_uif = sprint($uifmax);
    }
    /* calculate sdl */
    $tmp_sdl = $basic_sal + $overamt + $commission + $comp_provident + $all_travel + $all_beforeamount + $all_afteramount + $comp_medical + $bonus;
    if ($age > 65) {
        $tmp_sdl -= $comp_medical;
    }
    $comp_sdl = $tmp_sdl * ($myEmp["comp_sdl"] / 100);
    // calculate loan fringe benefit amount for this month
    if (!empty($myEmp["loanamt"]) && $myEmp["gotloan"] == "t" && $myEmp["loanamt"] > 0) {
        $loanpart = $loaninstall / $myEmp["loanamt"];
        $fringe_loan = sprint($myEmp["loanfringe"] * $loanpart);
    } else {
        $fringe_loan = "0.00";
    }
    $car_count = ($myEmp["fringe_car1"] > 0 ? 1 : 0) + ($myEmp["fringe_car2"] > 0 ? 1 : 0);
    // if car count is one and employee gets a travel allowance, that car's fringe benefit is calculated
    // as if the second car, and ALSO: contribitions/fuel/service amounts are not deducted from benefit
    $car1_travelall = $car_count == 1 && $all_travel > 0;
    if ($car1_travelall) {
        $PERC1 = 0.04;
    } else {
        $PERC1 = 0.018;
    }
    // calculate motor car fringe benefit
    if ($myEmp["fringe_car1"] > 0) {
        $fringe_car1 = $myEmp["fringe_car1"] * ($myEmp["fringe_car1"] >= $myEmp["fringe_car2"] ? $PERC1 : 0.04);
        $fringe_car1 /= $divisor;
        if ($myEmp["fringe_car1_contrib"] > 0 && !$car1_travelall) {
            $fringe_car1 -= $myEmp["fringe_car1_contrib"] / $divisor;
        }
        if ($myEmp["fringe_car1_fuel"] == 1 && !$car1_travelall) {
            $fringe_car1 -= 120 / $divisor;
        }
        if ($myEmp["fringe_car1_service"] == 1 && !$car1_travelall) {
            $fringe_car1 -= 85 / $divisor;
        }
        if ($fringe_car1 < 0) {
            $fringe_car1 = 0;
        }
    } else {
        $fringe_car1 = 0;
    }
    if ($myEmp["fringe_car2"] > 0) {
        $fringe_car2 = $myEmp["fringe_car2"] * ($myEmp["fringe_car2"] > $myEmp["fringe_car1"] ? $PERC1 : 0.04);
        $fringe_car2 /= $divisor;
        if ($myEmp["fringe_car2_contrib"] > 0 && !$car1_travelall) {
            $fringe_car2 -= $myEmp["fringe_car2_contrib"] / $divisor;
        }
        if ($myEmp["fringe_car2_fuel"] == 1 && !$car1_travelall) {
            $fringe_car2 -= 120 / $divisor;
        }
        if ($myEmp["fringe_car2_service"] == 1 && !$car1_travelall) {
            $fringe_car2 -= 85 / $divisor;
        }
        if ($fringe_car2 < 0) {
            $fringe_car2 = 0;
        }
    } else {
        $fringe_car2 = 0;
    }
    $fringe_car1 = sprint($fringe_car1);
    $fringe_car2 = sprint($fringe_car2);
    // calc medical 1/3rd fringe benefits
    $tot_medical = sprint($emp_medical + $comp_medical);
    if ($comp_medical > $tot_medical / 3 * 2) {
        $fringe_medical = sprint($comp_medical - $tot_medical / 3 * 2);
    } else {
        $fringe_medical = 0;
    }
    // calculate total fringe benefits
    $tot_fringe = $fringe_medical + $fringe_car1 + $fringe_car2 + $fringe_loan + $comp_other + $comp_ret + $de_beforeamount_emp + $de_afteramount_emp;
    if (isset($fringeid)) {
        foreach ($fringeid as $key => $value) {
            $fringebens[$key] = sprint($fringebens[$key]);
            $tot_fringe += $fringebens[$key];
        }
    }
    if ($emp_pension > $basic_sal * 7.5 / 100) {
        $emp_pension = $basic_sal * 7.5 / 100;
    }
    $max_ret = $myEmp["basic_sal_annum"] * 7.5 / 100 > 1750 ? $myEmp["basic_sal_annum"] * 7.5 / 100 : 1750;
    // calculate total gross salary
    $grossal = $basic_sal + $commission + $overamt + $bonus + $annual + $all_beforeamount + $all_travel * 0.5 - $de_beforeamount;
    // deductions deducted before paye (non taxible)
    $grossal_2 = $grossal;
    $grossal_nodedall = $basic_sal + $overamt + $bonus + $annual + $all_travel;
    // pension/provident/ra: calculate deduction amounts, limiting them to maximum amount and only deducting
    // ONE of them for taxable income
    if ($comp_pension + $emp_pension > 0) {
        $tmp = ($grossal_2 + $tot_fringe) * $tyear;
        $maxallowed = $tmp * 0.075 > 1750 ? $tmp * 0.075 : 1750;
        if ($emp_pension > $maxallowed) {
            $tmp_ded = $maxallowed;
        } else {
            $tmp_ded = $emp_pension;
        }
        $grossal -= $tmp_ded;
    }
    if ($comp_ret + $emp_ret > 0) {
        $tmp = ($grossal_2 + $tot_fringe) * $tyear;
        // if their is a pension contributions the percentage is 0
        if ($comp_pension + $emp_pension + $comp_provident + $emp_provident > 0) {
            $PERC = 0;
        } else {
            $PERC = 0.15;
        }
        $maxallowed = $tmp * $PERC > 1750 ? $tmp * $PERC : 1750;
        $maxallowed = $maxallowed > 3500 - $emp_pension * 12 ? $maxallowed : 3500 - $emp_pension * 12;
        if ($emp_ret + $comp_ret > $maxallowed / 12) {
            $tmp_ded = $maxallowed / 12;
        } else {
            $tmp_ded = $emp_ret + $comp_ret;
        }
        $grossal -= $tmp_ded;
    }
    // calculate total paye salary
    // just remove annual this month, and add annual divided by 12
    // because paye is calculate for full twelve months and therefore
    // paye salary is average received each month
    $paye_salary = $grossal - $annual + $tot_fringe;
    // total fringe benefits;
    // a little hack, apparently the grossal is displayed wrong, in a strictly antisocial.co.za opinion,
    // i think the person who thinks that must suck
    $grossal += $comp_ret;
    if (isset($mpaye)) {
        $paye = $mpaye_amount;
    } else {
        // calculate paye (take age of 65+ threshold into account)
        if ($age >= 65 && $paye_salary * $tyear < 60000 || $paye_salary * $tyear < 35000) {
            $paye = "0.00";
        } else {
            $paye = calculate_paye($paye_salary, $tyear, $age);
            if ($annual > 0) {
                $tmp_bonpaye = calculate_paye($paye_salary + $annual / 12, $tyear, $age);
                $paye += $tmp_bonpaye * $tyear - $paye * $tyear;
            }
        }
    }
    // fringe benefits
    $i = 0;
    $fringes = "";
    $fringes_desc = "";
    if (isset($fringebens)) {
        foreach ($fringebens as $key => $value) {
            if ($fringebens[$key] > 0) {
                $fringes_desc .= "\r\n\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t<td>{$fringename[$key]}</td>\r\n\t\t\t\t\t<td>" . CUR . " {$fringebens[$key]}</td>\r\n\t\t\t\t</tr>";
                $fringes .= "\r\n\t\t\t\t\t<input type=hidden name='fringebens[]' value='{$fringebens[$key]}'>\r\n\t\t\t\t\t<input type=hidden name='fringeid[]' value='{$fringeid[$key]}'>\r\n\t\t\t\t\t<input type=hidden name='fringename[]' value='{$fringename[$key]}'>\r\n\t\t\t\t\t<input type=hidden name='fringeaccs[]' value='{$fringeaccs[$key]}'>";
            }
        }
    }
    if (!empty($fringes_desc)) {
        $fringes_desc = "<tr><th colspan=2>Fringe Benefits</th></tr>{$fringes_desc}";
    }
    $allow = "";
    # Get allowances names and value from array
    if (isset($allowances)) {
        foreach ($allowances as $key => $value) {
            if ($allowances[$key] > 0) {
                $allow .= "\r\n\t\t\t\t\t<input type='hidden' size='10' name='allowname[]' value='{$allowname[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='allowid[]' value='{$allowid[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='allowances[]' value='{$allowances[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='allowtax[]' value='{$allowtax[$key]}'>\r\n\t\t\t\t\t<input type='hidden' name='allowaccs[]' value='{$allowaccs[$key]}'>";
            }
        }
    }
    $deduct = "";
    if (isset($deductions)) {
        foreach ($deductions as $key => $value) {
            if ($deductions[$key] > 0) {
                $deduct .= "\r\n\t\t\t\t\t<input type='hidden' size='10' name='deductname[]' value='{$deductname[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='deductid[]' value='{$deductid[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='deductions[]' value='{$deductions[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='employer_deductions[]' value='{$employer_deductions[$key]}'>\r\n\t\t\t\t\t<input type='hidden' size='10' name='deducttax[]' value='{$deducttax[$key]}'>\r\n\t\t\t\t\t<input type='hidden' name='dedaccs[]' value='{$dedaccs[$key]}'>\r\n\t\t\t\t\t<input type='hidden' name='bal_dedaccs[]' value='{$bal_dedaccs[$key]}'>";
            }
        }
    }
    $nonretfunding = $basic_sal - $paye - $loaninstall - $de_afteramount + $de_afteramount_emp + $all_afteramount - $emp_pension - $emp_medical - $emp_uif - $emp_provident;
    /*$ret_max = (1800>($nonretfunding*0.15)) ? 1800 : ($nonretfunding*0.15);
    
    	if ( $comp_ret + $emp_ret > $ret_max ) {
    		$comp_ret = $ret_max - $emp_ret;
    
    		if ( $comp_ret < 0 ) {
    			$comp_ret = 0;
    			$emp_ret = $ret_max;
    		}
    	}*/
    $nettpay = $basic_sal + $overamt - $paye - $loaninstall - $de_beforeamount - $de_afteramount + $all_afteramount + $all_beforeamount - $emp_pension - $emp_medical - $emp_ret - $emp_uif - $emp_provident - $emp_other + $all_travel + $annual + $bonus;
    $nettpay = sprint($nettpay);
    if (isset($rbsa)) {
        $nettpay += array_sum($rbsa);
        $nettpay = sprint($nettpay);
    }
    db_conn("cubit");
    # Get bank account name
    $sql = "SELECT * FROM bankacct WHERE bankid = '{$accid}' AND div = '" . USER_DIV . "'";
    $bankRslt = db_exec($sql);
    $bank = pg_fetch_array($bankRslt);
    $basic_sal = sprint($basic_sal);
    $commission = sprint($commission);
    $overamt = sprint($overamt);
    $paye = sprint($paye);
    $nettpay = sprint($nettpay);
    if ($myEmp['paytype'] == "Cash") {
        $paydetails = " <tr class='" . bg_class() . "'><td colspan=2>Pay Salary Cash</td></tr>";
    } else {
        $paydetails = " <tr class='" . bg_class() . "'><td>Bank Account</td><td>{$bank['accname']}</td></tr>";
    }
    $bonus = sprint($bonus);
    $annual = sprint($annual);
    $comp_pension = sprint($comp_pension);
    $emp_medical = sprint($emp_medical);
    $comp_ret = sprint($comp_ret);
    $emp_ret = sprint($emp_ret);
    $loaninstall = sprint($loaninstall);
    $emp_pension = sprint($emp_pension);
    if (!isset($account)) {
        $account = 0;
    } else {
        db_conn('core');
        $Sl = "SELECT * FROM accounts WHERE accid='{$account}'";
        $Ri = db_exec($Sl);
        $ad = pg_fetch_array($Ri);
        $paydetails = " <tr class='" . bg_class() . "'><td>Ledger Account</td><td>{$ad['accname']}</td></tr>";
    }
    db_conn('cubit');
    //$rt="<table border=0 cellpadding='".TMPL_tblCellPadding."' cellspacing='".TMPL_tblCellSpacing."'>
    $Sl = "SELECT * FROM rbs ORDER BY name";
    $Ri = db_exec($Sl) or errDie("Unable to get data.");
    $i = 0;
    $rt = "";
    if (pg_num_rows($Ri) > 0) {
        while ($td = pg_fetch_array($Ri)) {
            if (!isset($rbsa[$td['id']]) || $rbsa[$td['id']] < 1) {
                continue;
            }
            $rbsa[$td['id']] = sprint($rbsa[$td['id']]);
            if ($i == 0) {
                $rt = "<tr><th colspan='2'>Reimbursements</th></tr>";
            }
            $rt .= "\r\n\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t<td><input type='hidden' name='rbs[{$td['id']}]' value='{$td['id']}'>{$td['name']}</td>\r\n\t\t\t\t\t<td>" . CUR . " <input type='hidden' name='rbsa[{$td['id']}]' value='" . $rbsa[$td['id']] . "'>" . $rbsa[$td['id']] . "</td>\r\n\t\t\t\t</tr>";
            $i++;
        }
    } else {
        //$rt.="<tr class='bg-odd'><td colspan=2>There are no reimbursements</td></tr>";
    }
    if ($myEmp['payprd'] == "w") {
        $row = "\r\n\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t<td>Period</td>\r\n\t\t\t\t<td>{$week}</td>\r\n\t\t\t</tr>\r\n\t\t\t<input type='hidden' name='week' value='{$week}'>";
    } else {
        if ($myEmp['payprd'] == "f") {
            $row = "\r\n\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t<td>Period</td>\r\n\t\t\t\t<td>{$week}</td>\r\n\t\t\t</tr>\r\n\t\t\t<input type='hidden' name='week' value='{$week}'>";
        } else {
            $row = "<input type='hidden' name='week' value='0'>";
        }
    }
    $grossal = sprint($grossal);
    $confirm = "\r\n        <table " . TMPL_tblDflts . " width='300'>\r\n        <form action='" . SELF . "' method='POST'>\r\n\t\t\t<input type='hidden' name='key' value='pack'>\r\n\t\t\t<input type='hidden' name='grossal' value='{$grossal}'>\r\n\t\t\t<input type='hidden' name='grossal_nodedall' value='{$grossal_nodedall}'>\r\n\t\t\t<input type='hidden' name='empnum' value='{$empnum}'>\r\n\t\t\t<input type='hidden' name='account' value='{$account}'>\r\n\t\t\t<input type='hidden' name='MON' value={$MON}>\r\n\t\t\t<input type='hidden' name='basic_sal' value='{$basic_sal}'>\r\n\t\t\t<input type='hidden' name='commission' value='{$commission}'>\r\n\t\t\t<input type='hidden' name='overamt' value='{$overamt}'>\r\n\t\t\t<input type='hidden' name='loaninstall' value='{$loaninstall}'>\r\n\t\t\t<input type='hidden' name='paye' value='{$paye}'>\r\n\t\t\t<input type='hidden' name='accid' value='{$accid}'>\r\n\t\t\t<input type='hidden' name='income' value='{$nettpay}'>\r\n\t\t\t<input type='hidden' name='bonus' value='{$bonus}'>\r\n\t\t\t<input type='hidden' name='all_travel' value='{$all_travel}'>\r\n\t\t\t<input type='hidden' name='comp_pension' value='{$comp_pension}'>\r\n\t\t\t<input type='hidden' name='emp_pension' value='{$emp_pension}'>\r\n\t\t\t<input type='hidden' name='comp_medical' value='{$comp_medical}'>\r\n\t\t\t<input type='hidden' name='emp_medical' value='{$emp_medical}'>\r\n\t\t\t<input type='hidden' name='comp_ret' value='{$comp_ret}'>\r\n\t\t\t<input type='hidden' name='emp_ret' value='{$emp_ret}'>\r\n\t\t\t<input type='hidden' name='comp_uif' value='{$comp_uif}'>\r\n\t\t\t<input type='hidden' name='emp_uif' value='{$emp_uif}'>\r\n\t\t\t<input type='hidden' name='comp_sdl' value='{$comp_sdl}'>\r\n\t\t\t<input type='hidden' name='comp_other' value='{$comp_other}'>\r\n\t\t\t<input type='hidden' name='emp_other' value='{$emp_other}'>\r\n\t\t\t<input type='hidden' name='comp_provident' value='{$comp_provident}'>\r\n\t\t\t<input type='hidden' name='emp_provident' value='{$emp_provident}'>\r\n\t\t\t<input type='hidden' name='paye_salary' value='{$paye_salary}'>\r\n\t\t\t<input type='hidden' name='day' value='{$day}'>\r\n\t\t\t<input type='hidden' name='mon' value='{$mon}'>\r\n\t\t\t<input type='hidden' name='year' value='{$year}'>\r\n\t\t\t<input type='hidden' name='novert' value='{$novert}'>\r\n\t\t\t<input type='hidden' name='hovert' value='{$hovert}'>\r\n\t\t\t<input type='hidden' name='annual' value='{$annual}'>\r\n\t\t\t<input type='hidden' name='week' value='{$week}'>\r\n\t\t\t<input type='hidden' name='fringe_medical' value='{$fringe_medical}'>\r\n\t\t\t<input type='hidden' name='fringe_tot' value='{$tot_fringe}'>\r\n\t\t\t<input type='hidden' name='fringe_car1' value='{$fringe_car1}'>\r\n\t\t\t<input type='hidden' name='fringe_car2' value='{$fringe_car2}'>\r\n\t\t\t<input type='hidden' name='fringe_loan' value='{$fringe_loan}'>\r\n\t\t\t<input type='hidden' name='process_comp_deductions' value='{$process_comp_deductions}'>\r\n\t\t\t{$fringes}\r\n\t\t\t{$allow}\r\n\t\t\t{$deduct}\r\n\t\t\t<tr><th colspan='2'>Salary Details</th></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Basic salary</td><td>" . CUR . " {$basic_sal}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Special Bonus/Additional Salary</td><td>" . CUR . " {$bonus}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Bonus(Annual Payments)</td><td>" . CUR . " {$annual}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Commission</td><td>" . CUR . " {$commission}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Travel Allowance</td><td>" . CUR . " {$all_travel}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Pension: Company Contribution</td><td>" . CUR . " {$comp_pension}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Pension: Employee Deduction</td><td>" . CUR . " {$emp_pension}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Provident Fund: Company Contribution</td><td>" . CUR . " {$comp_provident}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Provident Fund: Employee Deduction</td><td>" . CUR . " {$emp_provident}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>UIF: Company Contribution</td><td>" . CUR . " {$comp_uif}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>UIF: Employee Deduction</td><td>" . CUR . " {$emp_uif}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Retirement Annuity: Company Contribution</td><td>" . CUR . " {$comp_ret}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Retirement Annuity: Employee Deduction</td><td>" . CUR . " {$emp_ret}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Medical Aid: Company Contribution</td><td>" . CUR . " {$comp_medical}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Medical Aid: Employee Deduction</td><td>" . CUR . " {$emp_medical}</td></tr>\r\n\t\t\t<!--\r\n\t\t\t<tr class='" . bg_class() . "'><td>Other: Company Contribution</td><td>" . CUR . " {$comp_other}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Other: Employee Deduction</td><td>" . CUR . " {$emp_other}</td></tr>\r\n\t\t\t//-->\r\n\t\t\t<tr class='" . bg_class() . "'><td>Overtime</td><td>" . CUR . " {$overamt}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Medical Fringe Benefit</td><td>" . CUR . " {$fringe_medical}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Motorcar 1 Fringe Benefit</td><td>" . CUR . " {$fringe_car1}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Motorcar 1 Contribution for Use</td><td>" . CUR . " {$myEmp['fringe_car1_contrib']}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Motorcar 2 Fringe Benefit</td><td>" . CUR . " {$fringe_car2}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Motorcar 2 Contribution for Use</td><td>" . CUR . " {$myEmp['fringe_car2_contrib']}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Loan Interest Fringe Benefit</td><td>" . CUR . " {$fringe_loan}</td></tr>\r\n\t\t\t{$fringes_desc}\r\n\t\t\t{$all_before}\r\n\t\t\t{$de_before}\r\n\t\t\t<tr><th colspan='2'>Gross Salary</th></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Gross Salary</td><td>" . CUR . " {$grossal}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>SITE/PAYE</td><td>" . CUR . " {$paye}</td></tr>\r\n\t\t\t<tr><th colspan='2'>Loans</th></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Loan Instalment</td><td>" . CUR . " {$loaninstall}</td></tr>\r\n\t\t\t{$all_after}\r\n\t\t\t{$de_after}\r\n\t\t\t<tr><th colspan='2'>Nett Pay</th></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Nett Pay + Reimbursements</td><td>" . CUR . " {$nettpay}</td></tr>\r\n\t\t\t<tr class='" . bg_class() . "'><td>Amount Paid now</td><td><input type='text' size='10' name='paidamount' value='0'></td></tr>\r\n\t\t\t{$paydetails}\r\n\t\t\t<tr class='" . bg_class() . "'><td>Date</td><td>{$date}</td></tr>\r\n\t\t\t{$row}\r\n\t\t\t{$rt}\r\n\t\t\t<tr><td><br></td></tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td><input type='submit' name='back' value='&laquo; Correction'></td>\r\n\t\t\t\t<td align='right'><input type='submit' value='Write &raquo;'></td>\r\n\t\t\t</tr>\r\n\t\t</form>\r\n\t\t</table>\r\n\t\t<p>\r\n\t\t<table border=0 cellpadding='2' cellspacing='1'>\r\n\t\t\t<tr>\r\n\t\t\t\t<th>Quick Links</th>\r\n\t\t\t</tr>\r\n\t\t\t<script>document.write(getQuicklinkSpecial());</script>\r\n\t\t\t<tr bgcolor='#88BBFF'>\r\n\t\t\t\t<td><a href='../main.php'>Main Menu</a></td>\r\n\t\t\t</tr>\r\n        </table>";
    return $confirm;
}
function process($_POST)
{
    extract($_POST);
    if (isset($btn_correction)) {
        return slctEmployee();
    }
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($empnum, "num", 1, 20, "Invalid employee number.");
    $v->isOk($MON, "num", 1, 2, "Invalid month.");
    global $PRDMON, $MONPRD;
    $yr = getYearOfEmpMon($MON);
    $curyr = getActiveFinYear();
    if ($yr > $curyr || $yr == $curyr && $MON > $PRDMON[12]) {
        $v->addError("", "Cannot do transaction in future financial year. You need\n\t\t\tto close your year first before you can continue.");
    }
    if ($v->isError()) {
        return slctEmployee($v->genErrors());
        return $confirmCust;
    }
    # Get employee details
    global $global_empnum;
    $global_empnum = $empnum;
    db_conn('cubit');
    $sql = "SELECT * FROM employees WHERE empnum='{$empnum}' AND div = '" . USER_DIV . "'";
    $empRslt = db_exec($sql) or errDie("Unable to select employees from database.");
    if (pg_numrows($empRslt) < 1) {
        return "Invalid employee ID.";
    }
    $myEmp = pg_fetch_array($empRslt);
    if ($myEmp["flag"] == "2.5EMP") {
        $OUTPUT = "\n\t\t\t<h3>Process Employee Salary</h3>\n\t\t\t<li class='err'>\n\t\t\t\tDue to the changes from Cubit 2.5 to Cubit 2.6.1 you should first update your employee's\n\t\t\t\tsalary/deduction/allowance information in the employee edit form.\n\t\t\t\tClick <a href='../admin-employee-edit.php?empnum={$empnum}'>here</a> to do so.\n\t\t\t</li>";
        return $OUTPUT;
    }
    if (!empty($idnum)) {
        $bd_year = substr($myEmp["idnum"], 0, 2);
        $bd_month = substr($myEmp["idnum"], 2, 2);
        $bd_day = substr($myEmp["idnum"], 4, 2);
        if (!checkdate($bd_month, $bd_day, $bd_year)) {
            $OUTPUT = "\n\t\t\t\t<h3>Process Employee Salary</h3>\n\t\t\t\t<li class='err'>\n\t\t\t\t\tSelected employee does not have a valid id number and therefore his age cannot be\n\t\t\t\t\tcalculated.<br>\n\t\t\t\t\tPlease update this information in the employee <a href='../admin-employee-edit.php?empnum={$empnum}'>edit</a> form.\n\t\t\t\t</li>";
            return $OUTPUT;
        }
    }
    if ($myEmp["paytype"] == "EFT" && (empty($myEmp["bankname"]) || empty($myEmp["bankaccno"]))) {
        return "Employee banking information not entered.<br>\n\t\t\tClick <a href='../admin-employee-edit.php?empnum={$empnum}'>here</a> employee banking information.";
    }
    $grossal = $myEmp["basic_sal"] + $myEmp["commission"] + $myEmp["bonus"];
    $yy = date("Y");
    $mm = $MON;
    $mm += 0;
    if ($myEmp['payprd'] == "m") {
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    } else {
        $yy = date("Y");
        $mm = $MON;
        $mm += 0;
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$week}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$week}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    }
    if (empty($paid)) {
        return slctPrd("<li class='err'>You have not processed a salary for that period.</li>");
    }
    /* calculate basic salary divisors and multipliers
     * used for calculating deductions/allowances/etc. when the
     * salary type and payment period differs in length
     */
    switch ($myEmp["saltyp"]) {
        case "h":
            $divisor = 1;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = $myEmp["hpweek"] / 5;
                    break;
                case "w":
                    $multiplier = $myEmp["hpweek"];
                    break;
                case "f":
                    $multiplier = $myEmp["hpweek"] * 2;
                    break;
                case "m":
                    $multiplier = $myEmp["hpweek"] * 52 / 12;
                    break;
            }
            break;
        case "m":
            $divisor = 1;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = 12 / (5 * 52);
                    break;
                case "w":
                    $multiplier = 12 / 52;
                    break;
                case "f":
                    $multiplier = 12 / 26;
                    break;
                case "m":
                    $multiplier = 1;
                    break;
            }
            break;
        case "w":
            $divisor = 52 / 12;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = 1 / 5;
                    break;
                case "w":
                    $multiplier = 1;
                    break;
                case "f":
                    $multiplier = 2;
                    break;
                case "m":
                    $multiplier = 52 / 12;
                    break;
            }
            break;
        case "f":
            $divisor = 26 / 12;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = 1 / 10;
                    break;
                case "w":
                    $multiplier = 1 / 2;
                    break;
                case "f":
                    $multiplier = 1;
                    break;
                case "m":
                    $multiplier = 26 / 12;
                    break;
            }
            break;
    }
    /* BEGIN: retrieve/populate amounts to reverse */
    switch ($myEmp["payprd"]) {
        case "m":
            $spw = "true";
            break;
        case "d":
            $spw = "week='{$pday}'";
            break;
        case "f":
        case "w":
            $spw = "week='{$week}'";
            break;
    }
    /* previous salary entries in salpaid/salr */
    $vals = array("paye", "hours", "salrate", "comm", "bonus", "novert", "hovert");
    $prevsal = array();
    /* FP: CALCULATE PREVIOUS */
    /* previous salary entries in emp_(inc|com|ded|frin) */
    foreach ($vals as $vn) {
        /* process */
        $sql = "SELECT sum({$vn}) FROM salpaid WHERE empnum='{$empnum}' AND ({$spw}) AND month='{$MON}' and cyear='" . EMP_YEAR . "'";
        $rslt = db_exec($sql) or errDie("Unable to get paye");
        $prevsal[$vn] = pg_fetch_result($rslt, 0, 0);
        /* reverse */
        $sql = "SELECT sum({$vn}) FROM salr WHERE empnum='{$empnum}' AND ({$spw}) AND month='{$MON}' and cyear='" . EMP_YEAR . "'";
        $rslt = db_exec($sql) or errDie("Unable to get paye");
        $prevsal[$vn] -= pg_fetch_result($rslt, 0, 0);
        vsprint($prevsal[$vn]);
    }
    //do we want to include overtime in the reversal? ... yes plz ...
    $h1 = $prevsal['novert'];
    $h2 = $prevsal['hovert'];
    //FP use this to go though tables and get info to reverse (bonus etc)
    $vals = array("emp_ded" => array("DEDP" => "emp_pension", "DEDV" => "emp_provident", "UIFE" => "emp_uif", "DEDR" => "emp_ret", "DEDA" => "myEmp[fringe_car1_contrib]", "DEDB" => "myEmp[fringe_car2_contrib]", "DEDM" => "emp_medical", "DEDO" => "emp_other"), "emp_com" => array("COMP" => "comp_pension", "COMV" => "comp_provident", "UIFC" => "comp_uif", "COMR" => "comp_ret", "COMM" => "comp_medical", "COMO" => "comp_other", "SDL" => "sdl"), "emp_frin" => array());
    foreach ($vals as $table => $pd) {
        foreach ($pd as $code => $vn) {
            /* process */
            $sql = "\n\t\t\t\tSELECT sum(amount) \n\t\t\t\tFROM {$table} \n\t\t\t\tWHERE emp='{$empnum}' AND type='{$code}' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "' LIMIT 1";
            $rslt = db_exec($sql) or errDie("Unable to get paye");
            if (strlen(pg_fetch_result($rslt, 0, 0)) > 0) {
                $prevsal[$vn] = pg_fetch_result($rslt, 0, 0);
            } else {
                $prevsal[$vn] = "0.00";
            }
        }
    }
    /* END: retrieve/populate amounts to reverse */
    # fringe benefits
    $fringes = "";
    $i = 0;
    $sql = "SELECT * FROM fringebens WHERE div = '" . USER_DIV . "' ORDER BY fringeben";
    $rslt = db_exec($sql) or errDie("Unable to select allowances from database.");
    if (pg_num_rows($rslt) < 1) {
        $fringes = "\n\t\t\t<tr>\n\t\t\t\t<td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td>\n\t\t\t</tr>\n";
    } else {
        while ($myFringe = pg_fetch_array($rslt)) {
            # check if employee has allowance
            $sql = "SELECT * FROM empfringe WHERE fringeid='{$myFringe['id']}' AND empnum='{$myEmp['empnum']}' AND div = '" . USER_DIV . "'";
            $empRslt = db_exec($sql) or errDie("Unable to retrieve fringe benefit info from database.");
            if (pg_numrows($empRslt) > 0) {
                $empFringe = pg_fetch_array($empRslt);
                $sql = "SELECT sum(amount) FROM cubit.emp_frin WHERE emp='{$empnum}' AND type='{$myFringe['id']}' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "'";
                $amtRslt = db_exec($sql);
                $empFringe["amount"] = pg_fetch_result($amtRslt, 0, 0);
                //				if ( substr($empFringe["type"], 0, 4) == "Perc" ) {
                //					$empFringe["amount"] = sprint($myEmp["basic_sal"] * ($empFringe["amount"]/100) / $divisor);
                //				} else {
                //					$empFringe['amount'] = sprint($empFringe['amount'] / $divisor);
                //				}
                $grossal += $empFringe["amount"];
                $tmp_fringeaccs = $empFringe["accid"];
                $tmp_fringebens = $empFringe["amount"];
            } else {
                $tmp_fringeaccs = "0";
                $tmp_fringebens = "0.00";
            }
            $fringes .= "\n\t\t\t\t<input type='hidden' name='fringeid[]' value='{$myFringe['id']}'>\n\t\t\t\t<input type='hidden' name='fringename[]' value='{$myFringe['fringeben']}'>\n\t\t\t\t<input type='hidden' name='fringeaccs[]' value='{$tmp_fringeaccs}'>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>{$myFringe['fringeben']}</td>\n\t\t\t\t\t<td align='center'>\n\t\t\t\t\t\t" . CUR . " {$tmp_fringebens}\n\t\t\t\t\t\t<input type='hidden' size=10 name='fringebens[]' value='{$tmp_fringebens}'>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>";
            $i++;
        }
    }
    # get allowances
    $allowances = "";
    $i = 0;
    $sql = "SELECT * FROM allowances WHERE div = '" . USER_DIV . "' ORDER BY allowance";
    $allowRslt = db_exec($sql) or errDie("Unable to select allowances from database.");
    if (pg_numrows($allowRslt) < 1) {
        $allowances = "<tr><td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td></tr>\n";
    } else {
        while ($myAllow = pg_fetch_array($allowRslt)) {
            # check if employee has allowance
            $sql = "SELECT * FROM empallow WHERE allowid='{$myAllow['id']}' AND empnum='{$myEmp['empnum']}' AND div = '" . USER_DIV . "'";
            $empAllowRslt = db_exec($sql) or errDie("Unable to select allowance info from database.");
            if (pg_numrows($empAllowRslt) > 0) {
                $myEmpAllow = pg_fetch_array($empAllowRslt);
                $sql = "SELECT sum(amount) FROM cubit.emp_inc WHERE emp='{$empnum}' AND type='{$myAllow['id']}' AND ex != 'SUBS' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "'";
                $amtRslt = db_exec($sql);
                $myEmpAllow["amount"] = pg_fetch_result($amtRslt, 0, 0);
                //				if ( substr($myEmpAllow["type"], 0, 4) == "Perc" ) {
                //					$myEmpAllow["amount"] = sprint($myEmp["basic_sal"] * ($myEmpAllow["amount"]/100) / $divisor);
                //				} else {
                //					$myEmpAllow['amount'] = sprint($myEmpAllow['amount'] / $divisor);
                //				}
                $grossal += $myEmpAllow["amount"];
                $tmp_allowaccs = $myEmpAllow["accid"];
                $tmp_allowances = $myEmpAllow["amount"];
            } else {
                $tmp_allowaccs = $myAllow["accid"];
                $tmp_allowances = "0.00";
            }
            $allowances .= "\n\t\t\t\t<input type='hidden' size='10' name='allowid[]' value='{$myAllow['id']}'>\n\t\t\t\t<input type='hidden' size='30' name='allowname[]' value='{$myAllow['allowance']}'>\n\t\t\t\t<input type='hidden' size='10' name='allowtax[]' value='{$myAllow['add']}'>\n\t\t\t\t<input type='hidden' name='allowaccs[]' value='{$tmp_allowaccs}'>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>{$myAllow['allowance']}</td>\n\t\t\t\t\t<td align='center'>" . CUR . " {$tmp_allowances}<input type='hidden' size='10' name='allowances[]' value='{$tmp_allowances}'></td>\n\t\t\t\t</tr>";
            $i++;
        }
    }
    $subsistence = "";
    $subslst = new dbSelect("subsistence", "cubit", array("where" => "div='" . USER_DIV . "'", "order" => "name"));
    $subslst->run();
    $subs_int = false;
    if ($subslst->num_rows() > 0) {
        $i = 0;
        $subsistence .= "\n\t\t\t<tr>\n\t\t\t\t<td colspan='10'>\n\t\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t\t<th>Amount</th>\n\t\t\t\t\t\t\t<th>Days</th>\n\t\t\t\t\t\t</tr>";
        $empsubs = new dbSelect("emp_subsistence", "cubit");
        while ($subs = $subslst->fetch_array()) {
            $sid = $subs["id"];
            $empsubs->setOpt(array("where" => "empnum='{$empnum}' AND subid='{$sid}'"));
            $empsubs->run();
            if ($empsubs->num_rows() <= 0) {
                $si["amount"] = "0.00";
                $si["days"] = "0";
                $si["accid"] = $subs["accid"];
            } else {
                $si = $empsubs->fetch_array();
            }
            if ($subs["in_republic"] != "yes") {
                $subs_int = true;
            }
            $subsistence .= "\n\t\t\t\t<input type='hidden' name='subsname[{$sid}]' value='{$subs['name']}'>\n\t\t\t\t<input type='hidden' name='subsacc[{$sid}]' value='{$si['accid']}'>\n\t\t\t\t<input type='hidden' name='subsrep[{$sid}]' value='{$subs['in_republic']}'>\n\t\t\t\t<input type='hidden' name='subsmeal[{$sid}]' value='{$subs['meals']}'>\n\t\t\t\t<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t\t<td>{$subs['name']}</td>\n\t\t\t\t\t<td>" . CUR . " {$si['amount']}<input type='hidden' name='subsamt[{$sid}]' value='{$si['amount']}'></td>\n\t\t\t\t\t<td>{$si['days']}<input type='hidden' name='subsdays[{$sid}]' value='{$si['days']}'></td>\n\t\t\t\t</tr>";
        }
        if ($subs_int) {
            $subsistence .= "\n\t\t\t\t<input type='hidden' name='subs_exch' value='1'>\n\t\t\t\t<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t\t<td colspan='3'><li class='err'>Please calculate the rand amount prior to completing the amount above.</li></td\n\t\t\t\t</tr>";
            // 				<tr bgcolor='".bgcolor($i)."'>
            // 					<td colspan='2'>Exchange (ZAR-USD):</td>
            // 					<td>".xrate_get("USD")."<input type='hidden' name='subs_exch' value='".xrate_get("USD")."'></td>
            // 				</tr>";
        }
        $subsistence .= "\n\t\t\t</table>\n\t\t\t</td></tr>";
    }
    # Deductions
    $deductions = "";
    $i = 0;
    $sql = "SELECT * FROM salded WHERE div = '" . USER_DIV . "' ORDER BY deduction";
    $deductRslt = db_exec($sql) or errDie("Unable to select deductions from database.");
    if (pg_numrows($deductRslt) < 1) {
        $deductions = "\n\t\t\t<tr>\n\t\t\t\t<td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td>\n\t\t\t</tr>\n";
    } else {
        while ($myDeduct = pg_fetch_array($deductRslt)) {
            # check if employee has deduction
            $sql = "SELECT * FROM empdeduct WHERE dedid='{$myDeduct['id']}' AND empnum='{$myEmp['empnum']}' AND div = '" . USER_DIV . "'";
            $empDeductRslt = db_exec($sql) or errDie("Unable to select Deduction info from database.");
            if (pg_numrows($empDeductRslt) > 0) {
                $myEmpDeduct = pg_fetch_array($empDeductRslt);
                if ($myEmpDeduct["grosdeduct"] == "y") {
                    $deductions_msg = "(Deducted from Gross Salary)";
                    $sal_calcfrom = $grossal;
                } else {
                    $deductions_msg = "";
                    $sal_calcfrom = $myEmp['basic_sal'];
                }
                $sql = "SELECT sum(amount) FROM cubit.emp_ded WHERE emp='{$empnum}' AND type='{$myDeduct['id']}' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "'";
                $amtRslt = db_exec($sql);
                $myEmpDeduct['amount'] = pg_fetch_result($amtRslt, 0, 0);
                //if ($myEmpDeduct['type'] == "Amount") {
                //	$myEmpDeduct['amount'] = sprint($myEmpDeduct['amount'] / $divisor);
                //} else {
                //	$myEmpDeduct['amount'] = sprint($sal_calcfrom*$myEmpDeduct['amount']/100 / $divisor);
                //}
                // calculate employer contribution to deduction
                $sql = "SELECT sum(amount) FROM cubit.emp_com WHERE emp='{$empnum}' AND type='{$myDeduct['id']}' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "'";
                $amtRslt = db_exec($sql);
                $myEmpDeduct["employer_amount"] = pg_fetch_result($amtRslt, 0, 0);
                //if ( $myEmpDeduct["employer_type"] == "Amount" ) {
                //	$myEmpDeduct["employer_amount"] = sprint($myEmpDeduct["employer_amount"] / $divisor);
                //} else {
                //	$myEmpDeduct["employer_amount"] = sprint($myEmpDeduct["amount"] * $myEmpDeduct["employer_amount"] / 100 / $divisor);
                //}
                $tmp_deductions = $myEmpDeduct["amount"];
                $tmp_dedaccs = $myEmpDeduct["accid"];
                $tmp_emp_ded = $myEmpDeduct["employer_amount"];
                $tmp_grosdeduct = $myEmpDeduct["grosdeduct"];
            } else {
                #employee may have R0.00 entered into deduction fields ....
                #in which case no db entries will exist ... manually check these vars here ...
                $sql = "SELECT sum(amount) FROM cubit.emp_ded WHERE emp='{$empnum}' AND type='{$myDeduct['id']}' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "'";
                $runsql = db_exec($sql) or errDie("Unable to get employee deduction information.");
                if (pg_numrows($runsql) > 0) {
                    $myEmpDeduct['amount'] = pg_fetch_result($runsql, 0, 0);
                    $sql2 = "SELECT * FROM cubit.salded WHERE id = '{$myDeduct['id']}'";
                    $run_sql2 = db_exec($sql2) or errDie("Unable to get employee deductions information");
                    if (pg_numrows($run_sql2) > 0) {
                        $darr = pg_fetch_array($run_sql2);
                        $tmp_dedaccs = $darr["accid"];
                    } else {
                        $tmp_dedaccs = $myEmpDeduct["accid"];
                    }
                    $sql = "SELECT sum(amount) FROM cubit.emp_com WHERE emp='{$empnum}' AND type='{$myDeduct['id']}' AND ({$spw}) AND period='{$MON}' AND year='" . EMP_YEAR . "'";
                    $amtRslt = db_exec($sql);
                    $myEmpDeduct["employer_amount"] = pg_fetch_result($amtRslt, 0, 0);
                    $tmp_deductions = $myEmpDeduct["amount"];
                    $tmp_emp_ded = $myEmpDeduct["employer_amount"];
                    $tmp_grosdeduct = $myEmpDeduct["grosdeduct"];
                } else {
                    $tmp_deductions = "0.00";
                    $tmp_emp_ded = "0.00";
                    $tmp_dedaccs = $myDeduct["accid"] != 0 ? $myDeduct["accid"] : $myDeduct["expaccid"];
                    $tmp_grosdeduct = "n";
                    $deductions_msg = "";
                }
            }
            $deductions .= "\n\t\t\t\t<input type='hidden' size='10' name='employer_deductions[]' value='{$tmp_emp_ded}'>\n\t\t\t\t<input type='hidden' size='10' name='deducttax[]' value='{$myDeduct['add']}'>\n\t\t\t\t<input type='hidden' name='grosdeduct[]' value='{$tmp_grosdeduct}'>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>{$myDeduct['deduction']} {$deductions_msg}</td>\n\t\t\t\t\t<td align='center'>\n\t\t\t\t\t\t" . CUR . " {$tmp_deductions}\n\t\t\t\t\t\t<input type='hidden' size='10' name='deductid[]' value='{$myDeduct['id']}'>\n\t\t\t\t\t\t<input type='hidden' size='30' name='deductname[]' value='{$myDeduct['deduction']}'>\n\t\t\t\t\t\t<input type='hidden' size='10' name='deductions[]' value='{$tmp_deductions}'>\n\t\t\t\t\t\t<input type='hidden' name='dedaccs[]' value='{$tmp_dedaccs}'>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>";
            $i++;
        }
    }
    $deductions .= "";
    /* get loan installment for applicable month */
    db_conn("cubit");
    $sql = "SELECT * FROM emp_loaninstallments WHERE empnum='{$empnum}' AND fmonth='{$mm}' AND fyear='" . EMP_YEAR . "' LIMIT 1";
    $rslt = db_exec($sql) or errDie("Error reading possible loan installment information.");
    if (pg_num_rows($rslt) > 0) {
        $loandata = pg_fetch_array($rslt);
        $myEmp["loaninstall"] = $loandata["installment"];
        $tm_loaninstall = $loandata["installment"];
        $fringe_loan = $loandata["fringe"];
        $loanint = $loandata["interest"];
        $loaninstall_date = $loandata["fdate"];
        $loaninstall_prd = $loandata["fperiod"];
    } else {
        $myEmp['loaninstall'] = "0.00";
        $tm_loaninstall = "0.00";
        $fringe_loan = "0.00";
        $loanint = "0.00";
        $loaninstall_date = "0000-00-00";
        $loaninstall_prd = "0";
    }
    $salarr = array("m" => "Per Month", "w" => "Per Week", "f" => "Fortnightly", "h" => "Per Hour");
    $salnarr = array("d" => "Day(s)", "h" => "Hour(s)");
    $saltype = $salarr[$myEmp['saltyp']];
    $multi = round($prevsal["hours"]);
    if ($myEmp['saltyp'] == 'd' || $myEmp['saltyp'] == 'h') {
        $salntype = $salnarr[$myEmp['saltyp']];
        $multi_show = "x <input type='hidden' size='3' name='multi' value='{$multi}'>{$multi} {$salntype}";
    } else {
        $multi_show = "<input type='hidden' name='multi' value='{$multi}'>";
        $saltype = "";
    }
    db_conn('cubit');
    $Sl = "SELECT * FROM bankacct WHERE btype != 'int' AND div = '" . USER_DIV . "' ORDER BY accname ASC";
    $Ry = db_exec($Sl) or errDie("Unable to get bank account.");
    if (pg_numrows($Ry) < 1) {
        return "<li class='err'> There are no bank accounts found in Cubit.</li>\n\t\t<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct Selection'>";
    }
    $banks = "<select name='accid'>";
    while ($acc = pg_fetch_array($Ry)) {
        $banks .= "<option value='{$acc['bankid']}'>{$acc['accname']} ({$acc['acctype']})</option>";
    }
    $banks .= "</select>";
    $myEmp['loaninstall'] += 0;
    if ($myEmp['paytype'] == "Cash") {
        $paydetails = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td colspan='2'>Employee paid cash</td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='accid' value='0'>";
    } else {
        if ($myEmp['paytype'] == "Ledger Account") {
            db_conn('core');
            $Sl = "SELECT accid,accname FROM accounts ORDER BY accname";
            $Ri = db_exec($Sl);
            $accounts = "\n\t\t\t<select name='account'>\n\t\t\t\t<option value='#'>Select Account</option>";
            while ($ad = pg_fetch_array($Ri)) {
                if (isset($account) && $account == $ad['accid']) {
                    $sel = "selected";
                } else {
                    $sel = "";
                }
                $accounts .= "<option value='{$ad['accid']}'>{$ad['accname']}</option>";
            }
            $accounts .= "</select>";
            $paydetails = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Ledger Account for payment</td>\n\t\t\t\t<td>{$accounts}</td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='accid' value='0'>";
        } else {
            $paydetails = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Bank Account</td>\n\t\t\t\t<td valign='center'>{$banks}</td>\n\t\t\t</tr>";
        }
    }
    //	$h1 = "";
    //	$h2 = "";
    $db = array("comp_pension" => $myEmp["comp_pension"], "emp_pension" => $myEmp["emp_pension"], "comp_provident" => $myEmp["comp_provident"], "emp_provident" => $myEmp["emp_provident"], "comp_uif" => $myEmp["comp_uif"], "emp_uif" => $myEmp["emp_uif"], "comp_other" => $myEmp["comp_other"], "emp_other" => $myEmp["emp_other"]);
    if (isset($basic_sal)) {
        $myEmp['basic_sal'] = $basic_sal;
        $myEmp['all_travel'] = $all_travel;
        $myEmp['bonus'] = $bonus;
        $myEmp['commission'] = $commission;
        $myEmp['abonus'] = $abonus;
        $myEmp['loaninstall'] = $loaninstall;
        $myEmp['comp_pension'] = $comp_pension;
        $myEmp['emp_pension'] = $emp_pension;
        $myEmp["comp_provident"] = $comp_provident;
        $myEmp["emp_provident"] = $emp_provident;
        //$myEmp["comp_uif"] = $comp_uif;
        //$myEmp["emp_uif"] = $emp_uif;
        $myEmp["comp_other"] = $comp_other;
        $myEmp["emp_other"] = $emp_other;
        $myEmp['comp_medical'] = $comp_medical;
        $myEmp['emp_medical'] = $emp_medical;
        $myEmp['comp_ret'] = $comp_ret;
        $myEmp['emp_ret'] = $emp_ret;
        //		$h1 = $novert;
        //		$h2 = $hovert;
    } else {
        //$day = date("d");
        //$mon = date("m");
        //$year = date("Y");
        if ($myEmp["payprd"] == "w" || $myEmp["payprd"] == "f") {
            $tmpmon = date("j");
            $daycount = date("t");
            $dayweek = date("D");
            if (strtolower($dayweek) == $myEmp["payprd_day"] && $date_day + 7 > $daycount) {
                $process_comp_deductions = true;
            } else {
                $process_comp_deductions = false;
            }
        } else {
            $process_comp_deductions = true;
        }
        $effective_basicsal = $myEmp["basic_sal"] * $multiplier;
        /* we only changing basic sal for non hourly employees,
        			because for hourly employees we change the hours ($mutli)  */
        if ($myEmp["saltyp"] != "h") {
            $myEmp["basic_sal"] *= $multiplier;
        }
        $myEmp["emp_pension"] = sprint($effective_basicsal * ($myEmp["emp_pension"] / 100));
        $myEmp["comp_pension"] = sprint($effective_basicsal * ($myEmp["comp_pension"] / 100));
        $myEmp["emp_provident"] = sprint($effective_basicsal * ($myEmp["emp_provident"] / 100));
        $myEmp["comp_provident"] = sprint($effective_basicsal * ($myEmp["comp_provident"] / 100));
        $myEmp["emp_medical"] = sprint($myEmp["emp_medical"] / $divisor);
        $myEmp["comp_medical"] = sprint($myEmp["comp_medical"] / $divisor);
        $myEmp["emp_ret"] = sprint($myEmp["emp_ret"] / $divisor);
        $myEmp["comp_ret"] = sprint($myEmp["comp_ret"] / $divisor);
        $myEmp["loaninstall"] = sprint($myEmp["loaninstall"] / $divisor);
        $myEmp["all_travel"] = sprint($myEmp["all_travel"] / $divisor);
        if (!isset($salyr)) {
            $salyr = "";
        }
        explodeDate($myEmp["loandate"], $loana_year, $loana_month, $loana_day);
        if ($loana_year > $salyr || $loana_year == $salyr && $loana_month > $MON) {
            $myEmp["loanint"] = 0;
            $myEmp["loaninstall"] = 0;
        }
    }
    /*	db_conn('cubit');
    	$sql = "SELECT value FROM settings WHERE constant='UIF_MAX'";
    	$percrslt = db_exec($sql);
    	$perc = pg_fetch_array($percrslt);
    	$uifmax = $perc['value'];
    
    	if ( $myEmp["emp_uif"] > $uifmax ) {
    	$myEmp["emp_uif"] = $uifmax;
    	}
    	if ( $myEmp["comp_uif"] > $uifmax ) {
    	$myEmp["comp_uif"] = $uifmax;
    	}
    	*/
    $rt = "<tr><th colspan='2'>Reimbursements</th></tr>";
    $Sl = "SELECT * FROM cubit.rbs ORDER BY name";
    $Ri = db_exec($Sl) or errDie("Unable to get data.");
    $i = 0;
    if (pg_num_rows($Ri) > 0) {
        while ($td = pg_fetch_array($Ri)) {
            if (!isset($rbsa[$td['id']])) {
                $rbsa[$td['id']] = "";
            }
            $rt .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><input type='hidden' name='rbs[{$td['id']}]' value='{$td['id']}'>{$td['name']}</td>\n\t\t\t\t\t<td>" . CUR . " " . $rbsa[$td['id']] . "<input type='hidden' size='10' name='rbsa[{$td['id']}]' value='" . $rbsa[$td['id']] . "' class=right></td>\n\t\t\t\t</tr>";
            $i++;
        }
    } else {
        $rt .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td colspan='2' align='center'>There are no reimbursements</td>\n\t\t\t</tr>";
    }
    if (!isset($annual) && $myEmp["sal_bonus_month"] == $MON) {
        $annual = $myEmp["sal_bonus"];
    } else {
        if (!isset($annual)) {
            $annual = 0;
        }
    }
    if ($myEmp["payprd"] == "m" || $myEmp["payprd"] == "d") {
        // count the amount of weekdays in this month
        $workdays = 0;
        for ($i = 1; $i <= date("t", mktime(0, 0, 0, $MON, 1, date("Y"))); ++$i) {
            $wd = date("w", mktime(0, 0, 0, $MON, $i, date("Y")));
            if ($wd != 0 && $wd != 6) {
                ++$workdays;
            }
        }
        // hours per day calculation
        $hpd = $myEmp["hpweek"] / 5;
        if (!isset($wh_total)) {
            $wh_total = $workdays * $hpd;
        }
        if (!isset($wh_actual)) {
            $wh_actual = $wh_total;
        }
    }
    if ($myEmp["payprd"] == "w") {
        if (!isset($wh_total)) {
            $wh_total = $myEmp["hpweek"];
        }
        if (!isset($wh_actual)) {
            $wh_actual = $wh_total;
        }
    }
    if ($myEmp["payprd"] == "f") {
        if (!isset($wh_total)) {
            $wh_total = $myEmp["hpweek"] * 2;
        }
        if (!isset($wh_actual)) {
            $wh_actual = $wh_total;
        }
    }
    $js_workhours = "\n\t\t<script>\n\t\t\tsf = document.getElementById('salfrm');\n\n\t\t\tf_sal\t\t= sf.elements['basic_sal'];\n\t\t\tf_whtot\t\t= sf.elements['wh_total'];\n\t\t\tf_whact\t\t= sf.elements['wh_actual'];\n\t\t\tf_cpension\t= sf.elements['comp_pension'];\n\t\t\tf_epension \t= sf.elements['emp_pension'];\n\t\t\tf_cprov\t\t= sf.elements['comp_provident'];\n\t\t\tf_eprov\t\t= sf.elements['emp_provident'];\n\t\t\t//f_cuif\t= sf.elements['comp_uif'];\n\t\t\t//f_euif\t= sf.elements['emp_uif'];\n\t\t\tf_cother\t= sf.elements['comp_other'];\n\t\t\tf_eother\t= sf.elements['emp_other'];\n\n\t\t\tdb_cpension\t= " . $db["comp_pension"] . ";\n\t\t\tdb_epension\t= " . $db["emp_pension"] . ";\n\t\t\tdb_cprov\t= " . $db["comp_provident"] . ";\n\t\t\tdb_eprov\t= " . $db["emp_provident"] . ";\n\t\t\t//db_cuif\t= " . $db["comp_uif"] . ";\n\t\t\t//db_euif\t= " . $db["emp_uif"] . ";\n\t\t\tdb_cother\t= " . $db["comp_other"] . ";\n\t\t\tdb_eother\t= " . $db["emp_other"] . ";\n\n\t\t\tval_sal \t\t= -1;\n\n\t\t\t// changing the workhours\n\t\t\tfunction workhours() {\n\t\t\t\tif ( val_sal < 0 ) val_sal = parseFloat(f_sal.value);\n\n\t\t\t\tval_whtot\t= parseFloat(f_whtot.value);\n\t\t\t\tval_whact\t= parseFloat(f_whact.value);\n\n\t\t\t\tif ( val_whtot >= val_whact ) {\n\t\t\t\t\tp = val_whact / val_whtot;\n\n\t\t\t\t\t// calculate the new basic salary\n\t\t\t\t\tx = val_sal * p;\n\t\t\t\t\tx = x.toFixed(2);\n\t\t\t\t\tf_sal.value = x;\n\n\t\t\t\t\t// calculate the new values\n\t\t\t\t\tval_cpension \t\t= x * db_cpension / 100;\n\t\t\t\t\tval_epension \t\t= x * db_epension / 100;\n\t\t\t\t\tval_cprov\t\t= x * db_cprov / 100;\n\t\t\t\t\tval_eprov\t\t= x * db_eprov / 100;\n\t\t\t\t\t//val_cuif\t\t= x * db_cuif / 100;\n\t\t\t\t\t//val_euif\t\t= x * db_euif / 100;\n\t\t\t\t\tval_cother\t\t= x * db_cother / 100;\n\t\t\t\t\tval_eother\t\t= x * db_eother / 100;\n\n\t\t\t\t\tval_cpension \t\t= val_cpension.toFixed(2);\n\t\t\t\t\tval_epension \t\t= val_epension.toFixed(2);\n\t\t\t\t\tval_cprov \t\t= val_cprov.toFixed(2);\n\t\t\t\t\tval_eprov\t\t= val_eprov.toFixed(2);\n\t\t\t\t\t//val_cuif\t\t= val_cuif.toFixed(2);\n\t\t\t\t\t//val_euif\t\t= val_euif.toFixed(2);\n\t\t\t\t\tval_cother\t\t= val_cother.toFixed(2);\n\t\t\t\t\tval_eother\t\t= val_eother.toFixed(2);\n\n\t\t\t\t\tf_cpension.value\t= val_cpension;\n\t\t\t\t\tf_epension.value \t= val_epension;\n\t\t\t\t\tf_cprov.value \t\t= val_cprov;\n\t\t\t\t\tf_eprov.value\t\t= val_eprov;\n\t\t\t\t\t//f_cuif.value\t\t= val_cuif;\n\t\t\t\t\t//f_euif.value\t\t= val_euif;\n\t\t\t\t\tf_cother.value\t\t= val_cother;\n\t\t\t\t\tf_eother.value\t\t= val_eother;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction changedfield() {\n\t\t\t\tval_whtot\t= parseFloat(f_whtot.value);\n\t\t\t\tval_whact\t= parseFloat(f_whact.value);\n\n\t\t\t\tp = val_whtot / val_whact;\n\n\t\t\t\tval_sal = parseFloat(f_sal.value) * p;\n\t\t\t\tval_sal = val_sal.toFixed(2);\n\t\t\t}\n\t\t</script>";
    $process = "\n\t\t<h3>Reverse Salary for {$myEmp['sname']}, {$myEmp['fnames']}</h3>\n\t\t<form action='" . SELF . "' method='POST' id='salfrm'>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<td><input type='submit' name='back' value='&laquo; Correction'></td>\n\t\t\t\t<td align='right'><input type='submit' value='Confirm &raquo;'></td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='key' value='confirm'>\n\t\t\t<input type='hidden' name='empnum' value='{$empnum}'>\n\t\t\t<input type='hidden' name='MON' value='{$MON}'>\n\t\t\t<input type='hidden' name='date_day' value='{$date_day}' />\n\t\t\t<input type='hidden' name='date_month' value='{$date_month}' />\n\t\t\t<input type='hidden' name='date_year' value='{$date_year}' />\n\t\t\t<input type='hidden' name='day' value='{$date_day}' />\n\t\t\t<input type='hidden' name='mon' value='{$date_month}' />\n\t\t\t<input type='hidden' name='year' value='{$date_year}' />\n\t\t\t<input type='hidden' name='saltyp' value='{$myEmp['saltyp']}'>\n\t\t\t<input type='hidden' name='process_comp_deductions' value='{$process_comp_deductions}'>\n\t\t\t<input type='hidden' name='divisor' value='{$divisor}'>";
    if ($myEmp["saltyp"] == "h") {
        $process .= "<li class='err'>Please remember to enter the amount of hours you wish to reverse the salary for.</li>";
    }
    vsprint($myEmp["basic_sal"]);
    if (!isset($week)) {
        $week = "0";
    }
    if (!isset($pday)) {
        $pday = "0";
    }
    $weekpday = "\n\t\t<input type='hidden' name='week' value='{$week}'/>\n\t\t<input type='hidden' name='pday' value='{$pday}' />";
    $process .= "\n\t\t<tr>\n\t\t\t<th colspan='2'>Salary Details</th>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Basic salary</td>\n\t\t\t<td nowrap>" . CUR . " <input type='hidden' size='10' name='basic_sal' value='{$prevsal['salrate']}' class='right' onChange='changedfield();'> {$prevsal['salrate']} {$saltype} {$multi_show}</td>\n\t\t</tr>";
    if ($myEmp["payprd"] == "d") {
        $process .= "\n\t\t\t<input type='hidden' name='wh_total' value='1'>\n\t\t\t<input type='hidden' name='wh_actual' value='1'>";
    } else {
        $process .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Total Work Hours:</td>\n\t\t\t\t<td><input type='hidden' size='10' name='wh_total' value='{$wh_total}' class='right' onChange='workhours();'>{$wh_total}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Actual Hours Worked:</td>\n\t\t\t\t<td><input type='hidden' size='10' name='wh_actual' value='{$wh_actual}' class='right' onChange='workhours();'>{$wh_actual}</td>\n\t\t\t</tr>";
    }
    $process .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Normal Overtime</td>\n\t\t\t\t<td><input type='hidden' size='5' name='novert' value='{$h1}' class='right'>{$h1} Hrs</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Public Holiday Overtime</td>\n\t\t\t\t<td><input type='hidden' size='5' name='hovert' value='{$h2}' class='right'>{$h2} Hrs</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<!--<td>Special Bonus/Additional Salary</td>-->\n\t\t\t\t<td>Annual Bonus</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' name='bonus' value='0' class='right'><input type='hidden' name='abonus' value='{$prevsal['bonus']}' class='right'>{$prevsal['bonus']}</td>\n\t\t\t\t<!--<td rowspan='2' class='err'>An amount entered here (Special Bonus/Additional\n\t\t\t\t\tSalary) will be treated as a recurring bonus/payment per pay period for PAYE\n\t\t\t\t\tpurposes, the amount will not be treated as an annual payment. If the\n\t\t\t\t\tamount paid as a bonus is a once off/annual payment please use the\n\t\t\t\t\tBonus(Annual Payments) option. In other cases PAYE has to be manually\n\t\t\t\t\tadjusted <u>per directive</u> from SARS when processing salary.\n\t\t\t\t</td>-->\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='annual' value='0' />\n\t\t\t<!--<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Bonus(Annual/Once Off Payments)</td>\n\t\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='annual' value='{$annual}' class='right'></td>\n\t\t\t</tr>-->\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Commission</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='commission' value='{$prevsal['comm']}' class='right'>{$prevsal['comm']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Low or interest-free loan</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size=10 name=loaninstall value='{$tm_loaninstall}' class=right>{$tm_loaninstall}</td>\n\t\t\t\t<input type='hidden' name='fringe_loan' value='{$fringe_loan}'>\n\t\t\t\t<input type='hidden' name='loanint' value='{$loanint}'>\n\t\t\t\t<input type='hidden' name='loaninstall_date' value='{$loaninstall_date}'>\n\t\t\t\t<input type='hidden' name='loaninstall_prd' value='{$loaninstall_prd}'>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Travel Allowance</td>\n\t\t\t\t<td>R <input type='hidden' size='10' name='all_travel' value='{$myEmp['all_travel']}' class='right'>{$myEmp['all_travel']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Pension: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='comp_pension' value='{$prevsal['comp_pension']}' class='right'>{$prevsal['comp_pension']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Pension: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='emp_pension' value='{$prevsal['emp_pension']}' class='right'>{$prevsal['emp_pension']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Provident: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='comp_provident' value='{$prevsal['comp_provident']}' class='right'>{$prevsal['comp_provident']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Provident: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='emp_provident' value='{$prevsal['emp_provident']}' class='right'>{$prevsal['emp_provident']}</td>\n\t\t\t</tr>\n\t\t\t<!--\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>UIF: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='comp_uif' value='{$prevsal['comp_uif']}' class='right'>{$prevsal['comp_uif']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>UIF: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='emp_uif' value='{$prevsal['emp_uif']}' class='right'>{$prevsal['comp_uif']}</td>\n\t\t\t</tr>\n\t\t\t//-->\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Retirement Annuity: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='comp_ret' value='{$prevsal['comp_ret']}' class='right'>{$prevsal['comp_ret']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Retirement Annuity: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='emp_ret' value='{$prevsal['emp_ret']}' class='right'>{$prevsal['emp_ret']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Medical Contribution: Company</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='comp_medical' value='{$prevsal['comp_medical']}' class='right'>{$prevsal['comp_medical']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Medical Contribution: Employee</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='emp_medical' value='{$prevsal['emp_medical']}' class='right'>{$prevsal['emp_medical']}</td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='comp_other' value='0'>\n\t\t\t<input type='hidden' name='emp_other' value='0'>\n\t\t\t<!--\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Other: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='comp_other' value='{$prevsal['comp_other']}' class='right'>{$prevsal['comp_other']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap>Other: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " <input type='hidden' size='10' name='emp_other' value='{$prevsal['emp_other']}' class='right'>{$prevsal['emp_other']}</td>\n\t\t\t</tr>\n\t\t\t//-->\n\t\t\t{$paydetails}\n\t\t\t<input type='hidden' name='mpaye' value='1' />\n\t\t\t<input type='hidden' size=10 value='" . sprint($prevsal["paye"]) . "' name='mpaye_amount' />\n\t\t\t<tr><th colspan='2'>Fringe Benefits</th></tr>\n\t\t\t{$fringes}\n\t\t\t<tr><th colspan='2'>Allowances</th></tr>\n\t\t\t{$allowances}\n\t\t\t<tr><th colspan='2'>Subsistence Allowances</th></tr>\n\t\t\t{$subsistence}\n\t\t\t<tr><th colspan='2'>Deductions</th></tr>\n\t\t\t{$deductions}\n\t\t\t<tr><th colspan='2'>Reimbursements</th></tr>\n\t\t\t{$rt}\n\t\t\t{$weekpday}\n\t\t\t<tr>\n\t\t\t\t<td><input type='submit' name='back' value='&laquo; Correction'></td>\n\t\t\t\t<td align='right'><input type='submit' value='Confirm &raquo;'></td>\n\t\t\t</tr>\n\t\t\t{$js_workhours}\n\t\t</table>\n\t\t</form>";
    return $process;
}
function confirm($_POST)
{
    # get vars
    $_POST = var_makesafe($_POST);
    extract($_POST);
    if (isset($back)) {
        return slctEmployee();
    }
    $annual += 0;
    $bonus = 0;
    $abonus += 0;
    $mpaye_amount += 0;
    # validate input
    require_lib("validate");
    $v = new validate();
    if (isset($account)) {
        $v->isOk($account, "num", 1, 9, "Invalid ledger account.");
    }
    $v->isOk($empnum, "num", 1, 9, "Invalid employee number.");
    $v->isOk($accid, "num", 1, 9, "Invalid bank number.");
    $v->isOk($MON, "num", 1, 2, "Invalid month.");
    $v->isOk($abonus, "float", 1, 11, "Invalid bonus.");
    $v->isOk($mpaye_amount, "float", 1, 40, "Invalid manual PAYE amount.");
    $v->isOk($all_travel, "float", 1, 11, "Invalid travel allowance.");
    $v->isOk($comp_pension, "float", 1, 11, "Invalid company pension.");
    $v->isOk($comp_medical, "float", 1, 11, "Invalid company medical.");
    $v->isOk($emp_pension, "float", 1, 11, "Invalid employee pension.");
    $v->isOk($emp_medical, "float", 1, 11, "Invalid employee medical.");
    $v->isOk($comp_provident, "float", 1, 11, "Invalid company provident.");
    $v->isOk($emp_provident, "float", 1, 11, "Invalid employee provident.");
    //$v->isOk ($comp_uif, "float", 1, 11, "Invalid company uif.");
    //$v->isOk ($emp_uif, "float", 1, 11, "Invalid employee uif.");
    $v->isOk($comp_other, "float", 1, 11, "Invalid company other.");
    $v->isOk($emp_other, "float", 1, 11, "Invalid employee other.");
    $v->isOk($comp_ret, "float", 1, 11, "Invalid company ret.");
    $v->isOk($emp_ret, "float", 1, 11, "Invalid employee ret.");
    $v->isOk($basic_sal, "float", 1, 11, "Invalid basic salary.");
    $v->isOk($commission, "float", 0, 11, "Invalid commision.");
    $v->isOk($loaninstall, "float", 0, 11, "Invalid loan installment.");
    $v->isOk($loanint, "float", 0, 11, "Invalid loan interest.");
    if ($divisor != 1 && round($divisor, 2) != round(52 / 12, 2) && round($divisor) != round(26 / 12, 2)) {
        //$v->addError("", "Invalid pay period (DIVIS).");
    }
    if ($saltyp == 'd' || $saltyp == 'h') {
        $salnarr = array("d" => "Days", "h" => "Hours");
        $salntype = $salnarr[$saltyp];
        $v->isOk($multi, "float", 1, 5, "Invalid number of {$salntype}.");
        if ($multi < 1) {
            $v->addError("", "Error : Employee cannot be paid for {$multi} {$salntype}.");
        }
    }
    if (isset($allowances)) {
        foreach ($allowances as $key => $value) {
            $v->isOk($allowances[$key], "float", 0, 11, "Invalid allowance amount " . ($key + 1) . ".");
        }
    }
    if (isset($deductid)) {
        foreach ($deductid as $key => $value) {
            $v->isOk($deductid[$key], "num", 1, 9, "Invalid deductions ID.");
        }
    }
    if (isset($deductions)) {
        foreach ($deductions as $key => $value) {
            $v->isOk($deductions[$key], "float", 0, 11, "Invalid deduction amount" . ($key + 1) . ".");
        }
    }
    if (isset($allowid)) {
        foreach ($allowid as $key => $value) {
            $v->isOk($allowid[$key], "num", 1, 9, "Invalid allowance ID.");
        }
    }
    if (isset($allowtax)) {
        foreach ($allowtax as $key => $value) {
            $v->isOk($allowtax[$key], "string", 1, 3, "Invalid allowance tax option" . ($key + 1) . ".");
        }
    }
    if (!isset($pday)) {
        $pday = "";
    }
    $date = $year . "-" . $mon . "-" . $day;
    $pdate = mkdate($year, $MON, $pday);
    if (!checkdate($mon, $day, $year)) {
        $v->isOk($date, "num", 1, 1, "Invalid date .");
    }
    # display errors, if any
    if ($v->isError()) {
        $confirmCust = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirmCust .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        return $confirmCust . process($_POST);
    }
    $basic_sal_save = $basic_sal;
    global $global_empnum;
    $global_empnum = $empnum;
    db_conn('cubit');
    $sql = "SELECT * FROM employees WHERE empnum='{$empnum}' AND div = '" . USER_DIV . "'";
    $empRslt = db_exec($sql) or errDie("Unable to select employees from database.");
    if (pg_numrows($empRslt) < 1) {
        return "Invalid employee ID.";
    }
    $myEmp = pg_fetch_array($empRslt);
    if ($myEmp['payprd'] == "d") {
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$pday}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$pday}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    } elseif ($myEmp['payprd'] == "w") {
        $yy = date("Y");
        $mm = $MON;
        $mm += 0;
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$week}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$week}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    } else {
        if ($myEmp['payprd'] == "f") {
            $yy = date("Y");
            $mm = $MON;
            $mm += 0;
            $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$week}' AND cyear='" . EMP_YEAR . "'";
            $Ri = db_exec($Sl);
            $paid = pg_num_rows($Ri);
            $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND week='{$week}' AND cyear='" . EMP_YEAR . "'";
            $Ri = db_exec($Sl);
            $upaid = pg_num_rows($Ri);
            $upaid += 0;
            $paid -= $upaid;
        }
    }
    if (isset($paid) && $paid > 0) {
        return process($_POST, "<li class='err'>You have already processed a salary for that period.</li>");
    }
    $salconacc = gethook("accnum", "salacc", "name", "salaries control");
    $salconacc_orig = gethook("accnum", "salacc", "name", "salaries control original");
    if ($salconacc != $salconacc_orig) {
        block_check($salconacc);
    }
    block_check($uifbal = gethook("accnum", "salacc", "name", "uifbal"));
    block_check($intrec = gethook("accnum", "salacc", "name", "interestreceived"));
    block_check($sdlbal = gethook("accnum", "salacc", "name", "sdlbal"));
    block_check($pa = gethook("accnum", "salacc", "name", "pension"));
    block_check($ma = gethook("accnum", "salacc", "name", "medical"));
    block_check($cash_account = gethook("accnum", "salacc", "name", "cash"));
    block_check($retire = gethook("accnum", "salacc", "name", "retire"));
    block_check($provident = gethook("accnum", "salacc", "name", "provident"));
    block_check($commacc = gethook("accnum", "salacc", "name", "Commission"));
    block_check($abonusacc = gethook("accnum", "salacc", "name", "Bonus"));
    block_check($payeacc = gethook("accnum", "salacc", "name", "PAYE"));
    block_check($uifacc = gethook("accnum", "salacc", "name", "UIF"));
    block_check($providente = $myEmp["expacc_provident"]);
    block_check($retiree = $myEmp["expacc_ret"]);
    block_check($pax = $myEmp["expacc_pension"]);
    block_check($uifexp = $myEmp["expacc_uif"]);
    block_check($max = $myEmp["expacc_medical"]);
    block_check($dedgenerale = $myEmp["expacc_other"]);
    block_check($sdlexp = $myEmp["expacc_sdl"]);
    block_check($salacc = $myEmp["expacc_salwages"]);
    block_check($reimbursexp = $myEmp["expacc_reimburs"]);
    if (($loanexp = $myEmp["expacc_loan"]) > 0) {
        block_check($loanexp);
    }
    if (isset($allowaccs)) {
        foreach ($allowaccs as $checkacc) {
            block_check($checkacc);
        }
    }
    if (isset($dedaccs)) {
        foreach ($dedaccs as $k => $checkacc) {
            block_check($checkacc);
        }
    }
    finish_block_check();
    /* check if hire date before pay date */
    explodeDate($myEmp["hiredate"], $hd_year, $hd_month, $hd_day);
    $MONempyear = getYearOfEmpMon($MON);
    switch ($myEmp["payprd"]) {
        case "m":
            $extra = false;
            break;
        case "d":
            $extra = $hd_year == $MONempyear && $hd_month == $MON && $pday < $hd_day;
            break;
        case "w":
        case "f":
            $extra = $hd_year == $MONempyear && $hd_month == $MON && $weekends[$week] < $hd_day;
            break;
    }
    if ($hd_year > $MONempyear || $hd_year == $MONempyear && $hd_month > $MON || $extra) {
        return process($_POST, "<li class='err'>Employee was not employed in the period\n\t\t\trequested.</li>");
    }
    # The Paye
    $tyear = 12;
    switch ($myEmp["payprd"]) {
        case 'm':
            $tyear = 12;
            break;
        case 'w':
            $tyear = 52;
            break;
        case 'f':
            $tyear = 26;
            break;
        case 'd':
            $tyear = 5 * 52;
            break;
    }
    if ($myEmp["saltyp"] != "h") {
        if ($myEmp["saltyp"] == "w") {
            $perhr = sprint($basic_sal / $wh_actual);
        } else {
            $perhr = sprint($basic_sal * $tyear / ($myEmp['hpweek'] * 52));
        }
    } else {
        $perhr = $basic_sal;
    }
    $overamt = $novert * ($perhr * $myEmp['novert']);
    $overamt += $hovert * ($perhr * $myEmp['hovert']);
    $overamt = sprint($overamt);
    # Multiply basic_sal add overtime
    if (isset($multi)) {
        $basic_sal = sprint($basic_sal * $multi);
        //$tyear = ($tyear/$multi);
    } else {
        $basic_sal = $basic_sal;
    }
    # Zero if not specified
    $commission = $commission + 0;
    $loaninstall = $loaninstall + 0;
    //$basic_sal=$basic_sal+$commission;
    $all_before = "";
    $all_after = "";
    $all_beforeamount = 0;
    $all_afteramount = 0;
    if (isset($allowtax)) {
        foreach ($allowtax as $key => $perc) {
            if ($perc == "Yes" and $allowances[$key] > 0) {
                $all_before .= "<tr class='" . bg_class() . "'><td>{$allowname[$key]}</td><td>" . CUR . " {$allowances[$key]}</td></tr>";
                $all_beforeamount = $all_beforeamount + $allowances[$key];
            } elseif ($allowances[$key] > 0) {
                $all_after .= "<tr class='" . bg_class() . "'><td>{$allowname[$key]}</td><td>" . CUR . " {$allowances[$key]}</td></tr>";
                $all_afteramount = $all_afteramount + $allowances[$key];
            }
        }
    }
    $subsistence = "";
    $subs_taxable = 0;
    $subs_total = 0;
    $i = 0;
    if (isset($subsname)) {
        if (isset($subs_exch) && $subs_exch == 0) {
            $subs_exch = 1;
        }
        foreach ($subsname as $sid => $sn) {
            if ($subsrep[$sid] == "yes") {
                //2012
                $nontax = $subsdays[$sid] * ($subsmeal[$sid] == "yes" ? 303 : 93);
                $subs_total += $subsamt[$sid];
            } else {
                //2012
                //TODO
                // outside republic, 215 dollars
                $nontax = $subsdays[$sid] * (215 / $subs_exch);
                $subs_total += $subsamt[$sid] * $subs_exch;
            }
            $tmp = $subsamt[$sid] - $nontax;
            if ($tmp > 0) {
                $subs_taxable += $tmp / $divisor;
            }
            $subsistence .= "\n\t\t\t\t<input type='hidden' name='subsname[{$sid}]' value='{$subsname[$sid]}'>\n\t\t\t\t<input type='hidden' name='subsacc[{$sid}]' value='{$subsacc[$sid]}'>\n\t\t\t\t<input type='hidden' name='subsamt[{$sid}]' value='{$subsamt[$sid]}'>\n\t\t\t\t<input type='hidden' name='subsrep[{$sid}]' value='{$subsrep[$sid]}'>\n\t\t\t\t<input type='hidden' name='subsmeal[{$sid}]' value='{$subsmeal[$sid]}'>\n\t\t\t\t<input type='hidden' name='subsdays[{$sid}]' value='{$subsdays[$sid]}'>\n\t\t\t\t<!--<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t\t<td>{$subsname[$sid]}</td>\n\t\t\t\t\t<td>" . CUR . " {$subsamt[$sid]}</td>\n\t\t\t\t\t<td>{$subsdays[$sid]}</td>\n\t\t\t\t</tr>-->";
        }
        if (false && !empty($subsistence)) {
            $subsistence = "\n\t\t\t<tr><td colspan='20'>\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th colspan='3'>Subsistence Allowances</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th>Name</th>\n\t\t\t\t<th>Amount</th>\n\t\t\t\t<th>Days</th>\n\t\t\t</tr>\n\t\t\t{$subsistence}\n\t\t\t</table>\n\t\t\t</td></tr>";
        }
    }
    $de_before = "";
    $de_after = "";
    $de_beforeamount = 0;
    $de_afteramount = 0;
    $de_beforeamount_emp = 0;
    $de_afteramount_emp = 0;
    if (isset($deducttax)) {
        foreach ($deducttax as $key => $perc) {
            if ($perc == "Yes" and $deductions[$key] > 0) {
                $de_before .= "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td>{$deductname[$key]}</td>\n\t\t\t\t\t\t<td>" . CUR . " {$deductions[$key]}</td>\n\t\t\t\t\t\t<!--<td>" . CUR . " {$employer_deductions[$key]}</td>//-->\n\t\t\t\t\t</tr>";
                $de_beforeamount = $de_beforeamount + $deductions[$key] + $employer_deductions[$key];
                $de_beforeamount_emp += $employer_deductions[$key];
            } elseif ($deductions[$key] > 0) {
                $de_after .= "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td>{$deductname[$key]}</td>\n\t\t\t\t\t\t<td>" . CUR . " {$deductions[$key]}</td>\n\t\t\t\t\t\t<!--<td>" . CUR . " {$employer_deductions[$key]}</td>//-->\n\t\t\t\t\t</tr>";
                $de_afteramount = $de_afteramount + $deductions[$key] + $employer_deductions[$key];
                $de_afteramount_emp += $employer_deductions[$key];
            }
        }
    }
    $de_before .= "";
    $de_after .= "";
    if ($all_beforeamount > 0) {
        $all_before = "<tr><th colspan='2'>Allowances</th></tr>" . $all_before;
    }
    if ($all_afteramount > 0) {
        $all_after = "<tr><th colspan='2'>Allowances</th></tr>" . $all_after;
    }
    if ($de_beforeamount > 0) {
        $de_before = "<tr><th colspan='2'>Deductions</th></tr>" . $de_before;
    } else {
        $de_before = "";
    }
    if ($de_afteramount > 0) {
        $de_after = "<tr><th colspan='2'>Deductions</th></tr>" . $de_after;
    } else {
        $de_after = "";
    }
    // calculate age of employee (if intl., ie has passport num only), act asif under 65
    if (!empty($myEmp["idnum"])) {
        $bd_year = 1900 + substr($myEmp["idnum"], 0, 2);
        $bd_month = substr($myEmp["idnum"], 2, 2);
        $bd_day = substr($myEmp["idnum"], 4, 2);
        /* get the current financial year */
        db_conn("core");
        $sql = "SELECT yrname FROM active";
        $rslt = db_exec($sql) or errDie("Error fetching financial year.");
        if (pg_num_rows($rslt) < 1) {
            return "Please run quick setup first.";
        }
        $fin_year = substr(pg_fetch_result($rslt, 0, 0), 1);
        if (!checkdate($bd_month, $bd_day, $bd_year)) {
            return "<li class='err'>Please <a href='../admin-employee-edit.php?empnum={$myEmp['empnum']}'>change</a> employees ID Number to valid ID Number</li>" . process($_POST);
        }
        $sql = "SELECT EXTRACT('year' FROM AGE('{$fin_year}-02-28', '{$bd_year}-{$bd_month}-{$bd_day}'))";
        $rslt = db_exec($sql) or errDie("Error calculating age at financial year end.");
        $age = pg_fetch_result($rslt, 0, 0);
    } else {
        $age = 1;
    }
    // calculate loan fringe benefit amount for this month
    if (!empty($myEmp["loanamt"]) && $myEmp["gotloan"] == "t" && $myEmp["loanamt"] > 0) {
        $loanpart = $loaninstall / $myEmp["loanamt"];
        $fringe_loan = sprint($myEmp["loanfringe"] * $loanpart);
    } else {
        $fringe_loan = "0.00";
    }
    payedbg("sal/annum: {$myEmp['basic_sal_annum']}<br />", false);
    payedbg("divisor: {$divisor}<br />", false);
    //2012
    // calculate motor car fringe benefit
    if ($myEmp["fringe_car1"] > 0) {
        $deduct_perc = 0;
        // Employee has travel allowance?
        if ($myEmp["all_travel"] > 0) {
            $deduct_perc = 0.0325;
        } else {
            $deduct_perc = 0.035;
        }
        $fringe_car1 = $myEmp["fringe_car1"] * $deduct_perc;
    }
    // Second fringe car will always be 3.25%
    if ($myEmp["fringe_car2"] > 0) {
        $fringe_car2 = $myEmp["fringe_car2"] * 0.0325;
    }
    $fringe_car1 = sprint($fringe_car1);
    $fringe_car2 = sprint($fringe_car2);
    payedbg("fringe_car1: {$fringe_car1}<br />", false);
    payedbg("fringe_car2: {$fringe_car2}<br />", false);
    // calc medical fringe benefits
    if ($comp_medical > 0) {
        // calculate dependants after first one
        $tmp_deps = $myEmp["emp_meddeps"] - 2;
        if ($tmp_deps < 0) {
            $tmp_deps = 0;
        }
        //2009
        // calculate paragraph 12A amount
        //first 2 dependants are 530 each (1060) rest is 320 each.
        //$p12A_amt = ($myEmp["emp_meddeps"] > 1 ? 1060 : 530) + ($tmp_deps * 320);
        //2010
        // calculate paragraph 12A amount
        //first 2 dependants are 625 each (1250) rest is 380 each.
        //$p12A_amt = ($myEmp["emp_meddeps"] > 1 ? 1250 : 625) + ($tmp_deps * 380);
        //2011
        // calculate paragraph 12A amount
        //first 2 dependants are 670 each (1340) rest is 410 each.
        //$p12A_amt = ($myEmp["emp_meddeps"] > 1 ? 1340 : 820) + ($tmp_deps * 410);
        //2012
        // calculate paragraph 12A amount
        //first 2 dependants are 230 each (460) rest is 154 each.
        $p12A_amt = ($myEmp["emp_meddeps"] > 1 ? 460 : 230) + $tmp_deps * 154;
        // calculate taxable fringe benefit amount
        $fringe_medical = sprint($comp_medical - $p12A_amt / $divisor);
        if ($fringe_medical < 0) {
            $fringe_medical = 0;
        }
    } else {
        $fringe_medical = 0;
    }
    payedbg("medical fringe: {$fringe_medical}<br />", false);
    // calculate total fringe benefits
    $tot_fringe = $fringe_medical + $fringe_car1 + $fringe_car2 + $fringe_loan + $comp_other + $comp_ret + $de_beforeamount_emp + $de_afteramount_emp + $subs_taxable;
    // subsistance
    if (isset($fringeid)) {
        foreach ($fringeid as $key => $value) {
            $fringebens[$key] = sprint($fringebens[$key]);
            $tot_fringe += $fringebens[$key];
        }
    }
    vsprint($tot_fringe);
    payedbg("total fringe: {$tot_fringe}<br />", false);
    if ($emp_pension > $basic_sal * 7.5 / 100) {
        $emp_mpension = $basic_sal * 7.5 / 100;
    } else {
        $emp_mpension = $emp_pension;
    }
    $max_ret = $myEmp["basic_sal_annum"] * 7.5 / 100 > 1750 ? $myEmp["basic_sal_annum"] * 7.5 / 100 : 1750;
    // calculate total gross salary
    $grossal = $basic_sal + $commission + $abonus + $overamt + $bonus + $annual + $all_beforeamount + $all_travel * 0.8 - $de_beforeamount;
    // deductions deducted before paye (non taxible)
    $grossal_2 = $grossal;
    $taxed_all = $all_afteramount + $all_travel * 0.8;
    $grossal_nodedall = $basic_sal + $overamt + $bonus + $annual + $all_travel;
    #UIF HAX
    $uif_grosssal = $grossal;
    // pension/provident/ra: calculate deduction amounts, limiting them to maximum amount and only deducting
    // ONE of them for taxable income
    if ($comp_pension + $emp_pension > 0) {
        $tmp = ($grossal_2 + $tot_fringe) * $tyear;
        $maxallowed = $tmp * 0.075 > 1750 ? $tmp * 0.075 : 1750;
        if ($emp_mpension > $maxallowed) {
            $tmp_ded = $maxallowed;
        } else {
            $tmp_ded = $emp_mpension;
        }
        $grossal -= $tmp_ded;
        payedbg("pension maxded (-gross): {$tmp_ded}<br />", false);
    }
    if ($comp_ret + $emp_ret > 0) {
        $tmp = ($grossal_2 + $tot_fringe) * $tyear;
        // if their is a pension contributions the percentage is 0
        if ($comp_pension + $emp_pension + $comp_provident + $emp_provident > 0) {
            $PERC = 0;
        } else {
            $PERC = 0.15;
        }
        $maxallowed = $tmp * $PERC > 1750 ? $tmp * $PERC : 1750;
        $maxallowed = $maxallowed > 3500 - $emp_pension * $divisor * 12 ? $maxallowed : 3500 - $emp_pension * 12;
        if (($emp_ret + $comp_ret) * $divisor > $maxallowed / 12) {
            $tmp_ded = $maxallowed / 12 / $divisor;
        } else {
            $tmp_ded = $emp_ret + $comp_ret;
        }
        $grossal -= $tmp_ded;
        payedbg("retfund maxded (-gross): {$tmp_ded}<br />", false);
    }
    // calculate total paye salary
    // just remove annual this month, and add annual divided by 12
    // because paye is calculate for full twelve months and therefore
    // paye salary is average received each month
    $paye_salary = $grossal - $annual + $tot_fringe;
    // total fringe benefits;
    //print "--------- $uif_grossal - $annual + $tot_fringe;----------<br>";
    #UIF HAX
    $uif_paye_salary = $uif_grosssal - $annual + $tot_fringe;
    /* calculate uif */
    $tmp_remun = $paye_salary + $annual - $commission - $abonus;
    #UIF HAX
    $uif_tmp_remun = $uif_paye_salary + $annual - $commission - $abonus;
    //	$comp_uif = sprint($tmp_remun * ($myEmp["comp_uif"] / 100));
    //	$emp_uif = sprint($tmp_remun * ($myEmp["emp_uif"] / 100));
    #UIF HAX
    $comp_uif = sprint($uif_tmp_remun * ($myEmp["comp_uif"] / 100));
    $emp_uif = sprint($uif_tmp_remun * ($myEmp["emp_uif"] / 100));
    $uifmax = getCSetting("UIF_MAX");
    if ($emp_uif > $uifmax) {
        $emp_uif = sprint($uifmax);
    }
    if ($comp_uif > $uifmax) {
        $comp_uif = sprint($uifmax);
    }
    /* calculate sdl */
    $tmp_remun = $paye_salary + $annual;
    if (getCSetting("SDLPAYABLE") == "y") {
        $tmp_sdl = $tmp_remun;
        if ($age > 65) {
            $tmp_sdl -= $comp_medical;
        }
        $comp_sdl = $tmp_sdl * ($myEmp["comp_sdl"] / 100);
    } else {
        $comp_sdl = 0;
    }
    // a little hack, apparently the grossal is displayed wrong, in a strictly opinion based evodamion
    $grossal += $comp_ret;
    // add rest of travel allowance
    $grossal += $all_travel * 0.2;
    if (isset($mpaye)) {
        $paye = $mpaye_amount;
    } else {
        // calculate paye (take age of 65+ threshold into account)
        //2008
        //		if ( ($age >= 65 && ($paye_salary * $tyear) < 69000) || ($paye_salary * $tyear) < 43000 ) {
        //2009
        // 		if ( ($age >= 65 && ($paye_salary * $tyear) < 74000) || ($paye_salary * $tyear) < 46000 ) {
        //2010
        // 		if ( ($age >= 65 && ($paye_salary * $tyear) < 84200) || ($paye_salary * $tyear) < 54200 ) {
        //2011
        //		if ( ($age >= 65 && ($paye_salary * $tyear) < 88528) || ($paye_salary * $tyear) < 57000 ) {
        //2012
        if ($age >= 65 && $age < 75 && $paye_salary * $tyear < 99056 || $age >= 75 && $paye_salary * $tyear < 110889 || $paye_salary * $tyear < 63556) {
            $paye = "0.00";
        } else {
            if ($myEmp["payprd"] == "w" || $myEmp["payprd"] == "f") {
                $paye_prd = "{$MON}:{$week}";
            } else {
                if ($myEmp["payprd"] == "d") {
                    $paye_prd = "{$MON}:{$pday}";
                } else {
                    $paye_prd = "{$MON}";
                }
            }
            payedbg("paye salary: {$paye_salary}<br />", false);
            $paye = calculate_paye($myEmp, $paye_prd, $paye_salary, $tyear, $age);
            if ($annual > 0) {
                $tmp_bonpaye = calculate_paye($myEmp, $paye_prd, $paye_salary + $annual / 12, $tyear, $age);
                $paye += $tmp_bonpaye * $tyear - $paye * $tyear;
            }
        }
    }
    // fringe benefits
    $i = 0;
    $fringes = "";
    $fringes_desc = "";
    if (isset($fringebens)) {
        foreach ($fringebens as $key => $value) {
            if ($fringebens[$key] > 0) {
                $fringes_desc .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>{$fringename[$key]}</td>\n\t\t\t\t\t<td>" . CUR . " {$fringebens[$key]}</td>\n\t\t\t\t</tr>";
                $fringes .= "\n\t\t\t\t\t<input type='hidden' name='fringebens[]' value='{$fringebens[$key]}'>\n\t\t\t\t\t<input type='hidden' name='fringeid[]' value='{$fringeid[$key]}'>\n\t\t\t\t\t<input type='hidden' name='fringename[]' value='{$fringename[$key]}'>\n\t\t\t\t\t<input type='hidden' name='fringeaccs[]' value='{$fringeaccs[$key]}'>";
            }
        }
    }
    if (!empty($fringes_desc)) {
        $fringes_desc = "<tr><th colspan='2'>Fringe Benefits</th></tr>{$fringes_desc}";
    }
    $allow = "";
    # Get allowances names and value from array
    if (isset($allowances)) {
        foreach ($allowances as $key => $value) {
            if ($allowances[$key] > 0) {
                $allow .= "\n\t\t\t\t\t<input type='hidden' size='10' name='allowname[]' value='{$allowname[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='allowid[]' value='{$allowid[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='allowances[]' value='{$allowances[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='allowtax[]' value='{$allowtax[$key]}'>\n\t\t\t\t\t<input type='hidden' name='allowaccs[]' value='{$allowaccs[$key]}'>";
            }
        }
    }
    $deduct = "";
    if (isset($deductions)) {
        foreach ($deductions as $key => $value) {
            if ($deductions[$key] > 0) {
                $deduct .= "\n\t\t\t\t\t<input type='hidden' size='10' name='deductname[]' value='{$deductname[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='deductid[]' value='{$deductid[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='deductions[]' value='{$deductions[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='employer_deductions[]' value='{$employer_deductions[$key]}'>\n\t\t\t\t\t<input type='hidden' size='10' name='deducttax[]' value='{$deducttax[$key]}'>\n\t\t\t\t\t<input type='hidden' name='dedaccs[]' value='{$dedaccs[$key]}'>";
            }
        }
    }
    $nonretfunding = $basic_sal - $paye - $loaninstall - $de_afteramount + $de_afteramount_emp + $all_afteramount - $emp_pension - $emp_medical - $emp_uif - $emp_provident;
    /*$ret_max = (1800>($nonretfunding*0.15)) ? 1800 : ($nonretfunding*0.15);
    
    	if ( $comp_ret + $emp_ret > $ret_max ) {
    		$comp_ret = $ret_max - $emp_ret;
    
    		if ( $comp_ret < 0 ) {
    			$comp_ret = 0;
    			$emp_ret = $ret_max;
    		}
    	}*/
    $nettpay = $basic_sal + $overamt - $paye + $commission + $abonus - $loaninstall - $de_beforeamount - $de_afteramount + $all_afteramount + $all_beforeamount - $emp_pension - $emp_medical - $emp_ret - $emp_uif - $emp_provident - $emp_other + $annual + $bonus + $all_travel - $myEmp["fringe_car1_contrib"] - $myEmp["fringe_car2_contrib"] + $subs_total;
    $nettpay = sprint($nettpay);
    if (isset($rbsa)) {
        $nettpay += array_sum($rbsa);
        $nettpay = sprint($nettpay);
    }
    $rt = "";
    db_conn("cubit");
    $Sl = "SELECT * FROM cubit.rbs ORDER BY name";
    $Ri = db_exec($Sl) or errDie("Unable to get data.");
    $i = 0;
    if (pg_num_rows($Ri) > 0) {
        while ($td = pg_fetch_array($Ri)) {
            if (!isset($rbsa[$td['id']]) || $rbsa[$td['id']] < 1) {
                continue;
            }
            $rbsa[$td['id']] = sprint($rbsa[$td['id']]);
            if ($i == 0) {
                $rt = "<tr><th colspan=2>Reimbursements</th></tr>";
            }
            $rt .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><input type='hidden' name='rbs[{$td['id']}]' value='{$td['id']}'>{$td['name']}</td>\n\t\t\t\t\t<td>" . CUR . " <input type='hidden' name='rbsa[{$td['id']}]' value='" . $rbsa[$td['id']] . "'>" . $rbsa[$td['id']] . "</td>\n\t\t\t\t</tr>";
            $i++;
        }
    } else {
        $rt .= "<tr class='" . bg_class() . "'><td colspan='2'>There are no reimbursements</td></tr>";
    }
    db_conn("cubit");
    # Get bank account name
    $sql = "SELECT * FROM bankacct WHERE bankid = '{$accid}' AND div = '" . USER_DIV . "'";
    $bankRslt = db_exec($sql);
    $bank = pg_fetch_array($bankRslt);
    $basic_sal = sprint($basic_sal);
    $commission = sprint($commission);
    $abonus = sprint($abonus);
    $overamt = sprint($overamt);
    $paye = sprint($paye);
    $nettpay = sprint($nettpay);
    if ($myEmp['paytype'] == "Cash") {
        $paydetails = "<tr class='" . bg_class() . "'><td colspan=2>Pay Salary Cash</td></tr>";
    } else {
        $paydetails = "<tr class='" . bg_class() . "'><td>Bank Account</td><td>{$bank['accname']}</td></tr>";
    }
    vsprint($bonus);
    vsprint($annual);
    vsprint($comp_pension);
    vsprint($emp_medical);
    vsprint($comp_medical);
    vsprint($comp_ret);
    vsprint($emp_ret);
    vsprint($loaninstall);
    vsprint($emp_pension);
    vsprint($fringe_medical);
    if (!isset($account)) {
        $account = 0;
    } else {
        db_conn('core');
        $Sl = "SELECT * FROM accounts WHERE accid='{$account}'";
        $Ri = db_exec($Sl);
        $ad = pg_fetch_array($Ri);
        $paydetails = "<tr class='" . bg_class() . "'><td>Ledger Account</td><td>{$ad['accname']}</td></tr>";
    }
    if ($myEmp['payprd'] == "w") {
        $row = "\n\t\t\t<tr class='" . bg_class() . "'><td>Period</td><td>{$week}</td></tr>\n\t\t\t<input type='hidden' name='week' value='{$week}'>\n\t\t\t<input type='hidden' name='pday' value='0' />";
    } else {
        if ($myEmp['payprd'] == "f") {
            $row = "\n\t\t\t<tr class='" . bg_class() . "'><td>Period</td><td>{$week}</td></tr>\n\t\t\t<input type='hidden' name='week' value='{$week}'>\n\t\t\t<input type='hidden' name='pday' value='0' />";
        } else {
            if ($myEmp["payprd"] == "d") {
                $row = "\n\t\t\t<tr class='" . bg_class() . "'><td>Day of Payment</td><td>{$pday}</td></tr>\n\t\t\t<input type='hidden' name='week' value='0'>\n\t\t\t<input type='hidden' name='pday' value='{$pday}' />";
            } else {
                $row = "\n\t\t\t<input type='hidden' name='week' value='0'>\n\t\t\t<input type='hidden' name='pday' value='0' />";
            }
        }
    }
    $grossal = sprint($grossal);
    $OUTPUT = "\n\t    <form action='" . SELF . "' method='POST'>\n\t    <table " . TMPL_tblDflts . " width='300'>\n\t\t\t<tr>\n\t\t\t\t<td><input type='submit' name='back' value='&laquo; Correction' /></td>\n\t\t\t\t<td align='right'><input type='submit' value='Write &raquo;'></td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='proc_day' value='{$day}' />\n\t\t\t<input type='hidden' name='proc_month' value='{$mon}' />\n\t\t\t<input type='hidden' name='proc_year' value='{$year}' />\n\t\t\t<input type='hidden' name='key' value='pack'>\n\t\t\t<input type='hidden' name='grossal' value='{$grossal}'>\n\t\t\t<input type='hidden' name='grossal_nodedall' value='{$grossal_nodedall}'>\n\t\t\t<input type='hidden' name='empnum' value='{$empnum}'>\n\t\t\t<input type='hidden' name='account' value='{$account}'>\n\t\t\t<input type='hidden' name='MON' value={$MON}>\n\t\t\t<input type='hidden' name='basic_sal' value='{$basic_sal_save}'>\n\t\t\t<input type='hidden' name='multi' value='{$multi}'>\n\t\t\t<input type='hidden' name='tyear' value='{$tyear}'>\n\t\t\t<input type='hidden' name='commission' value='{$commission}'>\n\t\t\t<input type='hidden' name='abonus' value='{$abonus}'>\n\t\t\t<input type='hidden' name='overamt' value='{$overamt}'>\n\t\t\t<input type='hidden' name='loaninstall' value='{$loaninstall}'>\n\t\t\t<input type='hidden' name='paye' value='{$paye}'>\n\t\t\t<input type='hidden' name='accid' value='{$accid}'>\n\t\t\t<input type='hidden' name='income' value='{$nettpay}'>\n\t\t\t<input type='hidden' name='bonus' value='{$bonus}'>\n\t\t\t<input type='hidden' name='all_travel' value='{$all_travel}'>\n\t\t\t<input type='hidden' name='comp_pension' value='{$comp_pension}'>\n\t\t\t<input type='hidden' name='emp_pension' value='{$emp_pension}'>\n\t\t\t<input type='hidden' name='comp_medical' value='{$comp_medical}'>\n\t\t\t<input type='hidden' name='emp_medical' value='{$emp_medical}'>\n\t\t\t<input type='hidden' name='comp_ret' value='{$comp_ret}'>\n\t\t\t<input type='hidden' name='emp_ret' value='{$emp_ret}'>\n\t\t\t<input type='hidden' name='comp_uif' value='{$comp_uif}'>\n\t\t\t<input type='hidden' name='emp_uif' value='{$emp_uif}'>\n\t\t\t<input type='hidden' name='comp_sdl' value='{$comp_sdl}'>\n\t\t\t<input type='hidden' name='comp_other' value='{$comp_other}'>\n\t\t\t<input type='hidden' name='emp_other' value='{$emp_other}'>\n\t\t\t<input type='hidden' name='comp_provident' value='{$comp_provident}'>\n\t\t\t<input type='hidden' name='emp_provident' value='{$emp_provident}'>\n\t\t\t<input type='hidden' name='paye_salary' value='{$paye_salary}'>\n\t\t\t<input type='hidden' name='day' value='{$day}'>\n\t\t\t<input type='hidden' name='mon' value='{$mon}'>\n\t\t\t<input type='hidden' name='year' value='{$year}'>\n\t\t\t<input type='hidden' name='novert' value='{$novert}'>\n\t\t\t<input type='hidden' name='hovert' value='{$hovert}'>\n\t\t\t<input type='hidden' name='annual' value='{$annual}'>\n\t\t\t<input type='hidden' name='week' value='{$week}'>\n\t\t\t<input type='hidden' name='fringe_medical' value='{$fringe_medical}'>\n\t\t\t<input type='hidden' name='fringe_tot' value='{$tot_fringe}'>\n\t\t\t<input type='hidden' name='fringe_car1' value='{$fringe_car1}'>\n\t\t\t<input type='hidden' name='fringe_car2' value='{$fringe_car2}'>\n\t\t\t<input type='hidden' name='fringe_loan' value='{$fringe_loan}'>\n\t\t\t<input type='hidden' name='process_comp_deductions' value='{$process_comp_deductions}'>\n\t\t\t<input type='hidden' name='taxed_all' value='{$taxed_all}' />\n\t\t\t<input type='hidden' name='printslip' value='{$printslip}' />\n\t\t\t" . (isset($subs_exch) ? "<input type='hidden' name='subs_exch' value='{$subs_exch}'>" : "") . "\n\t\t\t{$fringes}\n\t\t\t{$allow}\n\t\t\t{$deduct}\n\t\t\t<tr>\n\t\t\t\t<th colspan='2'>Salary Details</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Basic salary</td>\n\t\t\t\t<td>" . CUR . " {$basic_sal}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Annual Bonus</td>\n\t\t\t\t<!--<td>Special Bonus/Additional Salary</td>-->\n\t\t\t\t<td>" . CUR . " {$abonus}</td>\n\t\t\t</tr>\n\t\t\t<!--<tr class='bg-odd'>\n\t\t\t\t<td>Bonus(Annual Payments)</td>\n\t\t\t\t<td>" . CUR . " {$annual}</td>\n\t\t\t</tr>-->\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Commission</td>\n\t\t\t\t<td>" . CUR . " {$commission}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Travel Allowance</td>\n\t\t\t\t<td>" . CUR . " {$all_travel}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Pension: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " {$comp_pension}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Pension: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " {$emp_pension}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Provident Fund: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " {$comp_provident}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Provident Fund: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " {$emp_provident}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>UIF: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " {$comp_uif}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>UIF: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " {$emp_uif}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Retirement Annuity: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " {$comp_ret}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Retirement Annuity: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " {$emp_ret}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Medical Contribution: Company</td>\n\t\t\t\t<td>" . CUR . " {$comp_medical}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Medical Contribution: Employee</td>\n\t\t\t\t<td>" . CUR . " {$emp_medical}</td>\n\t\t\t</tr>\n\t\t\t<br />\n\t\t\t<!--\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Other: Company Contribution</td>\n\t\t\t\t<td>" . CUR . " {$comp_other}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Other: Employee Deduction</td>\n\t\t\t\t<td>" . CUR . " {$emp_other}</td>\n\t\t\t</tr>\n\t\t\t//-->\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Overtime</td>\n\t\t\t\t<td>" . CUR . " {$overamt}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Medical Fringe Benefit</td>\n\t\t\t\t<td>" . CUR . " {$fringe_medical}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Motorcar 1 Fringe Benefit</td>\n\t\t\t\t<td>" . CUR . " {$fringe_car1}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Motorcar 1 Contribution for Use</td>\n\t\t\t\t<td>" . CUR . " {$myEmp['fringe_car1_contrib']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Motorcar 2 Fringe Benefit</td>\n\t\t\t\t<td>" . CUR . " {$fringe_car2}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Motorcar 2 Contribution for Use</td>\n\t\t\t\t<td>" . CUR . " {$myEmp['fringe_car2_contrib']}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Loan Interest Fringe Benefit</td>\n\t\t\t\t<td>" . CUR . " {$fringe_loan}</td>\n\t\t\t</tr>\n\t\t\t{$fringes_desc}\n\t\t\t{$all_before}\n\t\t\t{$de_before}\n\t\t\t<tr>\n\t\t\t\t<th colspan='2'>Gross Salary</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Gross Salary</td>\n\t\t\t\t<td>" . CUR . " {$grossal}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>SITE/PAYE</td>\n\t\t\t\t<td>" . CUR . " {$paye}</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th colspan='2'>Loans</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Loan Instalment</td>\n\t\t\t\t<td>" . CUR . " {$loaninstall}</td>\n\t\t\t</tr>\n\t\t\t{$all_after}\n\t\t\t{$subsistence}\n\t\t\t{$de_after}\n\t\t\t<tr>\n\t\t\t\t<th colspan='2'>Nett Pay</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Nett Pay + Reimbursements</td>\n\t\t\t\t<td>" . CUR . " {$nettpay}</td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Amount Paid now</td>\n\t\t\t\t<td><input type='text' size='10' name='paidamount' value='0'></td>\n\t\t\t</tr>\n\t\t\t{$paydetails}\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Date</td>\n\t\t\t\t<td>{$date}</td>\n\t\t\t</tr>\n\t\t\t{$row}\n\t\t\t{$rt}\n\t\t\t<tr>\n\t\t\t\t<td><input type='submit' name='back' value='&laquo; Correction' /></td>\n\t\t\t\t<td align='right'><input type='submit' value='Write &raquo;'></td>\n\t\t\t</tr>\n\t\t</table>\n\t\t</form>";
    return $OUTPUT;
}
function export($_POST)
{
    # get vars
    foreach ($_POST as $key => $value) {
        ${$key} = $value;
    }
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($mon, "num", 1, 2, "Invalid month.");
    $empnum += 0;
    # display errors, if any
    if ($v->isError()) {
        $confirmCust = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirmCust .= "<li class=err>" . $e["msg"];
        }
        $confirmCust .= "<p><input type=button onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $confirmCust;
    }
    $months = array("1", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    if ($mon < 10) {
        $mon = "0" . $mon;
    }
    $month = $mon;
    $month += 0;
    # get employee details
    db_connect();
    $sql = "SELECT * FROM salpaid WHERE month='{$mon}' OR month='{$month}' AND div = '" . USER_DIV . "' AND empnum='{$empnum}'";
    $pRslt = db_exec($sql) or errDie("Unable to select employee payments from database.");
    $mon += 0;
    if (pg_numrows($pRslt) < 1) {
        return "<li class=err> - Employee payment not found for {$months[$mon]}.</li>" . slctEmployee();
    }
    if (pg_numrows($pRslt) > 0) {
        $slip = "<center><h3>Salaries Paid in {$months[$mon]}</h3>\n                <table border=0 cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "' width='70%'>\n                <tr><th>Employee</th><th>Gross Salary</th><th>Commission</th><th>Low or interest free loan</th><th>UIF</th><th>PAYE</th><th>Deductions</th><th>Nett Income</th></tr>";
        # totals
        $totgross = 0;
        $totcomm = 0;
        $totins = 0;
        $totuif = 0;
        $totpaye = 0;
        $totded = 0;
        $totsal = 0;
        $i = 0;
        while ($pay = pg_fetch_array($pRslt)) {
            # get employee details
            db_connect();
            $sql = "SELECT fnames, sname FROM employees WHERE empnum='{$pay['empnum']}' AND div = '" . USER_DIV . "'";
            $empRslt = db_exec($sql) or errDie("Unable to select employees from database.");
            if (pg_numrows($empRslt) < 1) {
                return "Invalid employee ID.";
            }
            $emp = pg_fetch_array($empRslt);
            # Calculate gross salary from nettpay
            $gross = round($pay['salary'] - $pay['totallow'] - $pay['comm'] + $pay['totded'] + $pay['uif'] + $pay['paye'] + $pay['loanins'], 2);
            $slip .= "<tr><td>{$emp['fnames']} {$emp['sname']}</td><td>" . CUR . " {$gross}</td><td>" . CUR . " {$pay['comm']}</td><td>" . CUR . " {$pay['loanins']}</td><td>" . CUR . " {$pay['uif']}</td><td>" . CUR . " {$pay['paye']}</td><td>" . CUR . " {$pay['totded']}</td><td>" . CUR . " {$pay['salary']}</td></tr>";
            $totgross += $gross;
            $totcomm += $pay['comm'];
            $totins += $pay['loanins'];
            $totuif += $pay['uif'];
            $totpaye += $pay['paye'];
            $totded += $pay['totded'];
            $totsal += $pay['salary'];
        }
        # Format the totals
        $totgross = sprintf("%01.2f", round($totgross, 2));
        $totcomm = sprintf("%01.2f", round($totcomm, 2));
        $totins = sprintf("%01.2f", round($totins, 2));
        $totuif = sprintf("%01.2f", round($totuif, 2));
        $totpaye = sprintf("%01.2f", round($totpaye, 2));
        $totded = sprintf("%01.2f", round($totded, 2));
        $totsal = sprintf("%01.2f", round($totsal, 2));
        $slip .= "\n                <tr><td><b>Total</b></td><td><b>" . CUR . " {$totgross}</b></td><td><b>" . CUR . " {$totcomm}</b></td><td><b>" . CUR . " {$totins}</b></td><td><b>" . CUR . " {$totuif}</b></td><td><b>" . CUR . " {$totpaye}</b></td><td><b>" . CUR . " {$totded}</b></td><td><b>" . CUR . " {$totsal}</b></td></tr>\n                </table>";
    } else {
        return "<li> - There are no salary payments for the selected month";
    }
    $OUTPUT = $slip;
    include "../xls/temp.xls.php";
    Stream("Employee", $OUTPUT);
    return $slip;
}