function details($_POST, $err = "")
{
    # Get vars
    extract($_POST);
    if (isset($back) and isStock($accid)) {
        return get_stock_items($_POST);
    } elseif (isset($back)) {
        return slctacc($_POST);
    }
    $accid += 0;
    $amount = $amount + 0;
    # validate input
    require_lib("validate");
    $v = new validate();
    $v->isOk($refnum, "num", 1, 10, "Invalid Reference number.");
    $v->isOk($ct_day, "num", 1, 2, "Invalid to Date ct_day.");
    $v->isOk($ct_month, "num", 1, 2, "Invalid to Date ct_monthth.");
    $v->isOk($ct_year, "num", 1, 4, "Invalid to Date Year.");
    $date = $ct_day . "-" . $ct_month . "-" . $ct_year;
    if (!checkdate($ct_month, $ct_day, $ct_year)) {
        $v->isOk($date, "num", 1, 1, "Invalid date.");
    }
    $v->isOk($accid, "num", 1, 50, "Invalid Contra Account.");
    $v->isOk($cusnum, "num", 1, 50, "Invalid Customer number.");
    $v->isOk($vatinc, "string", 1, 6, "Invalid Transaction VAT Option.");
    if (sprint($amount) <= 0) {
        $v->addError($amount, "Invalid Or Too Small Amount Entered.");
    }
    if ($accid == "0") {
        $v->addError($accid, "No Allowed Accounts Found. <a href='settings/credit-note-accounts.php'>Please Add One First</a>");
    }
    # display errors, if any
    if ($v->isError()) {
        $confirm = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $confirm .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        return slctacc($_POST, $confirm . "<br>");
    }
    # CHECK IF THIS DATE IS IN THE BLOCKED RANGE
    $blocked_date_from = getCSetting("BLOCKED_FROM");
    $blocked_date_to = getCSetting("BLOCKED_TO");
    if (strtotime($date) >= strtotime($blocked_date_from) and strtotime($date) <= strtotime($blocked_date_to) and !user_is_admin(USER_ID)) {
        return slctacc($_POST, "<li class='err'>Period Range Is Blocked. Only an administrator can process entries within this period.</li><br>");
    }
    #if stock returned is selected ... override the setting
    if (isset($gotstock) and strlen($gotstock) > 0) {
        #get a stock id
        db_conn('exten');
        $get_stkid = "SELECT stkacc FROM warehouses ORDER BY whid ASC LIMIT 1";
        $run_stkid = db_exec($get_stkid) or errDie("Unable to get inventory account information.");
        if (pg_numrows($run_stkid) < 1) {
            return "<li class='err'>No Inventory Account Found.</li>";
        } else {
            $accid = pg_fetch_result($run_stkid, 0, 0);
        }
    }
    # get contra account details
    $accRs = get("core", "*", "accounts", "accid", $accid);
    $acc = pg_fetch_array($accRs);
    #### handle the stock we selected
    if ((isStock($accid) or isset($gotstock)) and !isset($stockcontinue)) {
        #for whatever reason ... we need to get stock ...
        return get_stock_items($_POST);
    }
    db_connect();
    # Select customer
    $sql = "SELECT * FROM customers WHERE cusnum = '{$cusnum}' AND div = '" . USER_DIV . "'";
    $custRslt = db_exec($sql) or errDie("Unable to access databse.", SELF);
    if (pg_numrows($custRslt) < 1) {
        return "<li class='err'>Invalid customer ID, or customer has been blocked.</li>";
    } else {
        $cust = pg_fetch_array($custRslt);
    }
    db_conn("exten");
    $sql = "SELECT * FROM departments WHERE deptid = '{$cust['deptid']}' AND div = '" . USER_DIV . "'";
    $deptRslt = db_exec($sql);
    if (pg_numrows($deptRslt) < 1) {
        return "<i class='err'>Customer Department Not Found</i>";
    } else {
        $dept = pg_fetch_array($deptRslt);
    }
    #get a stock total
    $stock_total = 0;
    if (isset($stock_items) and is_array($stock_items)) {
        foreach ($stock_items as $each => $own) {
            $stock_total = $stock_total + $stock_cost[$each] * $own;
        }
    }
    $stkamount = 0;
    $send_stock = "";
    $show_stock = "";
    if (isset($stock_items) and is_array($stock_items)) {
        $unit_total = array_sum($stock_items);
        if ($unit_total == 0) {
            $stock_unit_avg_cost = 0;
        } else {
            $stock_unit_avg_cost = sprint(($amount - $stock_total) / $unit_total);
        }
        foreach ($stock_items as $each => $own) {
            if ($own > 0) {
                if (!isset($own) or strlen($own) < 1) {
                    $own = 1;
                }
                if (!isset($stock_cost[$each]) or strlen($stock_cost[$each]) < 1) {
                    $stock_cost[$each] = 0;
                }
                $send_stock .= "<input type='hidden' name='stock_items[{$each}]' value='{$own}'>\n";
                $send_stock .= "<input type='hidden' name='stock_cost[{$each}]' value='{$stock_cost[$each]}'>\n";
                db_connect();
                $get_stk = "SELECT stkdes,whid FROM stock WHERE stkid = '{$each}' LIMIT 1";
                $run_stk = db_exec($get_stk) or errDie("Unable to get stock information.");
                if (pg_numrows($run_stk) < 1) {
                    $stock_name = "Unknown";
                } else {
                    $stock_name = pg_fetch_result($run_stk, 0, 0);
                    $whid = pg_fetch_result($run_stk, 0, 1);
                    db_conn('exten');
                    $get_cos = "SELECT cosacc FROM warehouses WHERE whid = '{$whid}' LIMIT 1";
                    $run_cos = db_exec($get_cos) or errDie("Unable to get cost of sale information. (1)");
                    if (pg_numrows($run_cos) < 1) {
                        $show_cos = "";
                    } else {
                        $cos_id = pg_fetch_result($run_cos, 0, 0);
                        db_conn('core');
                        $get_acc = "SELECT topacc,accnum,accname FROM accounts WHERE accid = '{$cos_id}' LIMIT 1";
                        $run_acc = db_exec($get_acc) or errDie("Unable to get cost of sale information. (2)");
                        if (pg_numrows($run_acc) < 1) {
                            $show_cos = "";
                        } else {
                            $aarr = pg_fetch_array($run_acc);
                            $show_cos = "{$aarr['topacc']}/{$aarr['accnum']} - {$aarr['accname']}";
                        }
                    }
                }
                if (!isset($stock_prof[$each])) {
                    $stock_prof[$each] = sprint($stock_unit_avg_cost * $own);
                }
                $show_stock .= "\n\t\t\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t\t\t<td colspan='2'>{$stock_name}</td>\n\t\t\t\t\t\t\t\t\t\t<td>{$own}</td>\n\t\t\t\t\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($stock_cost[$each]) . "</td>\n\t\t\t\t\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($stock_cost[$each] * $own) . "</td>\n\t\t\t\t\t\t\t\t\t\t<td><input type='text' size='7' name='stock_prof[{$each}]' value='{$stock_prof[$each]}'></td>\n\t\t\t\t\t\t\t\t\t\t<td nowrap>{$show_cos}</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t";
                $stkamount = $stkamount + $stock_cost[$each] * $own;
            }
        }
    }
    if (strlen($send_stock) == 0) {
        $send_stock = "<input type='hidden' name='stock_items' value='0'>";
        $send_stock .= "<input type='hidden' name='stock_cost' value='0'>";
        $send_stock .= "<input type='hidden' name='stock_prof' value='0'>";
        $get_gds_note = "";
    } else {
        $send_stock .= "<input type='hidden' name='stockcontinue' value='0'>";
        $send_stock .= "<input type='hidden' name='gotstock' value='1'>";
        if (isset($gds_note) and strlen($gds_note) > 0) {
            $gds_note_sel = "checked='yes'";
        } else {
            $gds_note_sel = "";
        }
        $get_gds_note = "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td>Print Goods Received Note</td>\n\t\t\t\t\t\t\t\t<td><input type='checkbox' name='gds_note' value='yes' {$gds_note_sel}></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t";
    }
    db_conn('core');
    $get_sales_acc = "SELECT topacc,accnum,accname FROM accounts WHERE accid = '{$dept['incacc']}' LIMIT 1";
    $run_sales_acc = db_exec($get_sales_acc) or errDie("Unable to get sales account information. (1)");
    if (pg_numrows($run_sales_acc) < 1) {
        $show_sales = "";
    } else {
        $sarr = pg_fetch_array($run_sales_acc);
        $show_sales = "{$sarr['topacc']}/{$sarr['accnum']} - {$sarr['accname']}";
    }
    if (strlen($show_stock) > 0) {
        $show_stock = "\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='2'>Stock Description</th>\n\t\t\t\t\t\t\t<th>Number Of Units Returned</th>\n\t\t\t\t\t\t\t<th>Unit Cost</th>\n\t\t\t\t\t\t\t<th>Total</th>\n\t\t\t\t\t\t\t<th>Profit/Loss</th>\n\t\t\t\t\t\t\t<th>Cost Of Sale Account</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{$show_stock}\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='4' align='right'><b>Total:</b></td>\n\t\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($stock_total) . "</td>\n\t\t\t\t\t\t\t<td colspan='2' nowrap><li class='err'>Difference ({$amount} - " . sprint($stock_total) . "): " . CUR . " " . sprint($amount - $stock_total) . "</li></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 colspan='7'><li class='err'>Sales Account To Be Used: {$show_sales}</li></td>\n\t\t\t\t\t\t</tr>";
    }
    # Probe tran type
    if ($entry == "CT") {
        $tran = "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td colspan='3'>{$acc['topacc']}/{$acc['accnum']} - {$acc['accname']}</td>\n\t\t\t\t\t\t<td colspan='2'>{$cust['accno']} - {$cust['cusname']} {$cust['surname']}</td>\n\t\t\t\t\t</tr>";
    } else {
        $tran = "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td colspan='3'>{$cust['accno']} - {$cust['cusname']} {$cust['surname']}</td>\n\t\t\t\t\t\t<td colspan='2'>{$acc['topacc']}/{$acc['accnum']} - {$acc['accname']}</td>\n\t\t\t\t\t</tr>";
    }
    if (!isset($amount)) {
        $amount = $stkamount;
        $details = "";
    }
    if (!isset($vataccid)) {
        $vataccid = 0;
    }
    if (isset($vatinc) and $vatinc != "novat") {
        db_connect();
        $get_vatcodes = "SELECT * FROM vatcodes ORDER BY code";
        $run_vatcodes = db_exec($get_vatcodes) or errDie("Unable to get vat code inoformation.");
        if (pg_numrows($run_vatcodes) < 1) {
            return "No Vatcodes Found. Please Add One First.";
        } else {
            $vatcode_drop = "<select name='vatcode'>";
            while ($varr = pg_fetch_array($run_vatcodes)) {
                $vatcode_drop .= "<option value='{$varr['id']}'>({$varr['code']}) {$varr['description']}</option>";
            }
            $vatcode_drop .= "</select>";
        }
        db_conn('core');
        $vatacc = "<select name='vataccid'>";
        $sql = "SELECT * FROM accounts WHERE div = '" . USER_DIV . "' ORDER BY accname ASC";
        $accRslt = db_exec($sql);
        if (pg_numrows($accRslt) < 1) {
            return "<li>There are No accounts in Cubit.</li>";
        }
        $vatacc_newid = gethook("accnum", "salesacc", "name", "VAT", "VAT");
        $vataccid = getCSetting("CRED_NOTE_VAT_ACC");
        if (!isset($vataccid) or strlen($vataccid) < 1 or $vataccid == "0") {
            $vataccid = $vatacc_newid;
        }
        //		if (!isset($vataccid) OR $vataccid == "0")
        //			$vataccid = $vatacc_newid;
        //		while($acc_arr = pg_fetch_array($accRslt)){
        //			# Check Disable
        //			if(isDisabled($acc_arr['accid']))
        //				continue;
        //			if($vataccid == $acc_arr['accid']) {
        //				$sel = "selected";
        //			} else {
        //				$sel = "";
        //			}
        //			$vatacc .= "<option value='$acc_arr[accid]' $sel>$acc_arr[topacc]/$acc_arr[accnum] - $acc_arr[accname]</option>";
        //		}
        //		$vatacc .= "</select>";
        if (isset($vatdedacc) and $vatdedacc == "dt") {
            $dsel1 = "checked='yes'";
        } else {
            $dsel1 = "";
        }
        if (isset($vatdedacc) and $vatdedacc == "ct") {
            $dsel2 = "checked='yes'";
        } else {
            $dsel2 = "";
        }
        if ($dsel1 == "" and $dsel2 == "") {
            $dsel1 = "checked='yes'";
        }
        if (isStock($accid) and isset($gotstock)) {
            $showgetvatacc = "<input type='hidden' name='vatdedacc' value='dt'>";
        } else {
            $showgetvatacc = "\n\t\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t\t<td colspan='2'valign='top'>VAT Deductable Account</td>\n\t\t\t\t\t\t\t\t\t<td colspan='2'>\n\t\t\t\t\t\t\t\t\t\t<input type='radio' name='vatdedacc' value='dt' {$dsel1} />{$acc['topacc']}/{$acc['accnum']} - {$acc['accname']}<br />\n\t\t\t\t\t\t\t\t\t\t<input type='radio' name='vatdedacc' value='ct' {$dsel2} />{$cust['accno']} - {$cust['surname']}\n\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t";
        }
        db_conn('core');
        $get_vatacc = "SELECT accname FROM accounts WHERE accid = '{$vataccid}' LIMIT 1";
        $run_vatacc = db_exec($get_vatacc) or errDie("Unable to get vat account details.");
        if (pg_numrows($run_vatacc) < 1) {
            $showvatacc = "";
        } else {
            $vatacc_id = pg_fetch_result($run_vatacc, 0, 0);
            $showvatacc = "\n\t\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t\t<td colspan='2'>VAT Account</td>\n\t\t\t\t\t\t\t\t<td colspan='3'>{$vatacc_id} <a target='_blank' href='settings/credit-note-accounts.php'>Change Account</a></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t";
        }
        //		<tr class='".bg_class()."'>
        //			<td colspan='2'>VAT Account</td>
        //			<td colspan='3'>$vatacc</td>
        //		</tr>
        $get_vats = "\n\t\t\t\t\t\t" . TBL_BR . "\n\t\t\t\t\t\t<input type='hidden' name='vataccid' value='{$vataccid}'>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='5'>VAT Detail</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{$showgetvatacc}\n\t\t\t\t\t\t{$showvatacc}\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td colspan='2'>VAT Code</td>\n\t\t\t\t\t\t\t<td colspan='3'>{$vatcode_drop}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t" . TBL_BR . "\n\t\t\t\t\t";
    } else {
        $get_vats = "\n\t\t\t\t\t\t<input type='hidden' name='vatinc' value='novat'>\n\t\t\t\t\t\t<input type='hidden' name='vatcode' value='0'>\n\t\t\t\t\t";
    }
    // Layout Details
    $details = "\n    \t\t\t\t<h3>Confirm Credit Note Details</h3>\n    \t\t\t\t{$err}\n    \t\t\t\t<form action='" . SELF . "' method='POST' name='form'>\n\t\t\t\t        <input type='hidden' name='key' value='write'>\n\t\t\t\t\t\t<input type='hidden' name='type' value='1'>\n\t\t\t\t\t\t<input type='hidden' name='date' value='{$date}'>\n\t\t\t\t\t\t<input type='hidden' name='cusnum' value='{$cusnum}'>\n\t\t\t\t        <input type='hidden' name='accid' value='{$accid}'>\n\t\t\t\t        <input type='hidden' name='accname' value='{$acc['accname']}'>\n\t\t\t\t\t\t<input type='hidden' name='entry' value='{$entry}'>\n\t\t\t\t\t\t<input type='hidden' name='ct_day' value='{$ct_day}'>\n\t\t\t\t        <input type='hidden' name='ct_month' value='{$ct_month}'>\n\t\t\t\t        <input type='hidden' name='ct_year' value='{$ct_year}'>\n\t\t\t\t        <input type='hidden' name='vatinc' value='{$vatinc}'>\n\t\t\t\t        <input type='hidden' name='ac' value=''>\n\t\t\t\t        <input type='hidden' name='amount' value='{$amount}'>\n\t\t\t\t        <input type='hidden' name='refnum' value='{$refnum}'>\n\t\t\t\t        <input type='hidden' name='difference' value='" . sprint($amount - $stock_total) . "'>\n\t\t\t\t        {$send_stock}\n\t\t\t        <table " . TMPL_tblDflts . " width='500'>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th colspan='3'>Debit</th>\n\t\t\t\t\t\t\t<th colspan='2'>Credit</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{$tran}\n\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t{$show_stock}\n    \t\t\t\t\t{$get_vats}\n    \t\t\t\t</table>\n    \t\t\t\t<table " . TMPL_tblDflts . " width='500'>\n    \t\t\t\t\t" . TBL_BR . "\n    \t\t\t\t\t<tr>\n    \t\t\t\t\t\t<th colspan='2'>Transaction Details</th>\n    \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>Transaction Details</td>\n\t\t\t\t\t\t\t<td valign='center'><textarea cols='30' rows='5' name='details'>{$details}</textarea></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t{$get_gds_note}\n\t\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t\t<td>Person Authorising</td>\n\t\t\t\t\t\t\t<td valign='center'><input type='hidden' size='20' name='author' value=" . USER_NAME . ">" . USER_NAME . "</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td><br></td></tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td><input type='submit' name='back' value='&laquo; Correction'></td>\n\t\t\t\t\t\t\t<td valign='center' align='right'><input type='submit' value='Confirm &raquo;'></td>\n\t\t\t\t\t\t</tr>\n\t\t\t        </table>\n\t\t\t        </form>";
    return $details;
}
Ejemplo n.º 2
0
function write($_POST)
{
    # Get vars
    extract($_POST);
    if (isset($back)) {
        unset($_POST["back"]);
        return slctacc($_POST);
    }
    if (isset($cback)) {
        return custconfirm($_POST);
    }
    # validate input
    require_lib("validate");
    $v = new validate();
    foreach ($amount as $key => $value) {
        if ($value > 0) {
            continue;
        }
        $v->isOk($ctaccid[$key], "num", 1, 50, "Invalid Account to be Credited.[{$key}]");
        $v->isOk($dtaccid[$key], "num", 1, 50, "Invalid Account to be Debited.[{$key}]");
        $v->isOk($refnum[$key], "num", 1, 10, "Invalid Reference number.[{$key}]");
        $v->isOk($amount[$key], "float", 1, 20, "Invalid Amount.[{$key}]");
        $v->isOk($descript[$key], "string", 0, 255, "Invalid Details.[{$key}]");
        $datea = explode("-", $date[$key]);
        if (count($datea) == 3) {
            if (!checkdate($datea[1], $datea[0], $datea[2])) {
                $v->isOk("dadasdas", "num", 1, 1, "Invalid date.");
            }
        } else {
            $v->isOk("asdasd", "num", 1, 1, "Invalid date.");
        }
        $date[$key] = $datea[2] . "-" . $datea[1] . "-" . $datea[0];
    }
    # display errors, if any
    if ($v->isError()) {
        $write = "";
        $errors = $v->getErrors();
        foreach ($errors as $e) {
            $write .= "<li class='err'>" . $e["msg"] . "</li>";
        }
        $write .= "<p><input type='button' onClick='JavaScript:history.back();' value='&laquo; Correct submission'>";
        return $write;
    }
    foreach ($amount as $key => $value) {
        if ($value <= 0) {
            continue;
        }
        // Accounts details
        $dtaccRs = get("core", "accname, topacc, accnum", "accounts", "accid", $dtaccid[$key]);
        $dtacc[$key] = pg_fetch_array($dtaccRs);
        $ctaccRs = get("core", "accname, topacc, accnum", "accounts", "accid", $ctaccid[$key]);
        $ctacc[$key] = pg_fetch_array($ctaccRs);
        $td = $date[$key];
        if (isDebtors($dtaccid[$key])) {
            # Select customer
            db_connect();
            $sql = "SELECT * FROM customers WHERE cusnum = '{$dcusnum[$key]}' AND div = '" . USER_DIV . "'";
            $custRslt = db_exec($sql) or errDie("Unable to access databse.", SELF);
            if (pg_numrows($custRslt) < 1) {
                return "<li> Invalid Customer ID.</li>";
            } else {
                $cust = pg_fetch_array($custRslt);
            }
            # Get department
            db_conn("exten");
            $sql = "SELECT * FROM departments WHERE deptid = '{$cust['deptid']}' AND div = '" . USER_DIV . "'";
            $deptRslt = db_exec($sql);
            if (pg_numrows($deptRslt) < 1) {
                return "<i class='err'>Department Not Found</i>";
            } else {
                $dept = pg_fetch_array($deptRslt);
            }
            db_connect();
            # Begin updates
            pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF);
            $sdate = date("Y-m-d");
            # record the payment on the statement
            $sql = "\n\t\t\t\t\tINSERT INTO stmnt (\n\t\t\t\t\t\tcusnum, invid, amount, date, type, st, div, allocation_date\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cust['cusnum']}', '0', '{$amount[$key]}', '{$td}', '{$descript[$key]}', 'n', '" . USER_DIV . "', '{$td}'\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'{$cust['cusnum']}', '0', '{$amount[$key]}', '{$amount[$key]}', '{$td}', \n\t\t\t\t\t\t'{$descript[$key]}', 'n', '" . USER_DIV . "'\n\t\t\t\t\t)";
            $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
            # update the customer (make balance more)
            $sql = "UPDATE customers SET balance = (balance + '{$amount[$key]}') WHERE cusnum = '{$cust['cusnum']}' AND div = '" . USER_DIV . "'";
            $rslt = db_exec($sql) or errDie("Unable to update customer in Cubit.", SELF);
            # Commit updates
            pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
            # Make ledge record
            custledger($cust['cusnum'], $ctaccid[$key], $td, $refnum[$key], $descript[$key], $amount[$key], "d");
            custDT($amount[$key], $cust['cusnum'], $td);
            $dtaccid[$key] = $dept['debtacc'];
            $descript[$key] = $descript[$key] . " - Customer {$cust['surname']}";
        } elseif (isCreditors($dtaccid[$key])) {
            # Select supplier
            db_connect();
            $sql = "SELECT * FROM suppliers WHERE supid = '{$dsupid[$key]}' AND div = '" . USER_DIV . "'";
            $suppRslt = db_exec($sql) or errDie("Unable to access databse.", SELF);
            if (pg_numrows($suppRslt) < 1) {
                return "<li> Invalid Supplier ID.</li>";
            } else {
                $supp = pg_fetch_array($suppRslt);
            }
            # Get department
            db_conn("exten");
            $sql = "SELECT * FROM departments WHERE deptid = '{$supp['deptid']}' AND div = '" . USER_DIV . "'";
            $deptRslt = db_exec($sql);
            if (pg_numrows($deptRslt) < 1) {
                return "<i class='err'>Department Not Found</i>";
            } else {
                $dept = pg_fetch_array($deptRslt);
            }
            db_connect();
            # Begin updates
            pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF);
            $edate = date("Y-m-d");
            # record the payment on the statement
            $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'{$supp['supid']}', '{$td}', '0', '{$ctaccid[$key]}', '{$descript[$key]}', '-{$amount[$key]}', '" . USER_DIV . "'\n\t\t\t\t\t)";
            $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
            # update the supplier (make balance more)
            $sql = "UPDATE suppliers SET balance = (balance - '{$amount[$key]}') WHERE supid = '{$supp['supid']}' AND div = '" . USER_DIV . "'";
            $rslt = db_exec($sql) or errDie("Unable to update supplier in Cubit.", SELF);
            # Commit updates
            pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
            # Ledger Records
            suppledger($supp['supid'], $ctaccid[$key], $td, $refnum[$key], $descript[$key], $amount[$key], 'd');
            suppDT($amount[$key], $supp['supid'], $td);
            $dtaccid[$key] = $dept['credacc'];
            $descript[$key] = $descript[$key] . " - Supplier {$supp['supname']}";
        } elseif (isStock($dtaccid[$key])) {
            # Select Stock
            db_connect();
            $sql = "SELECT * FROM stock WHERE stkid = '{$dstkids[$key]}' 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);
            }
            # Get warehouse name
            db_conn("exten");
            $sql = "SELECT * FROM warehouses WHERE whid = '{$stk['whid']}' AND div = '" . USER_DIV . "'";
            $whRslt = db_exec($sql);
            $wh = pg_fetch_array($whRslt);
            # Update Stock
            db_connect();
            $sql = "UPDATE stock SET csamt = (csamt + '{$amount[$key]}') WHERE stkid = '{$stk['stkid']}' AND div = '" . USER_DIV . "'";
            $rslt = db_exec($sql) or errDie("Unable to insert stock to Cubit.", SELF);
            $sdate = date("Y-m-d");
            # stkid, stkcod, stkdes, trantype, edate, qty, csamt, details
            stockrec($stk['stkid'], $stk['stkcod'], $stk['stkdes'], 'dt', $td, 0, $amount[$key], "Stock Debit Transaction");
            db_connect();
            $dtaccid[$key] = $wh['stkacc'];
        }
        if (isDebtors($ctaccid[$key])) {
            # Select customer
            db_connect();
            $sql = "SELECT * FROM customers WHERE cusnum = '{$ccusnum[$key]}' AND div = '" . USER_DIV . "'";
            $custRslt = db_exec($sql) or errDie("Unable to access databse.", SELF);
            if (pg_numrows($custRslt) < 1) {
                return "<li> Invalid Customer ID.</li>";
            } else {
                $cust = pg_fetch_array($custRslt);
            }
            # Get department
            db_conn("exten");
            $sql = "SELECT * FROM departments WHERE deptid = '{$cust['deptid']}' AND div = '" . USER_DIV . "'";
            $deptRslt = db_exec($sql);
            if (pg_numrows($deptRslt) < 1) {
                return "<i class='err'>Department Not Found</i>";
            } else {
                $dept = pg_fetch_array($deptRslt);
            }
            db_connect();
            # Begin updates
            pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF);
            $sdate = date("Y-m-d");
            # record the payment on the statement
            $sql = "\n\t\t\t\t\tINSERT INTO stmnt (\n\t\t\t\t\t\tcusnum, invid, amount, date, type, st, div, allocation_date\n\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t'{$cust['cusnum']}', '0', '-{$amount[$key]}', '{$td}', '{$descript[$key]}', 'n', '" . USER_DIV . "', '{$td}'\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'{$cust['cusnum']}', '0', '-{$amount[$key]}', '-{$amount[$key]}', '{$td}', \n\t\t\t\t\t\t'{$descript[$key]}', 'n', '" . USER_DIV . "'\n\t\t\t\t\t)";
            $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
            # update the customer (make balance more)
            $sql = "UPDATE customers SET balance = (balance - '{$amount[$key]}') WHERE cusnum = '{$cust['cusnum']}' AND div = '" . USER_DIV . "'";
            $rslt = db_exec($sql) or errDie("Unable to update customer in Cubit.", SELF);
            # Commit updates
            pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
            # Make ledge record
            custledger($cust['cusnum'], $dtaccid[$key], $sdate, $refnum[$key], $descript[$key], $amount[$key], "c");
            custCT($amount[$key], $cust['cusnum'], $td);
            $ctaccid[$key] = $dept['debtacc'];
            $descript[$key] = $descript[$key] . " - Customer {$cust['surname']}";
        } elseif (isCreditors($ctaccid[$key])) {
            # Select supplier
            db_connect();
            $sql = "SELECT * FROM suppliers WHERE supid = '{$csupid[$key]}' AND div = '" . USER_DIV . "'";
            $suppRslt = db_exec($sql) or errDie("Unable to access databse.", SELF);
            if (pg_numrows($suppRslt) < 1) {
                return "<li> Invalid Supplier ID.</li>";
            } else {
                $supp = pg_fetch_array($suppRslt);
            }
            # Get department
            db_conn("exten");
            $sql = "SELECT * FROM departments WHERE deptid = '{$supp['deptid']}' AND div = '" . USER_DIV . "'";
            $deptRslt = db_exec($sql);
            if (pg_numrows($deptRslt) < 1) {
                return "<i class='err'>Department Not Found</i>";
            } else {
                $dept = pg_fetch_array($deptRslt);
            }
            db_connect();
            # Begin updates
            pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF);
            $edate = date("Y-m-d");
            # record the payment on the statement
            $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'{$supp['supid']}', '{$td}', '0', '{$dtaccid[$key]}', '{$descript[$key]}', '{$amount[$key]}', '" . USER_DIV . "'\n\t\t\t\t\t)";
            $stmntRslt = db_exec($sql) or errDie("Unable to Insert statement record in Cubit.", SELF);
            # update the supplier (make balance more)
            $sql = "UPDATE suppliers SET balance = (balance + '{$amount[$key]}') WHERE supid = '{$supp['supid']}' AND div = '" . USER_DIV . "'";
            $rslt = db_exec($sql) or errDie("Unable to update supplier in Cubit.", SELF);
            # Commit updates
            pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF);
            # Ledger Records
            suppledger($supp['supid'], $dtaccid[$key], $edate, $refnum[$key], $descript[$key], $amount[$key], 'c');
            suppCT($amount[$key], $supp['supid'], $td);
            $ctaccid[$key] = $dept['credacc'];
            $descript[$key] = $descript[$key] . " - Supplier {$supp['supname']}";
        } elseif (isStock($ctaccid[$key])) {
            # Select Stock
            db_connect();
            $sql = "SELECT * FROM stock WHERE stkid = '{$cstkids[$key]}' 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);
            }
            # Get warehouse name
            db_conn("exten");
            $sql = "SELECT * FROM warehouses WHERE whid = '{$stk['whid']}' AND div = '" . USER_DIV . "'";
            $whRslt = db_exec($sql);
            $wh = pg_fetch_array($whRslt);
            # Update Stock
            db_connect();
            $sql = "UPDATE stock SET csamt = (csamt + '{$amount[$key]}') WHERE stkid = '{$stk['stkid']}' AND div = '" . USER_DIV . "'";
            $rslt = db_exec($sql) or errDie("Unable to insert stock to Cubit.", SELF);
            $sdate = date("Y-m-d");
            # stkid, stkcod, stkdes, trantype, edate, qty, csamt, details
            stockrec($stk['stkid'], $stk['stkcod'], $stk['stkdes'], 'ct', $td, 0, $amount[$key], "Stock Credit Transaction");
            db_connect();
            $ctaccid[$key] = $wh['stkacc'];
        }
        # write transaction
        writetrans($dtaccid[$key], $ctaccid[$key], $date[$key], $refnum[$key], $amount[$key], $descript[$key]);
    }
    // Layout
    $write = "\n\t\t<center>\n\t\t<h3>Journal transactions have been recorded</h3>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th>Date</th>\n\t\t\t\t<th>Ref num</th>\n\t\t\t\t<th>Debit</th>\n\t\t\t\t<th>Credit</th>\n\t\t\t\t<th>Amount</th>\n\t\t\t\t<th>Description</th>\n\t\t\t</tr>";
    foreach ($amount as $key => $value) {
        if ($value <= 0) {
            continue;
        }
        if (isDebtors($dtaccid[$key])) {
            $dcusRs = get("cubit", "*", "customers", "cusnum", $dcusnum[$key]);
            $dcus = pg_fetch_array($dcusRs);
            $dt = "<td valign='center'>{$dcus['accno']} - {$dcus['cusname']} {$dcus['surname']}</td>";
        } elseif (isCreditors($dtaccid[$key])) {
            $dsupRs = get("cubit", "*", "suppliers", "supid", $dsupid[$key]);
            $dsup = pg_fetch_array($dsupRs);
            $dt = "<td valign='center'>{$dsup['supno']} - {$dsup['supname']}</td>";
        } elseif (isStock($dtaccid[$key])) {
            $dstkRs = get("cubit", "*", "stock", "stkid", $dstkids[$key]);
            $dstk = pg_fetch_array($dstkRs);
            $dt = "<td valign='center'>{$dstk['stkcod']} - {$dstk['stkdes']}</td>";
        } else {
            $dt = "<td valign='center'>" . $dtacc[$key]['accname'] . "</td>";
        }
        if (isDebtors($ctaccid[$key])) {
            $ccusRs = get("cubit", "*", "customers", "cusnum", $ccusnum[$key]);
            $ccus = pg_fetch_array($ccusRs);
            $ct = "<td valign='center'>{$ccus['accno']} - {$ccus['cusname']} {$ccus['surname']}</td>";
        } elseif (isCreditors($ctaccid[$key])) {
            $csupRs = get("cubit", "*", "suppliers", "supid", $csupid[$key]);
            $csup = pg_fetch_array($csupRs);
            $ct = "<td valign='center'>{$csup['supno']} - {$csup['supname']}</td>";
        } elseif (isStock($ctaccid[$key])) {
            $cstkRs = get("cubit", "*", "stock", "stkid", $cstkids[$key]);
            $cstk = pg_fetch_array($cstkRs);
            $ct = "<td valign='center'>{$cstk['stkcod']} - {$cstk['stkdes']}</td>";
        } else {
            $ct = "<td valign='center'>" . $ctacc[$key]['accname'] . "</td>";
        }
        $write .= "\n\t\t\t\t<tr bgcolor=" . bgcolorg() . ">\n\t\t\t\t\t<td>{$date[$key]}</td>\n\t\t\t\t\t<td>{$refnum[$key]}</td>\n\t\t\t\t\t{$dt}\n\t\t\t\t\t{$ct}\n\t\t\t\t\t<td>" . CUR . " {$amount[$key]}</td>\n\t\t\t\t\t<td>{$descript[$key]}</td>\n\t\t\t\t</tr>";
    }
    $write .= "\n\t\t</table>\n\t\t<p>\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='datacell'>\n\t\t\t\t<td align='center'><a href='../reporting/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='multi-trans.php'>Journal Transactions</td>\n\t\t\t</tr>\n\t\t\t<script>document.write(getQuicklinkSpecial());</script>\n\t\t</table>";
    return $write;
}
/**
 * @ignore
 */
function Control($dtaccid, $ctaccid, $refnum, $day, $mon, $year)
{
    # Check if its not customer control
    if (isDebtors($dtaccid)) {
        return debtors("dt", $ctaccid, $refnum, $day, $mon, $year);
    }
    if (isDebtors($ctaccid)) {
        return debtors("ct", $dtaccid, $refnum, $day, $mon, $year);
    }
    if (isStock($ctaccid)) {
        return stock("ct", $dtaccid, $refnum, $day, $mon, $year);
    }
    # Check if its not creditors control
    if (isCreditors($dtaccid)) {
        return creditors("dt", $ctaccid, $refnum, $day, $mon, $year);
    }
    if (isCreditors($ctaccid)) {
        return creditors("ct", $dtaccid, $refnum, $day, $mon, $year);
    }
    if (isStock($dtaccid)) {
        return stock("dt", $ctaccid, $refnum, $day, $mon, $year);
    }
}