function printSupp()
{
    # Set up table to display in
    global $PRDMON;
    $cur = date("m");
    $from = getMonthName($PRDMON[1]) . " " . getYearOfFinMon($PRDMON[1]);
    $to = getMonthName($cur) . " " . getYearOfFinMon($cur);
    $printSupp = "\n\t\t<h3>Creditors Age Analysis</h3>\n\t\t<h4>Period: {$from} to {$to}</h4>\n\t\t<li class='err'>Please note that because age analysis is calculated and stored as is displayed below it is not\n\t\tpossible to change the period for which you wish to see the age analysis.</li>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th>Acc no.</th>\n\t\t\t\t<th>Suppliers</th>\n\t\t\t\t<th>Current</th>\n\t\t\t\t<th>30 days</th>\n\t\t\t\t<th>60 days</th>\n\t\t\t\t<th>90 days</th>\n\t\t\t\t<th>120 days</th>\n\t\t\t\t<th>Total Outstanding</th>\n\t\t\t</tr>";
    # connect to database
    db_connect();
    # Query server
    $i = 0;
    $sql = "SELECT * FROM suppliers WHERE div = '" . USER_DIV . "' ORDER BY supname ASC";
    $suppRslt = db_exec($sql) or errDie("Unable to retrieve Suppliers from database.");
    if (pg_numrows($suppRslt) < 1) {
        return "<li>There are no Suppliers in Cubit.</li>";
    }
    # totals
    $totcurr = 0;
    $tot30 = 0;
    $tot60 = 0;
    $tot90 = 0;
    $tot120 = 0;
    $alltot = 0;
    while ($supp = pg_fetch_array($suppRslt)) {
        # Get all ages
        $curr = age($supp['supid'], 29);
        $age30 = age($supp['supid'], 59);
        $age60 = age($supp['supid'], 89);
        $age90 = age($supp['supid'], 119);
        $age120 = age($supp['supid'], 149);
        # Suppliers total
        $supptot = sprint($curr + $age30 + $age60 + $age90 + $age120);
        if ($supptot < $supp['balance']) {
            $curr = sprint($curr + ($supp['balance'] - $supptot));
            $supptot = sprint($supptot + $supp['balance'] - $supptot);
        }
        $printSupp .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>{$supp['supno']}</td>\n\t\t\t\t<td>{$supp['supname']}</td>\n\t\t\t\t<td>" . CUR . " {$curr}</td>\n\t\t\t\t<td>" . CUR . " {$age30}</td>\n\t\t\t\t<td>" . CUR . " {$age60}</td>\n\t\t\t\t<td>" . CUR . " {$age90}</td>\n\t\t\t\t<td>" . CUR . " {$age120}</td>\n\t\t\t\t<td>" . CUR . " {$supptot}</td>\n\t\t\t</tr>";
        # hold totals
        $totcurr += $curr;
        $tot30 += $age30;
        $tot60 += $age60;
        $tot90 += $age90;
        $tot120 += $age120;
        $alltot += $supptot;
        $i++;
    }
    $totcurr = sprint($totcurr);
    $tot30 = sprint($tot30);
    $tot60 = sprint($tot60);
    $tot90 = sprint($tot90);
    $tot120 = sprint($tot120);
    $alltot = sprint($alltot);
    $printSupp .= "\n\t\t<tr><td><br></td></tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td colspan='2'><b>Totals</b></td>\n\t\t\t<td><b>" . CUR . " {$totcurr}</b></td>\n\t\t\t<td><b>" . CUR . " {$tot30}</b></td>\n\t\t\t<td><b>" . CUR . " {$tot60}</b></td>\n\t\t\t<td><b>" . CUR . " {$tot90}</b></td>\n\t\t\t<td><b>" . CUR . " {$tot120}</b></td>\n\t\t\t<td><b>" . CUR . " {$alltot}</b></td>\n\t\t</tr>\n\t\t<tr><td><br></td></tr>\n\t\t<tr>\n\t\t\t<td align='center' colspan='10'>\n\t\t\t\t<form action='../xls/cred-age-analysis-xls.php' method='POST' name='form'>\n\t\t\t\t\t<input type='submit' name='xls' value='Export to spreadsheet'>\n\t\t\t\t</form>\n\t\t\t</td>\n\t\t</tr>\n\t</table>\n\t<p>\n\t<table " . TMPL_tblDflts . " width='15%'>\n\t\t<tr><td><br></td></tr>\n\t\t<tr>\n\t\t\t<th>Quick Links</th>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td><a href='index-reports.php'>Financials</a></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td><a href='index-reports-debtcred.php'>Debtors & Creditors Reports</a></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td><a href='../supp-new.php'>Add Supplier</a></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td><a href='../supp-view.php'>View Suppliers</a></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td><a href='../main.php'>Main Menu</a></td>\n\t\t</tr>\n\t</table>";
    return $printSupp;
}
function add_tbdata(&$oc, $schema, $yearsback = 0)
{
    global $MONPRD, $PRDMON;
    /* fetch prev year trial bal data */
    $tb = new dbSelect("trial_bal_actual", $schema, grp(m("where", "period!='0'"), m("order", "period, acctype, topacc, accnum")));
    $tb->run();
    $cprd = false;
    $cprd_name = false;
    while ($row = $tb->fetch_array()) {
        /* the period in the table data changed */
        if ($cprd != $row["period"]) {
            $cprd = $row["period"];
            $year = getYearOfFinMon($PRDMON[$cprd]) - $yearsback;
            $mon = getMonthNameS($PRDMON[$cprd]);
            $cprd_name = "{$mon} {$year}";
            $oc[$cprd_name] = array();
        }
        if ($row["period"] == 1 && $row["acctype"] != "B") {
            $hcode = new dbSelect("trial_bal", $schema, grp(m("where", "period='1' AND accid='{$row['accid']}'"), m("limit", 1)));
            $hcode->run();
            $row = $hcode->fetch_array();
        } else {
            if ($row["period"] == 1 && $row["topacc"] == "5200" && $row["accnum"] == "000") {
                /* calculate previous year profit/loss */
                $sql = "SELECT SUM(tb.credit) AS credit, SUM(tb.debit) AS debit\n\t\t\t\t\tFROM core.accounts acc LEFT JOIN {$schema}.trial_bal tb\n\t\t\t\t\t\tON acc.accid=tb.accid AND acc.div=tb.div\n\t\t\t\t\tWHERE (acc.acctype='I' OR acc.acctype='E') AND acc.div='" . USER_DIV . "'\n\t\t\t\t\t\tAND tb.period='0'";
                $qry = new dbSql($sql);
                $qry->run();
                /* then deduct from debit/credit of retained income/accumulated loss */
                $qry->fetch_array();
                $row["debit"] -= $qry->d["debit"];
                $row["credit"] -= $qry->d["credit"];
            }
        }
        /* store data */
        $oc[$cprd_name]["{$row['topacc']}/{$row['accnum']} {$row['accname']}"] = array("debit" => $row["debit"], "credit" => $row["credit"]);
    }
    #sort array to make some sense
    $oc = natksort($oc);
}
function printAgeInv($_POST, $pure = TRUE)
{
    extract($_POST);
    # Set up table to display in
    global $PRDMON;
    $from = getMonthName($PRDMON[1]) . " " . getYearOfFinMon($PRDMON[1]);
    $to = getMonthName($PRDMON[12]) . " " . getYearOfFinMon($PRDMON[12]);
    $sel1 = "";
    $sel2 = "";
    $sel3 = "";
    if (isset($show_zero) and strlen($show_zero) > 0) {
        $sel1 = "checked='yes'";
    }
    if (isset($show_large) and strlen($show_large) > 0) {
        $sel2 = "checked='yes'";
    }
    if (isset($show_old) and strlen($show_old) > 0) {
        $sel3 = "checked='yes'";
    }
    if ($pure) {
        $show_filter = "\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Filter/Sort Age Analysis</th>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><input type='checkbox' name='show_zero' onClick='javascript:document.form1.submit();' value='yes' {$sel1}> Show Zero Balances</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><input type='checkbox' name='show_large' onClick='javascript:document.form1.submit();' value='yes' {$sel2}> Show Largest Balances First</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><input type='checkbox' name='show_old' onClick='javascript:document.form1.submit();' value='yes' {$sel3}> Show Oldest Balances First</td>\n\t\t\t\t</tr>\n\t\t\t\t" . TBL_BR . "\n\t\t\t</table>";
        $show_quicklinks = "\n\t\t\t<p>\n\t\t\t<table " . TMPL_tblDflts . " width='15%'>\n\t\t        " . TBL_BR . "\n\t\t        <tr>\n\t\t        \t<th>Quick Links</th>\n\t\t        </tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><a href='index-reports.php'>Financials</a></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><a href='index-reports-debtcred.php'>Debtors & Creditors Reports</a></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><a href='../customers-new.php'>Add Customer</a></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><a href='../customers-view.php'>View Customers</a></td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><a href='../main.php'>Main Menu</a></td>\n\t\t\t\t</tr>\n\t\t\t</table>";
    } else {
        $show_filter = "";
        $show_quicklinks = "";
    }
    # Set up table to display in
    $printCust = "\n\t\t<h3>Debtors Age Analysis</h3>\n\t\t<h4>Period: {$from} to {$to}</h4>\n\t\t<form action='" . SELF . "' method='POST' name='form1'>\n\t\t{$show_filter}\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th><font size='1'>Acc no.</font></th>\n\t\t\t\t<th><font size='1'>Customer</font></th>\n\t\t\t\t<th><font size='1'>Sales Rep</font></th>\n\t\t\t\t<th><font size='1'>Contact Name</font></th>\n\t\t\t\t<th><font size='1'>Tel No.</font></th>\n\t\t\t\t<th><font size='1'>Current</font></th>\n\t\t\t\t<th><font size='1'>30 days</font></th>\n\t\t\t\t<th><font size='1'>60 days</font></th>\n\t\t\t\t<th><font size='1'>90 days</font></th>\n\t\t\t\t<th><font size='1'>120 days + </font></th>\n\t\t\t\t<th><font size='1'>Total Outstanding</font></th>\n\t\t\t</tr>";
    # Connect to database
    db_connect();
    # Query server
    $i = 0;
    $entries = array();
    $sql = "SELECT * FROM customers WHERE div = '" . USER_DIV . "' OR ddiv = '" . USER_DIV . "' ORDER BY accno ASC";
    $custRslt = db_exec($sql) or errDie("Unable to retrieve Customers from database.");
    if (pg_numrows($custRslt) < 1) {
        return "<li>There are no Customers in Cubit.</li>";
    }
    # Totals
    $totcurr = 0;
    $tot30 = 0;
    $tot60 = 0;
    $tot90 = 0;
    $tot120 = 0;
    $alltot = 0;
    while ($cust = pg_fetch_array($custRslt)) {
        # Get all ages
        $to_month = date("m");
        $to_date = "now";
        $from_date = date("Y-m-d", mktime(0, 0, 0, date("m"), "01", date("Y")));
        $curr = cust_age($cust['cusnum'], 29, $cust['fcid'], $cust['location'], $to_month, $to_date, $from_date);
        $age30 = cust_age($cust['cusnum'], 59, $cust['fcid'], $cust['location'], $to_month, $to_date, $from_date);
        $age60 = cust_age($cust['cusnum'], 89, $cust['fcid'], $cust['location'], $to_month, $to_date, $from_date);
        $age90 = cust_age($cust['cusnum'], 119, $cust['fcid'], $cust['location'], $to_month, $to_date, $from_date);
        $age120 = cust_age($cust['cusnum'], 149, $cust['fcid'], $cust['location'], $to_month, $to_date, $from_date);
        # Customer total
        $custtot = sprint($curr + $age30 + $age60 + $age90 + $age120);
        db_con("exten");
        # sales rep
        $get_salsp = "SELECT salesp FROM salespeople WHERE salespid = '{$cust['sales_rep']}' LIMIT 1";
        $run_salsp = db_exec($get_salsp) or errDie("Unable to get sales person information.");
        if (pg_numrows($run_salsp) > 0) {
            $sarr = pg_fetch_array($run_salsp);
            $salesperson = $sarr['salesp'];
        } else {
            $salesperson = "";
        }
        $col1[] = $cust['accno'];
        $col2[] = $cust['surname'];
        $col22[] = $salesperson;
        $col3[] = $cust['contname'];
        $col4[] = $cust['bustel'];
        $col5[] = $curr;
        $col6[] = $age30;
        $col7[] = $age60;
        $col8[] = $age90;
        $col9[] = $age120;
        $col10[] = $custtot;
        $col11[] = $cust['cusnum'];
    }
    if (!isset($show_zero) or isset($show_zero) and strlen($show_zero) > 0) {
        #get key of zero entries
        foreach ($col10 as $each => $own) {
            if ($own == 0) {
                unset($col1[$each]);
                unset($col2[$each]);
                unset($col22[$each]);
                unset($col3[$each]);
                unset($col4[$each]);
                unset($col5[$each]);
                unset($col6[$each]);
                unset($col7[$each]);
                unset($col8[$each]);
                unset($col9[$each]);
                unset($col10[$each]);
            }
        }
    }
    if (isset($show_large) and strlen($show_large) > 0) {
        arsort($col10);
        $sortarr = $col10;
    }
    if (isset($show_old) and strlen($show_old) > 0) {
        arsort($col9);
        $sortarr = $col9;
        if (array_sum($sortarr) == 0) {
            arsort($col8);
            $sortarr = $col8;
            if (array_sum($sortarr) == 0) {
                arsort($col7);
                $sortarr = $col7;
                if (array_sum($sortarr) == 0) {
                    arsort($col6);
                    $sortarr = $col6;
                }
            }
        }
    }
    if (!isset($sortarr) or !is_array($sortarr)) {
        $sortarr = $col1;
    }
    $counter = 0;
    foreach ($sortarr as $key => $value) {
        if ($counter == 20 and $pure) {
            $printCust .= "\n\t\t\t\t<tr>\n\t\t\t\t\t<th><font size='1'>Acc no.</font></th>\n\t\t\t\t\t<th><font size='1'>Customer</font></th>\n\t\t\t\t\t<th><font size='1'>Sales Rep</font></th>\n\t\t\t\t\t<th><font size='1'>Contact Name</font></th>\n\t\t\t\t\t<th><font size='1'>Tel No.</font></th>\n\t\t\t\t\t<th><font size='1'>Current</font></th>\n\t\t\t\t\t<th><font size='1'>30 days</font></th>\n\t\t\t\t\t<th><font size='1'>60 days</font></th>\n\t\t\t\t\t<th><font size='1'>90 days</font></th>\n\t\t\t\t\t<th><font size='1'>120 days + </font></th>\n\t\t\t\t\t<th><font size='1'>Total Outstanding</font></th>\n\t\t\t\t</tr>";
            $counter = 0;
        }
        $printCust .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td nowrap><font size='1'>{$col1[$key]}</font></td>\n\t\t\t\t<td nowrap><a href='#' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'><font size='1'>{$col2[$key]}</font></a></td>\n\t\t\t\t<td nowrap><font size='1'>{$col22[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1'>{$col3[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1'>{$col4[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'>" . CUR . " {$col5[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'>" . CUR . " {$col6[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'>" . CUR . " {$col7[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'>" . CUR . " {$col8[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'>" . CUR . " {$col9[$key]}</font></td>\n\t\t\t\t<td nowrap><font size='1' onClick='popupSized(\"../cust-stmnt.php?cusnum={$col11[$key]}\",\"window1\",800,700)'>" . CUR . " {$col10[$key]}</font></td>\n\t\t\t</tr>";
        $counter++;
    }
    $totcurr = sprint(array_sum($col5));
    $tot30 = sprint(array_sum($col6));
    $tot60 = sprint(array_sum($col7));
    $tot90 = sprint(array_sum($col8));
    $tot120 = sprint(array_sum($col9));
    $alltot = sprint(array_sum($col10));
    $printCust .= "\n\t\t\t" . TBL_BR . "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td colspan='5'><font size='1'><b>Totals</b></font></td>\n\t\t\t\t<td nowrap><font size='1'><b>" . CUR . " {$totcurr}</b></font></td>\n\t\t\t\t<td nowrap><font size='1'><b>" . CUR . " {$tot30}</b></font></td>\n\t\t\t\t<td nowrap><font size='1'><b>" . CUR . " {$tot60}</b></font></td>\n\t\t\t\t<td nowrap><font size='1'><b>" . CUR . " {$tot90}</b></font></td>\n\t\t\t\t<td nowrap><font size='1'><b>" . CUR . " {$tot120}</b></font></td>\n\t\t\t\t<td nowrap><font size='1'><b>" . CUR . " {$alltot}</b></font></td>\n\t\t\t</tr>\n\t\t\t" . TBL_BR . "\n\t\t\t<tr>\n\t\t\t\t<td align='center' colspan='10'>\n\t\t\t\t\t<form action='../xls/debt-age-analysis-xls.php' method='POST' name='form'>\n\t\t\t\t\t\t<input type='submit' name='xls' value='Export to spreadsheet'>\n\t\t\t\t\t</form>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t</form>\n\t    {$show_quicklinks}";
    return $printCust;
}
function printCenter($_GET)
{
    # Get vars
    extract($_GET);
    if (!isset($ccid) or strlen($ccid) < 1) {
        return "<li class='err'>Invalid Cost Center. Cost Center Not Found.</li>";
    }
    # Query server
    db_connect();
    $sql = "SELECT * FROM costcenters WHERE ccid = '{$ccid}'";
    $ccRslt = db_exec($sql) or errDie("Unable to retrieve Cost centers from database.");
    if (pg_numrows($ccRslt) < 1) {
        return "<li class='err'> - Invalid Cost Center.</li>";
    }
    $cc = pg_fetch_array($ccRslt);
    $sp4 = "&nbsp;&nbsp;&nbsp;&nbsp;";
    # get income
    $income = "";
    $income = "\n\t\t<tr>\n\t\t\t<td colspan='4'><h3>Income</h3></td>\n\t\t</tr>";
    #create selection date range
    $from_finyear = getYearOfFinMon($from_prd);
    $to_finyear = getYearOfFinMon($to_prd);
    //print "$from_prd -> $to_prd<br>";
    $from_month = date("m", mktime(0, 0, 0, $from_prd, 1, $from_finyear));
    $to_month = date("m", mktime(0, 0, 0, $to_prd, 1, $to_finyear));
    $search = "edate >= '{$from_finyear}-{$from_month}-01' AND edate <= '{$to_finyear}-{$to_month}-" . date("d", mktime(0, 0, 0, $to_prd + 1, -1, $to_finyear)) . "' AND ";
    //	$search = "edate >= '$from_finyear-$from_prd-01' AND edate <= '$to_finyear-$to_prd-".date("d",mktime(0,0,0,$to_prd,-1,$to_finyear))."' AND ";
    $flag = TRUE;
    $x = $from_prd;
    while ($flag) {
        //	for($x=$from_prd;$x<=$to_prd;$x++){
        if ($x == 13) {
            $x = 1;
        }
        db_conn($x);
        $sql = "SELECT * FROM cctran WHERE {$search} ccid = '{$cc['ccid']}' AND trantype = 'dt'";
        $recRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
        $tottotinc = 0;
        if (pg_numrows($recRslt) > 0) {
            $income .= "\n\t\t\t\t<tr>\n\t\t\t\t\t<th colspan='5'>" . date("F", mktime(0, 0, 0, $x, 1, date("Y"))) . "</th>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Type</th>\n\t\t\t\t\t<th>Date</th>\n\t\t\t\t\t<th>Description</th>\n\t\t\t\t\t<th>Amount</th>\n\t\t\t\t\t<th>Posted By</th>\n\t\t\t\t</tr>";
            $totinc = 0;
            for ($i = 0; $rec = pg_fetch_array($recRslt); $i++) {
                $totinc += $rec['amount'];
                $rec['edate'] = ext_rdate($rec['edate']);
                $income .= "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td>{$rec['typename']}</td>\n\t\t\t\t\t\t<td>{$sp4} {$rec['edate']} {$sp4}</td>\n\t\t\t\t\t\t<td>{$rec['description']}</td>\n\t\t\t\t\t\t<td align='right'>{$sp4}" . CUR . " {$rec['amount']}</td>\n\t\t\t\t\t\t<td>{$rec['username']}</td>\n\t\t\t\t\t</tr>";
            }
            $totinc = sprint($totinc);
            $income .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td colspan='3' align='right'><b>Total</b></td>\n\t\t\t\t\t<td align='right'><b>" . CUR . " {$totinc}</b></td>\n\t\t\t\t\t<td><br></td>\n\t\t\t\t</tr>";
        }
        if ($x == $to_prd) {
            $flag = FALSE;
        }
        $x++;
    }
    #get expenses
    $expense = "";
    $expense = "\n\t\t<tr><td><br></td></tr>\n\t\t<tr>\n\t\t\t<td colspan='4'><h3>Expenses</h3></td>\n\t\t</tr>";
    $flag = TRUE;
    $x = $from_prd;
    while ($flag) {
        //	for($x=$from_prd;$x<=$to_prd;$x++){
        if ($x == 13) {
            $x = 1;
        }
        db_conn($x);
        $sql = "SELECT * FROM cctran WHERE {$search} ccid = '{$cc['ccid']}' AND trantype = 'ct'";
        $recRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
        if (pg_numrows($recRslt) > 0) {
            $expense .= "\n\t\t\t\t<tr>\n\t\t\t\t\t<th colspan='5'>" . date("F", mktime(0, 0, 0, $x, 1, date("Y"))) . "</th>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Type</th>\n\t\t\t\t\t<th>Date</th>\n\t\t\t\t\t<th>Description</th>\n\t\t\t\t\t<th>Amount</th>\n\t\t\t\t\t<th>Posted By</th>\n\t\t\t\t</tr>";
            $totexp = 0;
            for ($i = 0; $rec = pg_fetch_array($recRslt); $i++) {
                $totexp += $rec['amount'];
                $rec['edate'] = ext_rdate($rec['edate']);
                $expense .= "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td>{$rec['typename']}</td>\n\t\t\t\t\t\t<td>{$sp4} {$rec['edate']} {$sp4}</td>\n\t\t\t\t\t\t<td>{$rec['description']}</td>\n\t\t\t\t\t\t<td align='right'>{$sp4}" . CUR . " {$rec['amount']}</td>\n\t\t\t\t\t\t<td>{$rec['username']}</td>\n\t\t\t\t\t</tr>";
            }
            $totexp = sprint($totexp);
            $expense .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td colspan='3' align='right'><b>Total</b></td>\n\t\t\t\t\t<td align='right'><b>" . CUR . " {$totexp}</b></td>\n\t\t\t\t</tr>";
        }
        if ($x == $to_prd) {
            $flag = FALSE;
        }
        $x++;
    }
    $printCenter = "\n\t\t<center>\n\t\t<h3>Cost Centers Detailed Period Review</h3>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th>Cost Center</th>\n\t\t\t<tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>{$sp4} {$cc['centername']} ({$cc['centercode']}) {$sp4}</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t<p>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t{$income}\n\t\t\t{$expense}\n\t\t</table>\n\t\t<p>\n\t\t<form action='" . SELF . "' method='POST'>\n\t\t\t<input type='hidden' name='key' value='export'>\n\t\t\t<input type='hidden' name='ccid' value='{$ccid}'>\n\t\t\t<input type='hidden' name='from_prd' value='{$from_prd}'>\n\t\t\t<input type='hidden' name='to_prd' value='{$to_prd}'>\n\t\t\t<input type='submit' value='Export To Spreadsheet'>\n\t\t</form>\n\t\t<p>\n\t\t<p>\n\t\t<input type='button' value='[X] Close' onClick='javascript:window.close();'>";
    return $printCenter;
}
function viewtran($_POST)
{
    # Get vars
    extract($_POST);
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($fprd, "string", 1, 14, "Invalid from period number.");
    $v->isOk($tprd, "string", 1, 14, "Invalid to period number.");
    if (isset($accnt)) {
        if ($accnt == 'slct') {
            if (isset($supids)) {
                foreach ($supids as $key => $supid) {
                    $v->isOk($supid, "num", 1, 20, "Invalid Supplier number.");
                }
            } else {
                return "<li class='err'>Please select at least one Creditor.</li>" . slctacc();
            }
        }
    } else {
        $v->isOk("###", "num", 0, 0, "ERROR : Invalid Accounts Selection.");
    }
    # display errors, if any
    if ($v->isError()) {
        $confirm = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirm .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $confirm .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $confirm;
    }
    # Get the ids
    if ($accnt == 'all') {
        $supids = array();
        db_connect();
        $sql = "SELECT supid FROM suppliers WHERE div = '" . USER_DIV . "'";
        $rs = db_exec($sql);
        if (pg_num_rows($rs) > 0) {
            while ($ac = pg_fetch_array($rs)) {
                $supids[] = $ac['supid'];
            }
        } else {
            return "<li calss='err'> There are no suppliers yet in Cubit.</li>";
        }
    }
    $prds = array();
    if ($tprd < $fprd) {
        for ($i = $fprd; $i <= 12; ++$i) {
            $prds[] = $i;
        }
        for ($i = 1; $i <= $tprd; ++$i) {
            $prds[] = $i;
        }
    } else {
        for ($i = $fprd; $i <= $tprd; ++$i) {
            $prds[] = $i;
        }
    }
    $hide = "";
    $sp = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    $trans = "";
    foreach ($supids as $key => $supid) {
        $supRs = get("cubit", "supname, supno, balance", "suppliers", "supid", $supid);
        $sup = pg_fetch_array($supRs);
        $hide .= "<input type='hidden' name='supids[]' value='{$supid}'>";
        $trans .= "\n\t\t<tr>\n\t\t\t<td colspan='8' align='center'><h3>{$sup['supname']}</h3></td>\n\t\t</tr>";
        foreach ($prds as $prd) {
            $prdname = prdname($prd);
            $trans .= "\n\t\t\t<tr>\n\t\t\t\t<th colspan='8'>{$prdname}</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th>{$sp}</th>\n\t\t\t\t<th>Date</th>\n\t\t\t\t<th>Reference</th>\n\t\t\t\t<th>Description</th>\n\t\t\t\t<th>Debit</th>\n\t\t\t\t<th>Credit</th>\n\t\t\t\t<th>Balance</th>\n\t\t\t\t<th>Contra Acc</th>\n\t\t\t</tr>";
            $idRs = get($prd, "min(id)", "suppledger", "supid", $supid);
            $id = pg_fetch_array($idRs);
            if ($id['min'] != 0) {
                $balRs = get($prd, "(cbalance-credit) AS cbalance,(dbalance-debit) AS dbalance", "suppledger", "id", $id['min']);
                $bal = pg_fetch_array($balRs);
                $bal['cbalance'] += 0;
                $bal['dbalance'] += 0;
            } else {
                $balRs = get("cubit", "balance", "suppliers", "supid", $supid);
                $bal = pg_fetch_array($balRs);
                $bal['balance'] += 0;
                if ($bal['balance'] < 0) {
                    $bal['dbalance'] = $bal['balance'];
                    $bal['cbalance'] = 0;
                } else {
                    $bal['cbalance'] = $bal['balance'];
                    $bal['dbalance'] = 0;
                }
                //$bal['dbalance'] += $amount;
            }
            /* show the balance as a debit/credit, and not the individual balances of both */
            if ($bal['dbalance'] > $bal['cbalance']) {
                $bal['dbalance'] = $bal['dbalance'] - $bal['cbalance'];
                $bal['cbalance'] = 0;
            } elseif ($bal['cbalance'] > $bal['dbalance']) {
                $bal['cbalance'] = $bal['cbalance'] - $bal['dbalance'];
                $bal['dbalance'] = 0;
            } else {
                $bal['cbalance'] = 0;
                $bal['dbalance'] = 0;
            }
            $bal['credit'] = sprint($bal['cbalance']);
            $bal['debit'] = sprint($bal['dbalance']);
            $balance = sprint($bal['cbalance'] - $bal['dbalance']);
            $trans .= "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td colspan='8'><b>{$sup['supno']} - {$sup['supname']} </b></td>\n\t\t\t\t\t\t\t</tr>";
            $bbf_date = date("t-M-Y", mktime(0, 0, 0, $prd - 1, 1, getYearOfFinMon($prd)));
            $trans .= "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td colspan='2' align='right'>{$bbf_date}</td>\n\t\t\t\t\t\t\t\t<td>Br/Forwd</td>\n\t\t\t\t\t\t\t\t<td>Brought Forward</td>\n\t\t\t\t\t\t\t\t<td align='right'>{$bal['debit']}</td>\n\t\t\t\t\t\t\t\t<td align='right'>{$bal['credit']}</td>\n\t\t\t\t\t\t\t\t<td align='right'>{$balance}</td>\n\t\t\t\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t\t\t</tr>";
            # --> Transaction reading comes here <--- #
            $dbal['debit'] = 0;
            $dbal['credit'] = 0;
            if ($t == "s") {
                $tranRs = get($prd, "*", "suppledger", "supid", $supid, "ORDER BY id");
            } else {
                $tranRs = get($prd, "*", "suppledger", "supid", $supid, "ORDER BY edate,id");
            }
            while ($tran = pg_fetch_array($tranRs)) {
                $caccRs = get("core", "accname, accid, topacc, accnum", "accounts", "accid", $tran['contra']);
                $cacc = pg_fetch_array($caccRs);
                $tran['debit'] = sprint($tran['debit']);
                $tran['credit'] = sprint($tran['credit']);
                $dbal['debit'] += $tran['debit'];
                $dbal['credit'] += $tran['credit'];
                if ($t == "s") {
                    $cbalance = sprint($tran['cbalance'] - $tran['dbalance']);
                } else {
                    $cbalance = sprint($dbal['credit'] + $bal['credit'] - ($dbal['debit'] + $bal['debit']));
                }
                if ($t == "s") {
                    $tran['edate'] = $tran['sdate'];
                }
                # Format date
                $tran['edate'] = explode("-", $tran['edate']);
                $tran['edate'] = $tran['edate'][2] . "-" . $tran['edate'][1] . "-" . $tran['edate'][0];
                $trans .= "<tr class='bg-odd'><td><br></td><td>{$tran['edate']}</td><td>{$tran['eref']}</td><td>{$tran['descript']}</td><td align=right>{$tran['debit']}</td><td align=right>{$tran['credit']}</td><td align=right>{$cbalance}</td><td>{$cacc['topacc']}/{$cacc['accnum']} - {$cacc['accname']}</td></tr>";
            }
            # Total balance changes
            if ($dbal['debit'] > $dbal['credit']) {
                $dbal['debit'] = sprint($dbal['debit'] - $dbal['credit']);
                $dbal['credit'] = "";
            } elseif ($dbal['credit'] > $dbal['debit']) {
                $dbal['credit'] = sprint($dbal['credit'] - $dbal['debit']);
                $dbal['debit'] = "";
            } else {
                $dbal['credit'] = "";
                $dbal['debit'] = "0.00";
            }
            $trans .= "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td colspan='2'><br></td>\n\t\t\t\t\t\t\t\t<td>A/C Total</td>\n\t\t\t\t\t\t\t\t<td>Total for period {$prdname} to Date :</td>\n\t\t\t\t\t\t\t\t<td align='right'>{$dbal['debit']}</td>\n\t\t\t\t\t\t\t\t<td align='right'>{$dbal['credit']}</td>\n\t\t\t\t\t\t\t\t<td align='right'></td>\n\t\t\t\t\t\t\t\t<td> </td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colspan='8'><br></td>\n\t\t\t\t\t\t\t</tr>";
        }
    }
    $view = "\n\t\t\t\t<center>\n\t\t\t\t<form action='" . SELF . "' method='POST'>\n\t\t\t\t\t<input type='hidden' name='key' value='viewtran'>\n\t\t\t\t\t<input type='hidden' name='accnt' value='{$accnt}'>\n\t\t\t\t\t<input type='hidden' name='prd' value='{$prd}'>\n\t\t\t\t\t<input type='hidden' name='t' value='{$t}'>\n\t\t\t\t\t<input type='hidden' name='fprd' value='{$fprd}'>\n\t\t\t\t\t<input type='hidden' name='tprd' value='{$tprd}'>\n\t\t\t\t\t{$hide}\n\t\t\t\t\t<h3>Creditors Ledger</h3>\n\t\t\t\t<table " . TMPL_tblDflts . " width='75%'>\n\t\t\t\t\t{$trans}\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td colspan='8' align='center'><input type='submit' name='export' value='Export to Spreadsheet'></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\t\t\t\t</from>";
    return $view;
}
function printCenter($_POST)
{
    # Get vars
    extract($_POST);
    $search1 = "";
    if (isset($project1) and strlen($project1) > 0 and $project1 != 0) {
        $search1 .= "AND project1 = '{$project1}' ";
    }
    if (isset($project2) and strlen($project2) > 0 and $project2 != 0) {
        $search1 .= "AND project2 = '{$project2}' ";
    }
    if (isset($project3) and strlen($project3) > 0 and $project3 != 0) {
        $search1 .= "AND project3 = '{$project3}'";
    }
    if (!isset($preject1)) {
        $project1 = "";
    }
    if (!isset($preject2)) {
        $project2 = "";
    }
    # Set up table to display in
    $printCenter = "\n\t\t<h3>Cost Ledger</h3>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t<form action='" . SELF . "' method='POST'>\n\t\t\t<input type='hidden' name='key' value='export'>\n\t\t\t<input type='hidden' name='prd' value='{$prd}'>\n\t\t\t<input type='hidden' name='old_project1' value='{$project1}'>\n\t\t\t<input type='hidden' name='old_project2' value='{$project2}'>\n\t\t\t<tr>\n\t\t\t\t<th>Cost Center Code</th>\n\t\t\t\t<th>Cost Center Name</th>\n\t\t\t\t<th>Project</th>\n\t\t\t\t<th>Sub-Section</th>\n\t\t\t\t<th>Sub-Sub-Section</th>\n\t\t\t\t<th>Total Income</th>\n\t\t\t\t<th>Total Expense</th>\n\t\t\t\t<th>Total Profit / Loss</th>\n\t\t\t</tr>";
    # connect to database
    db_connect();
    # Query server
    $i = 0;
    $sql = "SELECT * FROM costcenters_links WHERE id > '0' {$search1} ORDER BY id ASC";
    $ccRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
    if (pg_numrows($ccRslt) < 1) {
        return "<li class='err'>No Cost Centers Were Found With Selected Criteria.</li>";
    }
    #create selection date range
    $finyear = getYearOfFinMon($prd);
    $search = "edate >= '{$finyear}-{$prd}-01' AND edate <= '{$finyear}-{$prd}-" . date("d", mktime(0, 0, 0, $prd + 1, -0, $finyear)) . "' AND ";
    $totinc = 0;
    $totexp = 0;
    $totprof = 0;
    while ($cc = pg_fetch_array($ccRslt)) {
        db_conn($prd);
        $sql = "SELECT sum(amount) as inc FROM cctran WHERE {$search} (project = '{$cc['project1']}' OR project = '0') AND ccid = '{$cc['ccid']}' AND trantype = 'dt'";
        $ibalRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
        $ibal = pg_fetch_array($ibalRslt);
        $sql = "SELECT sum(amount) as exp FROM cctran WHERE {$search} (project = '{$cc['project1']}' OR project = '0') AND ccid = '{$cc['ccid']}' AND trantype = 'ct'";
        $ebalRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
        $ebal = pg_fetch_array($ebalRslt);
        db_connect();
        #get the project information
        $get_pro1 = "SELECT project_name FROM projects WHERE id = '{$cc['project1']}'";
        $run_pro1 = db_exec($get_pro1) or errDie("Unable to get project information.");
        if (pg_numrows($run_pro1) < 1) {
            $project1_name = "";
        } else {
            $p1arr = pg_fetch_array($run_pro1);
            $project1_name = $p1arr['project_name'];
        }
        #get the project 2 information
        $get_pro2 = "SELECT sub_project_name FROM sub_projects WHERE id = '{$cc['project2']}'";
        $run_pro2 = db_exec($get_pro2) or errDie("Unable to get project information.");
        if (pg_numrows($run_pro2) < 1) {
            $project2_name = "";
        } else {
            $p2arr = pg_fetch_array($run_pro2);
            $project2_name = $p2arr['sub_project_name'];
        }
        #get the project 3 information
        $get_pro3 = "SELECT sub_sub_project_name FROM sub_sub_projects WHERE id = '{$cc['project3']}'";
        $run_pro3 = db_exec($get_pro3) or errDie("Unable to get project information.");
        if (pg_numrows($run_pro3) < 1) {
            $project3_name = "";
        } else {
            $p3arr = pg_fetch_array($run_pro3);
            $project3_name = $p3arr['sub_sub_project_name'];
        }
        # alternate bgcolor
        $cc['inc'] = sprint($ibal['inc']);
        $cc['exp'] = sprint($ebal['exp']);
        $prof = $ibal['inc'] - $ebal['exp'];
        $totinc += $ibal['inc'];
        $totexp += $ebal['exp'];
        $totprof += $prof;
        #get costcenter info
        $get_cc2 = "SELECT * FROM costcenters WHERE ccid = '{$cc['ccid']}' LIMIT 1";
        $run_cc2 = db_exec($get_cc2) or errDie("Unable to get cost center information.");
        if (pg_numrows($run_cc2) < 1) {
            $centercode = "";
            $centername = "";
        } else {
            $cc2arr = pg_fetch_array($run_cc2);
            $centercode = $cc2arr['centercode'];
            $centername = $cc2arr['centername'];
        }
        $printCenter .= "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td>{$centercode}</td>\n\t\t\t\t\t\t<td>{$centername}</td>\n\t\t\t\t\t\t<td>{$project1_name}</td>\n\t\t\t\t\t\t<td>{$project2_name}</td>\n\t\t\t\t\t\t<td>{$project3_name}</td>\n\t\t\t\t\t\t<td align='right'>" . CUR . " " . sprint($cc['inc']) . "</td>\n\t\t\t\t\t\t<td align='right'>" . CUR . " " . sprint($cc['exp']) . "</td>\n\t\t\t\t\t\t<td align='right'>" . CUR . " " . sprint($prof) . "</td>\n\t\t\t\t\t\t<td><a href='#bottom' onclick='openwindowbg(\"costcenter-rep-det.php?ccid={$cc['ccid']}&prd={$prd}\")'>Detailed</a></td>\n\t\t\t\t\t</tr>";
        $i++;
    }
    $totinc = sprint($totinc);
    $totexp = sprint($totexp);
    $totprof = sprint($totprof);
    $printCenter .= "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td align='right' colspan='2'><b>Total</b></td>\n\t\t\t\t\t\t\t\t<td align='right'><b>" . CUR . " {$totinc}</b></td>\n\t\t\t\t\t\t\t\t<td align='right'><b>" . CUR . " {$totexp}</b></td>\n\t\t\t\t\t\t\t\t<td align='right'><b>" . CUR . " {$totprof}</b></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colspan='6' align='center'><input type='submit' value='Export To Spreadsheet'></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t";
    return $printCenter;
}
function printCenter($_POST)
{
    # Get vars
    extract($_POST);
    $search = "";
    if (isset($project1) and strlen($project1) > 0 and $project1 != 0) {
        $search .= "AND project1 = '{$project1}' ";
    }
    if (isset($project2) and strlen($project2) > 0 and $project2 != 0) {
        $search .= "AND project2 = '{$project2}' ";
    }
    if (isset($project3) and strlen($project3) > 0 and $project3 != 0) {
        $search .= "AND project3 = '{$project3}'";
    }
    if (!isset($project1)) {
        $project1 = "";
    }
    if (!isset($project2)) {
        $project2 = "";
    }
    # Set up table to display in
    $printCenter = "\n\t\t<h3>Cost Centers Period Review</h3>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t<form action='" . SELF . "' method='POST'>\n\t\t\t<input type='hidden' name='key' value='export'>\n\t\t\t<input type='hidden' name='from_prd' value='{$from_prd}'>\n\t\t\t<input type='hidden' name='to_prd' value='{$to_prd}'>\n\t\t\t<input type='hidden' name='old_project1' value='{$project1}'>\n\t\t\t<input type='hidden' name='old_project2' value='{$project2}'>\n\t\t\t<tr>\n\t\t\t\t<th>Cost Center Code</th>\n\t\t\t\t<th>Cost Center Name</th>\n\t\t\t\t<th>Total Income</th>\n\t\t\t\t<th>Total Expense</th>\n\t\t\t\t<th>Total Profit / Loss</th>\n\t\t\t</tr>";
    # connect to database
    db_connect();
    # Query server
    $i = 0;
    $sql = "SELECT * FROM costcenters_links WHERE id > '0' {$search} ORDER BY id ASC";
    $ccRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
    if (pg_numrows($ccRslt) < 1) {
        return "<li class='err'>There are no Cost Centers in Cubit.</li>";
    }
    #create selection date range
    $from_finyear = getYearOfFinMon($from_prd);
    $to_finyear = getYearOfFinMon($to_prd);
    $search = "edate >= '{$from_finyear}-{$from_prd}-01' AND edate <= '" . date("Y-m-d", mktime(0, 0, 0, $to_prd + 1, 0, $to_finyear)) . "' AND ";
    $prds = array();
    if ($to_prd < $from_prd) {
        for ($i = $from_prd; $i <= 12; ++$i) {
            $prds[] = $i;
        }
        for ($i = 1; $i <= $to_prd; ++$i) {
            $prds[] = $i;
        }
    } else {
        for ($i = $from_prd; $i <= $to_prd; ++$i) {
            $prds[] = $i;
        }
    }
    $totinc = 0;
    $totexp = 0;
    $totprof = 0;
    while ($cc = pg_fetch_array($ccRslt)) {
        $cc['inc'] = 0;
        $cc['exp'] = 0;
        foreach ($prds as $x) {
            db_conn($x);
            $sql = "SELECT sum(amount) as inc FROM cctran WHERE {$search} (project = '{$cc['project1']}' OR project = '0') AND ccid = '{$cc['ccid']}' AND trantype = 'dt'";
            $ibalRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
            $ibal = pg_fetch_array($ibalRslt);
            $sql = "SELECT sum(amount) as exp FROM cctran WHERE {$search} (project = '{$cc['project1']}' OR project = '0') AND ccid = '{$cc['ccid']}' AND trantype = 'ct'";
            $ebalRslt = db_exec($sql) or errDie("Unable to retrieve Cost Centers from database.");
            $ebal = pg_fetch_array($ebalRslt);
            $cc['inc'] = $cc['inc'] + sprint($ibal['inc']);
            $cc['exp'] = $cc['exp'] + sprint($ebal['exp']);
            $prof = $ibal['inc'] - $ebal['exp'];
            $totinc += $ibal['inc'];
            $totexp += $ebal['exp'];
            $totprof += $prof;
        }
        $cc['inc'] = sprint($cc['inc']);
        db_connect();
        #get costcenter info
        $get_cc2 = "SELECT * FROM costcenters WHERE ccid = '{$cc['ccid']}' LIMIT 1";
        $run_cc2 = db_exec($get_cc2) or errDie("Unable to get cost center information.");
        if (pg_numrows($run_cc2) < 1) {
            $centercode = "";
            $centername = "";
        } else {
            $cc2arr = pg_fetch_array($run_cc2);
            $centercode = $cc2arr['centercode'];
            $centername = $cc2arr['centername'];
        }
        $printCenter .= "\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td>{$centercode}</td>\n\t\t\t\t\t\t\t<td>{$centername}</td>\n\t\t\t\t\t\t\t<td align='right'>" . CUR . " " . sprint($cc['inc']) . "</td>\n\t\t\t\t\t\t\t<td align='right'>" . CUR . " " . sprint($cc['exp']) . "</td>\n\t\t\t\t\t\t\t<td align='right'>" . CUR . " " . sprint($prof) . "</td>\n\t\t\t\t\t\t\t<td><a href='#bottom' onclick='openwindowbg(\"costcenter-rep-prd-det.php?ccid={$cc['ccid']}&from_prd={$from_prd}&to_prd={$to_prd}\")'>Detailed</a></td>\n\t\t\t\t\t\t</tr>";
        $i++;
    }
    $totinc = sprint($totinc);
    $totexp = sprint($totexp);
    $totprof = sprint($totprof);
    $printCenter .= "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td align='right' colspan='2'><b>Total</b></td>\n\t\t\t\t\t\t\t\t<td align='right'><b>" . CUR . " {$totinc}</b></td>\n\t\t\t\t\t\t\t\t<td align='right'><b>" . CUR . " {$totexp}</b></td>\n\t\t\t\t\t\t\t\t<td align='right'><b>" . CUR . " {$totprof}</b></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colspan='6' align='center'><input type='submit' value='Export To Spreadsheet'></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t";
    return $printCenter;
}
Ejemplo n.º 8
0
function write_data($_POST)
{
    extract($_POST);
    if (isset($back)) {
        return enter_data2($_POST);
    }
    db_conn('core');
    $Sl = "SELECT accnum FROM salesacc WHERE name='VATIN'";
    $Ri = db_exec($Sl);
    if (pg_num_rows($Ri) > 0) {
        $vd = pg_fetch_array($Ri);
        $vatin = $vd['accnum'];
    } else {
        $vatin = 0;
    }
    $Sl = "SELECT accnum FROM salesacc WHERE name='VATOUT'";
    $Ri = db_exec($Sl);
    if (pg_num_rows($Ri) > 0) {
        $vd = pg_fetch_array($Ri);
        $vatout = $vd['accnum'];
    } else {
        $vatout = 0;
    }
    db_conn('cubit');
    $Sl = "SELECT * FROM vatcodes WHERE del='Yes'";
    $Ri = db_exec($Sl);
    if (pg_num_rows($Ri) < 1) {
        $Sl = "SELECT * FROM vatcodes WHERE zero='Yes'";
        $Ri = db_exec($Sl);
        if (pg_num_rows($Ri) < 1) {
            return "Please set up your vatcodes first.";
        }
    }
    $vcd = pg_fetch_array($Ri);
    db_conn('exten');
    $Sl = "SELECT debtacc FROM departments";
    $Ri = db_exec($Sl);
    $dd = pg_fetch_array($Ri);
    $cc = $dd['debtacc'];
    db_conn('core');
    $Sl = "SELECT * FROM accounts WHERE accname='Opening Balances / Suspense Account'";
    $Ri = db_exec($Sl) or errDie("Unable to get account.");
    if (pg_num_rows($Ri) < 1) {
        return "<li class='err'>There is no account called 'Opening Balances / Suspense Account'. <br>\n\t\tI Need that account.<br>\n\t\tPlease create it. <br><br>\n\t\tThank you.</li>";
    }
    $ad = pg_fetch_array($Ri);
    $bala = $ad['accid'];
    db_conn(PRD_DB);
    # get last ref number
    pglib_transaction("BEGIN");
    $refnum = getrefnum();
    /* check for main accounts whose sub accounts add up to same total,
    			then clear main account
    	   check for main accounts whose sub accounts dont add up, then unblock
    	   		main accounts
    	 */
    $sql = "SELECT * FROM cubit.import_data";
    $rslt = db_exec($sql) or errDie("Error validating data.");
    $acsub = $acmain = array();
    while ($fd = pg_fetch_array($rslt)) {
        $n = explode("/", $fd["des1"]);
        if (!isset($n[1]) || $n[1] == "000") {
            $n[1] = "000";
        }
        $a = array("num" => $fd["des1"], "name" => $fd["des2"], "dt" => $fd["des3"], "ct" => $fd["des4"]);
        if ($n[1] == "000") {
            $acmain["{$n['0']}"] = $a;
        } else {
            if (!isset($acsub[$n[0]])) {
                $acsub[$n[0]] = array();
            }
            $acsub[$n[0]][] = $a;
        }
    }
    /* match subs with mains */
    $unblock_main = false;
    foreach ($acmain as $k => $v) {
        $totdt = 0;
        $totct = 0;
        if (isset($acsub[$k])) {
            foreach ($acsub[$k] as $sk => $sv) {
                $totdt += $sv["dt"];
                $totct += $sv["ct"];
            }
            if ($totdt - $totct != $v["dt"] - $v["ct"]) {
                $unblock_main = true;
            } else {
                $sql = "UPDATE cubit.import_data SET des3='0', des4='0'\n\t\t\t\t\t\tWHERE des1='{$v['num']}' AND des2='{$v['name']}'";
                $rslt = db_exec($sql) or errDie("Error balancing main account with sub accounts: {$v['num']} - {$v['name']} with {$sv['num']} - {$sv['name']}.");
            }
        }
    }
    if ($unblock_main) {
        $sql = "UPDATE cubit.set SET value = 'nuse', descript = 'Dont block main accounts'\n\t\t\t\tWHERE label = 'BLOCK' AND div = '" . USER_DIV . "'";
        $rslt = db_exec($sql) or errDie("Error unblocking main accounts.");
    }
    /* continue importing (validated/fixed) data */
    db_conn('cubit');
    $Sl = "SELECT * FROM import_data";
    $Ri = db_exec($Sl);
    $i = 0;
    $tot_debit = 0;
    $tot_credit = 0;
    $date = mkdate(getYearOfFinMon($prd), $prd, 1);
    db_conn('core');
    while ($fd = pg_fetch_array($Ri)) {
        $fid = $fd['id'];
        $accs = explode('/', $fd['des1']);
        $topacc = $accs[0];
        $topacc = str_pad($topacc, 4, "0");
        if (isset($accs[1])) {
            $accnum = $accs[1];
        } else {
            $accnum = "000";
        }
        db_conn('core');
        if ($accounts[$fid] == 0) {
            $catss = explode(":", $cat[$fid]);
            if ($catss[0] == "other_income" || $catss[0] == "sales") {
                $catT = "I10";
                $type = "I";
            } elseif ($catss[0] == "expenses" || $catss[0] == "cost_of_sales") {
                $catT = "E10";
                $type = "E";
            } else {
                $catT = "B10";
                $type = "B";
            }
            $Sl = "\n\t\t\t\tINSERT INTO accounts (\n\t\t\t\t\ttopacc, accnum, catid, accname, vat, \n\t\t\t\t\tdiv, toptype, acctype\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$topacc}', '{$accnum}', '{$catT}', '{$fd['des2']}', 'f', \n\t\t\t\t\t'" . USER_DIV . "', '{$catss['0']}', '{$type}'\n\t\t\t\t)";
            $Rl = db_exec($Sl);
            $accname = $fd['des2'];
            $accid = pglib_lastid("accounts", "accid");
            // 			$query = "INSERT INTO trial_bal(accid, topacc, accnum, accname, div) VALUES('$accid', '$topacc', '$accnum', '$fd[des2]', '".USER_DIV."')";
            // 			$trialRslt = db_exec($query);
            global $MONPRD;
            insert_trialbal($accid, $topacc, $accnum, $accname, $type, 'f', USER_DIV);
            for ($i = 1; $i <= 12; $i++) {
                $periodname = getMonthName($i);
                $sql = "INSERT INTO " . YR_DB . ".{$periodname} (accid, topacc, accnum, accname,\n\t\t\t\t\t\t\tdebit, credit, div)\n\t\t\t\t\t\tSELECT accid, topacc, accnum, accname, debit, credit, div\n\t\t\t\t\t\tFROM core.trial_bal WHERE month='{$i}' AND accid='{$accid}'";
                db_exec($sql) or die($sql);
                $sql = "INSERT INTO \"{$i}\".openbal (accid, accname, debit, credit, div)\n\t\t\t\t\t\tSELECT accid, accname, debit, credit, div\n\t\t\t\t\t\tFROM core.trial_bal WHERE month='{$i}' AND accid='{$accid}'";
                db_exec($sql) or die($sql);
                $sql = "INSERT INTO \"{$i}\".ledger (acc, contra, edate, eref, descript,\n\t\t\t\t\t\t\tcredit, debit, div, caccname, ctopacc, caccnum, cbalance, dbalance)\n\t\t\t\t\t\tSELECT accid, accid, CURRENT_DATE, '0', 'Balance', '0', '0', div,\n\t\t\t\t\t\t\taccname, topacc, accnum, credit, debit\n\t\t\t\t\t\tFROM core.trial_bal WHERE month='{$i}' AND accid='{$accid}'";
                db_exec($sql) or die($sql);
            }
            $accounts[$fid] = $accid;
        } else {
            $Sl = "UPDATE accounts SET topacc='{$topacc}',accnum='{$accnum}',accname='{$fd['des2']}' WHERE accid='{$accounts[$fid]}'";
            $Rl = db_exec($Sl);
            $Sl = "UPDATE trial_bal SET topacc='{$topacc}',accnum='{$accnum}',accname='{$fd['des2']}' WHERE accid='{$accounts[$fid]}'";
            $Rl = db_exec($Sl);
        }
        $Sl = "SELECT accid,accname FROM accounts WHERE accid='{$accounts[$fid]}'";
        $Rx = db_exec($Sl);
        $ad = pg_fetch_array($Rx);
        $i++;
        $debit = $fd['des3'];
        $credit = $fd['des4'];
        if ($debit > 0) {
            writetrans($ad['accid'], $bala, $date, $refnum, sprint($debit), "Opening balance imported");
        }
        if ($credit > 0) {
            writetrans($bala, $ad['accid'], $date, $refnum, sprint($credit), "Opening balance imported");
        }
        $tot_debit += $fd['des3'];
        $tot_credit += $fd['des4'];
        if ($ad['accid'] == $vatin) {
            vatr($vcd['id'], $date, "INPUT", $vcd['code'], $refnum, "Opening balance VAT imported", sprint($credit - $debit), sprint($credit - $debit));
        }
        if ($ad['accid'] == $vatout) {
            vatr($vcd['id'], $date, "OUTPUT", $vcd['code'], $refnum, "Opening balance VAT imported", sprint($credit - $debit), sprint($credit - $debit));
        }
    }
    $tot_debit = sprint($tot_debit);
    $tot_credit = sprint($tot_credit);
    if ($cc_tot > 0) {
        $tot = array_sum($cbalance);
        if (sprint($cc_tot) != sprint($tot)) {
            return enter_data2($_POST) . "<li class='err'>The total amount for balances for customers you entered is: " . CUR . " {$tot}, the\n\t\t\ttotal for the control account is: " . sprint($cc_tot) . ". These need to be the same.</li>";
        }
        db_conn('cubit');
        $Sl = "SELECT cusnum,accno,surname FROM customers ORDER BY surname";
        $Ri = db_exec($Sl);
        if (pg_num_rows($Ri) < 1) {
            return "<li class='err'>If you want to import your customer control account you need to add customers first</li>";
        }
        $tot = 0;
        while ($cd = pg_fetch_array($Ri)) {
            $cid = $cd['cusnum'];
            $cbalance[$cid] = sprint($cbalance[$cid]);
            if ($cbalance[$cid] > 0) {
                db_conn('cubit');
                # Update the customer (make balance more)
                $sql = "UPDATE customers SET balance = (balance + '{$cbalance[$cid]}') WHERE cusnum = '{$cid}' AND div = '" . USER_DIV . "'";
                $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF);
                $sql = "\n\t\t\t\t\tINSERT INTO stmnt (\n\t\t\t\t\t\tcusnum, invid, amount, date, type, \n\t\t\t\t\t\tst, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cid}', '0', '{$cbalance[$cid]}', '{$date}', 'Opening Balance Imported', \n\t\t\t\t\t\t'n', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
                $sql = "\n\t\t\t\t\tINSERT INTO open_stmnt (\n\t\t\t\t\t\tcusnum, invid, amount, balance, date, \n\t\t\t\t\t\ttype, st, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cid}', '0', '{$cbalance[$cid]}', '{$cbalance[$cid]}', '{$date}', \n\t\t\t\t\t\t'Opening Balance Imported', 'n', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
                crecordDT($cbalance[$cid], $cid, $date);
                custledger($cid, $bala, $date, 0, "Opening Balance Imported", $cbalance[$cid], "d");
            } elseif ($cbalance[$cid] < 0) {
                db_conn('cubit');
                # Update the customer (make balance more)
                $sql = "UPDATE customers SET balance = (balance + '{$cbalance[$cid]}') WHERE cusnum = '{$cid}' AND div = '" . USER_DIV . "'";
                $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF);
                $sql = "\n\t\t\t\t\tINSERT INTO stmnt (\n\t\t\t\t\t\tcusnum, invid, amount, date, type, \n\t\t\t\t\t\tst, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cid}', '0', '{$cbalance[$cid]}', '{$date}', 'Opening Balance Imported', \n\t\t\t\t\t\t'n', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
                $sql = "\n\t\t\t\t\tINSERT INTO open_stmnt (\n\t\t\t\t\t\tcusnum, invid, amount, balance, date, \n\t\t\t\t\t\ttype, st, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cid}', '0', '{$cbalance[$cid]}', '{$cbalance[$cid]}', '{$date}', \n\t\t\t\t\t\t'Opening Balance Imported', 'n', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
                crecordCT(-$cbalance[$cid], $cid, $date);
                custledger($cid, $bala, $date, 0, "Opening Balance Imported", -$cbalance[$cid], "c");
            }
            $i++;
            $tot += $cbalance[$cid];
        }
    }
    if ($sc_tot > 0) {
        db_conn('cubit');
        $Sl = "SELECT supid,supno,supname FROM suppliers ORDER BY supname";
        $Ri = db_exec($Sl);
        if (pg_num_rows($Ri) < 1) {
            return "<li class='err'>If you want to import your supplier control account you need to add suppliers first</li>";
        }
        $tot = 0;
        while ($cd = pg_fetch_array($Ri)) {
            $sid = $cd['supid'];
            $sbalance[$sid] += 0;
            if ($sbalance[$sid] > 0) {
                db_conn('cubit');
                $sql = "UPDATE suppliers SET balance = (balance + '{$sbalance[$sid]}') WHERE supid = '{$sid}' AND div = '" . USER_DIV . "'";
                $rslt = db_exec($sql) or errDie("Unable to update supplier in Cubit.", SELF);
                $sql = "\n\t\t\t\t\tINSERT INTO sup_stmnt (\n\t\t\t\t\t\tsupid, edate, ref, cacc, descript, \n\t\t\t\t\t\tamount, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$sid}', '{$date}', '0', '{$bala}', 'Opening balance imported', \n\t\t\t\t\t\t'{$sbalance[$sid]}', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
                recordCT(-$sbalance[$sid], $sid, $date);
                suppledger($sid, $bala, $date, $refnum, "Opening balance imported", $sbalance[$sid], "c");
            } elseif ($sbalance[$sid] < 0) {
                db_conn('cubit');
                $sql = "UPDATE suppliers SET balance = (balance + '{$sbalance[$sid]}') WHERE supid = '{$sid}' AND div = '" . USER_DIV . "'";
                $rslt = db_exec($sql) or errDie("Unable to update supplier in Cubit.", SELF);
                $sql = "\n\t\t\t\t\tINSERT INTO sup_stmnt (\n\t\t\t\t\t\tsupid, edate, ref, cacc, descript, amount, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$sid}', '{$date}', '0', '{$bala}', 'Opening balance imported', \n\t\t\t\t\t\t'{$sbalance[$sid]}', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
                recordDT(-$sbalance[$sid], $sid, $date);
                suppledger($sid, $bala, $date, $refnum, "Opening balance imported", $sbalance[$sid], "d");
            }
            $i++;
            $tot += $sbalance[$sid];
        }
        if (sprint($sc_tot) != sprint($tot)) {
            return enter_data2($_POST) . "<li class='err'>The total amount for balances for suppliers you entered is: " . CUR . " {$tot}, the\n\t\t\ttotal for the control account is: " . sprint($sc_tot) . ". These need to be the same.</li>";
        }
    }
    if ($sal_tot > 0) {
        db_conn('cubit');
        $Sl = "SELECT empnum,enum,sname,fnames FROM employees ORDER BY sname,fnames";
        $Ri = db_exec($Sl);
        if (pg_num_rows($Ri) < 1) {
            return "<li class='err'>If you want to import your employee control account you need to add employees first</li>";
        }
        $tot = 0;
        while ($cd = pg_fetch_array($Ri)) {
            $eid = $cd['empnum'];
            if (!isset($ebalance[$eid])) {
                $ebalance[$eid] = "";
            }
            $ebalance[$eid] = sprint($ebalance[$eid]);
            db_conn('cubit');
            $Sl = "UPDATE employees SET balance=balance+'{$ebalance[$eid]}' WHERE empnum = '{$eid}' AND div = '" . USER_DIV . "'";
            $Rt = db_exec($Sl) or errDie("Unable to get employee details.");
            if ($ebalance[$eid] > 0) {
                empledger($eid, $bala, $date, $refnum, "Opening balance imported", $ebalance[$eid], "c");
            } else {
                empledger($eid, $bala, $date, $refnum, "Opening balance imported", abs($ebalance[$eid]), "d");
            }
            $i++;
            $tot += $ebalance[$eid];
        }
        if (sprint($sal_tot) != sprint($tot)) {
            return enter_data2($_POST) . "<li class='err'>The total amount for balances for employees you entered is: " . CUR . " {$tot}, the\n\t\t\ttotal for the control account is: " . sprint($sal_tot) . ". These need to be the same.</li>";
        }
    }
    if ($i_tot > 0) {
        db_conn('cubit');
        $Sl = "SELECT stkid,stkcod,stkdes FROM stock ORDER BY stkcod";
        $Ri = db_exec($Sl);
        if (pg_num_rows($Ri) < 1) {
            return "<li class='err'>If you want to import your inventory control account you need to add stock first</li>";
        }
        $tot = 0;
        while ($cd = pg_fetch_array($Ri)) {
            $iid = $cd['stkid'];
            if (!isset($ibalance[$iid])) {
                $ibalance[$iid] = "";
            }
            if ($ibalance[$iid] > 0) {
                $unitnum = $units[$iid];
                db_connect();
                $sql = "UPDATE stock SET csamt = (csamt + '{$ibalance[$iid]}'), units = (units + '{$unitnum}') WHERE stkid = '{$iid}' AND div = '" . USER_DIV . "'";
                $rslt = db_exec($sql) or errDie("Unable to insert stock to Cubit.", SELF);
                stockrec($cd['stkid'], $cd['stkcod'], $cd['stkdes'], 'dt', $date, $unitnum, $ibalance[$iid], "Inventory balance imported");
                db_connect();
                $cspric = sprint($ibalance[$iid] / $unitnum);
                //$cspric = sprint(0);
                $sql = "\n\t\t\t\t\tINSERT INTO stockrec (\n\t\t\t\t\t\tedate, stkid, stkcod, stkdes, trantype, qty, \n\t\t\t\t\t\tcsprice, csamt, details, div\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$date}', '{$cd['stkid']}', '{$cd['stkcod']}', '{$cd['stkdes']}', 'inc', '{$unitnum}', \n\t\t\t\t\t\t'{$ibalance[$iid]}', '{$cspric}', 'Inventory balance imported', '" . USER_DIV . "'\n\t\t\t\t\t)";
                $recRslt = db_exec($sql);
                db_connect();
                $sql = "SELECT * FROM stock WHERE stkid = '{$iid}' AND div = '" . USER_DIV . "'";
                $stkRslt = db_exec($sql) or errDie("Unable to access databse.", SELF);
                if (pg_numrows($stkRslt) < 1) {
                    return "<li> Invalid Stock ID.</li>";
                } else {
                    $stk = pg_fetch_array($stkRslt);
                }
                if ($stk['units'] != 0) {
                    $sql = "UPDATE stock SET csprice = (csamt/units) WHERE stkid = '{$iid}' AND div = '" . USER_DIV . "'";
                    $rslt = db_exec($sql) or errDie("Unable to insert stock to Cubit.", SELF);
                } else {
                    $sql = "UPDATE stock SET csprice = '{$csprice}' WHERE stkid = '{$iid}' AND div = '" . USER_DIV . "'";
                    $rslt = db_exec($sql) or errDie("Unable to insert stock to Cubit.", SELF);
                }
            }
            $tot += $ibalance[$iid];
            $i++;
        }
        if (sprint($i_tot) != sprint($tot)) {
            return enter_data2($_POST) . "<li class='err'>The total amount for balances for inventory you entered is: " . CUR . " {$tot}, the\n\t\t\ttotal for the control account is: " . sprint($sal_tot) . ". These need to be the same.</li>";
        }
    }
    $out = "\n\t\t<table " . TMPL_tblDflts . " width='50%'>\n\t\t\t<tr>\n\t\t\t\t<th>Data Imported</th>\n\t\t\t</tr>\n\t\t\t<tr class='datacell'>\n\t\t\t\t<td>Trial balance, has been successfully imported.</td>\n\t\t\t</tr>\n\t\t</table>";
    pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
    block();
    return $out;
}
function printSupp($_POST, $err = "")
{
    extract($_POST);
    # Set up table to display in
    global $PRDMON;
    $cur = date("m");
    $from = getMonthName($PRDMON[1]) . " " . getYearOfFinMon($PRDMON[1]);
    $to = getMonthName($cur) . " " . getYearOfFinMon($cur);
    $sel1 = "";
    $sel2 = "";
    $sel3 = "";
    $sel4 = "";
    $sel5 = "";
    $sel6 = "";
    if (isset($search)) {
        switch ($search) {
            case "cur":
                $sel2 = "selected";
                break;
            case "30":
                $sel3 = "selected";
                break;
            case "60":
                $sel4 = "selected";
                break;
            case "90":
                $sel5 = "selected";
                break;
            case "120":
                $sel6 = "selected";
                break;
            default:
                $sel1 = "selected";
        }
    } else {
        $sel1 = "selected";
    }
    if (!isset($creditor)) {
        $creditor = "";
    }
    if (!isset($bankid)) {
        $bankid = "";
    }
    $csel1 = "";
    $csel3 = "";
    if ($creditor == "0") {
        $csel1 = "selected";
    }
    if ($creditor == "2") {
        $csel3 = "selected";
    }
    db_connect();
    $get_bankaccs = "SELECT * FROM bankacct WHERE btype != 'int' AND div = '" . USER_DIV . "' ORDER BY accname,bankname";
    $run_bankaccs = db_exec($get_bankaccs) or errDie("Unable to get bank account information");
    if (pg_numrows($run_bankaccs) < 1) {
        $bankacclist = "No Bank Accounts Found.";
    } else {
        $bankacclist = "<select name='bankid'>";
        while ($barr = pg_fetch_array($run_bankaccs)) {
            if ($bankid == $barr['bankid']) {
                $bankacclist .= "<option value='{$barr['bankid']}' selected>{$barr['accname']} - {$barr['bankname']} ({$barr['acctype']})</option>";
            } else {
                $bankacclist .= "<option value='{$barr['bankid']}'>{$barr['accname']} - {$barr['bankname']} ({$barr['acctype']})</option>";
            }
        }
        $bankacclist .= "</select>";
    }
    $get_subs = "SELECT * FROM supp_groups WHERE id != '0' ORDER BY groupname";
    $run_subs = db_exec($get_subs) or errDie("Unable to get supplier group information");
    if (pg_numrows($run_subs) < 1) {
        $sub_list = "No Groups Found.";
    } else {
        $sub_list = "\n\t\t\t\t\t\t<select name='creditor' onChange='document.form1.submit();'>\n\t\t\t\t\t\t\t<option value='' disabled selected>Select Sub Contractor Type</option>\n\t\t\t\t\t\t\t<option value='0' {$csel1}>Sub Contractors</option>\n\t\t\t\t\t\t\t<option value='2' {$csel3}>Creditors</option>\n\t\t\t\t\t\t</select>";
    }
    if ($creditor == "0") {
        $age_heading = "";
    } else {
        $age_heading = "\n\t\t\t\t\t\t\t<th>30 days</th>\n\t\t\t\t\t\t\t<th>60 days</th>\n\t\t\t\t\t\t\t<th>90 days</th>\n\t\t\t\t\t\t\t<th>120 days</th>\n\t\t\t\t\t";
    }
    $printSupp = "\n\t\t\t\t\t<h3>Creditors Payment Run</h3>\n\t\t\t\t\t{$err}\n\t\t\t\t\t<h4>Period: {$from} to {$to}</h4>\n\t\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t<form action='" . SELF . "' method='POST' name='form1'>\n\t\t\t\t\t\t<input type='hidden' name='key' value='do_process'>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='4'>Show Only</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='4'>{$sub_list}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='4'>Date Range (With Balances)</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='4'>\n\t\t\t\t\t\t\t\t<select name='search' onChange='document.form1.submit();'>\n\t\t\t\t\t\t\t\t\t<option value='' disabled {$sel1}>Select An Option</option>\n\t\t\t\t\t\t\t\t\t<option value='cur' {$sel2}>Current</option>\n\t\t\t\t\t\t\t\t\t<option value='30' {$sel3}>30 Days</option>\n\t\t\t\t\t\t\t\t\t<option value='60' {$sel4}>60 Days</option>\n\t\t\t\t\t\t\t\t\t<option value='90' {$sel5}>90 Days</option>\n\t\t\t\t\t\t\t\t\t<option value='120' {$sel6}>120 Days</option>\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t" . TBL_BR . "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='4'>Select Bank Account To Use</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='4'>{$bankacclist}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='4'>Process Date</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='4'>" . mkDateSelect("date") . "</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t" . TBL_BR . "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td colspan='8'></td>\n\t\t\t\t\t\t\t<th>Cheque Starting Number</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td colspan='8'></td>\n\t\t\t\t\t\t\t<td class='" . bg_class() . "' align='center'><input type='text' size='5' name='cheq_start'></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t" . TBL_BR . "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th>Acc no.</th>\n\t\t\t\t\t\t\t<th>Suppliers</th>\n\t\t\t\t\t\t\t<th>Current</th>\n\t\t\t\t\t\t\t{$age_heading}\n\t\t\t\t\t\t\t<th>Total Outstanding</th>\n\t\t\t\t\t\t\t<th>Potential Settlement Discount</th>\n\t\t\t\t\t\t\t<th>Amount To Pay</th>\n\t\t\t\t\t\t\t<th>Remarks</th>\n\t\t\t\t\t\t\t<th>Process</th>\n\t\t\t\t\t\t</tr>";
    # connect to database
    db_connect();
    $cred_search = "";
    if (strlen($creditor) > 0) {
        switch ($creditor) {
            case "0":
                $groups = "grpid = '3' OR grpid = '4'";
                break;
            case "2":
                $groups = "grpid = '2'";
                break;
            default:
                $groups = "";
        }
        $get_creds = "SELECT supid FROM supp_grpowners WHERE {$groups}";
        $run_creds = db_exec($get_creds) or errDie("Unable to get supplier groups");
        if (pg_numrows($run_creds) > 0) {
            while ($arr = pg_fetch_array($run_creds)) {
                $cred_search .= "supid = '{$arr['supid']}' OR ";
            }
        } else {
            $cred_search = "supid = '0' AND";
        }
    } else {
        $cred_search = "supid  > '0' AND ";
    }
    if (strlen($cred_search) > 1) {
        $cred_search = substr($cred_search, 0, -4);
    }
    # Query server
    $i = 0;
    $sql = "SELECT * FROM suppliers WHERE {$cred_search} ORDER BY supname ASC";
    $suppRslt = db_exec($sql) or errDie("Unable to retrieve Suppliers from database.");
    if (pg_numrows($suppRslt) < 1) {
        unset($_POST['creditor']);
        //	return printsupp($_POST,"<li class='err'>No Suppliers matching requirement found.</li>");
    }
    # totals
    $totcurr = 0;
    $tot30 = 0;
    $tot60 = 0;
    $tot90 = 0;
    $tot120 = 0;
    $alltot = 0;
    $i = 0;
    $newarr = array();
    while ($supp = pg_fetch_array($suppRslt)) {
        $setdate = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $supp['setdays'], date("Y")));
        $get_spurch = "SELECT sum(balance) FROM suppurch WHERE supid = '{$supp['supid']}' AND pdate >= '{$setdate}' AND pdate <= 'now'";
        $run_spurch = db_exec($get_spurch) or errDie("Unable to get outstanding supplier balance information.");
        if (pg_numrows($run_spurch) < 1) {
            $supp['setamt'] = sprint(0);
        } else {
            $sparr = pg_fetch_array($run_spurch);
            $setsave = sprint($sparr['sum'] / 100 * $supp['setdisc']);
            $supp['setamt'] = $setsave;
        }
        $newarr[$setsave] = $supp;
    }
    krsort($newarr);
    if (isset($creditor) and strlen($creditor) > 0) {
        foreach ($newarr as $setsave => $supp) {
            # Get all ages
            $curr = age($supp['supid'], 29);
            $age30 = age($supp['supid'], 59);
            $age60 = age($supp['supid'], 89);
            $age90 = age($supp['supid'], 119);
            $age120 = age($supp['supid'], 149);
            # Suppliers total
            $supptot = sprint($curr + $age30 + $age60 + $age90 + $age120);
            if ($supptot < $supp['balance']) {
                $curr = sprint($curr + ($supp['balance'] - $supptot));
                $supptot = sprint($supptot + $supp['balance'] - $supptot);
            }
            if (isset($search)) {
                switch ($search) {
                    case "curr":
                        if ($curr < 0.01) {
                            continue 2;
                        }
                        break;
                    case "30":
                        if ($age30 < 0.01) {
                            continue 2;
                        }
                        break;
                    case "60":
                        if ($age60 < 0.01) {
                            continue 2;
                        }
                        break;
                    case "90":
                        if ($age90 < 0.01) {
                            continue 2;
                        }
                        break;
                    case "120":
                        if ($age120 < 0.01) {
                            continue 2;
                        }
                        break;
                    default:
                }
            }
            if ($creditor == "0") {
                $age_entries = "";
            } else {
                $age_entries = "\n\t\t\t\t\t\t\t\t<td>" . CUR . " {$age30}</td>\n\t\t\t\t\t\t\t\t<td>" . CUR . " {$age60}</td>\n\t\t\t\t\t\t\t\t<td>" . CUR . " {$age90}</td>\n\t\t\t\t\t\t\t\t<td>" . CUR . " {$age120}</td>\n\t\t\t\t\t\t";
            }
            //for settlement disc ... we check suppurch for outstanding amounts/date
            if ($supp['setdays'] != "0") {
                $setdate = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $supp['setdays'], date("Y")));
                #get suppurch
                $get_spurch = "SELECT sum(balance) FROM suppurch WHERE supid = '{$supp['supid']}' AND pdate >= '{$setdate}' AND pdate <= 'now'";
                $run_spurch = db_exec($get_spurch) or errDie("Unable to get outstanding supplier balance information.");
                if (pg_numrows($run_spurch) < 1) {
                    #no entries ... we owe him nothing ...
                    $payamount = 0.0;
                    $setsave = sprint(0);
                    $parr['supid'] = "0";
                    $parr['purid'] = "0";
                    $parr['remit'] = "0";
                    $remarks = "";
                } else {
                    $sparr = pg_fetch_array($run_spurch);
                    $payamount = 0.0;
                    $setsave = sprint($sparr['sum'] / 100 * $supp['setdisc']);
                    $parr['supid'] = "0";
                    $parr['purid'] = "0";
                    $parr['remit'] = "0";
                    $remarks = "";
                }
            } else {
                $payamount = 0.0;
                $setsave = sprint(0);
                $parr['supid'] = "0";
                $parr['purid'] = "0";
                $parr['remit'] = "0";
                $remarks = "";
            }
            $dochecked = "";
            if (isset($runids[$i])) {
                $dochecked = "checked='yes'";
            }
            ##PTH/CUBIT
            $printSupp .= "\n\t\t\t\t\t\t<input type='hidden' name='supno[]' value='{$supp['supid']}'>\n\t\t\t\t\t\t<input type='hidden' name='conid[]' value='{$parr['purid']}'>\n\t\t\t\t\t\t<input type='hidden' name='remit[]' value='0'>\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td>{$supp['supno']}</td>\n\t\t\t\t\t\t\t<td><a target='_blank' href='recon_statement_ct.php?key=display&supid={$supp['supid']}'>{$supp['supname']}</a></td>\n\t\t\t\t\t\t\t<td>" . CUR . " {$curr}</td>\n\t\t\t\t\t\t\t{$age_entries}\n\t\t\t\t\t\t\t<td>" . CUR . " {$supptot}</td>\n\t\t\t\t\t\t\t<td nowrap>" . CUR . " {$setsave}</td>\n\t\t\t\t\t\t\t<td><input type='text' size='8' name='amt[]' value='{$payamount}'></td>\n\t\t\t\t\t\t\t<td><textarea name='remarks[]' cols='20' rows='2'>" . nl2br($remarks) . "</textarea></td>\n\t\t\t\t\t\t\t<td><input type='checkbox' {$dochecked} name='runids[]' value='{$i}'></td>\n\t\t\t\t\t\t</tr>";
            # hold totals
            $totcurr += $curr;
            $tot30 += $age30;
            $tot60 += $age60;
            $tot90 += $age90;
            $tot120 += $age120;
            $alltot += $supptot;
            $i++;
        }
    }
    $totcurr = sprint($totcurr);
    $tot30 = sprint($tot30);
    $tot60 = sprint($tot60);
    $tot90 = sprint($tot90);
    $tot120 = sprint($tot120);
    $alltot = sprint($alltot);
    $printSupp .= "\n\t\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td colspan='2'><b>Totals</b></td>\n\t\t\t\t\t\t\t\t<td nowrap><b>" . CUR . " {$totcurr}</b></td>\n\t\t\t\t\t\t\t\t<td nowrap><b>" . CUR . " {$tot30}</b></td>\n\t\t\t\t\t\t\t\t<td nowrap><b>" . CUR . " {$tot60}</b></td>\n\t\t\t\t\t\t\t\t<td nowrap><b>" . CUR . " {$tot90}</b></td>\n\t\t\t\t\t\t\t\t<td nowrap><b>" . CUR . " {$tot120}</b></td>\n\t\t\t\t\t\t\t\t<td nowrap><b>" . CUR . " {$alltot}</b></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colspan='9' align='right'><input type='submit' name='process' value='Process Selected'></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t\t</table>";
    return $printSupp;
}
Ejemplo n.º 10
0
function viewtran($_POST)
{
    extract($_POST);
    require_lib("validate");
    $v = new validate();
    $v->isOk($prd, "string", 1, 14, "Invalid Period number.");
    $v->isOk($accnt, "string", 1, 10, "Invalid Accounts Selection.");
    $v->isOk($acc_first, "string", 1, 20, "Invalid accounts display selection");
    if ($accnt == 'slct') {
        if (isset($accids)) {
            foreach ($accids as $key => $accid) {
                $v->isOk($accid, "num", 1, 20, "Invalid Account number.");
            }
        } else {
            return "<li class='err'>Please select at least one account.</li>" . slctacc();
        }
    }
    # display errors, if any
    if ($v->isError()) {
        $confirm = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirm .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $confirm .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $confirm;
    }
    // Was the 'All Accounts' option selected?
    if ($accnt == 'all') {
        $accids = array();
        // Retrieve the main accounts
        db_conn("core");
        $sql = "SELECT * FROM accounts WHERE div='" . USER_DIV . "' AND accnum='000' ORDER BY topacc ASC";
        $macc_rslt = db_exec($sql) or errDie("Unable to retrieve main accounts from Cubit.");
        while ($macc_data = pg_fetch_array($macc_rslt)) {
            // Retrieve sub accounts from Cubit
            $sql = "SELECT * FROM accounts WHERE div='" . USER_DIV . "' AND topacc='{$macc_data['topacc']}' AND accnum!='000' ORDER BY topacc ASC";
            $sacc_rslt = db_exec($sql) or errDie("Unable to retrieve sub accounts from Cubit.");
            // List the main accounts without any sub accounts
            if (!pg_num_rows($sacc_rslt)) {
                $accids[] = $macc_data["accid"];
                // List the sub accounts
            } else {
                while ($sacc_data = pg_fetch_array($sacc_rslt)) {
                    $accids[] = $sacc_data["accid"];
                }
            }
        }
    } else {
        if ($accnt == "allactive") {
            $accids = array();
            $sql = "SELECT accid FROM core.trial_bal\n\t\t\t\tWHERE (debit!=0 OR credit!=0) AND div='" . USER_DIV . "' AND month='{$prd}'";
            $rslt = db_exec($sql) or errDie("Error fetching active account list.");
            while ($macc_data = pg_fetch_array($rslt)) {
                $accids[] = $macc_data["accid"];
            }
        }
    }
    # Period name
    $prdname = prdname($prd);
    $trans = "";
    $hide = "";
    $i = 0;
    $curr_topacc = "";
    foreach ($accids as $key => $accid) {
        $accRs = get("core", "accname, accid, topacc, accnum", "accounts", "accid", $accid);
        $acc = pg_fetch_array($accRs);
        # Get balances
        $idRs = get($prd, "max(id), min(id)", "ledger", "acc", $accid);
        $id = pg_fetch_array($idRs);
        if ($id['min'] != 0) {
            $balRs = get($prd, "(cbalance-credit) as cbalance,(dbalance-debit) as dbalance", "ledger", "id", $id['min']);
            $bal = pg_fetch_array($balRs);
            $cbalRs = get($prd, "cbalance,dbalance", "ledger", "id", $id['max']);
            $cbal = pg_fetch_array($cbalRs);
        } else {
            db_conn("core");
            $balSql = "SELECT credit as cbalance, debit as dbalance FROM trial_bal WHERE accid='{$acc['accid']}' AND period='{$prd}'";
            $balRs = db_exec($balSql) or errDie("Error reading trial balance.");
            $bal = pg_fetch_array($balRs);
            $cbal['cbalance'] = 0;
            $cbal['dbalance'] = 0;
        }
        if ($bal['dbalance'] > $bal['cbalance']) {
            $bal['dbalance'] = sprint($bal['dbalance'] - $bal['cbalance']);
            $bal['cbalance'] = "";
            $balance = $bal['dbalance'];
            $fl = "DR";
        } elseif ($bal['cbalance'] > $bal['dbalance']) {
            $bal['cbalance'] = sprint($bal['cbalance'] - $bal['dbalance']);
            $bal['dbalance'] = "";
            $balance = $bal['cbalance'];
            $fl = "CR";
        } else {
            $bal['cbalance'] = "";
            $bal['dbalance'] = "";
            $balance = "0.00";
            $fl = "";
        }
        $balance = sprint($balance);
        $bal['cbalance'] = sprint($bal['cbalance']);
        $bal['dbalance'] = sprint($bal['dbalance']);
        if ($acc_first == "accnum") {
            $account_name = "{$acc['topacc']}/{$acc['accnum']} - {$acc['accname']}";
        } else {
            $account_name = "{$acc['accname']} - {$acc['topacc']}/{$acc['accnum']}";
        }
        $hide .= "<input type='hidden' name='accids[]' value='{$acc['accid']}'>";
        $heading = "";
        if ($acc["accnum"] != "000") {
            if (!$i && $acc["topacc"] != $curr_topacc) {
                db_conn("core");
                $sql = "SELECT * FROM accounts WHERE div='" . USER_DIV . "' AND topacc='{$acc['topacc']}' AND accnum='000'";
                $hacc_rslt = db_exec($sql) or errDie("Unable to retrieve main account from Cubit.");
                $hacc_data = pg_fetch_array($hacc_rslt);
                if ($acc_first == "accnum") {
                    $heading_name = "{$hacc_data['topacc']}/{$hacc_data['accnum']} - {$hacc_data['accname']}";
                } else {
                    $heading_name = "{$hacc_data['accname']} - {$hacc_data['topacc']}/{$hacc_data['accnum']}";
                }
                $heading = "<tr><th colspan='8' align='left'>{$heading_name}</th></tr>";
                $curr_topacc = $acc["topacc"];
            }
        } elseif ($acc["topacc"] == $curr_topacc) {
            ++$i;
        }
        $trans .= "{$heading}\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td colspan='8'><b>{$account_name}</b></td>\n\t\t</tr>";
        // make the date of the last day of the previous prd
        $bbf_date = date("t-M-Y", mktime(0, 0, 0, $prd - 1, 1, getYearOfFinMon($prd)));
        $trans .= "\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td colspan='2' align='right'>{$bbf_date}</td>\n\t\t\t<td>Br/Forwd</td>\n\t\t\t<td>Brought Forward</td>\n\t\t\t<td align='right'>{$bal['dbalance']}</td>\n\t\t\t<td align='right'>{$bal['cbalance']}</td>\n\t\t\t<td align='right'>{$balance} {$fl}</td>\n\t\t\t<td> </td>\n\t\t</tr>";
        # --> transactio reding comes here <--- #
        $dbal['debit'] = 0;
        $dbal['credit'] = 0;
        if ($t == "s") {
            $tranRs = get($prd, "*", "ledger", "acc", $accid);
        } else {
            $tranRs = get($prd, "*", "ledger", "acc", $accid, "ORDER BY edate,id");
        }
        while ($tran = pg_fetch_array($tranRs)) {
            $dbal['debit'] += $tran['debit'];
            $dbal['credit'] += $tran['credit'];
            if ($t == "t") {
                $tran['dbalance'] = $dbal['debit'] + $bal['dbalance'];
                $tran['cbalance'] = $dbal['credit'] + $bal['cbalance'];
            }
            # Current(Running) balance
            if ($tran['dbalance'] > $tran['cbalance']) {
                $tran['dbalance'] = sprint($tran['dbalance'] - $tran['cbalance']);
                $tran['cbalance'] = "";
                $cbalance = $tran['dbalance'];
                $cfl = "DR";
            } elseif ($tran['cbalance'] > $tran['dbalance']) {
                $tran['cbalance'] = sprint($tran['cbalance'] - $tran['dbalance']);
                $tran['dbalance'] = "";
                $cbalance = $tran['cbalance'];
                $cfl = "CR";
            } else {
                $tran['cbalance'] = "";
                $tran['dbalance'] = "";
                $cbalance = "0.00";
                $cfl = "";
            }
            if ($t == "s") {
                $tran['edate'] = $tran['sdate'];
            }
            # Format date
            $tran['edate'] = explode("-", $tran['edate']);
            $tran['edate'] = $tran['edate'][2] . "-" . $tran['edate'][1] . "-" . $tran['edate'][0];
            $tran['debit'] = sprint($tran['debit']);
            $tran['credit'] = sprint($tran['credit']);
            if ($tran["debit"] != 0) {
                $trans .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td colspan='2' nowrap>{$tran['edate']}</td>\n\t\t\t\t\t<td>{$tran['eref']}</td>\n\t\t\t\t\t<td>{$tran['descript']}</td>\n\t\t\t\t\t<td align='right' nowrap>{$tran['debit']}</td>\n\t\t\t\t\t<td align='right'></td>\n\t\t\t\t\t<td align='right' nowrap>{$cbalance} {$cfl}</td>\n\t\t\t\t\t<td align='right'>{$tran['ctopacc']}/{$tran['caccnum']} - {$tran['caccname']}</td>\n\t\t\t\t</tr>";
            } elseif ($tran["credit"] != 0) {
                $trans .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td colspan='2' nowrap>{$tran['edate']}</td>\n\t\t\t\t\t<td>{$tran['eref']}</td>\n\t\t\t\t\t<td>{$tran['descript']}</td>\n\t\t\t\t\t<td align='right'></td>\n\t\t\t\t\t<td align='right' nowrap>{$tran['credit']}</td>\n\t\t\t\t\t<td align='right' nowrap>{$cbalance} {$cfl}</td>\n\t\t\t\t\t<td align='right'>{$tran['ctopacc']}/{$tran['caccnum']} - {$tran['caccname']}</td>\n\t\t\t\t</tr>";
            }
        }
        # Total balance changes
        if ($dbal['debit'] > $dbal['credit']) {
            $dbal['debit'] = sprint($dbal['debit'] - $dbal['credit']);
            $dbal['credit'] = "";
        } elseif ($dbal['credit'] > $dbal['debit']) {
            $dbal['credit'] = sprint($dbal['credit'] - $dbal['debit']);
            $dbal['debit'] = "";
        } else {
            $dbal['credit'] = "";
            $dbal['debit'] = "0.00";
        }
        $trans .= "\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td colspan='2'><br></td>\n\t\t\t<td>A/C Total</td>\n\t\t\t<td>Total for period {$prdname} to Date :</td>\n\t\t\t<td align='right' nowrap>{$dbal['debit']}</td>\n\t\t\t<td align='right' nowrap>{$dbal['credit']}</td>\n\t\t\t<td align='right' nowrap></td>\n\t\t\t<td> </td>\n\t\t</tr>";
        $trans .= "<tr><td colspan='8'><br></td></tr>";
    }
    $sp = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    $view = "\n\t\t\t\t<center>\n\t\t\t\t<h3>General Ledger</h3>\n\t\t\t\t<form action='../xls/ledger-xls.php' method='POST'>\n\t\t\t\t\t<input type='hidden' name='key' value='viewtran'>\n\t\t\t\t\t<input type='hidden' name='prd' value='{$prd}'>\n\t\t\t\t\t<input type='hidden' name='t' value='{$t}'>\n\t\t\t\t\t<input type='hidden' name=accnt value='{$accnt}'>\n\t\t\t\t\t{$hide}\n\t\t\t\t<table " . TMPL_tblDflts . " width='100%'>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td colspan='8' align='center'><input type='submit' value='Export to Spreadsheet'></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr><td colspan='8'><br></td></tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th colspan='2'>Date</th>\n\t\t\t\t\t\t<th>Reference</th>\n\t\t\t\t\t\t<th>Description</th>\n\t\t\t\t\t\t<th width='10%'>Debit</th>\n\t\t\t\t\t\t<th width='10%'>Credit</th>\n\t\t\t\t\t\t<th width='10%'>Balance</th>\n\t\t\t\t\t\t<th>Contra Acc</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t{$trans}\n\t\t\t\t\t<tr><td colspan='8'><br></td></tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td colspan='8' align='center'><input type='submit' value='Export to Spreadsheet'></td>\n\t\t\t\t\t</tr>\n\t\t\t\t<table>\n\t\t\t\t</form>" . mkQuickLinks(ql("index-reports.php", "Financials"), ql("index-reports-journal.php", "Current Year Details General Ledger Reports"), ql("../core/acc-new2.php", "Add New Account"));
    return $view;
}
Ejemplo n.º 11
0
function viewtrans($_POST)
{
    # get vars
    extract($_POST);
    # validate input
    require_lib("validate");
    $v = new validate();
    if (!isset($accid)) {
        $accid = 0;
    } else {
        $accid += 0;
    }
    #make sure we dont get previous period entries
    $act_year = getYearOfFinMon($prd);
    if ($accid > 0) {
        $exw = " AND (date >= '{$act_year}-01-01' AND date <= '{$act_year}-12-31') AND (debit = '{$accid}' OR credit = '{$accid}') ";
    } else {
        $exw = " AND (date >= '{$act_year}-01-01' AND date <= '{$act_year}-12-31')";
    }
    # Search by date
    if ($search == "date") {
        $v->isOk($from_day, "num", 1, 2, "Invalid from Date day.");
        $v->isOk($from_month, "num", 1, 2, "Invalid from Date month.");
        $v->isOk($from_year, "num", 1, 4, "Invalid from Date Year.");
        $v->isOk($to_day, "num", 1, 2, "Invalid to Date day.");
        $v->isOk($to_month, "num", 1, 2, "Invalid to Date month.");
        $v->isOk($to_year, "num", 1, 4, "Invalid to Date Year.");
        # mix dates
        $fromdate = $from_year . "-" . $from_month . "-" . $from_day;
        $todate = $to_year . "-" . $to_month . "-" . $to_day;
        if (!checkdate($from_month, $from_day, $from_year)) {
            $v->isOk($fromdate, "num", 1, 1, "Invalid from date.");
        }
        if (!checkdate($to_month, $to_day, $to_year)) {
            $v->isOk($todate, "num", 1, 1, "Invalid to date.");
        }
        $hide = "\n\t\t\t<input type='hidden' name='prd' value='{$prd}'>\n\t\t\t<input type='hidden' name='search' value='{$search}'>\n\t\t\t<input type='hidden' name='fday' value='{$from_day}'>\n\t\t\t<input type='hidden' name='fmon' value='{$from_month}'>\n\t\t\t<input type='hidden' name='fyear' value='{$from_year}'>\n\t\t\t<input type='hidden' name='today' value='{$to_day}'>\n\t\t\t<input type='hidden' name='tomon' value='{$to_month}'>\n\t\t\t<input type='hidden' name='toyear' value='{$to_year}'>";
        # Create the Search SQL
        $search = "SELECT * FROM transect WHERE date >= '{$fromdate}' AND date <= '{$todate}' AND div = '" . USER_DIV . "' {$exw} ORDER BY refnum ASC";
    }
    # Search by refnum
    if ($search == "refnum") {
        $v->isOk($fromnum, "num", 1, 20, "Invalid 'from' ref  number.");
        $v->isOk($tonum, "num", 1, 20, "Invalid 'to' ref  number.");
        $hide = "\n\t\t\t<input type='hidden' name='prd' value='{$prd}'>\n\t\t\t<input type='hidden' name='search' value='{$search}'>\n\t\t\t<input type='hidden' name='fromnum' value='{$fromnum}'>\n\t\t\t<input type='hidden' name='tonum' value='{$tonum}'>";
        # Create the Search SQL
        $search = "SELECT * FROM transect WHERE refnum >= {$fromnum} AND refnum <= {$tonum} AND div = '" . USER_DIV . "' {$exw} ORDER BY refnum ASC";
    }
    # View all
    if ($search == "all") {
        $hide = "\n\t\t\t<input type='hidden' name='prd' value='{$prd}'>\n\t\t\t<input type='hidden' name='search' value='{$search}'>";
        # Create the Search SQL
        $search = "SELECT * FROM transect WHERE div = '" . USER_DIV . "' {$exw} ORDER BY refnum ASC";
    }
    # display errors, if any
    if ($v->isError()) {
        $confirm = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirm .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        return $confirm . view();
    }
    // Layout
    $OUTPUT = "\n\t\t<center>\n\t\t<h3>Journal Entries Report</h3>\n\t\t<table " . TMPL_tblDflts . " width='100%'>\n\t\t\t<tr>\n\t\t\t\t<td width='50%' align='left' colspan='4'><h3>" . COMP_NAME . "</h3></td>\n\t\t\t\t<td width='50%' align='right' colspan='4'><h3>" . date("Y-m-d") . "</h3></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th>Date</th>\n\t\t\t\t<th>System Date</th>\n\t\t\t\t<th>Debit</th>\n\t\t\t\t<th>Credit</th>\n\t\t\t\t<th>Ref No</th>\n\t\t\t\t<th>Amount</th>\n\t\t\t\t<th>Details</th>\n\t\t\t\t<th>User</th>\n\t\t\t</tr>";
    db_conn($prd);
    $tranRslt = db_exec($search) or errDie("ERROR: Unable to retrieve Transaction details from database.", SELF);
    if (pg_numrows($tranRslt) < 1) {
        return "<li> There are no Transactions in the selected Period.</li><br>\n\t\t<table " . TMPL_tblDflts . " width='25%'>\n\t\t\t<tr>\n\t\t\t\t<th>Quick Links</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a target=_blank href='../core/acc-new2.php'>Add account (New Window)</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a href='index-reports.php'>Financials</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a href='index-reports-journal.php'>Current Year Details General Ledger Reports</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a href='../main.php'>Main Menu</td>\n\t\t\t</tr>\n\t\t</table>";
    }
    $total_amount = 0;
    # display all transaction
    while ($tran = pg_fetch_array($tranRslt)) {
        # get vars from tran as the are in db
        foreach ($tran as $key => $value) {
            ${$key} = $value;
        }
        # format date
        $date = explode("-", $date);
        $date = $date[2] . "-" . $date[1] . "-" . $date[0];
        $sdate = explode("-", $sdate);
        if (isset($sdate[2])) {
            $sdate = $sdate[2] . "-" . $sdate[1] . "-" . $sdate[0];
        } else {
            $sdate = $date;
        }
        /*
        # Get account names
        $deb = get("core","accname, topacc, accnum","accounts","accid",$debit);
        $debacc = pg_fetch_array($deb);
        $ct = get("core","accname, topacc,accnum","accounts","accid",$credit);
        $ctacc = pg_fetch_array($ct);
        */
        $amount = sprint($amount);
        $OUTPUT .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>{$date}</td>\n\t\t\t\t<td>{$sdate}</td>\n\t\t\t\t<td>{$dtopacc}/{$daccnum}&nbsp;&nbsp;&nbsp;{$daccname}</td>\n\t\t\t\t<td>{$ctopacc}/{$caccnum}&nbsp;&nbsp;&nbsp;{$caccname}</td>\n\t\t\t\t<td align='right'>{$custom_refnum}</td>\n\t\t\t\t<td align='right' nowrap>" . CUR . " {$amount}</td>\n\t\t\t\t<td>{$details}</td>\n\t\t\t\t<td>{$author}</td>\n\t\t\t</tr>";
        $total_amount += $amount;
    }
    $OUTPUT .= "\n\t\t\t" . TBL_BR . "\n\t\t\t<tr>\n\t\t\t\t<td align='center' colspan='10'>\n\t\t\t\t\t<form action='../xls/alltrans-xls.php' method='POST' name='form'>\n\t\t\t\t\t\t<input type='hidden' name='key' value='viewtrans'>\n\t\t\t\t\t\t<input type='hidden' name='accid' value='{$accid}'>\n\t\t\t\t\t\t{$hide}\n\t\t\t\t\t\t<input type='submit' name='xls' value='Export to spreadsheet'>\n\t\t\t\t\t</form>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t<table " . TMPL_tblDflts . " width='25%'>\n\t\t\t<tr>\n\t\t\t\t<th>Quick Links</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a target=_blank href='../core/acc-new2.php'>Add account (New Window)</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a href='index-reports.php'>Financials</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a href='index-reports-journal.php'>Current Year Details General Ledger Reports</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><a href='../main.php'>Main Menu</td>\n\t\t\t</tr>\n\t\t</table>";
    return $OUTPUT;
}
Ejemplo n.º 12
0
function viewtran($_POST, $pure = false)
{
    # Get vars
    extract($_POST);
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($fprd, "string", 1, 14, "Invalid from period number.");
    $v->isOk($tprd, "string", 1, 14, "Invalid to period number.");
    if (isset($accnt)) {
        if ($accnt == 'slct') {
            if (isset($cusnums)) {
                foreach ($cusnums as $key => $cusnum) {
                    $v->isOk($cusnum, "num", 1, 20, "Invalid Customer number.");
                }
            } else {
                return "<li class='err'>Please select at least one Debtor.</li>" . slctacc();
            }
        }
    } else {
        $v->isOk("###", "num", 0, 0, "ERROR : Invalid Accounts Selection.");
    }
    # display errors, if any
    if ($v->isError()) {
        $confirm = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirm .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $confirm .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $confirm;
    }
    # Get the ids
    if ($accnt == 'all') {
        $cusnums = array();
        db_connect();
        $sql = "SELECT cusnum FROM customers WHERE div = '" . USER_DIV . "'";
        $rs = db_exec($sql);
        if (pg_num_rows($rs) > 0) {
            while ($ac = pg_fetch_array($rs)) {
                $cusnums[] = $ac['cusnum'];
            }
        } else {
            return "<li calss='err'> There are no customers yet in Cubit.</li>";
        }
    }
    $prds = array();
    if ($tprd < $fprd) {
        for ($i = $fprd; $i <= 12; ++$i) {
            $prds[] = $i;
        }
        for ($i = 1; $i <= $tprd; ++$i) {
            $prds[] = $i;
        }
    } else {
        for ($i = $fprd; $i <= $tprd; ++$i) {
            $prds[] = $i;
        }
    }
    # Period name
    $hide = "";
    $sp = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    $trans = "";
    foreach ($cusnums as $key => $cusnum) {
        $cusRs = get("cubit", "cusname, surname, accno, balance", "customers", "cusnum", $cusnum);
        $cus = pg_fetch_array($cusRs);
        $trans .= "\n\t\t<tr>\n\t\t\t<td colspan='8' align='center'><h3>{$cus['surname']}</h3></td>\n\t\t</tr>";
        $hide .= "<input type='hidden' name='cusnums[]' value='{$cusnum}'>";
        foreach ($prds as $prd) {
            $prdname = prdname($prd);
            $trans .= "\n\t\t\t<tr>\n\t\t\t\t<th colspan='8'>{$prdname}</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th>{$sp}</th>\n\t\t\t\t<th>Date</th>\n\t\t\t\t<th>Reference</th>\n\t\t\t\t<th>Description</th>\n\t\t\t\t<th>Debit</th>\n\t\t\t\t<th>Credit</th>\n\t\t\t\t<th>Balance</th>\n\t\t\t\t<th>Contra Acc</th>\n\t\t\t</tr>";
            $idRs = get($prd, "min(id)", "custledger", "cusnum", $cusnum);
            $id = pg_fetch_array($idRs);
            if ($id['min'] != 0) {
                $balRs = get($prd, "(cbalance-credit) AS cbalance,(dbalance-debit) AS dbalance", "custledger", "id", $id['min']);
                $bal = pg_fetch_array($balRs);
                $bal['cbalance'] += 0;
                $bal['dbalance'] += 0;
            } else {
                $balRs = get("cubit", "balance", "customers", "cusnum", $cusnum);
                $bal = pg_fetch_array($balRs);
                $bal['balance'] += 0;
                if ($bal['balance'] > 0) {
                    $bal['dbalance'] = $bal['balance'];
                    $bal['cbalance'] = 0;
                } else {
                    $bal['cbalance'] = $bal['balance'] * -1;
                    $bal['dbalance'] = 0;
                }
                //$bal['dbalance'] += $amount;
            }
            # Total balance changes
            if ($bal['dbalance'] > $bal['cbalance']) {
                $bal['dbalance'] = $bal['dbalance'] - $bal['cbalance'];
                $bal['cbalance'] = 0;
            } else {
                if ($bal['cbalance'] > $bal['dbalance']) {
                    $bal['cbalance'] = $bal['cbalance'] - $bal['dbalance'];
                    $bal['dbalance'] = 0;
                } else {
                    $bal['cbalance'] = 0;
                    $bal['dbalance'] = 0;
                }
            }
            $bal['credit'] = sprint($bal['cbalance']);
            $bal['debit'] = sprint($bal['dbalance']);
            $balance = sprint($bal['dbalance'] - $bal['cbalance']);
            $trans .= "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td colspan='8'><b>{$cus['accno']} - {$cus['cusname']} {$cus['surname']}</b></td>\n\t\t\t\t\t\t\t</tr>";
            $bbf_date = date("t-M-Y", mktime(0, 0, 0, $prd - 1, 1, getYearOfFinMon($prd)));
            $trans .= "\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='2' align='right'>{$bbf_date}</td>\n\t\t\t\t\t\t\t<td>Br/Forwd</td>\n\t\t\t\t\t\t\t<td>Brought Forward</td>\n\t\t\t\t\t\t\t<td align='right'>{$bal['debit']}</td>\n\t\t\t\t\t\t\t<td align='right'>{$bal['credit']}</td>\n\t\t\t\t\t\t\t<td align='right'>{$balance}</td>\n\t\t\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t\t</tr>";
            # --> Transaction reading comes here <--- #
            $dbal['debit'] = 0;
            $dbal['credit'] = 0;
            if ($t == "s") {
                $tranRs = get($prd, "*", "custledger", "cusnum", $cusnum, "ORDER BY id");
            } else {
                $tranRs = get($prd, "*", "custledger", "cusnum", $cusnum, "ORDER BY edate,id");
            }
            while ($tran = pg_fetch_array($tranRs)) {
                if ($tran["descript"] == "BBF" && $tran["debit"] == "0" && $tran["credit"] == "0") {
                    continue;
                }
                $caccRs = get("core", "accname, accid, topacc, accnum", "accounts", "accid", $tran['contra']);
                $cacc = pg_fetch_array($caccRs);
                $dbal['debit'] += $tran['debit'];
                $dbal['credit'] += $tran['credit'];
                if ($t == "s") {
                    $balance = sprint($tran['dbalance'] - $tran['cbalance']);
                } else {
                    $balance = sprint($dbal['debit'] + $bal['debit'] - ($dbal['credit'] + $bal['credit']));
                }
                if ($t == "t") {
                    $tran['sdate'] = $tran['edate'];
                }
                # Format date
                $tran['sdate'] = explode("-", $tran['sdate']);
                $tran['sdate'] = $tran['sdate'][2] . "-" . $tran['sdate'][1] . "-" . $tran['sdate'][0];
                $trans .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t\t<td>{$tran['sdate']}</td>\n\t\t\t\t\t<td>{$tran['eref']}</td>\n\t\t\t\t\t<td>{$tran['descript']}</td>\n\t\t\t\t\t<td align='right'>" . sprint($tran['debit']) . "</td>\n\t\t\t\t\t<td align='right'>" . sprint($tran['credit']) . "</td>\n\t\t\t\t\t<td align='right'>{$balance}</td>\n\t\t\t\t\t<td>{$cacc['topacc']}/{$cacc['accnum']} - {$cacc['accname']}</td>\n\t\t\t\t</tr>";
            }
            # Total balance changes
            if ($dbal['debit'] > $dbal['credit']) {
                $dbal['debit'] = sprint($dbal['debit'] - $dbal['credit']);
                $dbal['credit'] = "";
            } elseif ($dbal['credit'] > $dbal['debit']) {
                $dbal['credit'] = sprint($dbal['credit'] - $dbal['debit']);
                $dbal['debit'] = "";
            } else {
                $dbal['credit'] = "";
                $dbal['debit'] = "0.00";
            }
            $trans .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td colspan='2'>&nbsp;</td>\n\t\t\t\t<td>A/C Total</td>\n\t\t\t\t<td>Total for period {$prdname} to Date :</td>\n\t\t\t\t<td align='right'>{$dbal['debit']}</td>\n\t\t\t\t<td align='right'>{$dbal['credit']}</td>\n\t\t\t\t<td align='right'>&nbsp;</td>\n\t\t\t\t<td>&nbsp;</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan='8'>&nbsp;</td>\n\t\t\t</tr>";
        }
    }
    $view = "";
    if (!$pure) {
        $view .= "\n\t\t<center>\n\t\t<form action='" . SELF . "' method='POST'>\n\t\t\t<input type='hidden' name='key' value='excel'>\n\t\t\t<input type='hidden' name='accnt' value='{$accnt}'>\n\t\t\t<input type='hidden' name='fprd' value='{$fprd}'>\n\t\t\t<input type='hidden' name='tprd' value='{$tprd}'>\n\t\t\t<input type='hidden' name='accnt' value='{$accnt}'>\n\t\t\t<input type='hidden' name='t' value='{$t}'>\n\t\t\t{$hide}\n\t\t\t<h3>Debtors Ledger</h3>";
    }
    $view .= "\n\t<table " . TMPL_tblDflts . " width='75%'>\n\t{$trans}";
    if (!$pure) {
        $view .= "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td colspan='8' align='center'><input type='submit' value='Export to Spreadsheet'></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</from>";
    }
    $view .= "\n\t</table>";
    if (!$pure) {
        $view .= "\n\t\t<p>\n\t\t<table " . TMPL_tblDflts . " width='25%'>\n\t\t\t" . TBL_BR . "\n\t\t\t<tr>\n\t\t\t\t<th>Quick Links</th>\n\t\t\t</tr>\n\t\t\t<tr class='datacell'>\n\t\t\t\t<td align='center'><a target=_blank href='../core/acc-new2.php'>Add account (New Window)</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='datacell'>\n\t\t\t\t<td align='center'><a href='index-reports.php'>Financials</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='datacell'>\n\t\t\t\t<td align='center'><a href='index-reports-debtcred.php'>Debtors & Creditors Reports</a></td>\n\t\t\t</tr>\n\t\t\t<tr class='datacell'>\n\t\t\t\t<td align='center'><a href='../main.php'>Main Menu</td>\n\t\t\t</tr>\n\t\t</table>";
    }
    return $view;
}
function process($_POST, $err = "")
{
    global $PRDMON;
    extract($_POST);
    # validate input
    require_lib("validate");
    $v = new validate();
    $proc_date = mkdate($proc_year, $proc_month, $proc_day);
    $v->isOk($empnum, "num", 1, 20, "Invalid employee number.");
    $v->isOk($MON, "num", 1, 2, "Invalid month.");
    $v->isOk($proc_date, "date", 1, 1, "Invalid date selected.");
    $salyr = getYearOfEmpMon($MON);
    $curyr = getActiveFinYear();
    if ($salyr > $curyr || $salyr == $curyr && $MON > $PRDMON[12]) {
        $v->addError("", "Cannot do transaction in future financial year. You need\n\t\t\tto close your year first before you can continue.");
    }
    # display errors, if any
    if ($v->isError()) {
        return slctEmployee($v->genErrors());
        return $confirmCust;
    }
    # CHECK IF THIS DATE IS IN THE BLOCKED RANGE
    $blocked_date_from = getCSetting("BLOCKED_FROM");
    $blocked_date_to = getCSetting("BLOCKED_TO");
    if (strtotime($proc_date) >= strtotime($blocked_date_from) and strtotime($proc_date) <= strtotime($blocked_date_to) and !user_is_admin(USER_ID)) {
        return "<li class='err'>Period Range Is Blocked. Only an administrator can process entries within this period.</li>";
    }
    // first check if all the selected employees with EFT pay types have banking information
    // and their id numbers are valid
    $emp_err = array();
    $emp_nam = array();
    /* previously selected to remove this employee from process */
    if (isset($rememp[$empnum])) {
        unset($emps[$empnum]);
        continue;
    }
    db_connect();
    $sql = "\n\t\t\tSELECT fnames, sname, paytype, bankname, bankaccno, idnum, flag, hiredate, payprd \n\t\t\tFROM employees \n\t\t\tWHERE div='" . USER_DIV . "' AND empnum='{$empnum}'";
    $rslt = db_exec($sql) or errDie("error checking employee payment types.");
    $e_info = pg_fetch_array($rslt);
    /* if the employee's pay period doesn't match the selected button, don't
    			include employee in checklist */
    if (isset($d) && $e_info["payprd"] != "d") {
        continue;
    } else {
        if (isset($w) && $e_info["payprd"] != "w") {
            continue;
        } else {
            if (isset($b) && $e_info["payprd"] != "f") {
                continue;
            } else {
                if (isset($m) && $e_info["payprd"] != "m") {
                    continue;
                }
            }
        }
    }
    $empnum += 0;
    $emp_err[$empnum] = 0;
    $emp_nam[$empnum] = "{$e_info['fnames']} {$e_info['sname']}";
    if ($e_info["paytype"] == "EFT" && (empty($e_info["bankname"]) || empty($e_info["bankaccno"]))) {
        $emp_err[$empnum] |= 0x1;
    }
    if (!empty($e_info["idnum"])) {
        $bd_year = substr($e_info["idnum"], 0, 2);
        $bd_month = substr($e_info["idnum"], 2, 2);
        $bd_day = substr($e_info["idnum"], 4, 2);
        if (!checkdate($bd_month, $bd_day, $bd_year)) {
            $emp_err[$empnum] |= 0x2;
        }
    }
    if ($e_info["flag"] == "2.5EMP") {
        $emp_err[$empnum] |= 0x4;
        $special_error = 0x1;
    }
    if ($e_info["flag"] == "272PREVEMP") {
        $emp_err[$empnum] |= 0x4;
        $special_error = 0x2;
    }
    /* check hiredate after process date */
    explodeDate($e_info["hiredate"], $hd_year, $hd_month, $hd_day);
    $MONempyear = getYearOfEmpMon($MON);
    if ($hd_year > $MONempyear || $hd_year == $MONempyear && $hd_month > $MON) {
        $emp_err[$empnum] |= 0x8;
    }
    // list the employee information problems
    if (array_sum($emp_err) > 0) {
        $out = "<h3>Process Salaries</h3>\n\t\t\t<form method='POST' action='" . SELF . "'>";
        foreach ($_POST as $key => $value) {
            if (is_array($value)) {
                foreach ($value as $akey => $avalue) {
                    $out .= "<input type='hidden' name='{$key}" . "[{$akey}]' value='{$avalue}'>";
                }
            } else {
                $out .= "<input type='hidden' name='{$key}' value='{$value}'>";
            }
        }
        if (isset($special_error)) {
            switch ($special_error) {
                case 0x1:
                    $out .= "\n\t\t\t\t\t<li class='err'><strong>NOTICE:</strong> Due to changes in employee functionality from Cubit 2.5 to Cubit 2.6 <br>\n\t\t\t\t\t\tyou need to edit your employees' salary/deduction/allowance information</li>\n\t\t\t\t\t\t<br />";
                    break;
                case 0x2:
                    $out .= "\n\t\t\t\t\t<li class='err'><strong>NOTICE:</strong> Due to the changes from Cubit 2.71 to Cubit 2.72 you should first update your employee's\n\t\t\t\t\t\tprevious employment information in the employee edit form.</li>\n\t\t\t\t\t\t<br />";
                    break;
            }
        }
        $out .= "\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan='3' class='err'>There are problems with the employee.<br />\n\t\t\t\t\t\tPlease edit the information first.<br /><br />\n\t\t\t\t\t\tClick the 'Done' button when ready to proceed.</td>\n\t\t\t\t</tr>";
        $out .= "\n\t\t\t<tr>\n\t\t\t\t<th>Name</th>\n\t\t\t\t<th>Message</th>\n\t\t\t</tr>";
        $i = 0;
        foreach ($emp_err as $e_empnum => $err_val) {
            $out .= "\n\t\t\t\t<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t\t<h1></h1>\n\t\t\t\t\t<th>{$emp_nam[$e_empnum]}</td>";
            if ($err_val & 0x4) {
                $specerr_msg = "(See above notice for this employee)";
            } else {
                $specerr_msg = "";
            }
            if ($err_val & 0x1 && $err_val & 0x2) {
                $out .= "<td class='err'>Banking info and ID number {$specerr_msg}</td>";
            } else {
                if ($err_val & 0x1) {
                    $out .= "<td class='err'>Banking info {$specerr_msg}</td>";
                } else {
                    if ($err_val & 0x2) {
                        $out .= "<td class='err'>ID number {$specerr_msg}</td>";
                    } else {
                        if ($err_val & 0x8) {
                            $out .= "<td class='err'>Employee was not employed in the period requested {$specerr_msg}</td>";
                        } else {
                            $out .= "<td>Employee Info Correct {$specerr_msg}</td>";
                        }
                    }
                }
            }
            if ($err_val && !($err_val == 0x8)) {
                $out .= "<td class='err'><a target='_blank' href='../admin-employee-edit.php?empnum={$e_empnum}'>Edit Employee</a></td>";
            }
            $out .= "\n\t\t\t</tr>";
        }
        $out .= "\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan='3' align='right'><input type='submit' value='Done' /></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t\t</form>";
        return $out;
    }
    # Get employee details
    db_conn('cubit');
    $sql = "SELECT * FROM employees WHERE empnum='{$empnum}' AND div = '" . USER_DIV . "'";
    $empRslt = db_exec($sql) or errDie("Unable to select employees from database.");
    if (pg_numrows($empRslt) < 1) {
        return "Invalid employee ID.";
    }
    $myEmp = pg_fetch_array($empRslt);
    if ($myEmp["flag"] == "2.5EMP") {
        $OUTPUT = "\n\t\t\t<h3>Process Employee Salary</h3>\n\t\t\t<li class='err'>\n\t\t\t\tDue to the changes from Cubit 2.5 to Cubit 2.6.1 you should first update your employee's\n\t\t\t\tsalary/deduction/allowance information in the employee edit form.\n\t\t\t\tClick <a href='../admin-employee-edit.php?empnum={$empnum}'>here</a> to do so.\n\t\t\t</li>";
        return $OUTPUT;
    }
    if (!empty($idnum)) {
        $bd_year = substr($myEmp["idnum"], 0, 2);
        $bd_month = substr($myEmp["idnum"], 2, 2);
        $bd_day = substr($myEmp["idnum"], 4, 2);
        if (!checkdate($bd_month, $bd_day, $bd_year)) {
            $OUTPUT = "\n\t\t\t<h3>Process Employee Salary</h3>\n\t\t\t<li class='err'>\n\t\t\t\tSelected employee does not have a valid id number and therefore his age cannot be\n\t\t\t\tcalculated.<br>\n\t\t\t\tPlease update this information in the employee <a href='../admin-employee-edit.php?empnum={$empnum}'>edit</a> form.\n\t\t\t</li>";
            return $OUTPUT;
        }
    }
    /* check for flag notices */
    if ($myEmp["flag"] == "272PREVEMP") {
        $OUTPUT = "\n\t\t<h3>Process Employee Salary</h3>\n\t\t<li class='err'>\n\t\t\tDue to the changes from Cubit 2.71 to Cubit 2.72 you should first update your employee's\n\t\t\tprevious employment information in the employee edit form.\n\t\t\tClick <a href='../admin-employee-edit.php?empnum={$empnum}'>here</a> to do so.\n\t\t</li>";
    }
    /* check if hiredate after process date */
    explodeDate($myEmp["hiredate"], $hd_year, $hd_month, $hd_day);
    if ($hd_year > getYearOfEmpMon($MON) || $hd_year == getYearOfEmpMon($MON) && $hd_month > $MON) {
        return slctEmployee("<li class='err'>Employee was not employed in the period\n\t\t\trequested.</li>");
    }
    if ($myEmp["paytype"] == "EFT" && (empty($myEmp["bankname"]) || empty($myEmp["bankaccno"]))) {
        return "Employee banking information not entered.<br>\n\t\t\tClick <a href='../admin-employee-edit.php?empnum={$empnum}'>here</a> employee banking information.";
    }
    $grossal = $myEmp["basic_sal"] + $myEmp["commission"] + $myEmp["bonus"];
    $yy = date("Y");
    $mm = $MON;
    $mm += 0;
    if ($myEmp['payprd'] == "m") {
        $Sl = "SELECT * FROM salpaid WHERE empnum='{$empnum}' AND month='{$mm}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $paid = pg_num_rows($Ri);
        $Sl = "SELECT * FROM salr WHERE empnum='{$empnum}' AND month='{$mm}' AND cyear='" . EMP_YEAR . "'";
        $Ri = db_exec($Sl);
        $upaid = pg_num_rows($Ri);
        $upaid += 0;
        $paid -= $upaid;
    }
    if (isset($paid) && $paid > 0) {
        return slctEmployee("<li class='err'>You have already processed a salary for that period.</li>");
    }
    /* calculate basic salary divisors and multipliers
     * used for calculating deductions/allowances/etc. when the
     * salary type and payment period differs in length
     */
    switch ($myEmp["saltyp"]) {
        case "h":
            $divisor = 1;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = $myEmp["hpweek"] / 5;
                    break;
                case "w":
                    $multiplier = $myEmp["hpweek"];
                    break;
                case "f":
                    $multiplier = $myEmp["hpweek"] * 2;
                    break;
                case "m":
                    $multiplier = $myEmp["hpweek"] * 52 / 12;
                    break;
            }
            break;
        case "m":
            $divisor = 1;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = 12 / (5 * 52);
                    break;
                case "w":
                    $multiplier = 12 / 52;
                    break;
                case "f":
                    $multiplier = 12 / 26;
                    break;
                case "m":
                    $multiplier = 1;
                    break;
            }
            break;
        case "w":
            $divisor = 52 / 12;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = 1 / 5;
                    break;
                case "w":
                    $multiplier = 1;
                    break;
                case "f":
                    $multiplier = 2;
                    break;
                case "m":
                    $multiplier = 52 / 12;
                    break;
            }
            break;
        case "f":
            $divisor = 26 / 12;
            switch ($myEmp["payprd"]) {
                case "d":
                    $multiplier = 1 / 10;
                    break;
                case "w":
                    $multiplier = 1 / 2;
                    break;
                case "f":
                    $multiplier = 1;
                    break;
                case "m":
                    $multiplier = 26 / 12;
                    break;
            }
            break;
    }
    # fringe benefits
    $fringes = "";
    $i = 0;
    $sql = "SELECT * FROM fringebens WHERE div = '" . USER_DIV . "' ORDER BY fringeben";
    $rslt = db_exec($sql) or errDie("Unable to select allowances from database.");
    if (pg_num_rows($rslt) < 1) {
        $fringes = "<tr><td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td></tr>\n";
    } else {
        while ($myFringe = pg_fetch_array($rslt)) {
            # check if employee has allowance
            $sql = "SELECT * FROM empfringe WHERE fringeid='{$myFringe['id']}' AND empnum='{$myEmp['empnum']}' AND div = '" . USER_DIV . "'";
            $empRslt = db_exec($sql) or errDie("Unable to retrieve fringe benefit info from database.");
            if (pg_numrows($empRslt) > 0) {
                $empFringe = pg_fetch_array($empRslt);
                if (substr($empFringe["type"], 0, 4) == "Perc") {
                    $empFringe["amount"] = sprint($myEmp["basic_sal"] * ($empFringe["amount"] / 100) / $divisor);
                } else {
                    $empFringe['amount'] = sprint($empFringe['amount'] / $divisor);
                }
                $grossal += $empFringe["amount"];
                $tmp_fringeaccs = $empFringe["accid"];
                $tmp_fringebens = $empFringe["amount"];
            } else {
                $tmp_fringeaccs = "0";
                $tmp_fringebens = "0.00";
            }
            $fringes .= "\n\t\t\t<input type='hidden' name='fringeid[]' value='{$myFringe['id']}'>\n\t\t\t<input type='hidden' name='fringename[]' value='{$myFringe['fringeben']}'>\n\t\t\t<input type='hidden' name='fringeaccs[]' value='{$tmp_fringeaccs}'>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>{$myFringe['fringeben']}</td>\n\t\t\t\t<td align='center'>" . CUR . "<input type='text' size='10' name='fringebens[]' value='{$tmp_fringebens}'></td>\n\t\t\t</tr>";
            $i++;
        }
    }
    # get allowances
    $allowances = "";
    $i = 0;
    $sql = "SELECT * FROM allowances WHERE div = '" . USER_DIV . "' ORDER BY allowance";
    $allowRslt = db_exec($sql) or errDie("Unable to select allowances from database.");
    if (pg_numrows($allowRslt) < 1) {
        $allowances = "<tr><td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td></tr>\n";
    } else {
        while ($myAllow = pg_fetch_array($allowRslt)) {
            # check if employee has allowance
            $sql = "SELECT * FROM empallow WHERE allowid='{$myAllow['id']}' AND empnum='{$myEmp['empnum']}' AND div = '" . USER_DIV . "'";
            $empAllowRslt = db_exec($sql) or errDie("Unable to select allowance info from database.");
            if (pg_numrows($empAllowRslt) > 0) {
                $myEmpAllow = pg_fetch_array($empAllowRslt);
                if (substr($myEmpAllow["type"], 0, 4) == "Perc") {
                    $myEmpAllow["amount"] = sprint($myEmp["basic_sal"] * ($myEmpAllow["amount"] / 100) / $divisor);
                } else {
                    $myEmpAllow['amount'] = sprint($myEmpAllow['amount'] / $divisor);
                }
                $grossal += $myEmpAllow["amount"];
                $tmp_allowaccs = $myEmpAllow["accid"];
                $tmp_allowances = $myEmpAllow["amount"];
            } else {
                $tmp_allowaccs = $myAllow["accid"];
                $tmp_allowances = "0.00";
            }
            $allowances .= "\n\t\t\t<input type='hidden' size='10' name='allowid[]' value='{$myAllow['id']}'>\n\t\t\t<input type='hidden' size='30' name='allowname[]' value='{$myAllow['allowance']}'>\n\t\t\t<input type='hidden' size='10' name='allowtax[]' value='{$myAllow['add']}'>\n\t\t\t<input type='hidden' name='allowaccs[]' value='{$tmp_allowaccs}'>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>{$myAllow['allowance']}</td>\n\t\t\t\t<td align='center'>" . CUR . " <input type='text' size='10' name='allowances[]' value='{$tmp_allowances}'></td>\n\t\t\t</tr>";
            $i++;
        }
    }
    $subsistence = "";
    $subslst = new dbSelect("subsistence", "cubit", array("where" => "div='" . USER_DIV . "'", "order" => "name"));
    $subslst->run();
    $subs_int = false;
    if ($subslst->num_rows() > 0) {
        $i = 0;
        $subsistence .= "\n\t\t<tr><td colspan='10'>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t<tr>\n\t\t\t<th>Name</th>\n\t\t\t<th>Amount</th>\n\t\t\t<th>Days</th>\n\t\t\t<th></th>\n\t\t</tr>";
        $empsubs = new dbSelect("emp_subsistence", "cubit");
        while ($subs = $subslst->fetch_array()) {
            $sid = $subs["id"];
            $empsubs->setOpt(array("where" => wgrp(m("empnum", $empnum), m("subid", $sid))));
            $empsubs->run();
            if ($empsubs->num_rows() <= 0) {
                $si["amount"] = "0.00";
                $si["days"] = "0";
                $si["accid"] = $subs["accid"];
            } else {
                $si = $empsubs->fetch_array();
            }
            if ($subs["in_republic"] != "yes") {
                $subs_int = true;
            }
            $subsistence .= "\n\t\t\t<input type='hidden' name='subsname[{$sid}]' value='{$subs['name']}'>\n\t\t\t<input type='hidden' name='subsacc[{$sid}]' value='{$si['accid']}'>\n\t\t\t<input type='hidden' name='subsrep[{$sid}]' value='{$subs['in_republic']}'>\n\t\t\t<input type='hidden' name='subsmeal[{$sid}]' value='{$subs['meals']}'>\n\t\t\t<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t<td>{$subs['name']}</td>\n\t\t\t\t<td>" . CUR . " <input type='text' name='subsamt[{$sid}]' value='{$si['amount']}'></td>\n\t\t\t\t<td><input type='text' name='subsdays[{$sid}]' value='{$si['days']}'></td>\n\t\t\t</tr>";
        }
        if ($subs_int) {
            $subsistence .= "\n\t\t\t\t<input type='hidden' name='subs_exch' value='1'>\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan='3'><li class='err'>Please calculate the rand amount prior to completing the amount above.</li></td>\n\t\t\t\t</tr>";
            // 			<tr bgcolor='".bgcolor($i)."'>
            // 				<td colspan='2'>Exchange (ZAR-USD):</td>
            // 				<td><input type='text' name='subs_exch' value='".xrate_get("USD")."'></td>
            // 			</tr>";
        }
        $subsistence .= "\n\t\t\t</table>\n\t\t\t</td></tr>";
    }
    # Deductions
    $deductions = "";
    $i = 0;
    $sql = "SELECT * FROM salded WHERE div = '" . USER_DIV . "' ORDER BY deduction";
    $deductRslt = db_exec($sql) or errDie("Unable to select deductions from database.");
    if (pg_numrows($deductRslt) < 1) {
        $deductions = "<tr><td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td></tr>\n";
    } else {
        while ($myDeduct = pg_fetch_array($deductRslt)) {
            # check if employee has deduction
            $sql = "SELECT * FROM empdeduct WHERE dedid='{$myDeduct['id']}' AND empnum='{$myEmp['empnum']}' AND div = '" . USER_DIV . "'";
            $empDeductRslt = db_exec($sql) or errDie("Unable to select Deduction info from database.");
            if (pg_numrows($empDeductRslt) > 0) {
                $myEmpDeduct = pg_fetch_array($empDeductRslt);
                if ($myEmpDeduct["grosdeduct"] == "y") {
                    $deductions_msg = "(Deducted from Gross Salary)";
                    $sal_calcfrom = $grossal;
                } else {
                    $deductions_msg = "";
                    $sal_calcfrom = $myEmp['basic_sal'];
                }
                if ($myEmpDeduct['type'] == "Amount") {
                    $myEmpDeduct['amount'] = sprint($myEmpDeduct['amount'] / $divisor);
                } else {
                    $myEmpDeduct['amount'] = sprint($sal_calcfrom * $myEmpDeduct['amount'] / 100 / $divisor);
                }
                // calculate employer contribution to deduction
                if ($myEmpDeduct["employer_type"] == "Amount") {
                    $myEmpDeduct["employer_amount"] = sprint($myEmpDeduct["employer_amount"] / $divisor);
                } else {
                    $myEmpDeduct["employer_amount"] = sprint($myEmpDeduct["amount"] * $myEmpDeduct["employer_amount"] / 100 / $divisor);
                }
                $tmp_deductions = $myEmpDeduct["amount"];
                $tmp_dedaccs = $myEmpDeduct["accid"];
                $tmp_emp_ded = $myEmpDeduct["employer_amount"];
                $tmp_grosdeduct = $myEmpDeduct["grosdeduct"];
            } else {
                $tmp_deductions = "0.00";
                $tmp_emp_ded = "0.00";
                $tmp_dedaccs = $myDeduct["accid"] != 0 ? $myDeduct["accid"] : $myDeduct["expaccid"];
                $tmp_grosdeduct = "n";
                $deductions_msg = "";
            }
            # check if we should be using deductions
            if ($myEmp['emp_usescales'] == "1" and $myDeduct['type'] == "Percentage") {
                # check if this deduction has scales
                $get_scales = "SELECT * FROM salded_scales WHERE saldedid = '{$myDeduct['id']}' LIMIT 1";
                $run_scales = db_exec($get_scales) or errDie("Unable to get deduction scale information.");
                if (pg_numrows($run_scales) > 0) {
                    # scales exist
                    $get_perc = "\n\t\t\t\t\t\tSELECT * FROM salded_scales \n\t\t\t\t\t\tWHERE scale_from <= '{$myEmp['basic_sal']}' AND scale_to >= '{$myEmp['basic_sal']}' AND saldedid = '{$myDeduct['id']}' \n\t\t\t\t\t\tLIMIT 1";
                    $run_perc = db_exec($get_perc) or errDie("Unable to get deduction scale information.");
                    if (pg_numrows($run_perc) > 0) {
                        # found a matching scale for this scaled duduction for a customer using scales ....
                        $scale_arr = pg_fetch_array($run_perc);
                        $tmp_deductions = sprint($myEmp['basic_sal'] / 100 * $scale_arr['scale_amount']);
                    }
                }
            }
            $deductions .= "\n\t\t\t\t<input type='hidden' size='10' name='employer_deductions[]' value='{$tmp_emp_ded}'>\n\t\t\t\t<input type='hidden' size='10' name='deducttax[]' value='{$myDeduct['add']}'>\n\t\t\t\t<input type='hidden' name='grosdeduct[]' value='{$tmp_grosdeduct}'>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>{$myDeduct['deduction']} {$deductions_msg}</td>\n\t\t\t\t\t<td align='center'>\n\t\t\t\t\t\t" . CUR . "<input type='hidden' size='10' name='deductid[]' value='{$myDeduct['id']}'>\n\t\t\t\t\t\t<input type='hidden' size='30' name='deductname[]' value='{$myDeduct['deduction']}'>\n\t\t\t\t\t\t<input type='text' size='10' name='deductions[]' value='{$tmp_deductions}'>\n\t\t\t\t\t\t<input type='hidden' name='dedaccs[]' value='{$tmp_dedaccs}'>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>";
            $i++;
        }
    }
    $deductions .= "";
    $salarr = array("m" => "Per Month", "w" => "Per Week", "f" => "Fortnightly", "h" => "Per Hour");
    $salnarr = array("d" => "Day(s)", "h" => "Hour(s)");
    $saltype = $salarr[$myEmp['saltyp']];
    db_conn('cubit');
    $Sl = "SELECT * FROM bankacct WHERE btype != 'int' AND div = '" . USER_DIV . "' ORDER BY accname ASC";
    $Ry = db_exec($Sl) or errDie("Unable to get bank account.");
    if (pg_numrows($Ry) < 1) {
        return "<li class='err'> There are no bank accounts found in Cubit.\n\t\t<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct Selection'>";
    }
    $banks = "<select name='accid'>";
    while ($acc = pg_fetch_array($Ry)) {
        $banks .= "<option value='{$acc['bankid']}'>{$acc['accname']} ({$acc['acctype']})</option>";
    }
    $banks .= "</select>";
    $myEmp['loaninstall'] += 0;
    if ($myEmp['paytype'] == "Cash") {
        $paydetails = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td colspan='2'>Employee paid cash</td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='accid' value='0'>";
    } elseif ($myEmp['paytype'] == "Ledger Account") {
        db_conn('core');
        $Sl = "SELECT accid,accname FROM accounts ORDER BY accname";
        $Ri = db_exec($Sl);
        $accounts = "<select name='account'>\n\t\t\t<option value='#'>Select Account</option>";
        while ($ad = pg_fetch_array($Ri)) {
            if (isset($account) && $account == $ad['accid']) {
                $sel = "selected";
            } else {
                $sel = "";
            }
            $accounts .= "<option value='{$ad['accid']}'>{$ad['accname']}</option>";
        }
        $accounts .= "</select>";
        $paydetails = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Ledger Account for payment</td>\n\t\t\t\t<td>{$accounts}</td>\n\t\t\t</tr>\n\t\t\t<input type='hidden' name='accid' value='0'>";
    } else {
        $paydetails = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Bank Account</td>\n\t\t\t\t<td valign='center'>{$banks}</td>\n\t\t\t</tr>";
    }
    $h1 = "";
    $h2 = "";
    $db = array("comp_pension" => $myEmp["comp_pension"], "emp_pension" => $myEmp["emp_pension"], "comp_provident" => $myEmp["comp_provident"], "emp_provident" => $myEmp["emp_provident"], "comp_uif" => $myEmp["comp_uif"], "emp_uif" => $myEmp["emp_uif"], "comp_other" => $myEmp["comp_other"], "emp_other" => $myEmp["emp_other"]);
    if (isset($basic_sal)) {
        $myEmp['basic_sal'] = $basic_sal;
        $myEmp['all_travel'] = $all_travel;
        $myEmp['bonus'] = $bonus;
        $myEmp['commission'] = $commission;
        $myEmp['abonus'] = $abonus;
        $myEmp['loaninstall'] = $loaninstall;
        $myEmp['comp_pension'] = $comp_pension;
        $myEmp['emp_pension'] = $emp_pension;
        $myEmp["comp_provident"] = $comp_provident;
        $myEmp["emp_provident"] = $emp_provident;
        //$myEmp["comp_uif"] = $comp_uif;
        //$myEmp["emp_uif"] = $emp_uif;
        $myEmp["comp_other"] = $comp_other;
        $myEmp["emp_other"] = $emp_other;
        $myEmp['comp_medical'] = $comp_medical;
        $myEmp['emp_medical'] = $emp_medical;
        $myEmp['comp_ret'] = $comp_ret;
        $myEmp['emp_ret'] = $emp_ret;
        $h1 = $novert;
        $h2 = $hovert;
    } else {
        if ($myEmp["payprd"] == "w" || $myEmp["payprd"] == "f") {
            $tmpmon = date("j");
            $daycount = date("t");
            $dayweek = date("D");
            if (strtolower($dayweek) == $myEmp["payprd_day"] && $day + 7 > $daycount) {
                $process_comp_deductions = true;
            } else {
                $process_comp_deductions = false;
            }
        } else {
            $process_comp_deductions = true;
        }
        $effective_basicsal = $myEmp["basic_sal"] * $multiplier;
        /* we only changing basic sal for non hourly employees,
        			because for hourly employees we change the hours ($mutli)  */
        if ($myEmp["saltyp"] != "h") {
            $myEmp["basic_sal"] *= $multiplier;
        }
        if ($myEmp["loaninstall"] > $myEmp["loanamt"]) {
            $myEmp["loaninstall"] = $myEmp["loanamt"];
        }
        $myEmp["emp_pension"] = sprint($effective_basicsal * ($myEmp["emp_pension"] / 100));
        $myEmp["comp_pension"] = sprint($effective_basicsal * ($myEmp["comp_pension"] / 100));
        $myEmp["emp_provident"] = sprint($effective_basicsal * ($myEmp["emp_provident"] / 100));
        $myEmp["comp_provident"] = sprint($effective_basicsal * ($myEmp["comp_provident"] / 100));
        $myEmp["emp_medical"] = sprint($myEmp["emp_medical"] / $divisor);
        $myEmp["comp_medical"] = sprint($myEmp["comp_medical"] / $divisor);
        $myEmp["emp_ret"] = sprint($myEmp["emp_ret"] / $divisor);
        $myEmp["comp_ret"] = sprint($myEmp["comp_ret"] / $divisor);
        $myEmp["loaninstall"] = sprint($myEmp["loaninstall"] / $divisor);
        $myEmp["all_travel"] = sprint($myEmp["all_travel"] / $divisor);
        if (isset($myEmp["loandate"]) and strlen($myEmp["loandate"]) > 0) {
            explodeDate($myEmp["loandate"], $loana_year, $loana_month, $loana_day);
            if ($loana_year > $salyr || $loana_year == $salyr && $loana_month > $MON) {
                $myEmp["loanint"] = 0;
                $myEmp["loaninstall"] = 0;
            }
        }
    }
    if (!isset($multi)) {
        $multi = $myEmp["saltyp"] == "h" ? $multiplier : 1;
    }
    $multi = round($multi);
    if ($myEmp['saltyp'] == 'd' || $myEmp['saltyp'] == 'h') {
        $salntype = $salnarr[$myEmp['saltyp']];
        $multi_show = "x <input type='text' size='3' name='multi' value='{$multi}'> {$salntype}";
    } else {
        $multi_show = "<input type='hidden' name='multi' value='{$multi}'>";
        $saltype = "";
    }
    /*	db_conn('cubit');
    	$sql = "SELECT value FROM settings WHERE constant='UIF_MAX'";
    	$percrslt = db_exec($sql);
    	$perc = pg_fetch_array($percrslt);
    	$uifmax = $perc['value'];
    
    	if ( $myEmp["emp_uif"] > $uifmax ) {
    		$myEmp["emp_uif"] = $uifmax;
    	}
    	if ( $myEmp["comp_uif"] > $uifmax ) {
    		$myEmp["comp_uif"] = $uifmax;
    	}
    */
    $Sl = "SELECT * FROM cubit.rbs ORDER BY name";
    $Ri = db_exec($Sl) or errDie("Unable to get data.");
    $i = 0;
    $rt = "";
    if (pg_num_rows($Ri) > 0) {
        while ($td = pg_fetch_array($Ri)) {
            if (!isset($rbsa[$td['id']])) {
                $rbsa[$td['id']] = "";
            }
            $rt .= "\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><input type='hidden' name='rbs[{$td['id']}]' value='{$td['id']}'>{$td['name']}</td>\n\t\t\t\t\t<td>" . CUR . " <input type='text' size='10' name='rbsa[{$td['id']}]' value='" . $rbsa[$td['id']] . "' class=right></td>\n\t\t\t\t</tr>";
            $i++;
        }
    } else {
        $rt .= "<tr class='" . bg_class() . "'><td colspan='2' align='center'>There are no reimbursements</td></tr>";
    }
    if ($myEmp['payprd'] == "w") {
        $weekends = "";
        $weeks = "\n\t\t<select name='week'>";
        $stdate = mktime(0, 0, 0, $MON, 1, DATE_YEAR);
        $endate = mktime(0, 0, 0, $MON, DATE_DAYS, DATE_YEAR);
        $i = 1;
        while ($stdate <= $endate) {
            if (date("w", $stdate) == 5) {
                $weekends .= "<input type='hidden' name='weekends[{$i}]' value='" . date("j", $stdate) . "' />";
                if (isset($week) && $week == $i) {
                    $sel = "selected";
                } else {
                    $sel = "";
                }
                $weeks .= "<option {$sel} value='{$i}'>Week {$i} (" . date("j M", $stdate) . ")</option>";
                ++$i;
            }
            /* next day */
            $stdate += 24 * 60 * 60;
        }
        /*<option value='1'>Week 1</option>
        		<option value='2'>Week 2</option>
        		<option value='3'>Week 3</option>
        		<option value='4'>Week 4</option>
        		<option value='5'>Week 5</option>*/
        $weeks .= "\n\t\t</select>";
        $row = "{$weekends}<tr class='" . bg_class() . "'><td>Period</td><td>{$weeks}</td></tr>";
    } elseif ($myEmp['payprd'] == "f") {
        $weekends = "";
        $weeks = "\n\t\t<select name='week'>";
        $i = 1;
        /* find first friday of tax year */
        $stdate = mktime(0, 0, 0, 3, 1, getYearOfEmpMon(3));
        while (date("w", $stdate) != 5) {
            $stdate = mktime(0, 0, 0, 3, ++$i, getYearOfEmpMon(3));
        }
        // hack: go one week back so the +14 increases are easier
        $stdate -= 7 * 24 * 3600;
        /* end on the last day of the selected month */
        $endate = mktime(0, 0, 0, $MON + 1, 0, getYearOfEmpMon($MON));
        /* count weeks from start of tax year */
        $i = 1;
        $c = 0;
        while ($stdate <= $endate) {
            if (date("m", $stdate) == $MON && date("Y", $stdate) == getYearOfEmpMon($MON)) {
                $c += 2;
                $cd = $c - 1 . "-{$c}";
                $weekends .= "<input type='hidden' name='weekends[{$i}]' value='" . date("j", $stdate) . "' />";
                if (isset($week) && $week == $i) {
                    $sel = "selected";
                } else {
                    $sel = "";
                }
                $weeks .= "<option {$sel} value='{$i}'>Week {$cd} (" . date("j M", $stdate) . ")</option>";
                ++$i;
            }
            /* next day */
            $stdate += 24 * 60 * 60 * 14;
        }
        /*<option value='1'>Week 1</option>
        		<option value='2'>Week 2</option>
        		<option value='3'>Week 3</option>
        		<option value='4'>Week 4</option>
        		<option value='5'>Week 5</option>*/
        $weeks .= "\n\t\t</select>";
        $row = "{$weekends}<tr class='" . bg_class() . "'><td>Period</td><td>{$weeks}</td></tr>";
    } else {
        if ($myEmp["payprd"] == "d") {
            $x = date("t", mktime(0, 0, 0, $MON, 1, getYearOfFinMon($MON)));
            $MONstr = getMonthNameS($MON);
            if (!isset($pday)) {
                $pday = $proc_day;
            }
            $days = "<select name='pday'>";
            for ($i = 1; $i <= $x; ++$i) {
                if ($i == $pday) {
                    $sel = "selected='t'";
                } else {
                    $sel = "";
                }
                $days .= "<option {$sel} value='{$i}'>{$i} {$MONstr}</option>";
            }
            $days .= "</select>";
            $row = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Day for Payment</td>\n\t\t\t\t<td>{$days}</td>\n\t\t\t</tr>";
        } else {
            $weeks = "";
            $row = "<input type='hidden' name='week' value='0'>";
        }
    }
    if (!isset($abonus) && $myEmp["sal_bonus_month"] == $MON) {
        $abonus = $myEmp["sal_bonus"];
    } else {
        if (!isset($abonus)) {
            $abonus = 0;
        }
    }
    if ($myEmp["payprd"] == "m" || $myEmp["payprd"] == "h") {
        // count the amount of weekdays in this month
        $workdays = 0;
        for ($i = 1; $i <= date("t", mktime(0, 0, 0, $MON, 1, date("Y"))); ++$i) {
            $wd = date("w", mktime(0, 0, 0, $MON, $i, date("Y")));
            if ($wd != 0 && $wd != 6) {
                ++$workdays;
            }
        }
        // hours per day calculation
        $hpd = $myEmp["hpweek"] / 5;
        if (!isset($wh_total)) {
            $wh_total = $workdays * $hpd;
        }
        if (!isset($wh_actual)) {
            $wh_actual = $wh_total;
        }
    }
    if ($myEmp["payprd"] == "w") {
        if (!isset($wh_total)) {
            $wh_total = $myEmp["hpweek"];
        }
        if (!isset($wh_actual)) {
            $wh_actual = $wh_total;
        }
    }
    if ($myEmp["payprd"] == "f") {
        if (!isset($wh_total)) {
            $wh_total = $myEmp["hpweek"] * 2;
        }
        if (!isset($wh_actual)) {
            $wh_actual = $wh_total;
        }
    }
    $js_workhours = "\n\t<script>\n\t\tsf = document.getElementById('salfrm');\n\n\t\tf_sal\t\t= sf.elements['basic_sal'];\n\t\tf_whtot\t\t= sf.elements['wh_total'];\n\t\tf_whact\t\t= sf.elements['wh_actual'];\n\t\tf_cpension\t= sf.elements['comp_pension'];\n\t\tf_epension \t= sf.elements['emp_pension'];\n\t\tf_cprov\t\t= sf.elements['comp_provident'];\n\t\tf_eprov\t\t= sf.elements['emp_provident'];\n\t\t//f_cuif\t= sf.elements['comp_uif'];\n\t\t//f_euif\t= sf.elements['emp_uif'];\n\t\tf_cother\t= sf.elements['comp_other'];\n\t\tf_eother\t= sf.elements['emp_other'];\n\n\t\tdb_cpension\t= " . $db["comp_pension"] . ";\n\t\tdb_epension\t= " . $db["emp_pension"] . ";\n\t\tdb_cprov\t= " . $db["comp_provident"] . ";\n\t\tdb_eprov\t= " . $db["emp_provident"] . ";\n\t\t//db_cuif\t= " . $db["comp_uif"] . ";\n\t\t//db_euif\t= " . $db["emp_uif"] . ";\n\t\tdb_cother\t= " . $db["comp_other"] . ";\n\t\tdb_eother\t= " . $db["emp_other"] . ";\n\n\t\tval_sal \t\t= -1;\n\n\t\t// changing the workhours\n\t\tfunction workhours() {\n\t\t\tif ( val_sal < 0 ) val_sal = parseFloat(f_sal.value);\n\n\t\t\tval_whtot\t= parseFloat(f_whtot.value);\n\t\t\tval_whact\t= parseFloat(f_whact.value);\n\n\t\t\tif ( val_whtot >= val_whact ) {\n\t\t\t\tp = val_whact / val_whtot;\n\n\t\t\t\t// calculate the new basic salary\n\t\t\t\tx = val_sal * p;\n\t\t\t\tx = x.toFixed(2);\n\t\t\t\tf_sal.value = x;\n\n\t\t\t\t// calculate the new values\n\t\t\t\tval_cpension \t= x * db_cpension / 100;\n\t\t\t\tval_epension \t= x * db_epension / 100;\n\t\t\t\tval_cprov\t\t= x * db_cprov / 100;\n\t\t\t\tval_eprov\t\t= x * db_eprov / 100;\n\t\t\t\t//val_cuif\t\t= x * db_cuif / 100;\n\t\t\t\t//val_euif\t\t= x * db_euif / 100;\n\t\t\t\tval_cother\t\t= x * db_cother / 100;\n\t\t\t\tval_eother\t\t= x * db_eother / 100;\n\n\t\t\t\tval_cpension \t= val_cpension.toFixed(2);\n\t\t\t\tval_epension \t= val_epension.toFixed(2);\n\t\t\t\tval_cprov \t\t= val_cprov.toFixed(2);\n\t\t\t\tval_eprov\t\t= val_eprov.toFixed(2);\n\t\t\t\t//val_cuif\t\t= val_cuif.toFixed(2);\n\t\t\t\t//val_euif\t\t= val_euif.toFixed(2);\n\t\t\t\tval_cother\t\t= val_cother.toFixed(2);\n\t\t\t\tval_eother\t\t= val_eother.toFixed(2);\n\n\t\t\t\tf_cpension.value\t= val_cpension;\n\t\t\t\tf_epension.value \t= val_epension;\n\t\t\t\tf_cprov.value \t\t= val_cprov;\n\t\t\t\tf_eprov.value\t\t= val_eprov;\n\t\t\t\t//f_cuif.value\t\t= val_cuif;\n\t\t\t\t//f_euif.value\t\t= val_euif;\n\t\t\t\tf_cother.value\t\t= val_cother;\n\t\t\t\tf_eother.value\t\t= val_eother;\n\t\t\t}\n\t\t}\n\n\t\tfunction changedfield() {\n\t\t\tval_whtot\t= parseFloat(f_whtot.value);\n\t\t\tval_whact\t= parseFloat(f_whact.value);\n\n\t\t\tp = val_whtot / val_whact;\n\n\t\t\tval_sal = parseFloat(f_sal.value) * p;\n\t\t\tval_sal = val_sal.toFixed(2);\n\t\t}\n\t</script>";
    vsprint($myEmp["basic_sal"]);
    /* payprd message */
    $dispmsg = getCSetting("EMP_SALMSG");
    if (strpos($dispmsg, $myEmp["payprd"]) === false) {
        $payprd_msg_ch = "";
    } else {
        $payprd_msg_ch = "checked='t'";
    }
    $payprd_msg = get_payprdmsg($myEmp["payprd"]);
    /* print payslip on/off */
    $printslip = getCSetting("EMP_PRINTSLIP");
    $process = "\n\t<script>\n\t\tfunction update_salmsg(obj) {\n\t\t\tajaxRequest('payprdmsg.php', 'payprd_msg', AJAX_SET,\n\t\t\t\t'payprd={$myEmp['payprd']}&newval=' + obj.checked);\n\t\t}\n\t</script>\n\t<h3>Process Salary for {$myEmp['sname']}, {$myEmp['fnames']}</h3>\n\t<li class='err'>NOTE that Cubit is configured to compute employees' tax\n\t\tduring the employees' tax year that<br />\n\t\tstarts in March and ends in February,\n\t\tirrespective of the employer's financial year end.</li>\n\t<br />\n\t<form action='" . SELF . "' method='POST' id='salfrm'>\n\t\t<input type='hidden' name='key' value='confirm' />\n\t\t<input type='hidden' name='empnum' value='{$empnum}' />\n\t\t<input type='hidden' name='MON' value='{$MON}' />\n\t\t<input type='hidden' name='proc_day' value='{$proc_day}' />\n\t\t<input type='hidden' name='proc_month' value='{$proc_month}' />\n\t\t<input type='hidden' name='proc_year' value='{$proc_year}' />\n\t\t<input type='hidden' name='day' value='{$proc_day}' />\n\t\t<input type='hidden' name='mon' value='{$proc_month}' />\n\t\t<input type='hidden' name='year' value='{$proc_year}' />\n\t\t<input type='hidden' name='saltyp' value='{$myEmp['saltyp']}' />\n\t\t<input type='hidden' name='loanint' value='{$myEmp['loanint']}' />\n\t\t<input type='hidden' name='process_comp_deductions' value='{$process_comp_deductions}' />\n\t\t<input type='hidden' name='divisor' value='{$divisor}' />\n\t<table " . TMPL_tblDflts . " width='500'>\n\t\t<tr>\n\t\t\t<td id='payprd_msg'>{$payprd_msg}</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th align='right'>Salary Help Message: <input type='checkbox' onclick='update_salmsg(this);' name='payprd_dispmsg' {$payprd_msg_ch} /></th>\n\t\t</tr>\n\t</table>\n\t<table " . TMPL_tblDflts . ">\n\t\t<tr>\n\t\t\t<td><input type='submit' name='back' value='&laquo; Correction'></td>\n\t\t\t<td align='right'><input type='submit' value='Confirm &raquo;'></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td colspan='2'>{$err}</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th colspan='2'>Salary Details for the Pay Period</th>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap='t'>Print Salary Advice</td>\n\t\t\t<td>\n\t\t\t<select name='printslip'>\n\t\t\t\t<option value='y' " . ($printslip != "n" ? "selected='t'" : "") . ">Yes</option>\n\t\t\t\t<option value='n' " . ($printslip == "n" ? "selected='t'" : "") . ">No</option>\n\t\t\t</select>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Basic salary</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='basic_sal' value='{$myEmp['basic_sal']}' class=right onChange='changedfield();'> {$saltype} {$multi_show}</td>\n\t\t</tr>";
    if ($myEmp["payprd"] == "d") {
        $process .= "\n\t\t\t<input type='hidden' name='wh_total' value='1'>\n\t\t\t<input type='hidden' name='wh_actual' value='1'>";
    } else {
        $process .= "\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Total Work Hours:</td>\n\t\t\t<td><input type='text' size='10' name='wh_total' value='{$wh_total}' class='right' onChange='workhours();'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Actual Hours Worked:</td>\n\t\t\t<td><input type='text' size='10' name='wh_actual' value='{$wh_actual}' class='right' onChange='workhours();'></td>\n\t\t</tr>";
    }
    if (!isset($annual)) {
        $annual = "";
    }
    $process .= "\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Normal Overtime</td>\n\t\t\t<td nowrap><input type='text' size='5' name='novert' value='{$h1}' class='right'> Hrs</td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Public Holiday Overtime</td>\n\t\t\t<td nowrap><input type='text' size='5' name='hovert' value='{$h2}' class='right'> Hrs</td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<!--<td>Special Bonus/Additional Salary</td>-->\n\t\t\t<td>Annual Bonus</td>\n\t\t\t<td>" . CUR . " <input type='text' size='10' name='abonus' value='{$abonus}' class='right'></td>\n\t\t\t<!--<td rowspan='2' class='err'>An amount entered here (Special Bonus/Additional\n\t\t\t\tSalary) will be treated as a recurring bonus/payment per pay period for PAYE\n\t\t\t\tpurposes, the amount will not be treated as an annual payment. If the\n\t\t\t\tamount paid as a bonus is a once off/annual payment please use the\n\t\t\t\tBonus(Annual Payments) option. In other cases PAYE has to be manually\n\t\t\t\tadjusted <u>per directive</u> from SARS when processing salary.\n\t\t\t</td>-->\n\t\t</tr>\n\t\t<input type='hidden' name='annual' value='0' />\n\t\t<!--<tr class='" . bg_class() . "'>\n\t\t\t<td>Bonus(Annual/Once Off Payments)</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='annual' value='{$annual}' class='right'></td>\n\t\t</tr>-->\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Commission</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='commission' value='{$myEmp['commission']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Low or interest-free loan installment</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='loaninstall' value='{$myEmp['loaninstall']}' class='right'></td>\n\t\t\t<td class='err'>In the event that the employee repays more than the installment -\n\t\t\t\tenter that amount, plus interest that is remitted, here.\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Travel Allowance</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='all_travel' value='{$myEmp['all_travel']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Pension: Company Contribution</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='comp_pension' value='{$myEmp['comp_pension']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Pension: Employee Deduction</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='emp_pension' value='{$myEmp['emp_pension']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Provident: Company Contribution</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='comp_provident' value='{$myEmp['comp_provident']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Provident: Employee Deduction</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='emp_provident' value='{$myEmp['emp_provident']}' class='right'></td>\n\t\t</tr>\n\t\t<!--\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>UIF: Company Contribution</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='comp_uif' value='{$myEmp['comp_uif']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>UIF: Employee Deduction</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='emp_uif' value='{$myEmp['emp_uif']}' class='right'></td>\n\t\t</tr>\n\t\t//-->\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Retirement Annuity: Company Contribution</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='comp_ret' value='{$myEmp['comp_ret']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Retirement Annuity: Employee Deduction</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='emp_ret' value='{$myEmp['emp_ret']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Medical Contribution: Company</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='comp_medical' value='{$myEmp['comp_medical']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td nowrap>Medical Contribution: Employee</td>\n\t\t\t<td nowrap>" . CUR . " <input type='text' size='10' name='emp_medical' value='{$myEmp['emp_medical']}' class='right'></td>\n\t\t</tr>\n\t\t<input type=hidden name='comp_other' value='0'>\n\t\t<input type=hidden name='emp_other' value='0'>\n\t\t<!--\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Other: Company Contribution</td>\n\t\t\t<td>" . CUR . " <input type='text' size='10' name='comp_other' value='{$myEmp['comp_other']}' class='right'></td>\n\t\t</tr>\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Other: Employee Deduction</td>\n\t\t\t<td>" . CUR . " <input type='text' size='10' name='emp_other' value='{$myEmp['emp_other']}' class='right'></td>\n\t\t</tr>\n\t\t//-->\n\t\t{$paydetails}\n\t\t<tr class='" . bg_class() . "'>\n\t\t\t<td>Override PAYE <input type='checkbox' name='mpaye'></td>\n\t\t\t<td>" . CUR . " <input type='text' size='10' name='mpaye_amount'></td>\n\t\t</tr>\n\t\t{$row}\n\t\t<tr><th colspan='2'>Fringe Benefits</th></tr>\n\t\t{$fringes}\n\t\t<tr><th colspan='2'>Allowances</th></tr>\n\t\t{$allowances}\n\t\t<tr><th colspan='2'>Subsistence Allowances</th></tr>\n\t\t{$subsistence}\n\t\t<tr><th colspan='2'>Deductions</th></tr>\n\t\t{$deductions}\n\t\t{$rt}\n\t\t<tr>\n\t\t\t<td><input type='submit' name='back' value='&laquo; Correction'></td>\n\t\t\t<td align='right'><input type='submit' value='Confirm &raquo;'></td>\n\t\t</tr>\n\t\t</form>\n\t\t{$js_workhours}\n\t\t</table>";
    return $process;
}
function enter($_POST, $err = "")
{
    extract($_POST);
    global $PRDMON, $MONPRD;
    $salyr = getYearOfEmpMon($month);
    $curyr = getActiveFinYear();
    if ($salyr > $curyr || $salyr == $curyr && $month > $PRDMON[12]) {
        header("Location: ../admin-employee-view.php?err=Cannot do transaction in future financial year. You need to close your year first before you can continue.&" . array2get($_POST));
        exit;
    }
    if (!isset($emps) || !is_array($emps)) {
        header("Location: ../admin-employee-view.php?err=Please select at least one employee.");
        exit;
    }
    // first check if all the selected employees with EFT pay types have banking information
    // and their id numbers are valid
    $emp_err = array();
    $emp_nam = array();
    foreach ($emps as $e_empnum => $e_val) {
        /* previously selected to remove this employee from process */
        if (isset($rememp[$e_empnum])) {
            unset($emps[$e_empnum]);
            continue;
        }
        $sql = "\n\t\t\tSELECT fnames, sname, paytype, bankname, bankaccno, idnum, flag, hiredate, payprd \n\t\t\tFROM employees \n\t\t\tWHERE div='" . USER_DIV . "' AND empnum='{$e_empnum}'";
        $rslt = db_exec($sql) or errDie("error checking employee payment types.");
        $e_info = pg_fetch_array($rslt);
        /* if the employee's pay period doesn't match the selected button, don't
        			include employee in checklist */
        if (isset($d) && $e_info["payprd"] != "d") {
            continue;
        } else {
            if (isset($w) && $e_info["payprd"] != "w") {
                continue;
            } else {
                if (isset($b) && $e_info["payprd"] != "f") {
                    continue;
                } else {
                    if (isset($m) && $e_info["payprd"] != "m") {
                        continue;
                    }
                }
            }
        }
        $e_empnum += 0;
        $emp_err[$e_empnum] = 0;
        $emp_nam[$e_empnum] = "{$e_info['fnames']} {$e_info['sname']}";
        if ($e_info["paytype"] == "EFT" && (empty($e_info["bankname"]) || empty($e_info["bankaccno"]))) {
            $emp_err[$e_empnum] |= 0x1;
        }
        if (!empty($e_info["idnum"])) {
            $bd_year = substr($e_info["idnum"], 0, 2);
            $bd_month = substr($e_info["idnum"], 2, 2);
            $bd_day = substr($e_info["idnum"], 4, 2);
            if (!checkdate($bd_month, $bd_day, $bd_year)) {
                $emp_err[$e_empnum] |= 0x2;
            }
        }
        if ($e_info["flag"] == "2.5EMP") {
            $emp_err[$e_empnum] |= 0x4;
            $special_error = 0x1;
        }
        if ($e_info["flag"] == "272PREVEMP") {
            $emp_err[$e_empnum] |= 0x4;
            $special_error = 0x2;
        }
        /* check hiredate after process date */
        explodeDate($e_info["hiredate"], $hd_year, $hd_month, $hd_day);
        $MONempyear = getYearOfEmpMon($month);
        if ($hd_year > $MONempyear || $hd_year == $MONempyear && $hd_month > $month) {
            $emp_err[$e_empnum] |= 0x8;
        }
    }
    // list the employee information problems
    if (array_sum($emp_err) > 0) {
        $out = "\n\t\t\t<h3>Batch Salaries</h3>\n\t\t\t\t<form method='POST' action='" . SELF . "'>";
        foreach ($_POST as $key => $value) {
            if (is_array($value)) {
                foreach ($value as $akey => $avalue) {
                    $out .= "<input type='hidden' name='{$key}" . "[{$akey}]' value='{$avalue}'>";
                }
            } else {
                $out .= "<input type='hidden' name='{$key}' value='{$value}'>";
            }
        }
        if (isset($special_error)) {
            switch ($special_error) {
                case 0x1:
                    $out .= "\n\t\t\t\t\t<li class='err'><strong>NOTICE:</strong> Due to changes in employee functionality from Cubit 2.5 to Cubit 2.6 <br>\n\t\t\t\t\t\tyou need to edit your employees' salary/deduction/allowance information</li>\n\t\t\t\t\t\t<br />";
                    break;
                case 0x2:
                    $out .= "\n\t\t\t\t\t<li class='err'><strong>NOTICE:</strong> Due to the changes from Cubit 2.71 to Cubit 2.72 you should first update your employee's\n\t\t\t\t\t\tprevious employment information in the employee edit form.</li>\n\t\t\t\t\t\t<br />";
                    break;
            }
        }
        $out .= "\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan='3' class='err'>There are problems with the following employees.<br />\n\t\t\t\t\t\tEdit their information or to remove an employee from the process select\n\t\t\t\t\t\tthe checkbox next to employee's name.<br /><br />\n\t\t\t\t\t\tClick the 'Done' button when ready to proceed.</td>\n\t\t\t\t</tr>";
        $out .= "\n\t\t\t<tr>\n\t\t\t\t<td>&nbsp;</td>\n\t\t\t\t<th>Name</th>\n\t\t\t\t<th>Message</th>\n\t\t\t</tr>";
        $i = 0;
        foreach ($emp_err as $e_empnum => $err_val) {
            $out .= "\n\t\t\t\t<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t\t<td><input type='checkbox' name='rememp[{$e_empnum}]' /></td>\n\t\t\t\t\t<th>{$emp_nam[$e_empnum]}</td>";
            if ($err_val & 0x4) {
                $specerr_msg = "(See above notice for this employee)";
            } else {
                $specerr_msg = "";
            }
            if ($err_val & 0x1 && $err_val & 0x2) {
                $out .= "<td class='err'>Banking info and ID number {$specerr_msg}</td>";
            } else {
                if ($err_val & 0x1) {
                    $out .= "<td class='err'>Banking info {$specerr_msg}</td>";
                } else {
                    if ($err_val & 0x2) {
                        $out .= "<td class='err'>ID number {$specerr_msg}</td>";
                    } else {
                        if ($err_val & 0x8) {
                            $out .= "<td class='err'>Employee was not employed in the period\n\t\t\t\t\trequested {$specerr_msg}</td>";
                        } else {
                            $out .= "<td>Employee Info Correct {$specerr_msg}</td>";
                        }
                    }
                }
            }
            if ($err_val && !($err_val == 0x8)) {
                $out .= "<td class='err'><a target='_blank' href='../admin-employee-edit.php?empnum={$e_empnum}'>Edit Employee</a></td>";
            }
            $out .= "</tr>";
        }
        $out .= "\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan='3' align='right'><input type='submit' value='Done' /></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t\t</form>";
        return $out;
    }
    if (!isset($date_day)) {
        $date_day = date("d");
        $date_month = date("m");
        $date_year = date("Y");
    }
    if (!isset($date_month)) {
        $date_month = date("m");
    }
    /* make week/day selections */
    if (isset($w)) {
        $weekends = "";
        $weeks = "<select name='week'>";
        $stdate = mktime(0, 0, 0, $month, 1, DATE_YEAR);
        $endate = mktime(0, 0, 0, $month, DATE_DAYS, DATE_YEAR);
        $i = 1;
        while ($stdate <= $endate) {
            if (date("w", $stdate) == 5) {
                $weekends .= "<input type='hidden' name='weekends[{$i}]' value='" . date("j", $stdate) . "' />";
                if (isset($week) && $week == $i) {
                    $sel = "selected";
                } else {
                    $sel = "";
                }
                $weeks .= "<option {$sel} value='{$i}'>Week {$i} (" . date("j M", $stdate) . ")</option>";
                ++$i;
            }
            /* next day */
            $stdate += 24 * 60 * 60;
        }
        /*<option value='1'>Week 1</option>
        		<option value='2'>Week 2</option>
        		<option value='3'>Week 3</option>
        		<option value='4'>Week 4</option>
        		<option value='5'>Week 5</option>*/
        $weeks .= "</select>";
        $weeks = "\n\t\t\t<th>Week</th>\n\t\t\t<td>{$weekends}{$weeks}</td>\n\t\t\t<td class='err'>Period salaries are processed for</td>";
    } else {
        if (isset($b)) {
            $weekends = "";
            $weeks = "<select name='week'>";
            $i = 1;
            /* find first friday of tax year */
            $stdate = mktime(0, 0, 0, 3, 1, getYearOfEmpMon(3));
            while (date("w", $stdate) != 5) {
                $stdate = mktime(0, 0, 0, 3, ++$i, getYearOfEmpMon(3));
            }
            // hack: go one week back so the +14 increases are easier
            $stdate -= 7 * 24 * 3600;
            /* end on the last day of the selected month */
            $endate = mktime(0, 0, 0, $month + 1, 0, getYearOfEmpMon($month));
            /* count weeks from start of tax year */
            $i = 1;
            $c = 0;
            while ($stdate <= $endate) {
                if (date("m", $stdate) == $month && date("Y", $stdate) == getYearOfEmpMon($month)) {
                    $c += 2;
                    $cd = $c - 1 . "-{$c}";
                    $weekends .= "<input type='hidden' name='weekends[{$i}]' value='" . date("j", $stdate) . "' />";
                    if (isset($week) && $week == $i) {
                        $sel = "selected";
                    } else {
                        $sel = "";
                    }
                    $weeks .= "<option {$sel} value='{$i}'>Week {$cd} (" . date("j M", $stdate) . ")</option>";
                    ++$i;
                }
                /* next day */
                $stdate += 24 * 60 * 60 * 14;
            }
            /*<option value='1'>Week 1</option>
            		<option value='2'>Week 2</option>
            		<option value='3'>Week 3</option>
            		<option value='4'>Week 4</option>
            		<option value='5'>Week 5</option>*/
            $weeks .= "\n\t\t</select>";
            $weeks = "\n\t\t\t<th>Week</th>\n\t\t\t<td>{$weekends}{$weeks}</td>\n\t\t\t<td class='err'>Period salaries are processed for</td>";
        } else {
            if (isset($d)) {
                $x = date("t", mktime(0, 0, 0, $month, 1, getYearOfFinMon($month)));
                $MONstr = getMonthNameS($month);
                if (!isset($proc_day)) {
                    $proc_day = 0;
                }
                if (!isset($pday)) {
                    $pday = $proc_day;
                }
                $days = "<select name='pday'>";
                for ($i = 1; $i <= $x; ++$i) {
                    if ($i == $pday) {
                        $sel = "selected='t'";
                    } else {
                        $sel = "";
                    }
                    $days .= "<option {$sel} value='{$i}'>{$i} {$MONstr}</option>";
                }
                $days .= "</select>";
                $weeks = "\n\t\t\t<th>Day for Payment</th>\n\t\t\t<td>{$days}</td>\n\t\t\t<td class='err'>Period salaries are processed for</td>";
            } else {
                $weeks = "<input type='hidden' name='week' value='0'>";
            }
        }
    }
    /* payprd message */
    if (isset($d)) {
        $cpayprd = "d";
    } else {
        if (isset($w)) {
            $cpayprd = "w";
        } else {
            if (isset($b)) {
                $cpayprd = "f";
            } else {
                if (isset($m)) {
                    $cpayprd = "m";
                } else {
                    invalid_use("Invalid payment type selected.");
                }
            }
        }
    }
    $dispmsg = getCSetting("EMP_SALMSG");
    if (strpos($dispmsg, $cpayprd) === false) {
        $payprd_msg_ch = "";
    } else {
        $payprd_msg_ch = "checked='t'";
    }
    $payprd_msg = get_payprdmsg($cpayprd);
    /* print payslip on/off */
    $printslip = getCSetting("EMP_PRINTSLIP");
    $out = "\n\t\t<script>\n\t\t\tfunction update_salmsg(obj) {\n\t\t\t\tajaxRequest('payprdmsg.php', 'payprd_msg', AJAX_SET,'payprd={$cpayprd}&newval=' + obj.checked);\n\t\t\t}\n\t\t</script>\n\t\t<form action='" . SELF . "' method='POST' id='salfrm'>\n\t\t\t<input type='hidden' name='key' value='confirm' />\n\t\t\t<input type='hidden' name='month' value='{$month}' />\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<td colspan='9'>\n\t\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td><h3>Processing Batch Salaries</h3></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t<li class='err'>NOTE that Cubit is configured to compute employees' tax\n\t\t\t\t\t\t\t\t\tduring the employees' tax year that<br />\n\t\t\t\t\t\t\t\t\tstarts in March and ends in February,\n\t\t\t\t\t\t\t\t\tirrespective of the employer's financial year end.</li>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td id='payprd_msg' colspan='2'>{$payprd_msg}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th align='right'>Salary Help Message: <input type='checkbox' onclick='update_salmsg(this);' name='payprd_dispmsg' {$payprd_msg_ch} /></th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan='6' valign='top' rowspan='2'>\n\t\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t{$weeks}\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<th>Processing Date:</th>\n\t\t\t\t\t\t<td nowrap>" . mkDateSelect("date", $date_year, $date_month, $date_day) . "</td>\n\t\t\t\t\t\t<td colspan='2' class='err'>Date used by Cubit for the ledgers.</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<th nowrap='t'>Print Salary Advice</th\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t<select name='printslip'>\n\t\t\t\t\t\t\t<option value='y' " . ($printslip != "n" ? "selected='t'" : "") . ">Yes</option>\n\t\t\t\t\t\t\t<option value='n' " . ($printslip == "n" ? "selected='t'" : "") . ">No</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t\t<td colspan='3' align='right' nowrap='t'>\n\t\t\t\t\t<input type='submit' name='btn_back' value='&laquo; Correction'>\n\t\t\t\t\t<input type='submit' value='Confirm &raquo;'>\n\t\t\t\t</td>\n\t\t\t\t<td colspan='10' align='right' nowrap='t'>\n\t\t\t\t\t<input type='submit' name='btn_back' value='&laquo; Correction'>\n\t\t\t\t\t<input type='submit' value='Confirm &raquo;'>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<!--<td align='center' colspan='3' class='err'>An amount entered here (Special Bonus/Additional\n\t\t\t\t\tSalary) will be treated as a recurring bonus/payment per pay period for PAYE\n\t\t\t\t\tpurposes, the amount will not be treated as an annual payment. If the\n\t\t\t\t\tamount paid as a bonus is a once off/annual payment please use the\n\t\t\t\t\tBonus(Annual Payments) option. In other cases PAYE has to be manually\n\t\t\t\t\tadjusted <u>per directive</u> from SARS when processing salary.</td>-->\n\t\t\t\t<td colspan='3'>&nbsp;</td>\n\t\t\t\t<td colspan='3' class='err'><strong>LOAN NOTE:</strong><br />In the event that the employee repays more than the installment -\n\t\t\t\t\tenter that amount, plus interest that is remitted, in the \"Loan Repayment\" field below.\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td colspan='10'>{$err}</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th>Nr.</th>\n\t\t\t\t<th>Name</th>\n\t\t\t\t<th>Remuneration</th>";
    if (!isset($d)) {
        $out .= "\n\t\t\t<th>Total Work Hours</th>\n\t\t\t<th>Actual Hours Worked</th>";
    }
    $out .= "\n\t\t\t<th>Normal Overtime</th>\n\t\t\t<th>Public Holiday Overtime</th>\n\t\t\t<th>Annual Bonus</th>\n\t\t\t<!--\n\t\t\t<th>Special Bonus/Additional Salary</th>\n\t\t\t<th>Annual/Once Off Bonus</th>\n\t\t\t-->\n\t\t\t<th>Commission</th>\n\t\t\t<th>Travel Allowance</th>\n\t\t\t<th>Loan Repayment</th>\n\t\t\t<th>Pension: Company Contribution</th>\n\t\t\t<th>Pension: Employee Deduction</th>\n\t\t\t<th>Provident: Company Contribution</th>\n\t\t\t<th>Provident: Employee Deduction</th>\n\t\t\t<!--\n\t\t\t<th>UIF: Company Contribution</th>\n\t\t\t<th>UIF: Employee Deduction</th>\n\t\t\t//-->\n\t\t\t<th>Retirement Annuity: Company Contribution</th>\n\t\t\t<th>Retirement Annuity: Employee Deduction</th>\n\t\t\t<th>Medical Contribution: Company</th>\n\t\t\t<th>Medical Contribution: Employee</th>\n\t\t\t<!--\n\t\t\t<th>Other: Company Contribution</th>\n\t\t\t<th>Other: Employee Deduction</th>\n\t\t\t//-->\n\t\t\t<th>Method of Payment</th>\n\t \t\t<th>Override PAYE</th>\n\t \t\t<th>Fringe Ben.</th>\n\t \t\t<th>Allowances</th>\n\t \t\t<th>Subsistence</th>\n\t \t\t<th>Deductions</th>\n\t \t\t<th>Reimbursements</th>\n\t\t</tr>";
    db_conn('cubit');
    $i = 0;
    $Sl = "SELECT * FROM employees WHERE div='" . USER_DIV . "' ORDER BY sname,fnames";
    $Ri = db_exec($Sl) or errDie("Unable to get data.");
    $jsbonus_clear = array();
    $uif_calc = array();
    $jsbonus = array(1 => array(), 2 => array(), 3 => array(), 4 => array(), 5 => array(), 6 => array(), 7 => array(), 8 => array(), 9 => array(), 10 => array(), 11 => array(), 12 => array());
    $js_workhours_fields = "";
    $subs_int = false;
    // whether there are internation subsistence allowances
    $counter = 0;
    while ($data = pg_fetch_array($Ri)) {
        if ($counter == 8) {
            #show headings...
            $out .= "\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Nr.</th>\n\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t<th>Remuneration</th>";
            if (!isset($d)) {
                $out .= "\n\t\t\t\t\t<th>Total Work Hours</th>\n\t\t\t\t\t<th>Actual Hours Worked</th>";
            }
            $out .= "\n\t\t\t\t\t<th>Normal Overtime</th>\n\t\t\t\t\t<th>Public Holiday Overtime</th>\n\t\t\t\t\t<th>Annual Bonus</th>\n\t\t\t\t\t<!--\n\t\t\t\t\t<th>Special Bonus/Additional Salary</th>\n\t\t\t\t\t<th>Annual/Once Off Bonus</th>\n\t\t\t\t\t-->\n\t\t\t\t\t<th>Commission</th>\n\t\t\t\t\t<th>Travel Allowance</th>\n\t\t\t\t\t<th>Loan Repayment</th>\n\t\t\t\t\t<th>Pension: Company Contribution</th>\n\t\t\t\t\t<th>Pension: Employee Deduction</th>\n\t\t\t\t\t<th>Provident: Company Contribution</th>\n\t\t\t\t\t<th>Provident: Employee Deduction</th>\n\t\t\t\t\t<!--\n\t\t\t\t\t<th>UIF: Company Contribution</th>\n\t\t\t\t\t<th>UIF: Employee Deduction</th>\n\t\t\t\t\t//-->\n\t\t\t\t\t<th>Retirement Annuity: Company Contribution</th>\n\t\t\t\t\t<th>Retirement Annuity: Employee Deduction</th>\n\t\t\t\t\t<th>Medical Contribution: Company</th>\n\t\t\t\t\t<th>Medical Contribution: Employee</th>\n\t\t\t\t\t<!--\n\t\t\t\t\t<th>Other: Company Contribution</th>\n\t\t\t\t\t<th>Other: Employee Deduction</th>\n\t\t\t\t\t//-->\n\t\t\t\t\t<th>Method of Payment</th>\n\t\t\t \t\t<th>Override PAYE</th>\n\t\t\t \t\t<th>Fringe Ben.</th>\n\t\t\t \t\t<th>Allowances</th>\n\t\t\t \t\t<th>Subsistence</th>\n\t\t\t \t\t<th>Deductions</th>\n\t\t\t \t\t<th>Reimbursements</th>\n\t\t\t\t</tr>";
            $counter = 0;
        }
        $counter++;
        if (!isset($emps[$data['empnum']])) {
            continue;
        }
        $bgcolor = bgcolorc($i);
        $send = "";
        $grossal = $data["basic_sal"] + $data["commission"] + $data["all_travel"] / 2 + $data["bonus"];
        if (isset($d)) {
            $send = "<input type='hidden' name='d' value=''>";
            if ($data['payprd'] != "d") {
                continue;
            }
        } elseif (isset($w)) {
            $send = "<input type='hidden' name='w' value=''>";
            if ($data['payprd'] != "w") {
                continue;
            }
        } elseif (isset($m)) {
            $send = "<input type='hidden' name='m' value=''>";
            if ($data['payprd'] != "m") {
                continue;
            }
        } elseif (isset($b)) {
            $send = "<input type='hidden' name='b' value=''>";
            if ($data['payprd'] != "f") {
                continue;
            }
        } else {
            continue;
        }
        /* set employee id */
        $id = $data['empnum'];
        /* calculate basic salary divisors and multipliers
         * used for calculating deductions/allowances/etc. when the
         * salary type and payment period differs in length
         */
        switch ($data["saltyp"]) {
            case "h":
                $divisor = 1;
                switch ($data["payprd"]) {
                    case "d":
                        $multiplier = $data["hpweek"] / 5;
                        break;
                    case "w":
                        $multiplier = $data["hpweek"];
                        break;
                    case "f":
                        $multiplier = $data["hpweek"] * 2;
                        break;
                    case "m":
                        $multiplier = $data["hpweek"] * 52 / 12;
                        break;
                }
                break;
            case "m":
                $divisor = 1;
                switch ($data["payprd"]) {
                    case "d":
                        $multiplier = 12 / (5 * 52);
                        break;
                    case "w":
                        $multiplier = 12 / 52;
                        break;
                    case "f":
                        $multiplier = 12 / 26;
                        break;
                    case "m":
                        $multiplier = 1;
                        break;
                }
                break;
            case "w":
                $divisor = 52 / 12;
                switch ($data["payprd"]) {
                    case "d":
                        $multiplier = 1 / 5;
                        break;
                    case "w":
                        $multiplier = 1;
                        break;
                    case "f":
                        $multiplier = 2;
                        break;
                    case "m":
                        $multiplier = 52 / 12;
                        break;
                }
                break;
            case "f":
                $divisor = 26 / 12;
                switch ($data["payprd"]) {
                    case "d":
                        $multiplier = 1 / 10;
                        break;
                    case "w":
                        $multiplier = 1 / 2;
                        break;
                    case "f":
                        $multiplier = 1;
                        break;
                    case "m":
                        $multiplier = 26 / 12;
                        break;
                }
                break;
        }
        $bon_month = round($data["sal_bonus_month"]);
        $jsbonus_clear[] = "document.getElementById('salfrm').elements['bonus[{$id}]'].value='0.00';";
        $jsbonus[$bon_month][] = "document.getElementById('salfrm').elements['bonus[{$id}]'].value = '{$data['sal_bonus']}';";
        /*		$uif_calc[] = "
        			tmp_calc = parseFloat(document.getElementById('salfrm').elements['basic_sal[$id]'].value)
        				+ parseFloat(document.getElementById('salfrm').elements['annual[$id]'].value)
        				+ parseFloat(document.getElementById('salfrm').elements['all_travel[$id]'].value);
        			tmp_calc_emp = tmp_calc * $data[emp_uif] / 100;
        			tmp_calc_comp = tmp_calc * $data[comp_uif] / 100;
        			tmp_calc_emp = tmp_calc_emp.toFixed(2);
        			tmp_calc_comp = tmp_calc_comp.toFixed(2);
        			document.getElementById('salfrm').elements['emp_uif[$id]'].value = tmp_calc_emp;
        			document.getElementById('salfrm').elements['comp_uif[$id]'].value = tmp_calc_comp;";*/
        $db = array("comp_pension" => $data["comp_pension"], "emp_pension" => $data["emp_pension"], "comp_provident" => $data["comp_provident"], "emp_provident" => $data["emp_provident"], "comp_uif" => $data["comp_uif"], "emp_uif" => $data["emp_uif"], "comp_other" => $data["comp_other"], "emp_other" => $data["emp_other"]);
        if (isset($basic_sal[$id])) {
            $data['basic_sal'] = $basic_sal[$id];
            $data['bonus'] = $bonus[$id];
            $data['commission'] = $commission[$id];
            $date['abonus'] = $abonus[$id];
            $data['all_travel'] = $all_travel[$id];
            $data['loaninstall'] = $loaninstall[$id];
            $data['comp_pension'] = $comp_pension[$id];
            $data['emp_pension'] = $emp_pension[$id];
            $data['comp_provident'] = $comp_provident[$id];
            $data['emp_provident'] = $emp_provident[$id];
            //$data['comp_uif']=$comp_uif[$id];
            //$data['emp_uif']=$emp_uif[$id];
            $data['comp_ret'] = $comp_ret[$id];
            $data['emp_ret'] = $emp_ret[$id];
            $data['comp_medical'] = $comp_medical[$id];
            $data['emp_medical'] = $emp_medical[$id];
            $data['comp_other'] = $comp_other[$id];
            $data['emp_other'] = $emp_other[$id];
        } else {
            if ($data["sal_bonus_month"] == $month) {
                $annual[$id] = sprint($data["sal_bonus"]);
            } else {
                $annual[$id] = "0.00";
            }
            $novert[$id] = "";
            $hovert[$id] = "";
            $mpaye_amount[$id] = "";
            if ($data["payprd"] == "w" || $data["payprd"] == "f") {
                $tmpmon = date("j");
                $daycount = date("t");
                $dayweek = date("D");
                if (strtolower($dayweek) == $data["payprd_day"] && $date_day + 7 > $daycount) {
                    $process_comp_deductions = true;
                } else {
                    $process_comp_deductions = false;
                }
            } else {
                $process_comp_deductions = true;
            }
            //$data["emp_uif"] = sprint(($data["basic_sal"] + $data["all_travel"]) * ($data["emp_uif"]/100));
            $effective_basicsal = $data["basic_sal"] * $multiplier;
            /* we only changing basic sal for non hourly employees,
            			because for hourly employees we change the hours ($mutli)  */
            if ($data["saltyp"] != "h") {
                $data["basic_sal"] *= $multiplier;
            }
            if ($data["loaninstall"] > $data["loanamt"]) {
                $data["loaninstall"] = $data["loanamt"];
            }
            $data["comp_pension"] = sprint($effective_basicsal * ($data["comp_pension"] / 100));
            $data["comp_provident"] = sprint($effective_basicsal * ($data["comp_provident"] / 100));
            $data["emp_pension"] = sprint($effective_basicsal * ($data["emp_pension"] / 100));
            $data["emp_provident"] = sprint($effective_basicsal * ($data["emp_provident"] / 100));
            $data["emp_medical"] = sprint($data["emp_medical"] / $divisor);
            $data["comp_medical"] = sprint($data["comp_medical"] / $divisor);
            $data["emp_ret"] = sprint($data["emp_ret"] / $divisor);
            $data["comp_ret"] = sprint($data["comp_ret"] / $divisor);
            $data["loaninstall"] = sprint($data["loaninstall"] / $divisor);
            $data["all_travel"] = sprint($data["all_travel"] / $divisor);
            explodeDate($data["loandate"], $loana_year, $loana_month, $loana_day);
            if ($loana_year > $salyr || $loana_year == $salyr && $loana_month > $month) {
                $data["loanint"] = 0;
                $data["loaninstall"] = 0;
            }
        }
        if ($data['paytype'] == "Cash") {
            $paydetails = "Cash\n\t\t\t<input type='hidden' name='accid[{$id}]' value='0'>";
        } elseif ($data['paytype'] == "Ledger Account") {
            db_conn('core');
            $Sl = "SELECT accid,accname FROM accounts ORDER BY accname";
            $Rl = db_exec($Sl);
            $accounts = "<select name='account[{$id}]'>";
            while ($ad = pg_fetch_array($Rl)) {
                if (isset($account[$id]) && $account[$id] == $ad['accid']) {
                    $sel = "selected";
                } else {
                    $sel = "";
                }
                $accounts .= "<option value='{$ad['accid']}' {$sel}>{$ad['accname']}</option>";
            }
            $accounts .= "</select>";
            $paydetails = "{$accounts}\n\t\t\t\t<input type='hidden' name='accid[{$id}]' value='0'>";
        } else {
            db_conn('cubit');
            $Sl = "SELECT * FROM bankacct WHERE btype != 'int' AND div = '" . USER_DIV . "' ORDER BY accname ASC";
            $Ry = db_exec($Sl) or errDie("Unable to get bank account.");
            if (pg_numrows($Ry) < 1) {
                return "<li class='err'> There are no bank accounts found in Cubit.\n\t\t\t\t<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct Selection'>";
            }
            $banks = "<select name='accid[{$id}]'>";
            while ($acc = pg_fetch_array($Ry)) {
                $banks .= "<option value='{$acc['bankid']}'>{$acc['accname']} ({$acc['acctype']})</option>";
            }
            $banks .= "</select>";
            $paydetails = "{$banks}";
        }
        # fringe benefits
        $i = 0;
        db_conn("cubit");
        $sql = "SELECT * FROM fringebens WHERE div = '" . USER_DIV . "' ORDER BY fringeben";
        $rslt = db_exec($sql) or errDie("Unable to select fringe benefits from database.");
        if (pg_num_rows($rslt) < 1) {
            $fringes = "<table " . TMPL_tblDflts . ">";
            $fringes .= "<tr><td class='" . bg_class() . "' colspan='2' align='center'>None found in database.</td></tr>";
            $fringes .= "</table>";
        } else {
            $fringes = "<table " . TMPL_tblDflts . ">";
            while ($myFringe = pg_fetch_array($rslt)) {
                # check if employee has allowance
                $sql = "SELECT * FROM empfringe WHERE fringeid='{$myFringe['id']}' AND empnum='{$data['empnum']}' AND div = '" . USER_DIV . "'";
                $empRslt = db_exec($sql) or errDie("Unable to retrieve fringe benefit info from database.");
                if (pg_numrows($empRslt) > 0) {
                    $empFringe = pg_fetch_array($empRslt);
                    if (substr($empFringe["type"], 0, 4) == "Perc") {
                        $empFringe["amount"] = sprint($data["basic_sal"] * ($empFringe["amount"] / 100) / $divisor);
                    } else {
                        $empFringe['amount'] = sprint($empFringe['amount'] / $divisor);
                    }
                    $grossal += $empFringe["amount"];
                    $tmp_fringeaccs = $empFringe["accid"];
                    $tmp_fringebens = $empFringe["amount"];
                } else {
                    $tmp_fringeaccs = "0";
                    $tmp_fringebens = "0.00";
                }
                $fringes .= "\n\t\t\t\t\t<input type='hidden' name='fringeaccs[{$id}][]' value='{$tmp_fringeaccs}'>\n\t\t\t\t\t<input type='hidden' name='fringeid[{$id}][]' value='{$myFringe['id']}'>\n\t\t\t\t\t<input type='hidden' name='fringename[{$id}][]' value='{$myFringe['fringeben']}'>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>{$myFringe['fringeben']}</td>\n\t\t\t\t\t\t<td>" . CUR . "</td>\n\t\t\t\t\t\t<td><input type='text' size='10' name='fringebens[{$id}][]' value='{$tmp_fringebens}'></td>\n\t\t\t\t\t</tr>";
                $i++;
            }
            $fringes .= "</table>";
        }
        # get allowances
        $i = 0;
        db_conn('cubit');
        $sql = "SELECT * FROM allowances WHERE div = '" . USER_DIV . "' ORDER BY allowance";
        $allowRslt = db_exec($sql) or errDie("Unable to select allowances from database.");
        if (pg_numrows($allowRslt) < 1) {
            $allowances = "<table " . TMPL_tblDflts . ">";
            $allowances .= "<tr><td>None</td></tr>";
            $allowances .= "</table>";
        } else {
            $allowances = "<table " . TMPL_tblDflts . ">";
            while ($myAllow = pg_fetch_array($allowRslt)) {
                # 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);
                    $dataAllow['amount'] = sprint($dataAllow['amount'] / $divisor);
                    $grossal += $dataAllow["amount"];
                    $tmp_allowaccs = $dataAllow["accid"];
                    $tmp_allowances = $dataAllow["amount"];
                } else {
                    $tmp_allowaccs = $myAllow["accid"];
                    $tmp_allowances = "0.00";
                }
                $allowances .= "\n\t\t\t\t\t<input type='hidden' name='allowid[{$id}][]' value='{$myAllow['id']}'>\n\t\t\t\t\t<input type='hidden' name='allowname[{$id}][]' value='{$myAllow['allowance']}'>\n\t\t\t\t\t<input type='hidden' name='allowtax[{$id}][]' value='{$myAllow['add']}'>\n\t\t\t\t\t<input type='hidden' name='allowaccs[{$id}][]' value='{$tmp_allowaccs}'>\n\t\t\t\t\t<tr><td>{$myAllow['allowance']}</td>\n\t\t\t\t\t\t<td>" . CUR . "</td>\n\t\t\t\t\t\t<td><input type='text' size='10' name='allowances[{$id}][]' value='{$tmp_allowances}'></td>\n\t\t\t\t\t</tr>";
                $i++;
            }
            $allowances .= "</table>";
        }
        $subsistence = "";
        $subslst = new dbSelect("subsistence", "cubit", array("where" => "div='" . USER_DIV . "'", "order" => "name"));
        $subslst->run();
        if ($subslst->num_rows() > 0) {
            $i = 0;
            $subsistence .= "\n\t\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Name</th>\n\t\t\t\t\t\t<th>Amount</th>\n\t\t\t\t\t\t<th>Days</th>\n\t\t\t\t\t</tr>";
            $empsubs = new dbSelect("emp_subsistence", "cubit");
            while ($subs = $subslst->fetch_array()) {
                $sid = $subs["id"];
                $empsubs->setOpt(array("where" => "empnum='{$data['empnum']}' AND subid='{$sid}'"));
                $empsubs->run();
                if ($empsubs->num_rows() <= 0) {
                    $si["amount"] = "0.00";
                    $si["days"] = "0";
                    $si["accid"] = $subs["accid"];
                } else {
                    $si = $empsubs->fetch_array();
                }
                if ($subs["in_republic"] != "yes") {
                    $subs_int = true;
                }
                $subsistence .= "\n\t\t\t\t\t<input type='hidden' name='subsname[{$id}][{$sid}]' value='{$subs['name']}'>\n\t\t\t\t\t<input type='hidden' name='subsacc[{$id}][{$sid}]' value='{$si['accid']}'>\n\t\t\t\t\t<input type='hidden' name='subsrep[{$id}][{$sid}]' value='{$subs['in_republic']}'>\n\t\t\t\t\t<input type='hidden' name='subsmeal[{$id}][{$sid}]' value='{$subs['meals']}'>\n\t\t\t\t\t<tr bgcolor='" . bgcolor($i) . "'>\n\t\t\t\t\t\t<td>{$subs['name']}</td>\n\t\t\t\t\t\t<td nowrap>" . CUR . " <input type='text' size='5' name='subsamt[{$id}][{$sid}]' value='{$si['amount']}'></td>\n\t\t\t\t\t\t<td><input type='text' size='2' name='subsdays[{$id}][{$sid}]' value='{$si['days']}'></td>\n\t\t\t\t\t</tr>";
            }
            $subsistence .= "\n\t\t\t\t</table>";
        }
        # Deductions
        $i = 0;
        db_conn('cubit');
        $sql = "SELECT * FROM salded WHERE div = '" . USER_DIV . "' ORDER BY deduction";
        $deductRslt = db_exec($sql) or errDie("Unable to select deductions from database.");
        if (pg_numrows($deductRslt) < 1) {
            $deductions = "<table " . TMPL_tblDflts . ">";
            $deductions .= "<tr><td>None</td></tr>";
            $deductions .= "</table>";
        } else {
            $deductions = "<table " . TMPL_tblDflts . ">";
            while ($myDeduct = pg_fetch_array($deductRslt)) {
                # 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 ($dataDeduct["grosdeduct"] == "y") {
                        $deductions_msg = "(Before PAYE)";
                        $sal_calcfrom = $grossal;
                    } else {
                        $deductions_msg = "";
                        $sal_calcfrom = $data["basic_sal"];
                    }
                    if ($dataDeduct['type'] == "Amount") {
                        $dataDeduct['amount'] = sprint($dataDeduct['amount'] / $divisor);
                    } else {
                        $dataDeduct['amount'] = sprint($sal_calcfrom * $dataDeduct['amount'] / 100 / $divisor);
                    }
                    // calculate employer contribution to deduction
                    if ($dataDeduct["employer_type"] == "Amount") {
                        $dataDeduct["employer_amount"] = sprint($dataDeduct["employer_amount"] / $divisor);
                    } else {
                        $dataDeduct["employer_amount"] = sprint($dataDeduct["amount"] * $dataDeduct["employer_amount"] / 100 / $divisor);
                    }
                    $tmp_deductions = $dataDeduct["amount"];
                    $tmp_dedaccs = $dataDeduct["accid"];
                    $tmp_emp_ded = $dataDeduct["employer_amount"];
                } else {
                    $tmp_deductions = "0.00";
                    $tmp_emp_ded = "0.00";
                    $tmp_dedaccs = $myDeduct["accid"] != 0 ? $myDeduct["accid"] : $myDeduct["expaccid"];
                    $deductions_msg = "";
                }
                # check if we should be using deductions
                if ($data['emp_usescales'] == "1" and $myDeduct['type'] == "Percentage") {
                    # check if this deduction has scales
                    $get_scales = "SELECT * FROM salded_scales WHERE saldedid = '{$myDeduct['id']}' LIMIT 1";
                    $run_scales = db_exec($get_scales) or errDie("Unable to get deduction scale information.");
                    if (pg_numrows($run_scales) > 0) {
                        # scales exist
                        $get_perc = "\n\t\t\t\t\t\t\tSELECT * FROM salded_scales \n\t\t\t\t\t\t\tWHERE scale_from <= '{$data['basic_sal']}' AND scale_to >= '{$data['basic_sal']}' AND saldedid = '{$myDeduct['id']}' \n\t\t\t\t\t\t\tLIMIT 1";
                        $run_perc = db_exec($get_perc) or errDie("Unable to get deduction scale information.");
                        if (pg_numrows($run_perc) > 0) {
                            # found a matching scale for this scaled duduction for a customer using scales ....
                            $scale_arr = pg_fetch_array($run_perc);
                            $tmp_deductions = sprint($data['basic_sal'] / 100 * $scale_arr['scale_amount']);
                        }
                    }
                }
                $deductions .= "\n\t\t\t\t\t<input type='hidden' size='10' name='deductid[{$id}][]' value='{$myDeduct['id']}'>\n\t\t\t\t\t<input type='hidden' size='30' name='deductname[{$id}][]' value='{$myDeduct['deduction']}'>\n\t\t\t\t\t<input type='hidden' size='10' name='deducttax[{$id}][]' value='{$myDeduct['add']}'>\n\t\t\t\t\t<input type='hidden' name='dedaccs[{$id}][]' value='{$tmp_dedaccs}'>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>{$myDeduct['deduction']} {$deductions_msg}</td>\n\t\t\t\t\t\t<td>" . CUR . "</td>\n\t\t\t\t\t\t<td><input type='text' size='10' name='deductions[{$id}][]' value='{$tmp_deductions}'></td>\n\t\t\t\t\t\t<td>" . CUR . "</td>\n\t\t\t\t\t\t<td><input type='hidden' size='10' name='employer_deductions[{$id}][]' value='{$tmp_emp_ded}'></td>\n\t\t\t\t\t</tr>";
                $i++;
            }
            $deductions .= "</table>";
        }
        $rt = "";
        db_conn('cubit');
        $Sl = "SELECT * FROM rbs ORDER BY name";
        $Rl = db_exec($Sl) or errDie("Unable to get data.");
        $i = 0;
        if (pg_num_rows($Rl) > 0) {
            $rt = "<table " . TMPL_tblDflts . ">";
            while ($td = pg_fetch_array($Rl)) {
                if (!isset($rbsa[$id][$td['id']])) {
                    $rbsa[$id][$td['id']] = "";
                }
                $rt .= "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><input type='hidden' name='rbs[{$id}][{$td['id']}]' value='{$td['id']}'>{$td['name']}</td>\n\t\t\t\t\t\t<td>" . CUR . "</td>\n\t\t\t\t\t\t<td><input type='text' size='10' name='rbsa[{$id}][{$td['id']}]' value='" . $rbsa[$id][$td['id']] . "' class='right'></td>\n\t\t\t\t\t</tr>";
                $i++;
            }
            $rt .= "</table>";
        } else {
            $rt .= "None";
        }
        $salarr = array("m" => "Per Month", "w" => "Per Week", "f" => "Fortnightly", "h" => "Per Hour");
        $salnarr = array("d" => "Day(s)", "h" => "Hour(s)");
        $saltype = $salarr[$data['saltyp']];
        if (!isset($multi[$id])) {
            $multi[$id] = $data["saltyp"] == "h" ? $multiplier : 1;
        }
        $multi[$id] = round($multi[$id]);
        if ($data['saltyp'] == 'd' || $data['saltyp'] == 'h') {
            $salntype = $salnarr[$data['saltyp']];
            $multi_show = "x <input type='text' size='3' name='multi[{$id}]' value='{$multi[$id]}'> {$salntype}";
        } else {
            $multi_show = "<input type='hidden' name='multi[{$id}]' value='{$multi[$id]}'>";
            $saltype = "";
        }
        if (isset($mpaye[$id])) {
            $ch = "checked=yes";
        } else {
            $ch = "";
        }
        if ($data["payprd"] == "m" || $data["payprd"] == "d") {
            // count the amount of weekdays in this month
            $workdays = 0;
            for ($i = 1; $i <= date("t", mktime(0, 0, 0, $month, 1, date("Y"))); ++$i) {
                $wd = date("w", mktime(0, 0, 0, $month, $i, date("Y")));
                if ($wd != 0 && $wd != 6) {
                    ++$workdays;
                }
            }
            // hours per day calculation
            $hpd = $data["hpweek"] / 5;
            if (!isset($wh_total[$id])) {
                $wh_total[$id] = $workdays * $hpd;
            }
            if (!isset($wh_actual[$id])) {
                $wh_actual[$id] = $wh_total[$id];
            }
        }
        if ($data["payprd"] == "w") {
            if (!isset($wh_total[$id])) {
                $wh_total[$id] = $data["hpweek"];
            }
            if (!isset($wh_actual[$id])) {
                $wh_actual[$id] = $wh_total[$id];
            }
        }
        if ($data["payprd"] == "f") {
            if (!isset($wh_total[$id])) {
                $wh_total[$id] = $data["hpweek"] * 2;
            }
            if (!isset($wh_actual[$id])) {
                $wh_actual[$id] = $wh_total[$id];
            }
        }
        $js_workhours_fields .= "\n\t\t\t<script>\n\t\t\t\tf_sal[{$id}]\t\t= sf.elements['basic_sal[{$id}]'];\n\t\t\t\tf_salbonus[{$id}] = sf.elements['sal_bonus[{$id}]'];\n\t\t\t\tf_whtot[{$id}]\t= sf.elements['wh_total[{$id}]'];\n\t\t\t\tf_whact[{$id}]\t= sf.elements['wh_actual[{$id}]'];\n\t\t\t\tf_cpension[{$id}]\t= sf.elements['comp_pension[{$id}]'];\n\t\t\t\tf_epension[{$id}] = sf.elements['emp_pension[{$id}]'];\n\t\t\t\tf_cprov[{$id}]\t= sf.elements['comp_provident[{$id}]'];\n\t\t\t\tf_eprov[{$id}]\t= sf.elements['emp_provident[{$id}]'];\n\t\t\t\t//f_cuif[{$id}]\t\t= sf.elements['comp_uif[{$id}]'];\n\t\t\t\t//f_euif[{$id}]\t\t= sf.elements['emp_uif[{$id}]'];\n\t\t\t\tf_cother[{$id}]\t= sf.elements['comp_other[{$id}]'];\n\t\t\t\tf_eother[{$id}]\t= sf.elements['emp_other[{$id}]'];\n\n\t\t\t\tdb_cpension[{$id}]\t= " . $db["comp_pension"] . ";\n\t\t\t\tdb_epension[{$id}]\t= " . $db["emp_pension"] . ";\n\t\t\t\tdb_cprov[{$id}]\t\t= " . $db["comp_provident"] . ";\n\t\t\t\tdb_eprov[{$id}]\t\t= " . $db["emp_provident"] . ";\n\t\t\t\t//db_cuif[{$id}]\t\t= " . $db["comp_uif"] . ";\n\t\t\t\t//db_euif[{$id}]\t\t= " . $db["emp_uif"] . ";\n\t\t\t\tdb_cother[{$id}]\t= " . $db["comp_other"] . ";\n\t\t\t\tdb_eother[{$id}]\t= " . $db["emp_other"] . ";\n\n\t\t\t\tval_sal[{$id}] = -1;\n\t\t\t</script>";
        vsprint($data["basic_sal"]);
        $out .= "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<input type='hidden' name='emps[{$id}]' value='{$id}'>\n\t\t\t\t<input type='hidden' name='saltyp[{$id}]' value='{$data['saltyp']}'>\n\t\t\t\t<input type='hidden' name='process_comp_deductions[{$id}]' value='{$process_comp_deductions}'>\n\t\t\t\t<input type='hidden' name='divisor[{$id}]' value='{$divisor}'>\n\t\t\t\t<td nowrap>{$data['enum']}</td>\n\t\t\t\t<td>{$data['sname']}, {$data['fnames']}</td>\n\t\t\t\t<td nowrap><input type='text' size='8' name='basic_sal[{$id}]' value='{$data['basic_sal']}' class='right' onChange='changedfield({$id});'>{$saltype} {$multi_show}</td>";
        if (isset($d)) {
            $out .= "\n\t\t\t\t<input type='hidden' name='wh_total' value='1'>\n\t\t\t\t<input type='hidden' name='wh_actual' value='1'>";
        } else {
            $out .= "\n\t\t\t\t<td nowrap><input type='text' size='10' name='wh_total[{$id}]' value='{$wh_total[$id]}' class='right' onChange='workhours({$id});'></td>\n\t\t\t\t<td nowrap><input type='text' size='10' name='wh_actual[{$id}]' value='{$wh_actual[$id]}' class='right' onChange='workhours({$id});'></td>";
        }
        if (!isset($abonus[$id])) {
            $abonus = 0;
        }
        $out .= "\n\t\t\t\t<td nowrap><input type='text' size='5' name='novert[{$id}]' value='{$novert[$id]}' class='right'> Hrs</td>\n\t\t\t\t<td nowrap><input type='text' size='5' name='hovert[{$id}]' value='{$hovert[$id]}' class='right'> Hrs</td>\n\t\t\t\t<td nowrap><input type='hidden' size='8' name='bonus[{$id}]' value='0' class='right'><input type='text' size='8' name='abonus[{$id}]' value='{$abonus[$id]}' class='right'></td>\n\t\t\t\t<input type='hidden' name='annual[{$id}]' value='0' />\n\t\t\t\t<!--<td nowrap><input type='text' size='8' name='annual[{$id}]' value='{$annual[$id]}' class='right'></td>-->\n\t\t\t\t<td nowrap><input type='text' size='8' name='commission[{$id}]' value='{$data['commission']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='all_travel[{$id}]' value='{$data['all_travel']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='loaninstall[{$id}]' value='{$data['loaninstall']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='comp_pension[{$id}]' value='{$data['comp_pension']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='emp_pension[{$id}]' value='{$data['emp_pension']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='comp_provident[{$id}]' value='{$data['comp_provident']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='emp_provident[{$id}]' value='{$data['emp_provident']}' class='right'></td>\n\t\t\t\t<!--\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='comp_uif[{$id}]' value='{$data['comp_uif']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='emp_uif[{$id}]' value='{$data['emp_uif']}' class='right'></td>\n\t\t\t\t//-->\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='comp_ret[{$id}]' value='{$data['comp_ret']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='emp_ret[{$id}]' value='{$data['emp_ret']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='comp_medical[{$id}]' value='{$data['comp_medical']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='emp_medical[{$id}]' value='{$data['emp_medical']}' class='right'></td>\n\t\t\t\t<input type=hidden name='comp_other[{$id}]' value='0'>\n\t\t\t\t<input type=hidden name='emp_other[{$id}]' value='0'>\n\t\t\t\t<!--\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='comp_other[{$id}]' value='{$data['comp_other']}' class='right'></td>\n\t\t\t\t<td nowrap>R<input type='text' size='8' name='emp_other[{$id}]' value='{$data['emp_other']}' class='right'></td>\n\t\t\t\t//-->\n\t\t\t\t<td>{$paydetails}</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td><input type='checkbox' name='mpaye[{$id}]' {$ch}></td>\n\t\t\t\t\t\t\t<td><input type='text' size='8' name='mpaye_amount[{$id}]' value='{$mpaye_amount[$id]}'></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t\t<td>{$fringes}</td>\n\t\t\t\t<td>{$allowances}</td>\n\t\t\t\t<td>{$subsistence}<!--%%EXCHANGE%%--></td>\n\t\t\t\t<td>{$deductions}</td>\n\t\t\t\t<td>{$rt}</td>\n\t\t\t</tr>";
    }
    if (!isset($id)) {
        header("Location: ../admin-employee-view.php?err=Please select at least one employee.");
        exit;
    }
    // replace the exchange rate place holder with the exchange rate form field
    if ($subs_int) {
        $exch = "\n\t\t\t<input type='hidden' name='subs_exch' value='1'>\n\t\t\t<li class='err'>Please calculate the rand amount prior to completing the amount above.</li>";
        // 			<tr class='".bg_class()."'>
        // 				<th class='".bg_class()."'>Exchange (ZAR-USD):</th>
        // 				<td><input type='text' name='subs_exch' value='".xrate_get("USD")."'></td>
        // 			</tr>";
        $out = str_replace("<!--%%EXCHANGE%%-->", $exch, $out);
    }
    $out .= "\n\t\t\t<tr><td><br></td></tr>\n\t\t\t{$send}\n\t\t\t<tr>\n\t\t\t\t<td colspan='9' align='right' nowrap='t'>\n\t\t\t\t\t<input type='submit' name='btn_back' value='&laquo; Correction'>\n\t\t\t\t\t<input type='submit' value='Confirm &raquo;'>\n\t\t\t\t</td>\n\t\t\t\t<td colspan='10' align='right' nowrap='t'>\n\t\t\t\t\t<input type='submit' name='btn_back' value='&laquo; Correction'>\n\t\t\t\t\t<input type='submit' value='Confirm &raquo;'>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t</form>\n\t\t<script>\n\t\t\tfunction monthchange(mondd) {\n\t\t\t\t" . implode("\n", $jsbonus_clear) . "\n\t\t\t\tswitch ( mondd.value ) {\n\t\t\t\tcase '1':\n\t\t\t\t\t" . implode("\n", $jsbonus[1]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '2':\n\t\t\t\t\t" . implode("\n", $jsbonus[2]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '3':\n\t\t\t\t\t" . implode("\n", $jsbonus[3]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '4':\n\t\t\t\t\t" . implode("\n", $jsbonus[4]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '5':\n\t\t\t\t\t" . implode("\n", $jsbonus[5]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '6':\n\t\t\t\t\t" . implode("\n", $jsbonus[6]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '7':\n\t\t\t\t\t" . implode("\n", $jsbonus[7]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '8':\n\t\t\t\t\t" . implode("\n", $jsbonus[8]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '9':\n\t\t\t\t\t" . implode("\n", $jsbonus[9]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '10':\n\t\t\t\t\t" . implode("\n", $jsbonus[10]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '11':\n\t\t\t\t\t" . implode("\n", $jsbonus[11]) . "\n\t\t\t\t\tbreak;\n\t\t\t\tcase '12':\n\t\t\t\t\t" . implode("\n", $jsbonus[12]) . "\n\t\t\t\t\tbreak;\n\t\t\t\t}";
    //".implode("\n", $uif_calc)."
    $out .= "\n\t\t\t}\n\t\t</script>\n\t\t<script>\n\t\t\tsf = document.getElementById('salfrm');\n\t\t\tf_sal = new Array();\n\t\t\tf_salbonus = new Array();\n\t\t\tf_whtot = new Array();\n\t\t\tf_whact = new Array();\n\t\t\tf_cpension = new Array();\n\t\t\tf_epension = new Array();\n\t\t\tf_cprov = new Array();\n\t\t\tf_eprov = new Array();\n\t\t\t//f_cuif = new Array();\n\t\t\t//f_euif = new Array();\n\t\t\tf_cother = new Array();\n\t\t\tf_eother = new Array();\n\n\t\t\tdb_cpension = new Array();\n\t\t\tdb_epension = new Array();\n\t\t\tdb_cprov = new Array();\n\t\t\tdb_eprov = new Array();\n\t\t\t//db_cuif = new Array();\n\t\t\t//db_euif = new Array();\n\t\t\tdb_cother = new Array();\n\t\t\tdb_eother = new Array();\n\n\t\t\tval_sal = new Array();\n\t\t</script>\n \t\t{$js_workhours_fields}\n\t\t<script>\n\t\t\t// changing the workhours\n\t\t\tfunction workhours(id) {\n\t\t\t\tif ( val_sal[id] < 0 ) val_sal[id] = parseFloat(f_sal[id].value);\n\n\t\t\t\tval_whtot\t= parseFloat(f_whtot[id].value);\n\t\t\t\tval_whact\t= parseFloat(f_whact[id].value);\n\n\t\t\t\tif ( val_whtot >= val_whact ) {\n\t\t\t\t\tp = val_whact / val_whtot;\n\n\t\t\t\t\t// calculate the new basic salary\n\t\t\t\t\tx = val_sal[id] * p;\n\t\t\t\t\tx = x.toFixed(2);\n\t\t\t\t\tf_sal[id].value = x;\n\n\t\t\t\t\t// calculate the new values\n\t\t\t\t\tval_cpension \t= x * db_cpension[id] / 100;\n\t\t\t\t\tval_epension \t= x * db_epension[id] / 100;\n\t\t\t\t\tval_cprov\t\t= x * db_cprov[id] / 100;\n\t\t\t\t\tval_eprov\t\t= x * db_eprov[id] / 100;\n\t\t\t\t\t//val_cuif\t\t= x * db_cuif[id] / 100;\n\t\t\t\t\t//val_euif\t\t= x * db_euif[id] / 100;\n\t\t\t\t\tval_cother\t\t= x * db_cother[id] / 100;\n\t\t\t\t\tval_eother\t\t= x * db_eother[id] / 100;\n\n\t\t\t\t\tval_cpension \t= val_cpension.toFixed(2);\n\t\t\t\t\tval_epension \t= val_epension.toFixed(2);\n\t\t\t\t\tval_cprov \t\t= val_cprov.toFixed(2);\n\t\t\t\t\tval_eprov\t\t= val_eprov.toFixed(2);\n\t\t\t\t\t//val_cuif\t\t= val_cuif.toFixed(2);\n\t\t\t\t\t//val_euif\t\t= val_euif.toFixed(2);\n\t\t\t\t\tval_cother\t\t= val_cother.toFixed(2);\n\t\t\t\t\tval_eother\t\t= val_eother.toFixed(2);\n\n\t\t\t\t\tf_cpension[id].value\t= val_cpension;\n\t\t\t\t\tf_epension[id].value \t= val_epension;\n\t\t\t\t\tf_cprov[id].value \t\t= val_cprov;\n\t\t\t\t\tf_eprov[id].value\t\t= val_eprov;\n\t\t\t\t\t//f_cuif[id].value\t\t= val_cuif;\n\t\t\t\t\t//f_euif[id].value\t\t= val_euif;\n\t\t\t\t\tf_cother[id].value\t\t= val_cother;\n\t\t\t\t\tf_eother[id].value\t\t= val_eother;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction changedfield(id) {\n\t\t\t\tval_whtot\t= parseFloat(f_whtot[id].value);\n\t\t\t\tval_whact\t= parseFloat(f_whact[id].value);\n\n\t\t\t\tp = val_whtot / val_whact;\n\n\t\t\t\tval_sal[id] = parseFloat(f_sal[id].value) * p;\n\t\t\t\tval_sal[id] = val_sal[id].toFixed(2);\n\t\t\t}\n\n\t\t\tmonthchange(document.getElementById('salfrm').elements['month']);\n\t\t</script>";
    return $out;
}
function slctPrd($err = "")
{
    extract($_REQUEST);
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($empnum, "num", 1, 20, "Invalid employee number.");
    $v->isOk($MON, "num", 1, 2, "Invalid month.");
    # display errors, if any
    if ($v->isError()) {
        $confirmCust = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirmCust .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $confirmCust .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $confirmCust;
    }
    db_conn('cubit');
    $sql = "SELECT * FROM employees WHERE empnum='{$empnum}' AND div = '" . USER_DIV . "'";
    $empRslt = db_exec($sql) or errDie("Unable to select employees from database.");
    if (pg_numrows($empRslt) < 1) {
        return "Invalid employee ID.";
    }
    $myEmp = pg_fetch_array($empRslt);
    if ($myEmp['payprd'] == "w") {
        $weeks = "<select name='week'>";
        $stdate = mktime(0, 0, 0, $MON, 1, DATE_YEAR);
        $endate = mktime(0, 0, 0, $MON, DATE_DAYS, DATE_YEAR);
        $i = 1;
        while ($stdate <= $endate) {
            if (date("w", $stdate) == 5) {
                if (isset($week) && $week == $i) {
                    $sel = "selected='t'";
                } else {
                    $sel = "";
                }
                $weeks .= "<option {$sel} value='{$i}'>Week {$i} (" . date("j M", $stdate) . ")</option>";
                ++$i;
            }
            /* next day */
            $stdate += 24 * 60 * 60;
        }
        /*<option value='1'>Week 1</option>
        		<option value='2'>Week 2</option>
        		<option value='3'>Week 3</option>
        		<option value='4'>Week 4</option>
        		<option value='5'>Week 5</option>*/
        $weeks .= "</select>";
        $row = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Period</td>\n\t\t\t\t<td>{$weeks}</td>\n\t\t\t</tr>";
    } elseif ($myEmp['payprd'] == "f") {
        $weeks = "<select name='week'>";
        $i = 1;
        /* find first friday of tax year */
        $stdate = mktime(0, 0, 0, 3, 1, getYearOfEmpMon(3));
        while (date("w", $stdate) != 5) {
            $stdate = mktime(0, 0, 0, 3, ++$i, getYearOfEmpMon(3));
        }
        // hack: go one week back so the +14 increases are easier
        $stdate -= 7 * 24 * 3600;
        /* end on the last day of the selected month */
        $endate = mktime(0, 0, 0, $MON + 1, 0, getYearOfEmpMon($MON));
        /* count weeks from start of tax year */
        $i = 1;
        $c = 0;
        while ($stdate <= $endate) {
            if (date("m", $stdate) == $MON && date("Y", $stdate) == getYearOfEmpMon($MON)) {
                $c += 2;
                $cd = $c - 1 . "-{$c}";
                $weekends .= "<input type='hidden' name='weekends[{$i}]' value='" . date("j", $stdate) . "' />";
                if (isset($week) && $week == $i) {
                    $sel = "selected";
                } else {
                    $sel = "";
                }
                $weeks .= "<option {$sel} value='{$i}'>Week {$cd} (" . date("j M", $stdate) . ")</option>";
                ++$i;
            }
            /* next day */
            $stdate += 24 * 60 * 60 * 14;
        }
        /*<option value='1'>Week 1</option>
        		<option value='2'>Week 2</option>
        		<option value='3'>Week 3</option>
        		<option value='4'>Week 4</option>
        		<option value='5'>Week 5</option>*/
        $weeks .= "</select>";
        $row = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Period</td>\n\t\t\t\t<td>{$weeks}</td>\n\t\t\t</tr>";
    } else {
        if ($myEmp["payprd"] == "d") {
            $x = date("t", mktime(0, 0, 0, $MON, 1, getYearOfFinMon($MON)));
            $MONstr = getMonthNameS($MON);
            if (!isset($pday)) {
                $pday = $proc_day;
            }
            $days = "<select name='pday'>";
            for ($i = 1; $i <= $x; ++$i) {
                if (isset($pday) && $i == $pday) {
                    $sel = "selected='t'";
                } else {
                    $sel = "";
                }
                $days .= "<option {$sel} value='{$i}'>{$i} {$MONstr}</option>";
            }
            $days .= "</select>";
            $row = "\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td>Day for Payment</td>\n\t\t\t\t<td>{$days}</td>\n\t\t\t</tr>";
        } else {
            if (isset($back) || !empty($err)) {
                return slctEmployee($err);
            } else {
                return process($_REQUEST);
            }
        }
    }
    $OUT = "\n\t\t<h3>Reverse Employee Salary</h3>\n\t\t{$err}\n\t\t<form method='POST' action='" . SELF . "'>\n\t\t\t<input type='hidden' name='key' value='process' />\n\t\t\t<input type='hidden' name='MON' value='{$MON}' />\n\t\t\t<input type='hidden' name='empnum' value='{$empnum}' />\n\t\t\t<input type='hidden' name='date_day' value='{$date_day}' />\n\t\t\t<input type='hidden' name='date_month' value='{$date_month}' />\n\t\t\t<input type='hidden' name='date_year' value='{$date_year}' />\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th colspan='2'>Select Period</th>\n\t\t\t</tr>\n\t\t\t{$row}\n\t\t\t<tr>\n\t\t\t\t<td colspan='2' align='right'>\n\t\t\t\t\t<input type='submit' name='btn_correction' value='&laquo; Correction' />\n\t\t\t\t\t<input type='submit' value='Next' />\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t</form>";
    return $OUT;
}