function package($_POST)
{
    $_POST = var_makesafe($_POST);
    extract($_POST);
    $week += 0;
    if (isset($back)) {
        return process($_POST);
    }
    $annual += 0;
    $bonus += 0;
    $paye_salary += 0;
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($empnum, "num", 1, 20, "Invalid employee number.");
    $v->isOk($accid, "num", 1, 20, "Invalid bank number.");
    $v->isOk($MON, "num", 1, 2, "Invalid month.");
    $v->isOk($basic_sal, "float", 1, 40, "Invalid basic salary.");
    $v->isOk($overamt, "float", 1, 40, "Invalid overtime amount.");
    $v->isOk($income, "float", 1, 40, "Invalid income.");
    $v->isOk($commission, "float", 0, 40, "Invalid commision.");
    $v->isOk($abonus, "float", 0, 40, "Invalid Bonus.");
    $v->isOk($loaninstall, "float", 0, 40, "Invalid loan installment.");
    $v->isOk($paidamount, "float", 1, 40, "Invalid paid amount.");
    if (isset($allowances)) {
        foreach ($allowances as $key => $value) {
            $v->isOk($allowances[$key], "float", 0, 20, "Invalid allowance amount " . ($key + 1) . ".");
        }
    }
    if (isset($deductid)) {
        foreach ($deductid as $key => $value) {
            $v->isOk($deductid[$key], "num", 1, 20, "Invalid deductions ID.");
        }
    }
    if (isset($deductions)) {
        foreach ($deductions as $key => $value) {
            $v->isOk($deductions[$key], "float", 0, 20, "Invalid deduction amount" . ($key + 1) . ".");
        }
    }
    if (isset($allowid)) {
        foreach ($allowid as $key => $value) {
            $v->isOk($allowid[$key], "num", 1, 20, "Invalid allowance ID.");
        }
    }
    if (isset($allowtax)) {
        foreach ($allowtax as $key => $value) {
            $v->isOk($allowtax[$key], "string", 2, 20, "Invalid allowance tax " . ($key + 1) . ".");
        }
    }
    $date = mkdate($year, $mon, $day);
    $pdate = mkdate($year, $MON, $pday);
    if (!checkdate($mon, $day, $year)) {
        $v->isOk($date, "num", 1, 1, "Invalid date.");
    }
    $mon = $MON;
    # display errors, if any
    if ($v->isError()) {
        $write = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $write .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $write .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $write;
    }
    $basic_sal_save = $basic_sal;
    if (isset($multi)) {
        $basic_sal = sprint($basic_sal * $multi);
        $tyear = $tyear / $multi;
    } else {
        $basic_sal = $basic_sal;
    }
    db_conn('cubit');
    $nettpay = $income;
    $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.";
    }
    $ecost = 0;
    $myEmp = pg_fetch_array($empRslt);
    // 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>\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>";
            }
        }
    }
    if (!empty($fringes_desc)) {
        $fringes_desc = "<tr><th colspan='2'>Fringe Benefits</th></tr>{$fringes_desc}";
    }
    $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><td>{$allowname[$key]}</td><td align='right'>" . CUR . " {$allowances[$key]}</td></tr>";
                $all_beforeamount = $all_beforeamount + $allowances[$key];
            } elseif ($allowances[$key] > 0) {
                $all_after .= "<tr><td>{$allowname[$key]}</td><td align='right'>" . CUR . " {$allowances[$key]}</td></tr>";
                $all_afteramount = $all_afteramount + $allowances[$key];
            }
        }
    }
    $de_before = "\n\t\t<tr>\n\t\t\t<td colspan='2'>\n\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Details</th>\n\t\t\t\t\t\t<th>Employee aContribution</th>\n\t\t\t\t\t\t<!--<th>Employer Contribution</th>//-->\n\t\t\t\t\t</tr>";
    $de_after = "\n\t\t<tr>\n\t\t\t<td colspan='2'>\n\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Details</th>\n\t\t\t\t\t\t<th>Employee Contribution</th>\n\t\t\t\t\t\t<!--<th>Employer Contribution</th>//-->\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 .= "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>{$deductname[$key]}</td>\n\t\t\t\t\t\t<td align='right'>" . CUR . " {$deductions[$key]}</td>\n<!--\t\t\t\t\t\t<td align='right'>" . 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>\n\t\t\t\t\t\t<td>{$deductname[$key]}</td>\n\t\t\t\t\t\t<td align='right'>" . CUR . " {$deductions[$key]}</td>\n<!--\t\t\t\t\t\t<td align='right'>" . 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 .= "</table></td></tr>";
    $de_after .= "</table></td></tr>";
    if ($all_beforeamount > 0) {
        $all_before = "<tr><td colspan='2'>Allowances</td></tr>" . $all_before;
    }
    if ($all_afteramount > 0) {
        $all_after = "<tr><td colspan='2'>Allowances</td></tr>" . $all_after;
    }
    if ($de_beforeamount > 0) {
        $de_before = "<tr><td colspan='2'>Deductions</td></tr>" . $de_before;
    }
    if ($de_afteramount > 0) {
        $de_after = "<tr><td colspan='2'>Deductions</td></tr>" . $de_after;
    }
    $gros_sal = sprint($grossal);
    pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF);
    core_connect();
    $sql = "SELECT * FROM bankacc WHERE accid = '{$accid}' AND div = '" . USER_DIV . "'";
    $rslt = db_exec($sql) or errDie("Unable to retrieve bank account link from Cubit", SELF);
    # check if link exists
    if (pg_numrows($rslt) < 1) {
        return "<li class='err'> ERROR : The bank account that you selected doesn't appear to have an account linked to it.</li>";
    }
    $bank = pg_fetch_array($rslt);
    $bankacc = $bank["accnum"];
    $basic_sal = sprint($basic_sal);
    $commission = sprint($commission);
    $abonus = sprint($abonus);
    $overamt = sprint($overamt);
    $paye = sprint($paye);
    $nettpay = sprint($nettpay);
    $sdl = sprint($comp_sdl);
    $amount = sprint($gros_sal + $comp_pension + $comp_provident + $comp_medical + $comp_other + $comp_uif + $comp_ret + $sdl);
    $loaninstall = sprint($loaninstall);
    //Original CC
    //$cc = "<script> CostCenter('ct', 'Salaries', '$date', 'Salary Payment for employee,  $myEmp[fnames] $myEmp[sname]', '$amount', '../'); </script>";
    //New CC
    $cc = "CostCenter('ct', 'Salaries', '{$date}', 'Salary Payment for employee,  {$myEmp['fnames']} {$myEmp['sname']}', '{$amount}', '../'); ";
    $ecost = $amount;
    if ($commission > 0) {
        $comDis = "<tr><td>Commission</td><td align='right'>" . CUR . " {$commission}</td></tr>";
    } else {
        $comDis = "";
    }
    if ($abonus > 0) {
        $aboDis = "<tr><td>Annual Bonus</td><td align='right'>" . CUR . " {$abonus}</td></tr>";
    } else {
        $aboDis = "";
    }
    if ($overamt > 0) {
        $oveDis = "<tr><td>Overtime</td><td align='right'>" . CUR . " {$overamt}</td></tr>";
    } else {
        $oveDis = "";
    }
    if ($loaninstall > 0) {
        $loaDis = "<tr><td>Loan Instalment</td><td align='right'>" . CUR . " {$loaninstall}</td></tr>";
    } else {
        $loaDis = "";
    }
    if ($basic_sal != $gros_sal) {
        $groDis = "<tr><td>Gross Salary</td><td align='right'>" . CUR . " {$gros_sal}</td></tr>";
    } else {
        $groDis = "";
    }
    if ($all_travel > 0) {
        $talDis = "<tr><td>Travel Allowance</td><td align='right'>" . CUR . " {$all_travel}</td></tr>";
    } else {
        $talDis = "";
    }
    db_connect();
    $Sl = "SELECT * FROM salset";
    $Ri = db_exec($Sl);
    if (pg_num_rows($Ri) > 0) {
        $con = true;
    } else {
        $con = false;
    }
    $intrec = gethook("accnum", "salacc", "name", "interestreceived");
    $uifbal = gethook("accnum", "salacc", "name", "uifbal");
    $sdlbal = gethook("accnum", "salacc", "name", "sdlbal");
    $pa = gethook("accnum", "salacc", "name", "pension");
    $ma = gethook("accnum", "salacc", "name", "medical");
    $cash_account = gethook("accnum", "salacc", "name", "cash");
    $retire = gethook("accnum", "salacc", "name", "retire");
    $provident = gethook("accnum", "salacc", "name", "provident");
    $salconacc = gethook("accnum", "salacc", "name", "salaries control");
    $commacc = gethook("accnum", "salacc", "name", "Commission");
    $abonusacc = gethook("accnum", "salacc", "name", "Bonus");
    $payeacc = gethook("accnum", "salacc", "name", "PAYE");
    $uifacc = gethook("accnum", "salacc", "name", "UIF");
    $providente = $myEmp["expacc_provident"];
    $retiree = $myEmp["expacc_ret"];
    $pax = $myEmp["expacc_pension"];
    $uifexp = $myEmp["expacc_uif"];
    $max = $myEmp["expacc_medical"];
    $dedgenerale = $myEmp["expacc_other"];
    $sdlexp = $myEmp["expacc_sdl"];
    $salacc = $myEmp["expacc_salwages"];
    $loanexp = $myEmp["expacc_loan"];
    $reimbursexp = $myEmp["expacc_reimburs"];
    if ($con) {
        $uifexp = $salacc;
        $sdlexp = $salacc;
        $pax = $salacc;
        $max = $salacc;
        $retiree = $salacc;
    }
    // Get Bank account [the traditional way re: hook of hook]
    core_connect();
    $sql = "SELECT * FROM bankacc WHERE accid = '{$accid}' AND div = '" . USER_DIV . "'";
    $Rslt = db_exec($sql) or errDie("Unable to retrieve bank account link from Cubit", SELF);
    # check if link exists
    if (pg_numrows($Rslt) < 1) {
        return "<li class='err'> ERROR : The bank account that you selected doesn't appear to have an account linked to it.";
    }
    $bank = pg_fetch_array($Rslt);
    $refnum = getrefnum($date);
    # Debit uif acc and credit uif control acc
    if ($comp_uif > 0) {
        writetrans($uifexp, $uifbal, $date, $refnum, $comp_uif, "Company UIF Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($emp_uif > 0) {
        db_conn("cubit");
        $Sl = "UPDATE employees SET balance=balance-({$emp_uif}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $uifacc, $date, $refnum, "UIF", $emp_uif, "d");
        writetrans($salconacc, $uifbal, $date, $refnum, $emp_uif, "Employee UIF Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    # Debit uif sdl and credit sdl control acc
    writetrans($sdlexp, $sdlbal, $date, $refnum, $sdl, "SDL,  {$myEmp['fnames']} {$myEmp['sname']}.");
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    db_conn('cubit');
    $Sl = "UPDATE employees SET balance=balance+({$grossal_nodedall}) WHERE empnum = '{$empnum}'";
    $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
    empledger($empnum, $salacc, $date, $refnum, "Gross Salary", $grossal_nodedall, "c");
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    # Debit salaries acc and credit salaries control acc
    writetrans($salacc, $salconacc, $date, $refnum, $grossal_nodedall, "Gross Salary proccessing for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
    if ($commission > 0) {
        if ($con) {
            $commacc = $salacc;
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance+({$commission}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $commacc, $date, $refnum, "Commission", $commission, "c");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        # Debit commission acc and credit salaries control acc
        writetrans($commacc, $salconacc, $date, $refnum, $commission, "Commission for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($abonus > 0) {
        if ($con) {
            $abonusacc = $salacc;
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance+({$abonus}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $abonusacc, $date, $refnum, "Bonus", $abonus, "c");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        # Debit bonus acc and credit salaries control acc
        writetrans($abonusacc, $salconacc, $date, $refnum, $abonus, "Bonus for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($paye > 0) {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$paye}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $payeacc, $date, $refnum, "PAYE", $paye, "d");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        # Debit salaries control acc and credit PAYE control acc
        writetrans($salconacc, $payeacc, $date, $refnum, $paye, "PAYE for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    db_conn('cubit');
    # Pay allowances accounts
    if (isset($allowid)) {
        foreach ($allowid as $i => $id) {
            # Debit allowances acc and credit salaries control acc
            if ($con) {
                $allowaccs[$i] = $salacc;
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance+({$allowances[$i]}) WHERE empnum = '{$empnum}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($empnum, $allowaccs[$i], $date, $refnum, "Allowance", $allowances[$i], "c");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($allowaccs[$i], $salconacc, $date, $refnum, $allowances[$i], "Allowances for employee, {$myEmp['fnames']} {$myEmp['sname']}.");
        }
    }
    # Pay Deductions accounts
    if (isset($deductid)) {
        foreach ($deductid as $i => $id) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$deductions[$i]}) WHERE empnum = '{$empnum}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($empnum, $dedaccs[$i], $date, $refnum, "Deduction", $deductions[$i], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            # Debit salaries control acc and credit  acc
            // salcon acc - ded balance acc
            writetrans($salconacc, $dedaccs[$i], $date, $refnum, $deductions[$i], "Deductions for employee, {$myEmp['fnames']} {$myEmp['sname']}.");
            db_conn("cubit");
            $sql = "SELECT * FROM salded WHERE id='{$id}'";
            $rslt = db_exec($sql) or errDie("Error reading deduction information.");
            $dedinfo = pg_fetch_array($rslt);
        }
    }
    if ($comp_pension > 0) {
        writetrans($pax, $pa, $date, $refnum, $comp_pension, "Company Pension Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($emp_pension > 0) {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$emp_pension}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $pa, $date, $refnum, "Pension Contribution", $emp_pension, "d");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        writetrans($salconacc, $pa, $date, $refnum, $emp_pension, "Pension Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($comp_medical > 0) {
        writetrans($max, $ma, $date, $refnum, $comp_medical, "Company Medical Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($emp_medical > 0) {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$emp_medical}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $ma, $date, $refnum, "Medical Contribution", $emp_medical, "d");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        writetrans($salconacc, $ma, $date, $refnum, $emp_medical, "Employee Medical Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($comp_provident > 0) {
        writetrans($providente, $provident, $date, $refnum, $comp_provident, "Company Provident Fund Contribution, {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($emp_provident > 0) {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$emp_provident}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $provident, $date, $refnum, "Provident Fund Contribution", $emp_provident, "d");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        writetrans($salconacc, $provident, $date, $refnum, $emp_provident, "Provident Fund Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if (false && $comp_other > 0) {
        writetrans($dedgenerale, $dedgeneral, $date, $refnum, $comp_other, "Company Contribution to Other Deductions, {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if (false && $emp_other > 0) {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$emp_other}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $dedgeneral, $date, $refnum, "Other Deductions Contribution", $emp_other, "d");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        writetrans($salconacc, $dedgeneral, $date, $refnum, $emp_other, "Other Deductions Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($emp_ret > 0) {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$emp_ret}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $retire, $date, $refnum, "Retirement Annuity Contribution", $emp_ret, "d");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        writetrans($salconacc, $retire, $date, $refnum, $emp_ret, "Employee Retirement Annuity Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    if ($comp_ret > 0) {
        writetrans($retiree, $retire, $date, $refnum, $comp_ret, "Company Retirement Annuity Contribution,  {$myEmp['fnames']} {$myEmp['sname']}.");
    }
    db_conn('cubit');
    $mons = "{$mon};";
    $due = sprint($nettpay - $paidamount);
    //, balance=balance+'$due
    $sql = "\n\t\tUPDATE employees \n\t\tSET lastpay = '{$mons}', loanamt = (loanamt - cast(float '{$loaninstall}' as numeric)), \n\t\t\tloanfringe = (loanfringe - cast(float '{$fringe_loan}' as numeric)) \n\t\tWHERE empnum = '{$empnum}' AND div = '" . USER_DIV . "'";
    $rslt = db_exec($sql) or errDie("Unable to get employee details.");
    // check if loan is 0, then unmark loan as active, and store in archive
    $sql = "SELECT loanid FROM employees WHERE loanamt=0 AND empnum='{$empnum}' AND gotloan='t'::bool";
    $rslt = db_exec($sql) or errDie("Error reading employee details for loan.");
    if (pg_num_rows($rslt) > 0) {
        $loanid = pg_fetch_result($rslt, 0, 0);
        $sql = "UPDATE employees SET gotloan='f'::bool, loaninstall='0' WHERE empnum='{$empnum}'";
        $rslt = db_exec($sql) or errDie("Unable to update employee loan status.");
        $sql = "UPDATE emp_loanarchive SET donedata=CURRENT_DATE WHERE id='{$loanid}'";
        $rslt = db_exec($sql) or errDie("Unable to archive loan.");
        $sql = "SELECT loanint_unpaid FROM employees WHERE empnum='{$empnum}'";
        $rslt = db_exec($sql) or errDie("Error reading loan interest for installment.");
        $loanint = sprint(pg_fetch_result($rslt, 0, 0));
    } else {
        if ($loaninstall > 0) {
            $sql = "SELECT loanamt_tot, loanint_amt FROM employees WHERE empnum='{$empnum}'";
            $rslt = db_exec($sql) or errDie("Error reading loan interest for installment.");
            $loan_tot = pg_fetch_result($rslt, 0, 0);
            $loan_totint = pg_fetch_result($rslt, 0, 1);
            $loanint = sprint($loaninstall / $loan_tot * $loan_totint);
        } else {
            $loanint = 0;
        }
    }
    $sql = "\n\t\tUPDATE employees \n\t\tSET loanint_unpaid = (loanint_unpaid - cast(float '{$loanint}' as numeric)) \n\t\tWHERE empnum = '{$empnum}' AND div = '" . USER_DIV . "'";
    $rslt = db_exec($sql) or errDie("Unable to update employee interest.");
    if ($loaninstall > 0 && !empty($loanexp)) {
        $loaninstall += 0;
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$loaninstall}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $loanexp, $date, $refnum, "Loan Instalment", $loaninstall, "d");
        # Debit salaries control acc and credit loan control acc
        writetrans($salconacc, $loanexp, $date, $refnum, $loaninstall - $loanint, "Loan Installment for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
        writetrans($salconacc, $intrec, $date, $refnum, $loanint, "Loan Interest for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
        /* record this month's loan amounts (for reversal purposes) */
        // determine the salary period
        switch ($myEmp["payprd"]) {
            case "d":
                $lprd = date_part($pdate, DP_DAY);
                break;
            case "m":
            case "f":
            case "w":
            default:
                $lprd = $week;
                break;
        }
        // record it!
        db_conn("cubit");
        $sql = "\n\t\t\tINSERT INTO emp_loaninstallments (\n\t\t\t\tempnum, fdate, fperiod, fmonth, fyear, installment, interest, fringe\n\t\t\t) VALUES (\n\t\t\t\t'{$empnum}', '{$date}', '{$lprd}', '{$mon}', '" . EMP_YEAR . "', '{$loaninstall}', '{$loanint}', '{$fringe_loan}'\n\t\t\t)";
        $rslt = db_exec($sql) or errDie("Error record loan fringe benefit.");
    }
    $loaninstall = $loaninstall + 0;
    $totded = sprint($de_beforeamount + $de_afteramount + $emp_pension + $emp_medical + $emp_provident + $emp_ret + $emp_other);
    $totded_employer = sprint($de_beforeamount_emp + $de_afteramount_emp + $comp_pension + $comp_medical + $comp_provident + $comp_ret + $comp_other);
    $totall = sprint($all_beforeamount + $all_afteramount + $all_travel);
    $parkage = "\n\t\t<br><br>\n\t\t<center>\n\t\t{$cc}\n\t\t<table border=2 cellpadding='4' cellspacing='0' width='750' bordercolor='#000000'>\n\t\t\t<tr>\n\t\t\t\t<td align='center'><b>Description</b></td>\n\t\t\t\t<td width='100' align='center'><b>Amount</b></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Basic salary</td>\n\t\t\t\t<td align='right'>" . CUR . " {$basic_sal}</td>\n\t\t\t</tr>\n\t\t\t{$comDis}\n\t\t\t{$aboDis}\n\t\t\t{$fringes_desc}\n\t\t\t{$all_before}\n\t\t\t{$de_before}\n\t\t\t{$groDis}\n\t\t\t{$talDis}\n\t\t\t<tr>\n\t\t\t\t<td>UIF</td>\n\t\t\t\t<td align='right'>" . CUR . " {$emp_uif}</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>PAYE</td>\n\t\t\t\t<td align='right'>" . CUR . " {$paye}</td>\n\t\t\t</tr>\n\t\t\t{$loaDis}\n\t\t\t{$all_after}\n\t\t\t{$de_after}\n\t\t\t<tr>\n\t\t\t\t<td><b>Nett Pay</b></td>\n\t\t\t\t<td align='right'><b>" . CUR . " {$nettpay}</b></td>\n\t\t\t</tr>\n\t\t</form>\n\t\t</table>\n\t\t</center>";
    $parkagesave = "\n\t\t<br><br>\n\t\t<center>\n\t\t<table border='2' width='750' border=2 cellpadding='4' cellspacing='0' bordercolor='#000000'>\n\t\t\t<tr>\n\t\t\t\t<td align='center'><b>Description</b></td>\n\t\t\t\t<td width='100' align='center'><b>Amount</b></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Basic salary</td>\n\t\t\t\t<td align='right'>" . CUR . " {$basic_sal}</td>\n\t\t\t</tr>\n\t\t\t{$comDis}\n\t\t\t{$aboDis}\n\t\t\t{$fringes_desc}\n\t\t\t{$all_before}\n\t\t\t{$de_before}\n\t\t\t{$groDis}\n\t\t\t{$talDis}\n\t\t\t<tr>\n\t\t\t\t<td>UIF</td>\n\t\t\t\t<td align='right'>" . CUR . " {$emp_uif}</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>PAYE</td>\n\t\t\t\t<td align='right'>" . CUR . " {$paye}</td>\n\t\t\t</tr>\n\t\t\t{$loaDis}\n\t\t\t{$all_after}\n\t\t\t{$de_after}\n\t\t\t<tr>\n\t\t\t\t<td><b>Nett Pay</b></td>\n\t\t\t\t<td align='right'><b>" . CUR . " {$nettpay}</b></td>\n\t\t\t</tr>\n\t\t</form>\n\t\t</table>\n\t\t</center>";
    $OUTPUT = $parkage;
    $save = base64_encode($parkagesave);
    $Date = $date;
    $np = $nettpay;
    if (isset($rbsa)) {
        $np = sprint($np - array_sum($rbsa));
    }
    /* hack to store the pay date for dailies */
    if ($myEmp["payprd"] == "d") {
        $week = $pday;
    }
    if (empty($novert)) {
        $novert = "0";
    }
    if (empty($hovert)) {
        $hovert = "0";
    }
    db_conn("cubit");
    $sql = "\n   \t\tINSERT INTO cubit.salpaid (\n   \t\t\tempnum, month, bankid, salary, comm, uifperc, uif, payeperc, paye, totded, totded_employer, \n\t\t\ttotallow, loanins, tot_fringe, div, display, saldate, week, cyear, novert, \n   \t\t\thovert, taxed_sal, hours, salrate, bonus\n   \t\t) VALUES (\n   \t\t\t'{$empnum}', '{$mon}', '{$accid}', '{$np}', '{$commission}', '0', '{$emp_uif}', '0', '{$paye}', '{$totded}', '{$totded_employer}', \n\t\t\t'{$totall}', '{$loaninstall}', '{$fringe_tot}', '" . USER_DIV . "', '{$save}', '{$Date}', '{$week}', '" . EMP_YEAR . "', '{$novert}', \n   \t\t\t'{$hovert}', '{$paye_salary}', '{$multi}', '{$basic_sal_save}', '{$abonus}'\n   \t\t)";
    $Ry = db_exec($sql) or errDie("Unable to insert record.");
    $id = pglib_lastid("salpaid", "id");
    $year = $year;
    $payslip_id = $id;
    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;
            }
            $rb = sprint($rbsa[$td['id']]);
            db_conn("cubit");
            $sql = "\n\t\t\t\tINSERT INTO emp_inc (\n\t\t\t\t\temp, year, period, date, week, payslip, type, code, description, \n\t\t\t\t\tqty, rate, amount, ex\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$Date}', '{$week}', '{$payslip_id}', '{$td['id']}', '', '{$td['name']}', \n\t\t\t\t\t'1', '0', '{$rb}', 'RBS'\n\t\t\t\t)";
            db_exec($sql) or errDie("unable to insert data.");
            $sql = "UPDATE employees SET balance=balance+({$rb}) WHERE empnum = '{$empnum}'";
            db_exec($sql) or errDie("Unable to get employee details.");
            empledger($empnum, $td['account'], $date, $refnum, "Reimbursement", $rb, "c");
            writetrans($td['account'], $salconacc, $date, $refnum, $rb, "Reimbursement for employee, {$myEmp['fnames']} {$myEmp['sname']}.");
        }
    }
    if (isset($subsname)) {
        foreach ($subsname as $sid => $sn) {
            if (empty($subsamt[$sid]) || $subsamt[$sid] <= 0) {
                continue;
            }
            $samt = sprint($subsamt[$sid]);
            $i++;
            db_conn('cubit');
            $cols = grp(m("emp", $empnum), m("year", EMP_YEAR), m("period", $mon), m("week", $week), m("date", $Date), m("payslip", $payslip_id), m("type", $sid), m("code", ""), m("description", $subsname[$sid]), m("qty", 1), m("rate", 0), m("amount", $samt), m("ex", "SUBS"));
            $subin = new dbUpdate("emp_inc", "cubit", $cols);
            $subin->run(DB_INSERT);
            $cols = grp(m("balance", raw("balance+({$samt})")));
            $subin->setTable("employees");
            $subin->setOpt($cols, wgrp(m("empnum", $empnum)));
            $subin->run(DB_UPDATE);
            empledger($empnum, $subsacc[$sid], $date, $refnum, "Subsistence Allowance: {$subsname[$sid]}", $samt, "c");
            writetrans($subsacc[$sid], $salconacc, $date, $refnum, $samt, "Subsistence Allownace ({$subsname[$sid]}) for employee, {$myEmp['fnames']} {$myEmp['sname']}.");
        }
    }
    if ($myEmp['paytype'] == "Cash") {
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$paidamount}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $cash_account, $date, $refnum, "Payment(Cash)", $paidamount, "d");
        writetrans($salconacc, $cash_account, $date, $refnum, $paidamount, "Salary Payment(Cash) for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
    } elseif ($myEmp['paytype'] == "Ledger Account") {
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$paidamount}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $account, $date, $refnum, "Payment(Ledger Account)", $paidamount, "d");
        writetrans($salconacc, $account, $date, $refnum, $paidamount, "Salary Payment(Ledger Account) for employee,  {$myEmp['fnames']} {$myEmp['sname']}.");
    } else {
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance-({$paidamount}) WHERE empnum = '{$empnum}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($empnum, $bankacc, $date, $refnum, "Payment(Bank)", $paidamount, "d");
        writetrans($salconacc, $bankacc, $date, $refnum, $paidamount, "Salary Payment for employee(Bank),  {$myEmp['fnames']} {$myEmp['sname']}.");
        # issue bank record
        banktrans($accid, "withdrawal", $date, "{$myEmp['fnames']} {$myEmp['sname']}", "Salary Payment for employee,  {$myEmp['fnames']} {$myEmp['sname']}", 0, $paidamount, $salconacc, $myEmp['empnum']);
    }
    db_conn('cubit');
    /*
    	writetrans($uifexp,$uifbal , $date, $refnum, $uif, "Company UIF Contribution,  $myEmp[fnames] $myEmp[sname].");
    */
    # Debit uif sdl and credit sdl control acc
    //	writetrans($sdlexp,$sdlbal , $date, $refnum, $sdl, "SDL,  $myEmp[fnames] $myEmp[sname].");
    db_conn("cubit");
    if ($comp_uif > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'UIFC', '', 'UIF', '1', '0','{$comp_uif}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data1.");
    }
    if ($emp_uif > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'UIFE', '', 'UIF', '1', '0', '{$emp_uif}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data3.");
    }
    if ($sdl > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'SDL', '', 'SDL', '1', '0', '{$sdl}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data2.");
    }
    if ($paye > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'PAYE', '', 'PAYE', '1', '0', '{$paye}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data3.");
    }
    if ($basic_sal > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INC', '', 'Basic Salary', '', '1', '0', '{$basic_sal}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data4.");
    }
    if ($myEmp["loanpayslip"] > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'LOAN', '', 'Employee Loan', '', '1', '0', '{$myEmp['loanpayslip']}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert loan data for employee income on payslip.");
        $sql = "UPDATE employees SET loanpayslip='0' WHERE empnum='{$empnum}'";
        $rslt = db_exec($sql) or errDie("Error updating loan information for payslip.");
    }
    if ($bonus > 0 && $myEmp["payprd"] != "f" && $myEmp["payprd"] != "w") {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCB', '', 'Bonus', '', '1', '0', '{$bonus}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data5.");
    } else {
        if ($bonus > 0) {
            $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCB', '', 'Special Bonus/Additional Salary', '', '1', '0', '{$bonus}', '')";
            $Ri = db_exec($Sl) or errDie("unable to insert data5.");
        }
    }
    if ($annual > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCAB', '', 'Annual Bonus', '', '1', '0', '{$annual}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data5.");
    }
    if ($commission > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCC', '', 'Commission', '', '1', '0', '{$commission}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data6.");
    }
    if ($abonus > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCAB', '', 'Bonus', '', '1', '0', '{$abonus}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data6.");
    }
    if ($all_travel > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, pension, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCT', '', 'Travel Allowance', '', '1', '0', '{$all_travel}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data7.");
    }
    if ($loaninstall > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDL', '', 'Loan Repayment', '1', '0', '{$loaninstall}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data8.");
    }
    if ($comp_pension > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'COMP', '', 'Pension', '1', '0', '{$comp_pension}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data9.");
    }
    if ($emp_pension > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDP', '', 'Pension', '1', '0', '{$emp_pension}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data10.");
    }
    if ($comp_ret > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'COMR', '', 'Retirement Annuity Fund', '1', '0', '{$comp_ret}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data9.");
    }
    if ($emp_ret > 0) {
        $Sl = "\n        \tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n        \tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDR', '', 'Retirement Annuity Fund', '1', '0', '{$emp_ret}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data10.");
    }
    if ($myEmp["fringe_car1_contrib"] > 0) {
        $Sl = "\n        \tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n        \tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDA', '', 'Motorcar 1 Contribution for Use', '1', '0', '{$myEmp['fringe_car1_contrib']}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data10.");
    }
    if ($myEmp["fringe_car2_contrib"] > 0) {
        $Sl = "\n        \tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n        \tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDB', '', 'Motorcar 2 Contribution for Use', '1', '0', '{$myEmp['fringe_car2_contrib']}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data10.");
    }
    if ($comp_medical > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'COMM', '', 'Medical Contribution', '1', '0', '{$comp_medical}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data.11");
    }
    if ($emp_medical > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDM', '', 'Medical Contribution', '1', '0', '{$emp_medical}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data.12");
    }
    if ($comp_provident > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'COMV', '', 'Provident', '1', '0', '{$comp_provident}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data9.");
    }
    if ($emp_provident > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDV', '', 'Provident', '1', '0', '{$emp_provident}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data10.");
    }
    if ($comp_other > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'COMO', '', 'Other Deductions', '1', '0', '{$comp_other}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data9.");
    }
    if ($emp_other > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'DEDO', '', 'Other Deductions', '1', '0', '{$emp_other}')";
        $Ri = db_exec($Sl) or errDie("unable to insert data10.");
    }
    if ($overamt > 0) {
        $Sl = "\n\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount, ex) \n\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$id}', 'INCO', '', 'Over Time', '1', '0', '{$overamt}', '')";
        $Ri = db_exec($Sl) or errDie("unable to insert data.13");
    }
    $payslip_id = $id;
    // fringe benefits
    $frinupd = new dbUpdate("emp_frin", "cubit");
    if (isset($fringebens)) {
        foreach ($fringebens as $key => $value) {
            $cols = grp(m("emp", $empnum), m("year", EMP_YEAR), m("period", $mon), m("week", $week), m("fdate", $Date), m("payslip", $payslip_id), m("code", $key), m("description", $fringename[$key]), m("qty", 1), m("amount", sprint($fringebens[$key])));
            $frinupd->setCols($cols);
            $frinupd->run(DB_INSERT);
        }
    }
    if ($fringe_loan > 0) {
        $cols = grp(m("emp", $empnum), m("year", $year), m("period", $mon), m("fdate", $Date), m("payslip", $payslip_id), m("code", "FRINLOAN"), m("description", "Loan Fringe Benefit"), m("qty", 1), m("amount", $fringe_loan));
        $frinupd->setCols($cols);
        $frinupd->run(DB_INSERT);
    }
    if ($fringe_medical > 0) {
        $cols = grp(m("emp", $empnum), m("year", $year), m("period", $mon), m("fdate", $Date), m("payslip", $payslip_id), m("code", "FRINMED"), m("description", "Medical Fringe Benefit"), m("qty", 1), m("amount", $fringe_medical));
        $frinupd->setCols($cols);
        $frinupd->run(DB_INSERT);
    }
    if ($fringe_car1 > 0) {
        $cols = grp(m("emp", $empnum), m("year", $year), m("period", $mon), m("fdate", $Date), m("payslip", $payslip_id), m("code", "FRINCAR1"), m("description", "Fringe Benefit: Vehicle 1"), m("qty", 1), m("amount", $fringe_car1));
        $frinupd->setCols($cols);
        $frinupd->run(DB_INSERT);
    }
    if ($fringe_car2 > 0) {
        $cols = grp(m("emp", $empnum), m("year", $year), m("period", $mon), m("fdate", $Date), m("payslip", $payslip_id), m("code", "FRINCAR2"), m("description", "Fringe Benefit: Vehicle 2"), m("qty", 1), m("amount", $fringe_car2));
        $frinupd->setCols($cols);
        $frinupd->run(DB_INSERT);
    }
    if (isset($allowid)) {
        $Sl = "SELECT id,allowance FROM allowances";
        $Ri = db_exec($Sl) or errDie("Unable to get allowances.");
        while ($data = pg_fetch_array($Ri)) {
            $allname[$data['id']] = $data['allowance'];
        }
        foreach ($allowid as $i => $id) {
            $aname = $allname[$allowid[$i]];
            if (($allowances[$i] = sprint($allowances[$i])) <= 0) {
                continue;
            }
            $Sl = "\n\t\t\t\tINSERT INTO emp_inc (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount, ex)\n\t\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$payslip_id}', '{$allowid[$i]}', '', '{$aname}', '1', '0', '{$allowances[$i]}', '')";
            $Ri = db_exec($Sl) or errDie("unable to insert data.");
        }
    }
    # Pay Deductions accounts
    if (isset($deductid)) {
        $Sl = "SELECT id,deduction FROM salded";
        $Ri = db_exec($Sl) or errDie("Unabel to get get dat.");
        while ($data = pg_fetch_array($Ri)) {
            $dnames[$data['id']] = $data['deduction'];
        }
        foreach ($deductid as $i => $id) {
            $dname = $dnames[$deductid[$i]];
            # Debit salaries control acc and credit  acc
            if (($deductions[$i] = sprint($deductions[$i])) > 0) {
                $Sl = "\n\t\t\t\t\tINSERT INTO emp_ded (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$payslip_id}', '{$deductid[$i]}', '', '{$dname}', '1', '0', '{$deductions[$i]}')";
                $Ri = db_exec($Sl) or errDie("unable to insert data.");
            }
            if (($employer_deductions[$i] = sprint($employer_deductions[$i])) > 0) {
                $Sl = "\n\t\t\t\t\tINSERT INTO emp_com (emp, year, period, week, date, payslip, type, code, description, qty, rate, amount) \n\t\t\t\t\tVALUES ('{$empnum}', '" . EMP_YEAR . "', '{$mon}', '{$week}', '{$Date}', '{$payslip_id}', '{$deductid[$i]}', '', '{$dname}', '1', '0', '{$employer_deductions[$i]}')";
                //$Ri=db_exec($Sl) or errDie("unable to insert data1.");
            }
        }
    }
    $id = $payslip_id;
    $ecost += 0;
    db_conn('cubit');
    $Sl = "SELECT * FROM empc WHERE emp='{$empnum}'";
    $Ri = db_exec($Sl);
    if (pg_num_rows($Ri) > 0) {
        while ($data = pg_fetch_array($Ri)) {
            db_conn('cubit');
            $sql = "SELECT * FROM costcenters WHERE ccid = '{$data['cid']}'";
            $ccRslt = db_exec($sql) or errDie("Unable to retrieve Cost centers from database.");
            $cc = pg_fetch_array($ccRslt);
            $amount = sprint($ecost * $data['amount'] / 100);
            db_conn(PRD_DB);
            $sql = "\n\t\t\t\tINSERT INTO cctran (\n\t\t\t\t\tccid, trantype, typename, edate, \n\t\t\t\t\tdescription, amount, username, div\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$cc['ccid']}', 'ct', 'Salary', '{$Date}', \n\t\t\t\t\t'Salary for employee,  {$myEmp['fnames']} {$myEmp['sname']}', '{$amount}', '" . USER_NAME . "', '" . USER_DIV . "'\n\t\t\t\t)";
            $insRslt = db_exec($sql) or errDie("Unable to retrieve insert Cost center amounts into database.");
        }
    }
    /* update printslip setting */
    setCSetting("EMP_PRINTSLIP", $printslip);
    pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
    if ($printslip != "n") {
        $OUTPUT = "<script>printer('salwages/payslip-print.php?id={$id}');spmove('../main.php');</script>";
    } else {
        $OUTPUT = "\n\t\t\t<h3>Process Employee Salary</h3>\n\t\t\tSuccessfully processed salary.<br /><br />" . mkQuickLinks(ql("salaries-staff.php", "Process Employee Salary"), ql("../admin-employee-view.php", "View Employees/Process Salaries by Batch"), ql("../admin-employee-add.php", "Add New Employee"), ql("settings-acc-edit.php", "Salary Settings"));
    }
    //$OUTPUT .= "<script>move('../index-salaries.php');</script>";
    require "../template.php";
}
function write($_POST)
{
    $_POST = var_makesafe($_POST);
    extract($_POST);
    $week += 0;
    if (!isset($button)) {
        return enter($_POST);
    }
    if (!isset($date_day)) {
        exit;
    }
    require_lib("validate");
    $v = new validate();
    //$v->isOk ($empnum, "num", 1, 20, "Invalid employee number.");
    if (!checkdate($date_month, $date_day, $date_year)) {
        $v->isOk($date_day, "num", 10, 1, "Invalid date.");
    }
    # display errors, if any
    if ($v->isError()) {
        $write = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $write .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $write .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $write;
    }
    $date = $date_year . "-" . $date_month . "-" . $date_day;
    $salconacc = gethook("accnum", "salacc", "name", "salaries control");
    $intrec = gethook("accnum", "salacc", "name", "interestreceived");
    $commacc = gethook("accnum", "salacc", "name", "Commission");
    $abonusacc = gethook("accnum", "salacc", "name", "Bonus");
    $payeacc = gethook("accnum", "salacc", "name", "PAYE");
    $uifacc = gethook("accnum", "salacc", "name", "UIF");
    $uifbal = gethook("accnum", "salacc", "name", "uifbal");
    $sdlbal = gethook("accnum", "salacc", "name", "sdlbal");
    $pa = gethook("accnum", "salacc", "name", "pension");
    $ma = gethook("accnum", "salacc", "name", "medical");
    $cash_account = gethook("accnum", "salacc", "name", "cash");
    $retire = gethook("accnum", "salacc", "name", "retire");
    $provident = gethook("accnum", "salacc", "name", "provident");
    $refnum = getrefnum($date);
    pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF);
    db_conn('cubit');
    $i = 0;
    $Sl = "SELECT * FROM salset";
    $Ri = db_exec($Sl);
    if (pg_num_rows($Ri) > 0) {
        $con = true;
    } else {
        $con = false;
    }
    if ($con) {
        $uifexp = $salacc;
        $sdlexp = $salacc;
        $pax = $salacc;
        $max = $salacc;
        $retiree = $salacc;
    }
    $Sl = "SELECT * FROM employees WHERE div='" . USER_DIV . "' ORDER BY sname,fnames";
    $Rr = db_exec($Sl) or errDie("Unable to get data.");
    $out = "<script>";
    $batch_setting = getCSetting("PRINT_PSLIPS_BATCH");
    if (isset($batch_setting) and $batch_setting == "yes") {
        if ($printslip != "n") {
            $out .= "nhprinter('salwages/payslip-print.php?batch=";
        }
    }
    while ($data = pg_fetch_array($Rr)) {
        if (!isset($emps[$data['empnum']]) || isset($emps_already[$data["empnum"]])) {
            continue;
        }
        $providente = $data["expacc_provident"];
        $retiree = $data["expacc_ret"];
        $pax = $data["expacc_pension"];
        $uifexp = $data["expacc_uif"];
        $max = $data["expacc_medical"];
        $dedgenerale = $data["expacc_other"];
        $sdlexp = $data["expacc_sdl"];
        $salacc = $data["expacc_salwages"];
        $loanexp = $data["expacc_loan"];
        $id = $data['empnum'];
        $basic_sal_save[$id] = $basic_sal[$id];
        # Multiply basic_sal add overtime
        if (isset($multi[$id])) {
            $basic_sal[$id] = sprint($basic_sal[$id] * $multi[$id]);
        }
        $basic_sal[$id] = sprint($basic_sal[$id]);
        $bonus[$id] = sprint($bonus[$id]);
        $annual[$id] = sprint($annual[$id]);
        $abonus[$id] = sprint($abonus[$id]);
        $commission[$id] = sprint($commission[$id]);
        $all_travel[$id] = sprint($all_travel[$id]);
        $loaninstall[$id] = sprint($loaninstall[$id]);
        $comp_pension[$id] = sprint($comp_pension[$id]);
        $emp_pension[$id] = sprint($emp_pension[$id]);
        $comp_provident[$id] = sprint($comp_provident[$id]);
        $emp_provident[$id] = sprint($emp_provident[$id]);
        $comp_uif[$id] = sprint($comp_uif[$id]);
        $emp_uif[$id] = sprint($emp_uif[$id]);
        $comp_ret[$id] = sprint($comp_ret[$id]);
        $emp_ret[$id] = sprint($emp_ret[$id]);
        $comp_medical[$id] = sprint($comp_medical[$id]);
        $emp_medical[$id] = sprint($emp_medical[$id]);
        $comp_other[$id] = sprint($comp_other[$id]);
        $emp_other[$id] = sprint($emp_other[$id]);
        $novert[$id] += 0;
        $hovert[$id] += 0;
        $overamt[$id] = sprint($overamt[$id]);
        $sdl[$id] = sprint($comp_sdl[$id]);
        $ecost = $basic_sal[$id] + $overamt[$id] + $all_travel[$id] + $bonus[$id] + $annual[$id] + $sdl[$id] + $all_beforeamount[$id] + $all_afteramount[$id] + $comp_pension[$id] + $comp_uif[$id] + $comp_ret[$id] + $comp_medical[$id] + $comp_provident[$id] + $comp_other[$id] + $all_beforeamount[$id] + $all_afteramount[$id];
        $ecost = sprint($ecost);
        //		writetrans($uifexp,$uifbal , $date, $refnum, $comp_uif[$id], "Company UIF Contribution,  $data[fnames] $data[sname].");
        writetrans($sdlexp, $sdlbal, $date, $refnum, $sdl[$id], "SDL,  {$data['fnames']} {$data['sname']}.");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        db_conn('cubit');
        $Sl = "UPDATE employees SET balance=balance+({$grossal_nodedall[$id]}) WHERE empnum = '{$data['empnum']}'";
        $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        empledger($data['empnum'], $salacc, $date, $refnum, "Gross Salary", $grossal_nodedall[$id], "c");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        writetrans($salacc, $salconacc, $date, $refnum, $grossal_nodedall[$id], "Gross Salary proccessing for employee,  {$data['fnames']} {$data['sname']}.");
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        if ($emp_uif[$id] > 0) {
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$emp_uif[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $uifacc, $date, $refnum, "UIF", $emp_uif[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $uifbal, $date, $refnum, $emp_uif[$id], "UIF for employee,  {$data['fnames']} {$data['sname']}.");
        }
        if ($comp_uif[$id] > 0) {
            writetrans($uifexp, $uifbal, $date, $refnum, $emp_uif[$id], "UIF for employee,  {$data['fnames']} {$data['sname']}.");
        }
        if ($commission[$id] > 0) {
            if ($con) {
                $commacc = $salacc;
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance+({$commission[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $commacc, $date, $refnum, "Commission", $commission[$id], "c");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($commacc, $salconacc, $date, $refnum, $commission[$id], "Commission for employee,  {$data['fnames']} {$data['sname']}.");
        }
        if ($abonus[$id] > 0) {
            if ($con) {
                $abonusacc = $salacc;
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance+({$abonus[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $abonusacc, $date, $refnum, "Bonus", $abonus[$id], "c");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($abonusacc, $salconacc, $date, $refnum, $abonus[$id], "Bonus for employee,  {$data['fnames']} {$data['sname']}.");
        }
        if ($paye[$id] > 0) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$paye[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $payeacc, $date, $refnum, "PAYE", $paye[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $payeacc, $date, $refnum, $paye[$id], "PAYE for employee,  {$data['fnames']} {$data['sname']}.");
        }
        if ($comp_pension[$id] > 0) {
            writetrans($pax, $pa, $date, $refnum, $comp_pension[$id], "Company Pension Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if ($comp_medical[$id] > 0) {
            writetrans($max, $ma, $date, $refnum, $comp_medical[$id], "Company Medical Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if ($emp_pension[$id] > 0) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$emp_pension[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $pa, $date, $refnum, "Pension Contribution", $emp_pension[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $pa, $date, $refnum, $emp_pension[$id], "Employee Pension Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if ($emp_medical[$id] > 0) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$emp_medical[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $ma, $date, $refnum, "Medical Contribution", $emp_medical[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $ma, $date, $refnum, $emp_medical[$id], "Employee Medical Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if ($comp_provident[$id] > 0) {
            writetrans($providente, $provident, $date, $refnum, $comp_provident[$id], "Company Provident Fund Contribution, {$data['fnames']} {$data['sname']}.");
        }
        if ($emp_provident[$id] > 0) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$emp_provident[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $provident, $date, $refnum, "Provident Fund Contribution", $emp_provident[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $provident, $date, $refnum, $emp_provident[$id], "Provident Fund Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if (false && $comp_other[$id] > 0) {
            writetrans($dedgenerale, $dedgeneral, $date, $refnum, $comp_other[$id], "Company Contribution to Other Deductions, {$data['fnames']} {$data['sname']}.");
        }
        if (false && $emp_other[$id] > 0) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$emp_other[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $dedgeneral, $date, $refnum, "Other Deductions Contribution", $emp_other[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $dedgeneral, $date, $refnum, $emp_other[$id], "Other Deductions Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if ($emp_ret[$id] > 0) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$emp_ret[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $retire, $date, $refnum, "Retirement Annuity Contribution", $emp_ret[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $retire, $date, $refnum, $emp_ret[$id], "Employee Retirement Annuity Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        if ($comp_ret[$id] > 0) {
            writetrans($retiree, $retire, $date, $refnum, $comp_ret[$id], "Company Retirement Annuity Contribution,  {$data['fnames']} {$data['sname']}.");
        }
        $paidamount[$id] += 0;
        db_conn('cubit');
        $mons = "{$month};";
        $due = sprint($nettpay[$id] - $paidamount[$id]);
        //, balance=balance+'$due'
        $sql = "\n\t\t\tUPDATE employees \n\t\t\tSET lastpay = '{$mons}', loanamt = (loanamt - cast(float '{$loaninstall[$id]}' as numeric)), \n\t\t\t\tloanfringe = (loanfringe - cast(float '{$fringe_loan[$id]}' as numeric)) \n\t\t\tWHERE empnum = '{$data['empnum']}' AND div = '" . USER_DIV . "'";
        $rslt = db_exec($sql) or errDie("Unable to get employee details.");
        // check if loan is 0, then unmark loan as active, and store in archive
        $sql = "SELECT loanid FROM employees WHERE loanamt=0 AND empnum='{$data['empnum']}' AND gotloan='t'::bool";
        $rslt = db_exec($sql) or errDie("Error reading employee details for loan.");
        if (pg_num_rows($rslt) > 0) {
            $loanid = pg_fetch_result($rslt, 0, 0);
            $sql = "UPDATE employees SET gotloan='f'::bool, loaninstall='0' WHERE empnum='{$data['empnum']}'";
            $rslt = db_exec($sql) or errDie("Unable to update employee loan status.");
            $sql = "UPDATE emp_loanarchive SET donedata=CURRENT_DATE WHERE id='{$loanid}'";
            $rslt = db_exec($sql) or errDie("Unable to archive loan.");
            $sql = "SELECT loanint_unpaid FROM employees WHERE empnum='{$data['empnum']}'";
            $rslt = db_exec($sql) or errDie("Error reading loan interest for installment.");
            $loanint[$id] = sprint(pg_fetch_result($rslt, 0, 0));
        } else {
            if ($loaninstall[$id] > 0) {
                $sql = "SELECT loanamt_tot, loanint_amt FROM employees WHERE empnum='{$data['empnum']}'";
                $rslt = db_exec($sql) or errDie("Error reading loan interest for installment.");
                $loan_tot = pg_fetch_result($rslt, 0, 0);
                $loan_totint = pg_fetch_result($rslt, 0, 1);
                $loanint[$id] = sprint($loaninstall[$id] / $loan_tot * $loan_totint);
            } else {
                $loanint[$id] = 0;
            }
        }
        $sql = "\n\t\t\tUPDATE employees \n\t\t\tSET loanint_unpaid = (loanint_unpaid - cast(float '{$loanint[$id]}' as numeric)) \n\t\t\tWHERE empnum = '{$data['empnum']}' AND div = '" . USER_DIV . "'";
        $rslt = db_exec($sql) or errDie("Unable to update employee interest.");
        if ($loaninstall[$id] > 0 && !empty($loanexp)) {
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance-({$loaninstall[$id]}) WHERE empnum = '{$data['empnum']}'";
            $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
            empledger($data['empnum'], $loanexp, $date, $refnum, "Loan Instalment", $loaninstall[$id], "d");
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            writetrans($salconacc, $loanexp, $date, $refnum, $loaninstall[$id] - $loanint[$id], "Loan Installment for employee,  {$data['fnames']} {$data['sname']}.");
            writetrans($salconacc, $intrec, $date, $refnum, $loanint[$id], "Loan Interest for employee,  {$data['fnames']} {$data['sname']}.");
            /* record this month's loan amounts (for reversal purposes) */
            // determine the salary period
            switch ($data["payprd"]) {
                case "d":
                    $lprd = date_part($date, DP_DAY);
                    break;
                case "m":
                case "f":
                case "w":
                default:
                    $lprd = $week;
                    break;
            }
            // record it!
            db_conn("cubit");
            $sql = "\n\t\t\t\tINSERT INTO cubit.emp_loaninstallments (\n\t\t\t\t\tempnum, fdate, fperiod, fmonth, fyear, installment, interest, \n\t\t\t\t\tfringe\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$data['empnum']}', '{$date}', '{$lprd}', '{$month}', '" . EMP_YEAR . "', '{$loaninstall[$id]}', '{$loanint[$id]}', \n\t\t\t\t\t'{$fringe_loan[$id]}'\n\t\t\t\t)";
            $rslt = db_exec($sql) or errDie("Error record loan fringe benefit.");
        }
        if (!isset($accid[$id])) {
            $accid[$id] = 0;
        }
        $totded[$id] = sprint($de_beforeamount[$id] + $de_afteramount[$id] + $emp_pension[$id] + $emp_medical[$id] + $emp_provident[$id] + $emp_ret[$id] + $emp_other[$id]);
        $totded_employer[$id] = sprint($de_beforeamount_emp[$id] + $de_afteramount_emp[$id] + $comp_pension[$id] + $comp_medical[$id] + $comp_provident[$id] + $comp_ret[$id] + $comp_other[$id]);
        $totall[$id] = sprint($totall[$id]);
        $np = $nettpay[$id];
        if (isset($rbsa[$id])) {
            $np = sprint($np - array_sum($rbsa[$id]));
        }
        if ($data["payprd"] == "d") {
            $week = $pday;
        }
        if (empty($novert[$id])) {
            $novert[$id] = "0";
        }
        if (empty($hovert[$id])) {
            $hovert[$id] = "0";
        }
        db_conn("cubit");
        $Sl = "\n\t\t\tINSERT INTO cubit.salpaid (\n\t\t\t\tempnum, month, bankid, salary, comm, uifperc, uif, payeperc, \n\t\t\t\tpaye, totded, totded_employer, totallow, loanins, \n\t\t\t\ttot_fringe, div, display, saldate, week, cyear, novert, \n\t\t\t\thovert, taxed_sal, hours, salrate, bonus\n\t\t\t) VALUES (\n\t\t\t\t'{$data['empnum']}', '{$month}', '{$accid[$id]}', '{$np}', '{$commission[$id]}', '0', '{$emp_uif[$id]}', '0', \n\t\t\t\t'{$paye[$id]}', '{$totded[$id]}', '{$totded_employer[$id]}', '{$totall[$id]}', '{$loaninstall[$id]}', \n\t\t\t\t'{$fringe_tot[$id]}', '" . USER_DIV . "', '','{$date}','{$week}', '" . EMP_YEAR . "', '{$novert[$id]}', \n\t\t\t\t'{$hovert[$id]}', '{$paye_salary[$id]}', '{$multi[$id]}','{$basic_sal_save[$id]}', '{$abonus[$id]}'\n\t\t\t)";
        $Ry = db_exec($Sl) or errDie("Unable to insert record.");
        $pid = pglib_lastid("salpaid", "id");
        // fringe benefits
        if (isset($fringeid[$id])) {
            foreach ($fringeid[$id] as $i => $fid) {
                //				empledger($data["empnum"], $fringeaccs[$id][$i], $date, $refnum,"Fringe Benefit, ".$fringename[$id][$i], $fringebens[$id][$i], "d");
                //				writetrans($salconacc, $fringeaccs[$id][$i], $date, $refnum, $fringebens[$id][$i], "Fringe Benefit for employee, $data[fnames] $data[sname].");
            }
        }
        /*		db_conn('cubit');
        		// 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) > 0) {
        
        			while ($myAllow = pg_fetch_array ($allowRslt)) {
        
        				db_conn('cubit');
        
        				# check if employee has allowance
        				$sql = "SELECT * FROM empallow WHERE allowid='$myAllow[id]' AND empnum='$data[empnum]' AND div = '".USER_DIV."'";
        				$empAllowRslt = db_exec ($sql) or errDie ("Unable to select allowance info from database.");
        				if (pg_numrows ($empAllowRslt) > 0) {
        					$dataAllow = pg_fetch_array ($empAllowRslt);
        
        					if ( ($allowances[$id][$i]=sprint($allowances[$id][$i])) <= 0 ) continue;
        
        					$Sl="INSERT INTO emp_inc(emp,year,period,date,payslip,type,code,description,qty,rate,amount,ex)
        						VALUES ('$data[empnum]','$year','$month','$date','$pid','$myAllow[id]','','$myAllow[allowance]','1','0','".$allowances[$id][$i]."','')";
        					$Ri=db_exec($Sl) or errDie("unable to insert data.1");
        
        					if($con) {
        						$myAllow['accid']=$salacc;
        					}
        
        					///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        					db_conn('cubit');
        
        					$Sl = "UPDATE employees SET balance=balance+(".$allowances[$id][$i].") WHERE empnum = '$data[empnum]'";
        					$Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        
        					empledger($data['empnum'], $allowaccs[$id][$i], $date, $refnum,"Allowance" , $allowances[$id][$i] , "c");
        
        					///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        					writetrans($allowaccs[$id][$i], $salconacc, $date, $refnum, $allowances[$id][$i], "Allowances for employee, $data[fnames] $data[sname].");
        				}
        				$i++;
        			}
        		}*/
        $frinupd = new dbUpdate("emp_frin", "cubit");
        if (isset($fringebens[$id])) {
            foreach ($fringebens[$id] as $key => $value) {
                $cols = grp(m("emp", $data["empnum"]), m("year", EMP_YEAR), m("period", $month), m("week", $week), m("fdate", $date), m("payslip", $pid), m("code", $key), m("description", sprint($fringename[$id][$key])), m("qty", 1), m("amount", $fringebens[$id][$key]));
                $frinupd->setCols($cols);
                $frinupd->run(DB_INSERT);
            }
        }
        if ($fringe_loan[$id] > 0) {
            $cols = grp(m("emp", $data["empnum"]), m("year", EMP_YEAR), m("period", $month), m("fdate", $date), m("payslip", $pid), m("code", "FRINLOAN"), m("description", "Loan Fringe Benefit"), m("qty", 1), m("amount", $fringe_loan[$id]));
            $frinupd->setCols($cols);
            $frinupd->run(DB_INSERT);
        }
        if ($fringe_medical[$id] > 0) {
            $cols = grp(m("emp", $data["empnum"]), m("year", EMP_YEAR), m("period", $month), m("fdate", $date), m("payslip", $pid), m("code", "FRINMED"), m("description", "Medical Fringe Benefit"), m("qty", 1), m("amount", $fringe_medical[$id]));
            $frinupd->setCols($cols);
            $frinupd->run(DB_INSERT);
        }
        if ($fringe_car1[$id] > 0) {
            $cols = grp(m("emp", $data["empnum"]), m("year", EMP_YEAR), m("period", $month), m("fdate", $date), m("payslip", $pid), m("code", "FRINCAR1"), m("description", "Fringe Benefit: Vehicle 1"), m("qty", 1), m("amount", $fringe_car1[$id]));
            $frinupd->setCols($cols);
            $frinupd->run(DB_INSERT);
        }
        if ($fringe_car2[$id] > 0) {
            $cols = grp(m("emp", $data["empnum"]), m("year", EMP_YEAR), m("period", $month), m("fdate", $date), m("payslip", $pid), m("code", "FRINCAR2"), m("description", "Fringe Benefit: Vehicle 2"), m("qty", 1), m("amount", $fringe_car2[$id]));
            $frinupd->setCols($cols);
            $frinupd->run(DB_INSERT);
        }
        // allowances
        if (isset($allowid[$id]) && is_array($allowid[$id]) && count($allowid[$id]) > 0) {
            foreach ($allowid[$id] as $k => $dummy) {
                if (($allowances[$id][$k] = sprint($allowances[$id][$k])) <= 0) {
                    continue;
                }
                db_conn('cubit');
                $sql = "\n\t\t\t\t\tINSERT INTO emp_inc (\n\t\t\t\t\t\temp, year, period, week, date, payslip, type, code, \n\t\t\t\t\t\tdescription, qty, rate, amount, ex\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$data['empnum']}', '" . EMP_YEAR . "', '{$month}', '{$week}', '{$date}', '{$pid}', '" . $allowid[$id][$k] . "', '', \n\t\t\t\t\t\t'" . $allowname[$id][$k] . "', '1', '0', '" . $allowances[$id][$k] . "', ''\n\t\t\t\t\t)";
                $rslt = db_exec($sql) or errDie("unable to insert data.1");
                if ($con) {
                    $allowaccs[$id][$k] = $salacc;
                }
                $Sl = "UPDATE employees SET balance=balance+(" . $allowances[$id][$k] . ") WHERE empnum = '{$data['empnum']}'";
                $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
                empledger($data['empnum'], $allowaccs[$id][$k], $date, $refnum, "Allowance", $allowances[$id][$i], "c");
                writetrans($allowaccs[$id][$k], $salconacc, $date, $refnum, $allowances[$id][$k], "Allowances for employee, {$data['fnames']} {$data['sname']}.");
            }
        }
        /*		db_conn('cubit');
        		# 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) >0) {
        
        			while ($myDeduct = pg_fetch_array ($deductRslt)) {
        
        				db_conn('cubit');
        
        				# check if employee has deduction
        				$sql = "SELECT * FROM empdeduct WHERE dedid='$myDeduct[id]' AND empnum='$data[empnum]' AND div = '".USER_DIV."'";
        				$empDeductRslt = db_exec ($sql) or errDie ("Unable to select Deduction info from database.");
        				if (pg_numrows ($empDeductRslt) > 0) {
        					$dataDeduct = pg_fetch_array ($empDeductRslt);
        					if ( ($deductions[$id][$i]=sprint($deductions[$id][$i])) > 0 ) {
        						# Debit salaries control acc and credit  acc
        						$Sl="INSERT INTO emp_ded(emp,year,period,date,payslip,type,code,description,qty,rate,amount) VALUES
        							('$data[empnum]','$year','$month','$date','$pid','$myDeduct[id]','','$myDeduct[deduction]','1','0','".$deductions[$id][$i]."')";
        						$Ri=db_exec($Sl) or errDie("unable to insert data.2");
        					}
        
        					if ( ($employer_deductions[$id][$i]=sprint($employer_deductions[$id][$i])) > 0 ) {
        						$Sl="INSERT INTO emp_com(emp,year,period,date,payslip,type,code,description,qty,rate,amount) VALUES
        							('$data[empnum]','$year','$month','$date','$pid','$myDeduct[id]','','$myDeduct[deduction]','1','0','".$employer_deductions[$id][$i]."')";
        						//$Ri=db_exec($Sl) or errDie("unable to insert data1.");
        					}
        
        					///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        					db_conn('cubit');
        
        					$Sl = "UPDATE employees SET balance=balance-(".$deductions[$id][$i].") WHERE empnum = '$data[empnum]'";
        					$Rp = db_exec($Sl) or errDie("Unable to get employee details.");
        
        					empledger($data['empnum'], $myDeduct['accid'], $date, $refnum,"Deduction" , $deductions[$id][$i], "d");
        
        					///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        					writetrans($salconacc, $dedaccs[$id][$i], $date, $refnum, $deductions[$id][$i], "Deductions for employee, $data[fnames] $data[sname].");
        
             				$i++;
        				}
        			}
        		}*/
        # Deductions
        if (isset($deductid[$id]) && is_array($deductid[$id]) && count($deductid[$id]) > 0) {
            foreach ($deductid[$id] as $k => $dummy) {
                if (($deductions[$id][$k] = sprint($deductions[$id][$k])) <= 0) {
                    continue;
                }
                db_conn('cubit');
                # Debit salaries control acc and credit  acc
                $sql = "\n\t\t\t\t\tINSERT INTO emp_ded (\n\t\t\t\t\t\temp, year, period, week, date, payslip, type, code, \n\t\t\t\t\t\tdescription, qty, rate, amount\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$data['empnum']}', '" . EMP_YEAR . "', '{$month}', '{$week}', '{$date}', '{$pid}', '" . $deductid[$id][$k] . "', '', \n\t\t\t\t\t\t'" . $deductname[$id][$k] . "', '1', '0', '" . $deductions[$id][$k] . "'\n\t\t\t\t\t)";
                $rslt = db_exec($sql) or errDie("unable to insert data.2");
                $sql = "UPDATE employees SET balance=balance-(" . $deductions[$id][$k] . ") WHERE empnum = '{$data['empnum']}'";
                $rslt = db_exec($sql) or errDie("Unable to get employee details.");
                empledger($data['empnum'], $dedaccs[$id][$k], $date, $refnum, "Deduction", $deductions[$id][$k], "d");
                writetrans($salconacc, $dedaccs[$id][$k], $date, $refnum, $deductions[$id][$k], "Deductions for employee, {$data['fnames']} {$data['sname']}.");
            }
        }
        db_conn('cubit');
        $Sl = "SELECT * FROM rbs ORDER BY name";
        $Rl = db_exec($Sl) or errDie("Unable to get data.");
        if (pg_num_rows($Rl) > 0) {
            while ($td = pg_fetch_array($Rl)) {
                $rbsa[$id][$td['id']] = sprint($rbsa[$id][$td['id']]);
                db_conn('cubit');
                $sql = "\n\t\t\t\t\tINSERT INTO emp_inc (\n\t\t\t\t\t\temp, year, period, week, date, payslip, type, code, description, \n\t\t\t\t\t\tqty, rate, amount, ex\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$data['empnum']}', '" . EMP_YEAR . "', '{$month}', '{$week}', '{$date}', '{$pid}', '{$td['id']}', '', '{$td['name']}', \n\t\t\t\t\t\t'1', '0', '" . $rbsa[$id][$td['id']] . "', 'RBS'\n\t\t\t\t\t)";
                db_exec($sql) or errDie("unable to insert data.3");
                $sql = "UPDATE employees SET balance=balance+(" . $rbsa[$id][$td['id']] . ") WHERE empnum = '{$data['empnum']}'";
                db_exec($sql) or errDie("Unable to get employee details.");
                empledger($data['empnum'], $td['account'], $date, $refnum, "Reimbursement", $rbsa[$id][$td['id']], "c");
                writetrans($td['account'], $salconacc, $date, $refnum, $rbsa[$id][$td['id']], "Reimbursement for employee, {$data['fnames']} {$data['sname']}.");
            }
        }
        if (isset($subsname)) {
            foreach ($subsname[$id] as $sid => $sn) {
                if (empty($subsamt[$id][$sid]) || $subsamt[$id][$sid] <= 0) {
                    continue;
                }
                $samt = sprint($subsamt[$id][$sid]);
                $i++;
                db_conn('cubit');
                $cols = grp(m("emp", $data["empnum"]), m("year", EMP_YEAR), m("period", $month), m("week", $week), m("date", $date), m("payslip", $pid), m("type", $sid), m("code", ""), m("description", $subsname[$id][$sid]), m("qty", 1), m("rate", 0), m("amount", $samt), m("ex", "SUBS"));
                $subin = new dbUpdate("emp_inc", "cubit", $cols);
                $subin->run(DB_INSERT);
                $cols = grp(m("balance", raw("balance+({$samt})")));
                $subin->setTable("employees");
                $subin->setOpt($cols, wgrp(m("empnum", $data["empnum"])));
                $subin->run(DB_UPDATE);
                empledger($data["empnum"], $subsacc[$id][$sid], $date, $refnum, "Subsistence Allowance: " . $subsname[$id][$sid], $samt, "c");
                writetrans($subsacc[$id][$sid], $salconacc, $date, $refnum, $samt, "Subsistence Allownace (" . $subsname[$id][$sid] . ") for employee, {$data['fnames']} {$data['sname']}.");
            }
        }
        if ($paidamount[$id] > 0) {
            if ($data['paytype'] == "Cash") {
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                db_conn('cubit');
                $Sl = "UPDATE employees SET balance=balance-({$paidamount[$id]}) WHERE empnum = '{$data['empnum']}'";
                $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
                empledger($data['empnum'], $cash_account, $date, $refnum, "Payment(Cash)", $paidamount[$id], "d");
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                writetrans($salconacc, $cash_account, $date, $refnum, $paidamount[$id], "Salary Payment(Cash) for employee,  {$data['fnames']} {$data['sname']}.");
            } elseif ($data['paytype'] == "Ledger Account") {
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                db_conn('cubit');
                $Sl = "UPDATE employees SET balance=balance-({$paidamount[$id]}) WHERE empnum = '{$data['empnum']}'";
                $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
                empledger($data['empnum'], $account[$id], $date, $refnum, "Payment(Ledger Account)", $paidamount[$id], "d");
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                writetrans($salconacc, $account[$id], $date, $refnum, $paidamount[$id], "Salary Payment(Ledger Account) for employee,  {$data['fnames']} {$data['sname']}.");
            } else {
                $accid[$id] += 0;
                core_connect();
                $sql = "SELECT * FROM bankacc WHERE accid = '{$accid[$id]}' AND div = '" . USER_DIV . "'";
                $rslt = db_exec($sql) or errDie("Unable to retrieve bank account link from Cubit", SELF);
                # check if link exists
                if (pg_numrows($rslt) < 1) {
                    return "<li class='err'> ERROR : The bank account that you selected doesn't appear to have an account linked to it.";
                }
                $bank = pg_fetch_array($rslt);
                $bankacc = $bank["accnum"];
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                db_conn('cubit');
                $Sl = "UPDATE employees SET balance=balance-({$paidamount[$id]}) WHERE empnum = '{$data['empnum']}'";
                $Rp = db_exec($Sl) or errDie("Unable to get employee details.");
                empledger($data['empnum'], $bankacc, $date, $refnum, "Payment(Bank)", $paidamount[$id], "d");
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                if ($paidamount[$id] > 0) {
                    writetrans($salconacc, $bankacc, $date, $refnum, $paidamount[$id], "Salary Payment for employee(Bank),  {$data['fnames']} {$data['sname']}.");
                    banktrans($accid[$id], "withdrawal", $date, "{$data['fnames']} {$data['sname']}", "Salary Payment for employee,  {$data['fnames']} {$data['sname']}", 0, $paidamount[$id], $salconacc, $data['empnum']);
                }
            }
        }
        db_conn('cubit');
        if ($comp_uif[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','UIFC','','UIF','1','0','{$comp_uif[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data1.");
        }
        if ($emp_uif[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','UIFE','','UIF','1','0','{$emp_uif[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data3.");
        }
        if ($sdl[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','SDL','','SDL','1','0','{$sdl[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data2.");
        }
        if ($paye[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','PAYE','','PAYE','1','0','{$paye[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data3.");
        }
        if ($basic_sal[$id] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INC','','Basic Salary','','1','0','{$basic_sal[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data4.");
        }
        if ($data["loanpayslip"] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','LOAN','','Employee Loan','','1','0','{$data['loanpayslip']}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert loan data for employee income on payslip.");
            $sql = "UPDATE employees SET loanpayslip='0' WHERE empnum='{$data['empnum']}'";
            $rslt = db_exec($sql) or errDie("Error updating loan information for payslip.");
        }
        if ($bonus[$id] > 0 && $data["payprd"] != "f" && $data["payprd"] != "w") {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCB','','Bonus','','1','0','{$bonus[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data5.");
        } else {
            if ($bonus[$id] > 0) {
                $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCB','','Special Bonus/Additional Salary','','1','0','{$bonus[$id]}','')";
                $Ri = db_exec($Sl) or errDie("unable to insert data5.");
            }
        }
        if ($annual[$id] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCAB','','Annual Bonus','','1','0','{$annual[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data5.");
        }
        if ($commission[$id] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCC','','Commission','','1','0','{$commission[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data6.");
        }
        if ($abonus[$id] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCAB','','Bonus','','1','0','{$abonus[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data6a.");
        }
        if ($all_travel[$id] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,pension,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCT','','Travel Allowance','','1','0','{$all_travel[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data7.");
        }
        if ($loaninstall[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDL','','Loan Repayment','1','0','{$loaninstall[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data8.");
        }
        if ($comp_pension[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','COMP','','Pension','1','0','{$comp_pension[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data9.");
        }
        if ($emp_pension[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDP','','Pension','1','0','{$emp_pension[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data10.");
        }
        if ($comp_provident[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','COMV','','Provident','1','0','{$comp_provident[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data9.");
        }
        if ($emp_provident[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDV','','Provident','1','0','{$emp_provident[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data10.");
        }
        if ($comp_other[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','COMO','','Other Deductions','1','0','{$comp_other[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data9.");
        }
        if ($emp_other[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDO','','Other Deductions','1','0','{$emp_other[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data10.");
        }
        if ($comp_ret[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','COMR','','Retirement Annuity Fund','1','0','{$comp_ret[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data9.");
        }
        if ($emp_ret[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDR','','Retirement Annuity Fund','1','0','{$emp_ret[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data10.");
        }
        if ($data["fringe_car1_contrib"] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDR','','Motorcar 1 Contribution for Use','1','0','{$data['fringe_car1_contrib']}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data10.");
        }
        if ($data["fringe_car2_contrib"] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDR','','Motorcar 2 Contribution for Use','1','0','{$data['fringe_car2_contrib']}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data10.");
        }
        if ($comp_medical[$id] > 0) {
            $Sl = "INSERT INTO emp_com(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','COMM','','Medical Contribution','1','0','{$comp_medical[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data.11");
        }
        if ($emp_medical[$id] > 0) {
            $Sl = "INSERT INTO emp_ded(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','DEDM','','Medical Contribution','1','0','{$emp_medical[$id]}')";
            $Ri = db_exec($Sl) or errDie("unable to insert data.12");
        }
        if ($overamt[$id] > 0) {
            $Sl = "INSERT INTO emp_inc(emp,year,period,week,date,payslip,type,code,description,qty,rate,amount,ex) VALUES\n\t\t\t('{$data['empnum']}','" . EMP_YEAR . "','{$month}','{$week}','{$date}','{$pid}','INCO','','Over Time','1','0','{$overamt[$id]}','')";
            $Ri = db_exec($Sl) or errDie("unable to insert data.13");
        }
        $ecost += 0;
        db_conn('cubit');
        $Sl = "SELECT * FROM empc WHERE emp='{$data['empnum']}'";
        $Ri = db_exec($Sl);
        if (pg_num_rows($Ri) > 0) {
            while ($cdata = pg_fetch_array($Ri)) {
                db_conn('cubit');
                $sql = "SELECT * FROM costcenters WHERE ccid = '{$cdata['cid']}'";
                $ccRslt = db_exec($sql) or errDie("Unable to retrieve Cost centers from database.");
                $cc = pg_fetch_array($ccRslt);
                $amount = sprint($ecost * $cdata['amount'] / 100);
                db_conn(PRD_DB);
                $sql = "\n\t\t\t\t\tINSERT INTO cctran (\n\t\t\t\t\t\tccid, trantype, typename, edate, description, \n\t\t\t\t\t\tamount, username, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cc['ccid']}', 'ct', 'Salary', '{$date}', 'Salary for employee,  {$data['fnames']} {$data['sname']}', \n\t\t\t\t\t\t'{$amount}', '" . USER_NAME . "', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $insRslt = db_exec($sql) or errDie("Unable to retrieve insert Cost center amounts into database.");
            }
        }
        $batch_setting = getCSetting("PRINT_PSLIPS_BATCH");
        if (isset($batch_setting) and $batch_setting == "yes") {
            if ($printslip != "n") {
                $out .= "{$pid}|";
            }
        } else {
            if ($printslip != "n") {
                $out .= "nhprinter('salwages/payslip-print.php?id={$pid}',{$pid});";
            }
        }
    }
    $batch_setting = getCSetting("PRINT_PSLIPS_BATCH");
    if (isset($batch_setting) and $batch_setting == "yes") {
        $out .= "',{$pid});</script>";
    } else {
        if ($printslip != "n") {
            $out .= "</script>";
            //spmove('../main.php');</script>";
        }
    }
    if ($printslip == "n") {
        $out = "\n\t\t<h3>Process Employee Salaries</h3>\n\t\tSuccessfully processed salaries for selected employees.<br /><br />";
    }
    /* update printslip setting */
    setCSetting("EMP_PRINTSLIP", $printslip);
    pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
    //$out="";
    return $out;
}