function write($_POST) { extract($_POST); $deptid += 0; db_conn('cubit'); if (isset($printsales)) { $Sl = "SELECT * FROM settings WHERE constant='PSALES'"; $Ri = db_exec($Sl) or errDie("Unable to get settings."); if (pg_num_rows($Ri) < 1) { $Sl = "INSERT INTO settings (constant,value,div) VALUES ('PSALES','Yes','" . USER_DIV . "')"; $Ri = db_exec($Sl); } else { $Sl = "UPDATE settings SET value='Yes' WHERE constant='PSALES' AND div='" . USER_DIV . "'"; $Ri = db_exec($Sl); } } else { $Sl = "UPDATE settings SET value='No' WHERE constant='PSALES' AND div='" . USER_DIV . "'"; $Ri = db_exec($Sl); } //$it+=0; # validate input require_lib("validate"); $v = new validate(); if (isset($client)) { $v->isOk($client, "string", 0, 20, "Invalid Customer."); } else { $client = ""; } if (isset($vatnum)) { $v->isOk($vatnum, "string", 0, 30, "Invalid VAT Number."); } else { $vatnum = ""; } if (isset($branch_addr)) { $v->isOk($branch_addr, "num", 1, 20, "Invalid site address."); } else { $branch_addr = 0; } $v->isOk($invid, "num", 1, 20, "Invalid Invoice Number."); $v->isOk($telno, "string", 0, 20, "Invalid Customer Telephone Number."); $v->isOk($cordno, "string", 0, 20, "Invalid Customer Order Number."); //$v->isOk ($comm, "string", 0, 255, "Invalid Comments."); $v->isOk($ordno, "string", 0, 20, "Invalid sales order number."); // $v->isOk ($chrgvat, "string", 1, 4, "Invalid charge vat option."); $v->isOk($salespid, "string", 1, 255, "Invalid sales person."); $v->isOk($pinv_day, "num", 1, 2, "Invalid Invoice Date day."); $v->isOk($pinv_month, "num", 1, 2, "Invalid Invoice Date month."); $v->isOk($pinv_year, "num", 1, 5, "Invalid Invoice Date year."); $odate = $pinv_year . "-" . $pinv_month . "-" . $pinv_day; if (!checkdate($pinv_month, $pinv_day, $pinv_year)) { $v->isOk($odate, "num", 1, 1, "Invalid Invoice Date."); } $v->isOk($traddisc, "float", 0, 20, "Invalid Trade Discount."); if ($traddisc > 100) { $v->isOk($traddisc, "float", 0, 0, "Error : Trade Discount cannot be more than 100 %."); } $v->isOk($delchrg, "float", 0, 20, "Invalid Delivery Charge."); $v->isOk($subtot, "float", 0, 20, "Invalid subtotal."); $odate = $pinv_year . "-" . $pinv_month . "-" . $pinv_day; if (!checkdate($pinv_month, $pinv_day, $pinv_year)) { $v->isOk($odate, "num", 1, 1, "Invalid Invoice Date."); } $v->isOk($collection, "string", 0, 40, "Invalid collection method."); # used to generate errors $error = "asa@"; # check if duplicate serial number selected, remove blanks if (isset($sernos)) { if (!ext_isUnique(ext_remBlnk($sernos))) { $v->isOk($error, "num", 0, 0, "Error : Serial Numbers must be unique per line item."); } } # check is serial no was selected if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { # check if serial is selected if (ext_isSerial("stock", "stkid", $stkid) && !isset($sernos[$keys])) { $v->isOk($error, "num", 0, 0, "Error : Missing serial number for product number : <b>" . ($keys + 1) . "</b>"); } elseif (ext_isSerial("stock", "stkid", $stkid) && !(strlen($sernos[$keys]) > 0)) { $v->isOk($error, "num", 0, 0, "Error : Missing serial number for product number : <b>" . ($keys + 1) . "</b>"); } } } # check quantities if (isset($qtys)) { foreach ($qtys as $keys => $qty) { $discp[$keys] += 0; $disc[$keys] += 0; $v->isOk($qty, "num", 1, 10, "Invalid Quantity for product number : <b>" . ($keys + 1) . "</b>"); if ($qty < 1) { $v->isOk($qty, "num", 0, 0, "Error : Item Quantity must be at least one. Product number : <b>" . ($keys + 1) . "</b>"); } } } # check whids if (isset($whids)) { foreach ($whids as $keys => $whid) { $v->isOk($whid, "num", 1, 10, "Invalid Store number, please enter all details."); } } $cusnum += 0; # check stkids if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { $v->isOk($stkid, "num", 1, 10, "Invalid Stock number, please enter all details."); } } # check amt if (isset($amt)) { foreach ($amt as $keys => $amount) { $v->isOk($amount, "float", 1, 20, "Invalid Amount, please enter all details."); } } if (isset($des)) { $des = remval($des); } if (isset($asset_id) && is_numeric($asset_id)) { foreach ($asset_id as $value) { $sql = "SELECT id, des FROM cubit.assets WHERE id='{$asset_id}'"; $asset_rslt = db_exec($sql) or errDie("Unable to retrieve asset."); $asset_data = pg_fetch_array($asset_rslt); if (isHired($asset_id)) { $v->addError(0, "Asset " . getSerial($asset_id) . " {$asset_data['des']} has already been hired out."); } } } # display errors, if any $err = ""; if ($v->isError()) { $errors = $v->getErrors(); foreach ($errors as $e) { $err .= "<li class='err'>{$e['msg']}<li>"; } return details($_POST, $err); } if (strlen($vatnum) < 1) { $vatnum = ""; } $_POST['client'] = $client; $_POST['vatnum'] = $vatnum; $_POST['telno'] = $telno; $_POST['cordno'] = $cordno; # Get invoice info db_connect(); $sql = "SELECT * FROM hire.hire_invoices WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $invRslt = db_exec($sql) or errDie("Unable to get invoice information"); // if (pg_numrows ($invRslt) < 1) { // return "<li>- Invoice Not Found[1]</li>"; // } $inv = pg_fetch_array($invRslt); $inv['traddisc'] = $traddisc; $inv['chrgvat'] = 0; # check if invoice has been printed // if($inv['printed'] == "y"){ // $error = "<li class=err> Error : Invoice number <b>$invid</b> has already been printed."; // $error .= "<p><input type=button onClick='JavaScript:history.back();' value='« Correct submission'>"; // return $error; // } # get department db_conn("exten"); $sql = "SELECT * FROM departments WHERE deptid = '{$deptid}' AND div = '" . USER_DIV . "'"; $deptRslt = db_exec($sql); if (pg_numrows($deptRslt) < 1) { $dept['deptname'] = "<i class='err'>Not Found[3]</i>"; } else { $dept = pg_fetch_array($deptRslt); } # fix those nasty zeros $traddisc += 0; $delchrg += 0; $vatamount = 0; $showvat = TRUE; # insert invoice to DB db_connect(); if (isset($upBtn) || isset($hirenewBtn)) { $update_ret = update($_POST); } else { $update_ret = false; } # begin updating pglib_transaction("BEGIN"); /* -- Start remove old items -- */ # get selected stock in this invoice $sql = "SELECT * FROM hire.hire_invitems WHERE invid = '{$invid}'"; $stktRslt = db_exec($sql); $subtot = 0; while ($stkt = pg_fetch_array($stktRslt)) { # update stock(alloc + qty) //$sql = "UPDATE stock SET alloc = (alloc - '$stkt[qty]') WHERE stkid = '$stkt[stkid]' AND div = '".USER_DIV."'"; //$rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.",SELF); //if(strlen($stkt['serno']) > 0) //ext_unresvSer($stkt['serno'], $stkt['stkid']); $subtot += $stkt["amt"]; } # remove old items /* --- ----------- Clac --------------------- */ ##----------------------NEW---------------------- $VATP = TAX_VAT; $subtotal = sprint($subtot + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); $VAT = $subtotal / 100 * 14; $SUBTOT = $subtotal; $TOTAL = $subtotal + $VAT; $delexvat = sprint($delchrg); $Sl = "SELECT * FROM posround"; $Ri = db_exec($Sl); $data = pg_fetch_array($Ri); if ($data['setting'] == "5cent") { if (sprint(floor(sprint($TOTAL / 0.05))) != sprint($TOTAL / 0.05)) { $otot = $TOTAL; $nTOTAL = sprint(sprint(floor($TOTAL / 0.05)) * 0.05); $rounding = $otot - $nTOTAL; } else { $rounding = 0; } } else { $rounding = 0; } //print sprint(floor($TOTAL/0.05)); #get accno if invoice is on credit if ($cusnum != "0") { $get_acc = "SELECT * FROM customers WHERE cusnum = '{$cusnum}' LIMIT 1"; $run_acc = db_exec($get_acc) or errDie("Unable to get customer information"); if (pg_numrows($run_acc) < 1) { $accno = ""; } else { $arr = pg_fetch_array($run_acc); $cusacc = $arr['accno']; $cusname = "{$arr['cusname']} {$arr['surname']}"; } } else { $cusacc = ""; $cusname = ""; } # insert invoice to DB $sql = "\r\n\t\t\tUPDATE hire.hire_invoices \r\n\t\t\tSET cusnum='{$cusnum}', cusname='{$cusname}', rounding='{$rounding}', deptid='{$deptid}', deptname='{$dept['deptname']}', \r\n\t\t\t\tcordno='{$cordno}', ordno='{$ordno}', salespn='{$salespid}', odate='{$odate}', traddisc='{$traddisc}', \r\n\t\t\t\tdelchrg='{$delchrg}', subtot='{$SUBTOT}', vat='{$VAT}',balance='{$TOTAL}', total='{$TOTAL}', discount='{$traddiscmt}', \r\n\t\t\t\tdelivery='{$delexvat}', vatnum='{$vatnum}', cusacc='{$cusacc}', telno='{$telno}', deposit_type='{$deposit_type}', \r\n\t\t\t\tdeposit_amt='{$deposit_amt}', collection='{$collection}', custom_txt='{$custom_txt}', branch_addr='{$branch_addr}' \r\n\t\t\tWHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF); # remove old data $sql = "DELETE FROM pinv_data WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice data in Cubit.", SELF); # put in new data $sql = "INSERT INTO pinv_data(invid, dept, customer, div) VALUES('{$invid}', '{$dept['deptname']}', '{$client}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice data to Cubit.", SELF); # commit updating pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); return details($_POST, $update_ret); if (strlen($bar) > 0) { $Sl = "SELECT * FROM possets WHERE div = '" . USER_DIV . "'"; $Rs = db_exec($Sl) or errDie("Unable to add supplier to the system.", SELF); if (pg_numrows($Rs) < 1) { return details($_POST, "Please go set the point of sale settings under the stock settings"); } $Dets = pg_fetch_array($Rs); if ($Dets['opt'] == "No") { switch (substr($bar, strlen($bar) - 1, 1)) { case "0": $tab = "ss0"; break; case "1": $tab = "ss1"; break; case "2": $tab = "ss2"; break; case "3": $tab = "ss3"; break; case "4": $tab = "ss4"; break; case "5": $tab = "ss5"; break; case "6": $tab = "ss6"; break; case "7": $tab = "ss7"; break; case "8": $tab = "ss8"; break; case "9": $tab = "ss9"; break; default: return details($_POST, "The code you selected is invalid"); } db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = barext_dbget($tab, 'code', $bar, 'stock'); if (!($stid > 0)) { return details($_POST, "<li class='err'><b>ERROR</b>: The bar code you selected is not in the system or is not available.</li>"); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "\r\n\t\t\t\tINSERT INTO hire.hire_invitems (\r\n\t\t\t\t\tinvid, whid, stkid, qty, amt, disc, discp, ss, serno, \r\n\t\t\t\t\tdiv\r\n\t\t\t\t) VALUES (\r\n\t\t\t\t\t'{$invid}', '{$s['whid']}', '{$stid}', '1', '{$s['selamt']}', '{$s['selamt']}', '0', '0', '{$bar}', '{$bar}', \r\n\t\t\t\t\t'" . USER_DIV . "'\r\n\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); $Sl = "UPDATE " . $tab . " SET active = 'no' WHERE code = '{$bar}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $stid = ext_dbget('stock', 'bar', $bar, 'stkid'); if (!($stid > 0)) { return details($_POST, "<li class='err'><b>ERROR</b>: The bar code you selected is not in the system or is not available.</li>"); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO hire.hire_invitems(invid, whid, stkid, qty, amt, disc, discp,ss, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1', '{$s['selamt']}','0','0','{$bar}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } } /* --- Start button Listeners --- */ if (isset($doneBtn)) { # check if stock was selected(yes = put done button) db_connect(); $sql = "SELECT stkid FROM hire.hire_invitems WHERE invid = '{$inv['invid']}' AND div = '" . USER_DIV . "'"; $crslt = db_exec($sql); if (pg_numrows($crslt) < 1) { $error = "<li class='err'> Error : Invoice number has no items.</li>"; return details($_POST, $error); } $TOTAL = sprint($TOTAL - $rounding); if ($pcash + $pcheque + $pcc + $pcredit < $TOTAL) { return details($_POST, "<li class='err'>The total of all the payments is less than the invoice total</li>"); } $change = sprint(sprint($pcash + $pcheque + $pcc + $pcredit) - sprint($TOTAL)); $pcash = sprint($pcash - $change); if ($pcash < 0) { $pcash = 0; } if (sprint($pcash + $pcheque + $pcc + $pcredit) != sprint($TOTAL)) { return details($_POST, "<li class='err'>The total of all the payments is not equal to the invoice total.<br>\r\n\t\t\t(You can only overpay with cash)</li>"); } // make plant available $sql = "UPDATE hire.hire_invoices SET done = 'y' WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice status in Cubit.", SELF); # print the invoice $OUTPUT = "<script>printer('pos-invoice-print.php?invid={$invid}');move('pos-invoice-new.php');</script>"; require "template.php"; } elseif (isset($cancel)) { // Final Laytout $write = "\r\n\t\t\t<table border='0' cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "'>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th>New Point of Sale Invoice Saved</th>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t<td>Invoice for <b>{$client}</b> has been saved.</td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t<p>\r\n\t\t\t<table border=0 cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "'>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th>Quick Links</th>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t<td><a href='pos-invoice-new.php'>New Point of Sale Invoice</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr class='" . bg_class() . "'>\r\n\t\t\t\t\t<td><a href='pos-invoice-list.php'>View Point of Sale Invoices</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<script>document.write(getQuicklinkSpecial());</script>\r\n\t\t\t</table>"; return $write; } else { if (isset($wtd)) { $_POST['wtd'] = $wtd; } return details($_POST); } }
function write($_POST) { # Get vars extract($_POST); if (!isset($cusnum)) { return details($_POST, "<li class='err'>Please select a customer.</li>"); } # validate input require_lib("validate"); $v = new validate(); if (isset($cusnum)) { $v->isOk($cusnum, "num", 1, 20, "Invalid Customer, Please select a customer."); } $v->isOk($invid, "num", 1, 20, "Invalid Invoice Number."); if (isset($cordno)) { $v->isOk($cordno, "string", 0, 20, "Invalid Customer Order Number."); } if (!isset($ria)) { $ria = ""; } $v->isOk($ria, "string", 0, 20, "Invalid stock code(fist letters)."); $v->isOk($comm, "string", 0, 255, "Invalid Comments."); $v->isOk($docref, "string", 0, 20, "Invalid Document Reference No."); $v->isOk($ordno, "string", 0, 20, "Invalid sales order number."); $v->isOk($chrgvat, "string", 1, 4, "Invalid charge vat option."); $v->isOk($terms, "num", 1, 20, "Invalid terms."); $v->isOk($salespn, "string", 1, 255, "Invalid sales person."); $v->isOk($rinv_day, "num", 1, 2, "Invalid Invoice Date day."); $v->isOk($rinv_month, "num", 1, 2, "Invalid Invoice Date month."); $v->isOk($rinv_year, "num", 1, 5, "Invalid Invoice Date year."); $odate = $rinv_year . "-" . $rinv_month . "-" . $rinv_day; if (!checkdate($rinv_month, $rinv_day, $rinv_year)) { $v->isOk($odate, "num", 1, 1, "Invalid Invoice Date."); } $v->isOk($traddisc, "float", 0, 20, "Invalid Trade Discount."); if ($traddisc > 100) { $v->isOk($traddisc, "float", 0, 0, "Error : Trade Discount cannot be more than 100 %."); } $v->isOk($delchrg, "float", 0, 20, "Invalid Delivery Charge."); $v->isOk($SUBTOT, "float", 0, 20, "Invalid Delivery Charge."); # used to generate errors $error = "asa@"; # check if duplicate serial number selected, remove blanks if (isset($sernos)) { if (!ext_isUnique(ext_remBlnk($sernos))) { $v->isOk($error, "num", 0, 0, "Error : Serial Numbers must be unique per line item."); } } # check quantities if (isset($qtys)) { foreach ($qtys as $keys => $qty) { $discp[$keys] += 0; $disc[$keys] += 0; $v->isOk($qty, "float", 1, 15, "Invalid Quantity for product number : <b>" . ($keys + 1) . "</b>"); $v->isOk($disc[$keys], "float", 0, 20, "Invalid Discount for product number : <b>" . ($keys + 1) . "</b>."); if ($disc[$keys] > $unitcost[$keys]) { $v->isOk($disc[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than the unitcost."); } $v->isOk($discp[$keys], "float", 0, 20, "Invalid Discount Percentage for product number : <b>" . ($keys + 1) . "</b>."); if ($discp[$keys] > 100) { $v->isOk($discp[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than 100 %."); } $v->isOk($unitcost[$keys], "float", 1, 20, "Invalid Unit Price for product number : <b>" . ($keys + 1) . "</b>."); if ($qty <= 0) { $v->isOk($qty, "num", 0, 0, "Error : Item Quantity must be more than zero. Product number : <b>" . ($keys + 1) . "</b>"); } } } # check whids if (isset($whids)) { foreach ($whids as $keys => $whid) { $v->isOk($whid, "num", 1, 10, "Invalid Store number, please enter all details."); } } # check stkids if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { $v->isOk($stkid, "num", 1, 10, "Invalid Stock number, please enter all details."); } } # check amt if (isset($amt)) { foreach ($amt as $keys => $amount) { $v->isOk($amount, "float", 1, 20, "Invalid Amount, please enter all details."); } } # display errors, if any $err = ""; if ($v->isError()) { $errors = $v->getErrors(); foreach ($errors as $e) { $err .= "<li class='err'>" . $e["msg"] . "</li>"; } return details($_POST, $err); } # Get invoice info db_connect(); $sql = "SELECT * FROM rec_invoices WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $invRslt = db_exec($sql) or errDie("Unable to get invoice information"); if (pg_numrows($invRslt) < 1) { return "<li>- Invoice Not Found</li>"; } $inv = pg_fetch_array($invRslt); $inv['chrgvat'] = $chrgvat; # Get selected customer info db_connect(); $sql = "SELECT * FROM customers WHERE cusnum = '{$cusnum}' AND div = '" . USER_DIV . "'"; $custRslt = db_exec($sql) or errDie("Unable to get customer information"); if (pg_numrows($custRslt) < 1) { $sql = "SELECT * FROM inv_data WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $custRslt = db_exec($sql) or errDie("Unable to get customer information data"); $cust = pg_fetch_array($custRslt); $cust['cusname'] = $cust['customer']; $cust['surname'] = ""; $cust['addr1'] = ""; } else { $cust = pg_fetch_array($custRslt); $inv['deptid'] = $cust['deptid']; # If customer was just selected, get the following if ($inv['cusnum'] == 0) { $traddisc = $cust['traddisc']; $terms = $cust['credterm']; } } # get department db_conn("exten"); $sql = "SELECT * FROM departments WHERE deptid = '{$inv['deptid']}' AND div = '" . USER_DIV . "'"; $deptRslt = db_exec($sql); if (pg_numrows($deptRslt) < 1) { $dept['deptname'] = "<i class='err'>Not Found</i>"; } else { $dept = pg_fetch_array($deptRslt); } # fix those nasty zeros $traddisc += 0; $delchrg += 0; $vatamount = 0; $showvat = TRUE; # insert invoice to DB db_connect(); # begin updating pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); /* -- Start remove old items -- */ # get selected stock in this invoice $sql = "SELECT * FROM recinv_items WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $stktRslt = db_exec($sql); # remove old items $sql = "DELETE FROM recinv_items WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice items in Cubit.", SELF); /* -- End remove old items -- */ $taxex = 0; if (isset($qtys)) { foreach ($qtys as $keys => $value) { if (isset($remprod) && in_array($keys, $remprod)) { } elseif (isset($accounts[$keys]) && $accounts[$keys] != 0) { $accounts[$keys] += 0; # Get selamt from selected stock db_conn('core'); $Sl = "SELECT * FROM accounts WHERE accid='{$accounts[$keys]}'"; $Ri = db_exec($Sl) or errDie("Unable to get account data."); $ad = pg_fetch_array($Ri); # Calculate amount $amt[$keys] = $qtys[$keys] * $unitcost[$keys]; db_conn('cubit'); $Sl = "SELECT * FROM vatcodes WHERE id='{$vatcodes[$keys]}'"; $Ri = db_exec($Sl); if (pg_num_rows($Ri) < 1) { return details($_POST, "<li class='err'>Please select the vatcode for all your items.</li>"); } $vd = pg_fetch_array($Ri); if ($vd['zero'] == "Yes") { $excluding = "y"; } else { $excluding = ""; } if (TAX_VAT != $vd['vat_amount'] and $vd['vat_amount'] != "0.00") { $showvat = FALSE; } $vr = vatcalc($amt[$keys], $inv['chrgvat'], $excluding, $inv['traddisc'], $vd['vat_amount']); $vrs = explode("|", $vr); $ivat = $vrs[0]; $iamount = $vrs[1]; $vatamount += $ivat; # Check Tax Excempt if ($vd['zero'] == "Yes") { $taxex += $amt[$keys]; $exvat = "y"; } else { $exvat = "n"; } //$newvat+=vatcalc($amt[$keys],$chrgvat,$exvat,$traddisc); $vatcodes[$keys] += 0; $accounts[$keys] += 0; $descriptions[$keys] = remval($descriptions[$keys]); $wtd = $whids[$keys]; # insert invoice items $sql = "\n\t\t\t\t\t\tINSERT INTO recinv_items (\n\t\t\t\t\t\t\tinvid, whid, stkid, qty, unitcost, \n\t\t\t\t\t\t\tamt, disc, discp, div, vatcode, \n\t\t\t\t\t\t\tdescription, account\n\t\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t\t'{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}', \n\t\t\t\t\t\t\t'{$amt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', '" . USER_DIV . "', '{$vatcodes[$keys]}', \n\t\t\t\t\t\t\t'{$descriptions[$keys]}', '{$accounts[$keys]}'\n\t\t\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); } else { # Get selamt from selected stock $sql = "SELECT * FROM stock WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $stkRslt = db_exec($sql); $stk = pg_fetch_array($stkRslt); # Calculate the Discount discount if ($disc[$keys] < 1) { if ($discp[$keys] > 0) { $disc[$keys] = $discp[$keys] / 100 * $unitcost[$keys]; } } else { $discp[$keys] = $disc[$keys] * 100 / $unitcost[$keys]; } # Calculate amount $amt[$keys] = $qtys[$keys] * ($unitcost[$keys] - $disc[$keys]); $Sl = "SELECT * FROM vatcodes WHERE id='{$vatcodes[$keys]}'"; $Ri = db_exec($Sl); if (pg_num_rows($Ri) < 1) { return details($_POST, "<li class='err'>Please select the vatcode for all your items.</li>"); } $vd = pg_fetch_array($Ri); if ($vd['zero'] == "Yes") { $excluding = "y"; } else { $excluding = ""; } if (TAX_VAT != $vd['vat_amount'] and $vd['vat_amount'] != "0.00") { $showvat = FALSE; } $vr = vatcalc($amt[$keys], $inv['chrgvat'], $excluding, $inv['traddisc'], $vd['vat_amount']); $vrs = explode("|", $vr); $ivat = $vrs[0]; $iamount = $vrs[1]; $vatamount += $ivat; # Check Tax Excempt if ($stk['exvat'] == 'yes' || $vd['zero'] == "Yes") { $taxex += $amt[$keys]; $exvat = "y"; } else { $exvat = "n"; } $wtd = $whids[$keys]; if (!isset($sernos[$keys])) { $sernos[$keys] = ""; } # insert invoice items $sql = "\n\t\t\t\t\t\tINSERT INTO recinv_items (\n\t\t\t\t\t\t\tinvid, whid, stkid, qty, unitcost, \n\t\t\t\t\t\t\tamt, disc, discp, serno, div, \n\t\t\t\t\t\t\tvatcode\n\t\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t\t'{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}', \n\t\t\t\t\t\t\t'{$amt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', '{$sernos[$keys]}', '" . USER_DIV . "', \n\t\t\t\t\t\t\t'{$vatcodes[$keys]}'\n\t\t\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); } # everything is set place done button $_POST["done"] = " | <input name='doneBtn' type='submit' value='Done'>"; } } else { $_POST["done"] = ""; } db_conn('cubit'); $Sl = "SELECT * FROM vatcodes WHERE id='{$delvat}'"; $Ri = db_exec($Sl); // if(pg_num_rows($Ri)>0) { // $taxex += $delchrg; // } $vd = pg_fetch_array($Ri); if ($vd['zero'] == "Yes") { $excluding = "y"; } else { $excluding = ""; } if (TAX_VAT != $vd['vat_amount'] and $vd['vat_amount'] != "0.00") { $showvat = FALSE; } $_POST['showvat'] = $showvat; $vr = vatcalc($delchrg, $inv['chrgvat'], $excluding, $inv['traddisc'], $vd['vat_amount']); $vrs = explode("|", $vr); $ivat = $vrs[0]; $iamount = $vrs[1]; $vatamount += $ivat; /* --- ----------- Clac --------------------- */ ##----------------------NEW---------------------- $sub = 0.0; if (isset($amt)) { $sub = sprint(array_sum($amt)); } $VATP = TAX_VAT; if ($chrgvat == "exc") { $taxex = sprint($taxex - $taxex * $traddisc / 100); $subtotal = sprint($sub + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); //$VAT=sprint(($subtotal-$taxex)*$VATP/100); $VAT = $vatamount; $SUBTOT = $sub; $TOTAL = sprint($subtotal + $VAT); $delexvat = sprint($delchrg); } elseif ($chrgvat == "inc") { $ot = $taxex; $taxex = sprint($taxex - $taxex * $traddisc / 100); $subtotal = sprint($sub + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); //$VAT=sprint(($subtotal-$taxex)*$VATP/(100+$VATP)); $VAT = $vatamount; $SUBTOT = sprint($sub); $TOTAL = sprint($subtotal); $delexvat = sprint($delchrg); $traddiscmt = sprint($traddiscmt); } else { $subtotal = sprint($sub + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); $VAT = sprint(0); $SUBTOT = $sub; $TOTAL = $subtotal; $delexvat = sprint($delchrg); } /* --- ----------- Clac --------------------- */ ##----------------------END---------------------- db_conn('cubit'); $Sl = "SELECT * FROM costcenters"; $Ri = db_exec($Sl); $i = 0; $Sl = "DELETE FROM invc WHERE inv='{$invid}'"; $Rl = db_exec($Sl); while ($data = pg_fetch_array($Ri)) { if ($ct[$data['ccid']] > 0) { $Sl = "INSERT INTO invc (cid,inv,amount) VALUES ('{$data['ccid']}','{$invid}','" . $ct[$data['ccid']] . "')"; $Rl = db_exec($Sl); } $i++; } /* --- ----------- Clac --------------------- # calculate subtot $SUBTOT = 0.00; if(isset($amt)) $SUBTOT = array_sum($amt); $SUBTOT -= $taxex; # duplicate $SUBTOTAL = $SUBTOT; $VATP = TAX_VAT; if($chrgvat == "exc"){ $SUBTOTAL = $SUBTOTAL; $delexvat= ($delchrg); }elseif($chrgvat == "inc"){ $SUBTOTAL = sprint(($SUBTOTAL * 100)/(100 + $VATP)); $delexvat = sprint(($delchrg * 100)/($VATP + 100)); }else{ $SUBTOTAL = ($SUBTOTAL); $delexvat = ($delchrg); } $SUBTOT = $SUBTOTAL; $EXVATTOT = $SUBTOT; $EXVATTOT += $delexvat; # Minus trade discount from taxex if($traddisc > 0){ $traddiscmtt = (($traddisc/100) * $taxex); }else{ $traddiscmtt = 0; } $taxext = ($taxex - $traddiscmtt); if($traddisc > 0) { $traddiscmt = ($EXVATTOT * ($traddisc/100)); }else{ $traddiscmt = 0; } $EXVATTOT -= $traddiscmt; // $EXVATTOT -= $taxex; $traddiscmt = sprint($traddiscmt + $traddiscmtt); if($chrgvat != "nov"){ $VAT = sprint($EXVATTOT * ($VATP/100)); }else{ $VAT = 0; } $TOTAL = sprint($EXVATTOT + $VAT + $taxext); $SUBTOT += $taxex; /* --- ----------- Clac --------------------- */ # insert invoice to DB $sql = "\n\t\t\tUPDATE rec_invoices \n\t\t\tSET delvat='{$delvat}', cusnum = '{$cusnum}', deptid = '{$dept['deptid']}', deptname = '{$dept['deptname']}', \n\t\t\t\tcusacc = '{$cust['accno']}', cusname = '{$cust['cusname']}', surname = '{$cust['surname']}', cusaddr = '{$cust['addr1']}', \n\t\t\t\tcusvatno = '{$cust['vatnum']}', cordno = '{$cordno}', ordno = '{$ordno}', docref = '{$docref}',\n\t\t\t\tchrgvat = '{$chrgvat}', terms = '{$terms}', salespn = '{$salespn}', odate = '{$odate}', traddisc = '{$traddisc}', \n\t\t\t\tdelchrg = '{$delchrg}', subtot = '{$SUBTOT}', vat = '{$VAT}', total = '{$TOTAL}', balance = '{$TOTAL}', \n\t\t\t\tcomm = '{$comm}', serd = 'y', discount='{$traddiscmt}', delivery='{$delexvat}' \n\t\t\tWHERE invid = '{$invid}'"; $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF); # commit updating pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); if (strlen($bar) > 0) { $Sl = "SELECT * FROM possets WHERE div = '" . USER_DIV . "'"; $Rs = db_exec($Sl) or errDie("Unable to add supplier to the system.", SELF); if (pg_numrows($Rs) < 1) { return details($_POST, "<a href='pos-set.php'>Please set the point of sale setting by clicking here.</a>"); } $Dets = pg_fetch_array($Rs); if ($Dets['opt'] == "No") { switch (substr($bar, strlen($bar) - 1, 1)) { case "0": $tab = "ss0"; break; case "1": $tab = "ss1"; break; case "2": $tab = "ss2"; break; case "3": $tab = "ss3"; break; case "4": $tab = "ss4"; break; case "5": $tab = "ss5"; break; case "6": $tab = "ss6"; break; case "7": $tab = "ss7"; break; case "8": $tab = "ss8"; break; case "9": $tab = "ss9"; break; default: return details($_POST, "The code you selected is invalid"); } db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = barext_dbget($tab, 'code', $bar, 'stock'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "\n\t\t\t\tINSERT INTO recinv_items (\n\t\t\t\t\tinvid, whid, stkid, qty, unitcost, amt, disc, discp, ss, div\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}', '{$s['selamt']}', '0', '0', '{$bar}', '" . USER_DIV . "'\n\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); $Sl = "UPDATE " . $tab . " SET active = 'no' WHERE code = '{$bar}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } else { db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = ext_dbget('stock', 'bar', $bar, 'stkid'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "\n\t\t\t\tINSERT INTO recinv_items (\n\t\t\t\t\tinvid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$invid}', '{$s['whid']}', '{$stid}', '1', '{$s['selamt']}', '{$s['selamt']}', '0', '0', '{$bar}', '" . USER_DIV . "'\n\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } } /* --- Start button Listeners --- */ if (isset($saveBtn)) { // Final Laytout $write = "\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Recurring Invoice Saved</th>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>Recurring Invoice for customer <b>{$cust['cusname']} {$cust['surname']}</b> has been saved.</td>\n\t\t\t\t</tr>\n\t\t\t</table>" . mkQuickLinks(ql("rec-invoice-view.php", "View Recurring Invoices"), ql("customers-new.php", "New Customer")); return $write; } else { if (isset($wtd)) { $_POST['wtd'] = $wtd; } if (strlen($ria) > 0) { $_POST['ria'] = $ria; } return details($_POST); } /* --- End button Listeners --- */ }
function write($_POST) { # Get vars foreach ($_POST as $key => $value) { ${$key} = $value; } # validate input require_lib("validate"); $v = new validate(); $v->isOk($cusnum, "num", 1, 20, "Invalid Customer, Please select a customer."); $v->isOk($invid, "num", 1, 20, "Invalid Invoice Number."); $v->isOk($cordno, "string", 0, 20, "Invalid Customer Order Number."); if (!isset($ria)) { $ria = ""; } $v->isOk($ria, "string", 0, 20, "Invalid stock code(fist letters)."); $v->isOk($comm, "string", 0, 255, "Invalid Comments."); $v->isOk($docref, "num", 0, 20, "Invalid Document Reference No."); $v->isOk($ordno, "num", 0, 20, "Invalid sales order number."); $v->isOk($chrgvat, "string", 1, 4, "Invalid charge vat option."); $v->isOk($terms, "num", 1, 20, "Invalid terms."); $v->isOk($salespn, "string", 1, 255, "Invalid sales person."); $v->isOk($oday, "num", 1, 2, "Invalid Invoice Date day."); $v->isOk($omon, "num", 1, 2, "Invalid Invoice Date month."); $v->isOk($oyear, "num", 1, 5, "Invalid Invoice Date year."); $odate = $oyear . "-" . $omon . "-" . $oday; if (!checkdate($omon, $oday, $oyear)) { $v->isOk($odate, "num", 1, 1, "Invalid Invoice Date."); } $v->isOk($traddisc, "float", 0, 20, "Invalid Trade Discount."); if ($traddisc > 100) { $v->isOk($traddisc, "float", 0, 0, "Error : Trade Discount cannot be more than 100 %."); } $v->isOk($delchrg, "float", 0, 20, "Invalid Delivery Charge."); $v->isOk($SUBTOT, "float", 0, 20, "Invalid Delivery Charge."); # used to generate errors $error = "asa@"; # check if duplicate serial number selected, remove blanks if (isset($sernos)) { if (!ext_isUnique(ext_remBlnk($sernos))) { $v->isOk($error, "num", 0, 0, "Error : Serial Numbers must be unique per line item."); } } # check is serai no was selected if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { # check if serial is selected if (ext_isSerial("stock", "stkid", $stkid) && !isset($sernos[$keys])) { $v->isOk($error, "num", 0, 0, "Error : Missing serial number for product number : <b>" . ($keys + 1) . "</b>"); } elseif (ext_isSerial("stock", "stkid", $stkid) && !(strlen($sernos[$keys]) > 0)) { $v->isOk($error, "num", 0, 0, "Error : Missing serial number for product number : <b>" . ($keys + 1) . "</b>"); } } } # check quantities if (isset($qtys)) { foreach ($qtys as $keys => $qty) { $discp[$keys] += 0; $disc[$keys] += 0; $v->isOk($qty, "num", 1, 10, "Invalid Quantity for product number : <b>" . ($keys + 1) . "</b>"); $v->isOk($disc[$keys], "float", 0, 20, "Invalid Discount for product number : <b>" . ($keys + 1) . "</b>."); if ($disc[$keys] > $unitcost[$keys]) { $v->isOk($disc[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than the unitcost."); } $v->isOk($discp[$keys], "float", 0, 20, "Invalid Discount Percentage for product number : <b>" . ($keys + 1) . "</b>."); if ($discp[$keys] > 100) { $v->isOk($discp[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than 100 %."); } $v->isOk($unitcost[$keys], "float", 1, 20, "Invalid Unit Price for product number : <b>" . ($keys + 1) . "</b>."); if ($qty < 1) { $v->isOk($qty, "num", 0, 0, "Error : Item Quantity must be at least one. Product number : <b>" . ($keys + 1) . "</b>"); } } } # check whids if (isset($whids)) { foreach ($whids as $keys => $whid) { $v->isOk($whid, "num", 1, 10, "Invalid Store number, please enter all details."); } } # check stkids if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { $v->isOk($stkid, "num", 1, 10, "Invalid Stock number, please enter all details."); } } # check amt if (isset($amt)) { foreach ($amt as $keys => $amount) { $v->isOk($amount, "float", 1, 20, "Invalid Amount, please enter all details."); } } # display errors, if any $err = ""; if ($v->isError()) { $errors = $v->getErrors(); foreach ($errors as $e) { $err .= "<li class=err>" . $e["msg"]; } return details($_POST, $err); } # Get invoice info db_connect(); $sql = "SELECT * FROM invoices WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $invRslt = db_exec($sql) or errDie("Unable to get invoice information"); if (pg_numrows($invRslt) < 1) { return "<li>- Invoice Not Found</li>"; } $inv = pg_fetch_array($invRslt); # check if invoice has been printed if ($inv['printed'] == "y") { $error = "<li class=err> Error : Invoice number <b>{$invid}</b> has already been printed."; $error .= "<p><input type=button onClick='JavaScript:history.back();' value='« Correct submission'>"; return $error; } # Get selected customer info db_connect(); $sql = "SELECT * FROM customers WHERE cusnum = '{$cusnum}' AND div = '" . USER_DIV . "'"; $custRslt = db_exec($sql) or errDie("Unable to get customer information"); if (pg_numrows($custRslt) < 1) { $sql = "SELECT * FROM inv_data WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $custRslt = db_exec($sql) or errDie("Unable to get customer information data"); $cust = pg_fetch_array($custRslt); $cust['cusname'] = $cust['customer']; $cust['surname'] = ""; $cust['addr1'] = ""; } else { $cust = pg_fetch_array($custRslt); # If customer was just selected, get the following if ($inv['cusnum'] == 0) { $traddisc = $cust['traddisc']; $terms = $cust['credterm']; } } # get department db_conn("exten"); $sql = "SELECT * FROM departments WHERE deptid = '{$inv['deptid']}' AND div = '" . USER_DIV . "'"; $deptRslt = db_exec($sql); if (pg_numrows($deptRslt) < 1) { $dept['deptname'] = "<i class=err>Not Found</i>"; } else { $dept = pg_fetch_array($deptRslt); } # fix those nasty zeros $traddisc += 0; $delchrg += 0; # insert invoice to DB db_connect(); # begin updating pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); /* -- Start remove old items -- */ # get selected stock in this invoice $sql = "SELECT * FROM inv_items WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $stktRslt = db_exec($sql); while ($stkt = pg_fetch_array($stktRslt)) { # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc - '{$stkt['qty']}') WHERE stkid = '{$stkt['stkid']}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); if (strlen($stkt['serno']) > 0) { ext_unresvSer($stkt['serno'], $stkt['stkid']); } } # remove old items $sql = "DELETE FROM inv_items WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice items in Cubit.", SELF); /* -- End remove old items -- */ $taxex = 0; if (isset($qtys)) { foreach ($qtys as $keys => $value) { if (isset($remprod)) { if (in_array($keys, $remprod)) { # skip product (wonder if $keys still align) $amt[$keys] = 0; continue; } else { # get selamt from selected stock $sql = "SELECT * FROM stock WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $stkRslt = db_exec($sql); $stk = pg_fetch_array($stkRslt); # Calculate the Discount discount if ($disc[$keys] < 1) { if ($discp[$keys] > 0) { $disc[$keys] = $discp[$keys] / 100 * $unitcost[$keys]; } } else { $discp[$keys] = $disc[$keys] * 100 / $unitcost[$keys]; } # Calculate amount # $amt[$keys] = (($qtys[$keys] * $unitcost[$keys]) - $disc[$keys]); $amt[$keys] = $qtys[$keys] * ($unitcost[$keys] - $disc[$keys]); # Check Tax Excempt if ($stk['exvat'] == 'yes') { $taxex += $amt[$keys]; } $wtd = $whids[$keys]; # insert invoice items $sql = "INSERT INTO inv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp, serno, div) VALUES('{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}', '{$amt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', '{$sernos[$keys]}','" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); if (strlen($stkt['serno']) > 0) { ext_resvSer($stkt['serno'], $stk['stkid']); } # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '{$qtys[$keys]}') WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); } } else { # Get selamt from selected stock $sql = "SELECT * FROM stock WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $stkRslt = db_exec($sql); $stk = pg_fetch_array($stkRslt); # Calculate the Discount discount if ($disc[$keys] < 1) { if ($discp[$keys] > 0) { $disc[$keys] = $discp[$keys] / 100 * $unitcost[$keys]; } } else { $discp[$keys] = $disc[$keys] * 100 / $unitcost[$keys]; } # Calculate amount $amt[$keys] = $qtys[$keys] * ($unitcost[$keys] - $disc[$keys]); # Check Tax Excempt if ($stk['exvat'] == 'yes') { $taxex += $amt[$keys]; } $wtd = $whids[$keys]; # insert invoice items $sql = "INSERT INTO inv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp, serno, div) VALUES('{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}', '{$amt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', '{$sernos[$keys]}','" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); if (strlen($sernos[$keys]) > 0) { ext_resvSer($sernos[$keys], $stk['stkid']); } # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '{$qtys[$keys]}') WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); } # everything is set place done button $_POST["done"] = " | <input name=doneBtn type=submit value='Print'>"; } } else { $_POST["done"] = ""; } /* --- ----------- Clac --------------------- */ # calculate subtot $SUBTOT = 0.0; if (isset($amt)) { $SUBTOT = array_sum($amt); } $SUBTOT -= $taxex; # duplicate $SUBTOTAL = $SUBTOT; $VATP = TAX_VAT; if ($chrgvat == "exc") { $SUBTOTAL = $SUBTOTAL; $delexvat = $delchrg; } elseif ($chrgvat == "inc") { $SUBTOTAL = sprint($SUBTOTAL * 100 / (100 + $VATP)); $delexvat = sprint($delchrg * 100 / ($VATP + 100)); } else { $SUBTOTAL = $SUBTOTAL; $delexvat = $delchrg; } $SUBTOT = $SUBTOTAL; $EXVATTOT = $SUBTOT; $EXVATTOT += $delexvat; # Minus trade discount from taxex if ($traddisc > 0) { $traddiscmtt = $traddisc / 100 * $taxex; } else { $traddiscmtt = 0; } $taxex -= $traddiscmtt; if ($traddisc > 0) { $traddiscmt = $EXVATTOT * ($traddisc / 100); } else { $traddiscmt = 0; } $EXVATTOT -= $traddiscmt; // $EXVATTOT -= $taxex; $traddiscmt = sprint($traddiscmt + $traddiscmtt); if ($chrgvat != "nov") { $VAT = sprint($EXVATTOT * ($VATP / 100)); } else { $VAT = 0; } $TOTAL = sprint($EXVATTOT + $VAT + $taxex); $SUBTOT += $taxex; /* --- ----------- Clac --------------------- */ # insert invoice to DB $sql = "UPDATE invoices SET cusnum = '{$cusnum}', deptname = '{$dept['deptname']}', cusacc = '{$cust['accno']}', cusname = '{$cust['cusname']}', surname = '{$cust['surname']}', cusaddr = '{$cust['addr1']}', cusvatno = '{$cust['vatnum']}', cordno = '{$cordno}', ordno = '{$ordno}', docref = '{$docref}',\n\t\tchrgvat = '{$chrgvat}', terms = '{$terms}', salespn = '{$salespn}', odate = '{$odate}', traddisc = '{$traddisc}', delchrg = '{$delchrg}', subtot = '{$SUBTOT}', vat = '{$VAT}', total = '{$TOTAL}', balance = '{$TOTAL}', comm = '{$comm}', serd = 'y', discount='{$traddiscmt}', delivery='{$delexvat}' WHERE invid = '{$invid}'"; $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF); # remove old data $sql = "DELETE FROM inv_data WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice data in Cubit.", SELF); # pu in new data $sql = "INSERT INTO inv_data(invid, dept, customer, addr1, div) VALUES('{$invid}', '{$dept['deptname']}', '{$cust['cusname']} {$cust['surname']}', '{$cust['addr1']}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice data to Cubit.", SELF); # commit updating pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); if (strlen($bar) > 0) { $Sl = "SELECT * FROM possets WHERE div = '" . USER_DIV . "'"; $Rs = db_exec($Sl) or errDie("Unable to add supplier to the system.", SELF); if (pg_numrows($Rs) < 1) { return details($_POST, "Please go set the point of sale settings under the stock settings"); } $Dets = pg_fetch_array($Rs); if ($Dets['opt'] == "No") { switch (substr($bar, strlen($bar) - 1, 1)) { case "0": $tab = "ss0"; break; case "1": $tab = "ss1"; break; case "2": $tab = "ss2"; break; case "3": $tab = "ss3"; break; case "4": $tab = "ss4"; break; case "5": $tab = "ss5"; break; case "6": $tab = "ss6"; break; case "7": $tab = "ss7"; break; case "8": $tab = "ss8"; break; case "9": $tab = "ss9"; break; default: return details($_POST, "The code you selected is invalid"); } db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = barext_dbget($tab, 'code', $bar, 'stock'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO inv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}','{$s['selamt']}','0','0','{$bar}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); $Sl = "DELETE FROM " . $tab . " WHERE code = '{$bar}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } else { db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = ext_dbget('stock', 'bar', $bar, 'stkid'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO inv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}','{$s['selamt']}','0','0','{$bar}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } } /* --- Start button Listeners --- */ if (isset($doneBtn)) { # Check if stock was selected(yes = put done button) db_connect(); $sql = "SELECT stkid FROM inv_items WHERE invid = '{$inv['invid']}' AND div = '" . USER_DIV . "'"; $crslt = db_exec($sql); if (pg_numrows($crslt) < 1) { $error = "<li class=err> Error : Invoice number has no items."; return details($_POST, $error); } # Insert quote to DB $sql = "UPDATE invoices SET done = 'y' WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice status in Cubit.", SELF); # Print the invoice $OUTPUT = "<script>printer('invoice-print.php?invid={$invid}');move('main.php');</script>"; require "template.php"; } elseif (isset($saveBtn)) { // Final Laytout $write = "\n\t\t<table border=0 cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "'>\n\t\t\t<tr><th>New Invoice Saved</th></tr>\n\t\t\t<tr class='bg-even'><td>Invoice for customer <b>{$cust['cusname']} {$cust['surname']}</b> has been saved.</td></tr>\n\t\t</table>\n\t\t<p>\n\t\t<table border=0 cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "'>\n\t\t\t<tr><th>Quick Links</th></tr>\n\t\t\t<tr class='bg-odd'><td><a href='invoice-view.php'>View Invoices</a></td></tr>\n\t\t\t<script>document.write(getQuicklinkSpecial());</script>\n\t\t\t<tr class='bg-odd'><td><a href='main.php'>Main Menu</a></td></tr>\n\t\t</table>"; return $write; } else { if (isset($wtd)) { $_POST['wtd'] = $wtd; } if (strlen($ria) > 0) { $_POST['ria'] = $ria; } return details($_POST); } /* --- End button Listeners --- */ }
function write($_POST) { # Get vars extract($_POST); # validate input require_lib("validate"); $v = new validate(); $v->isOk($cusnum, "num", 1, 20, "Invalid Customer, Please select a customer."); $v->isOk($invid, "num", 1, 20, "Invalid Invoice Number."); $v->isOk($cordno, "string", 0, 20, "Invalid Customer Order Number."); if (!isset($ria)) { $ria = ""; } $v->isOk($ria, "string", 0, 20, "Invalid stock code(fist letters)."); $v->isOk($comm, "string", 0, 255, "Invalid Comments."); $v->isOk($docref, "string", 0, 20, "Invalid Document Reference No."); $v->isOk($ordno, "num", 0, 20, "Invalid sales order number."); $v->isOk($chrgvat, "string", 1, 4, "Invalid charge vat option."); $v->isOk($terms, "num", 1, 20, "Invalid terms."); $v->isOk($salespn, "string", 1, 255, "Invalid sales person."); $v->isOk($o_day, "num", 1, 2, "Invalid Invoice Date day."); $v->isOk($o_month, "num", 1, 2, "Invalid Invoice Date month."); $v->isOk($o_year, "num", 1, 5, "Invalid Invoice Date year."); $odate = $o_year . "-" . $o_month . "-" . $o_day; if (!checkdate($o_month, $o_day, $o_year)) { $v->isOk($odate, "num", 1, 1, "Invalid Invoice Date."); } $v->isOk($traddisc, "float", 0, 20, "Invalid Trade Discount."); if ($traddisc > 100) { $v->isOk($traddisc, "float", 0, 0, "Error : Trade Discount cannot be more than 100 %."); } $v->isOk($delchrg, "float", 0, 20, "Invalid Delivery Charge."); $v->isOk($SUBTOT, "float", 0, 20, "Invalid Delivery Charge."); # used to generate errors $error = "asa@"; # check if duplicate serial number selected, remove blanks if (isset($sernos)) { if (!ext_isUnique(ext_remBlnk($sernos))) { $v->isOk($error, "num", 0, 0, "Error : Serial Numbers must be unique per line item."); } } # check is serai no was selected if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { # check if serial is selected if (ext_isSerial("stock", "stkid", $stkid) && !isset($sernos[$keys])) { $v->isOk($error, "num", 0, 0, "Error : Missing serial number for product number : <b>" . ($keys + 1) . "</b>"); } elseif (ext_isSerial("stock", "stkid", $stkid) && !(strlen($sernos[$keys]) > 0)) { $v->isOk($error, "num", 0, 0, "Error : Missing serial number for product number : <b>" . ($keys + 1) . "</b>"); } } } # check quantities if (isset($qtys)) { foreach ($qtys as $keys => $qty) { $discp[$keys] += 0; $disc[$keys] += 0; $v->isOk($qty, "float", 1, 15, "Invalid Quantity for product number : <b>" . ($keys + 1) . "</b>"); $v->isOk($disc[$keys], "float", 0, 20, "Invalid Discount for product number : <b>" . ($keys + 1) . "</b>."); if ($disc[$keys] > $unitcost[$keys]) { $v->isOk($disc[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than the unitcost."); } $v->isOk($discp[$keys], "float", 0, 20, "Invalid Discount Percentage for product number : <b>" . ($keys + 1) . "</b>."); if ($discp[$keys] > 100) { $v->isOk($discp[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than 100 %."); } $unitcost[$keys] += 0; $cunitcost[$keys] += 0; $v->isOk($unitcost[$keys], "float", 1, 20, "Invalid Unit Price for product number : <b>" . ($keys + 1) . "</b>."); $v->isOk($cunitcost[$keys], "float", 1, 20, "Invalid Unit Price for product number : <b>" . ($keys + 1) . "</b>."); if ($qty < 1) { $v->isOk($qty, "num", 0, 0, "Error : Item Quantity must be at least one. Product number : <b>" . ($keys + 1) . "</b>"); } } } # check whids if (isset($whids)) { foreach ($whids as $keys => $whid) { $v->isOk($whid, "num", 1, 10, "Invalid Store number, please enter all details."); } } # check stkids if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { $v->isOk($stkid, "num", 1, 10, "Invalid Stock number, please enter all details."); } } # check amt if (isset($amt)) { foreach ($amt as $keys => $amount) { $v->isOk($amount, "float", 1, 20, "Invalid Amount, please enter all details."); } } # display errors, if any $err = ""; if ($v->isError()) { $errors = $v->getErrors(); foreach ($errors as $e) { $err .= "<li class='err'>" . $e["msg"] . "</li>"; } return details($_POST, $err); } # Get invoice info db_connect(); $sql = "SELECT * FROM invoices WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $invRslt = db_exec($sql) or errDie("Unable to get invoice information"); if (pg_numrows($invRslt) < 1) { return "<li>- Invoice Not Found</li>"; } $inv = pg_fetch_array($invRslt); $inv['traddisc'] = $traddisc; $inv['chrgvat'] = $chrgvat; # check if invoice has been printed if ($inv['printed'] == "y") { $error = "<li class='err'> Error : Invoice number <b>{$invid}</b> has already been printed.</li>"; $error .= "<p><input type='button' onClick='JavaScript:history.back();' value='« Correct submission'>"; return $error; } db_connect(); if (isset($printdel)) { $Sl = "SELECT * FROM settings WHERE constant='Delivery Note'"; $Ri = db_exec($Sl) or errDie("Unable to get settings."); if (pg_num_rows($Ri) < 1) { $Sl = "INSERT INTO settings (constant,value,div) VALUES ('Delivery Note','Yes','" . USER_DIV . "')"; $Ri = db_exec($Sl); } else { $Sl = "UPDATE settings SET value='Yes' WHERE constant='Delivery Note' AND div='" . USER_DIV . "'"; $Ri = db_exec($Sl); } } else { $Sl = "UPDATE settings SET value='No' WHERE constant='Delivery Note' AND div='" . USER_DIV . "'"; $Ri = db_exec($Sl); } # Get selected customer info db_connect(); $sql = "SELECT * FROM customers WHERE cusnum = '{$cusnum}' AND div = '" . USER_DIV . "'"; $custRslt = db_exec($sql) or errDie("Unable to get customer information"); if (pg_numrows($custRslt) < 1) { $sql = "SELECT * FROM inv_data WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $custRslt = db_exec($sql) or errDie("Unable to get customer information data"); $cust = pg_fetch_array($custRslt); $cust['cusname'] = $cust['customer']; $cust['surname'] = ""; $cust['addr1'] = ""; # currency $currs = getSymbol($inv['fcid']); } else { $cust = pg_fetch_array($custRslt); # If customer was just selected/changed, get the following if ($inv['cusnum'] != $cusnum) { $traddisc = $cust['traddisc']; $terms = $cust['credterm']; $xrate = getRate($cust['fcid']); } # currency $currs = getSymbol($cust['fcid']); } # get department db_conn("exten"); $sql = "SELECT * FROM departments WHERE deptid = '{$inv['deptid']}' AND div = '" . USER_DIV . "'"; $deptRslt = db_exec($sql); if (pg_numrows($deptRslt) < 1) { $dept['deptname'] = "<i class=err>Not Found</i>"; } else { $dept = pg_fetch_array($deptRslt); } # fix those nasty zeros $xrate += 0; if ($xrate == 0) { $xrate = 1; } $traddisc += 0; $delchrg += 0; $vatamount = 0; $showvat = TRUE; # insert invoice to DB db_connect(); # begin updating pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); /* -- Start remove old items -- */ # get selected stock in this invoice $sql = "SELECT * FROM inv_items WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $stktRslt = db_exec($sql); while ($stkt = pg_fetch_array($stktRslt)) { # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc - '{$stkt['qty']}') WHERE stkid = '{$stkt['stkid']}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); if (strlen($stkt['serno']) > 0) { ext_unresvSer($stkt['serno'], $stkt['stkid']); } } # remove old items $sql = "DELETE FROM inv_items WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice items in Cubit.", SELF); /* -- End remove old items -- */ $taxex = 0; if (isset($qtys)) { foreach ($qtys as $keys => $value) { if (isset($remprod) && in_array($keys, $remprod)) { // if(isset($remprod)){ // if(in_array($keys, $remprod)){ // # skip product (wonder if $keys still align) // $amt[$keys] = 0; // continue; // }else{ // # get selamt from selected stock // $sql = "SELECT * FROM stock WHERE stkid = '$stkids[$keys]' AND div = '".USER_DIV."'"; // $stkRslt = db_exec($sql); // $stk = pg_fetch_array($stkRslt); // // $t=$cunitcost[$keys]; // // # Calculate the unitcost // if($cunitcost[$keys] > 0 && $unitcost[$keys] == 0){ // $unitcost[$keys] = ($cunitcost[$keys] * $xrate); // }else{ // $cunitcost[$keys] = ($unitcost[$keys]/$xrate); // } // // # Calculate the Discount discount // if($disc[$keys] < 1){ // if($discp[$keys] > 0){ // $disc[$keys] = (($discp[$keys]/100) * $t); // } // }else{ // $discp[$keys] = (($disc[$keys] * 100) / $t); // } // // # Calculate amount // $funitcost[$keys] = $unitcost[$keys]; // $famt[$keys] = ($qtys[$keys] * ($funitcost[$keys])); // // # Calculate amount // // $amt[$keys] = ($qtys[$keys] * ($unitcost[$keys] - $disc[$keys])); // $unitcost[$keys] = sprint($funitcost[$keys]/$xrate); // $amt[$keys] = sprint($famt[$keys]/$xrate-($disc[$keys])); // // $Sl="SELECT * FROM vatcodes WHERE id='$vatcodes[$keys]'"; // $Ri=db_exec($Sl); // // if(pg_num_rows($Ri)<1) { // return details($_POST, "<li class=err>Please select the vatcode for all your items.</li>"); // } // $vd=pg_fetch_array($Ri); // // # Check Tax Excempt // if($stk['exvat'] == 'yes'||$vd['zero']=="Yes"){ // $taxex += $amt[$keys]; // } // // # insert invoice items // $sql = "INSERT INTO inv_items(invid, whid, stkid, qty, unitcost, funitcost, amt, famt, disc, discp, serno, div,vatcode,del) VALUES('$invid', '$whids[$keys]', '$stkids[$keys]', '$qtys[$keys]', '$unitcost[$keys]', '$funitcost[$keys]', '$amt[$keys]', '$famt[$keys]', '$disc[$keys]', '$discp[$keys]', '$sernos[$keys]', '".USER_DIV."','$vatcodes[$keys]','0')"; // $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.",SELF); // // if(strlen($stkt['serno']) > 0) // ext_resvSer($stkt['serno'], $stk['stkid']); // // # update stock(alloc + qty) // $sql = "UPDATE stock SET alloc = (alloc + '$qtys[$keys]') WHERE stkid = '$stkids[$keys]' AND div = '".USER_DIV."'"; // $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.",SELF); // } } else { # Get selamt from selected stock $sql = "SELECT * FROM stock WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $stkRslt = db_exec($sql); $stk = pg_fetch_array($stkRslt); /*# Calculate the unitcost if($cunitcost[$keys] > 0 && $unitcost[$keys] == 0){ $unitcost[$keys] = ($cunitcost[$keys] * $xrate); }else{ $cunitcost[$keys] = ($unitcost[$keys]/$xrate); }*/ $t = $cunitcost[$keys]; # Calculate the unitcost if ($unitcost[$keys] > 0 && $cunitcost[$keys] == 0) { $cunitcost[$keys] = $unitcost[$keys] / $xrate; } else { $unitcost[$keys] = $cunitcost[$keys] * $xrate; } # Calculate the Discount discount if ($disc[$keys] < 1) { if ($discp[$keys] > 0) { $disc[$keys] = $discp[$keys] / 100 * $t; } } else { $discp[$keys] = $disc[$keys] * 100 / $t; } if ($xrate < 1) { $xrate = 1; } //$disc[$keys]=$disc[$keys]*$xrate; # Calculate amount $funitcost[$keys] = $unitcost[$keys]; $famt[$keys] = $qtys[$keys] * $funitcost[$keys]; //$famt[$keys] = ($qtys[$keys] * ($funitcost[$keys] - $disc[$keys])); # Calculate amount // $amt[$keys] = ($qtys[$keys] * ($unitcost[$keys] - $disc[$keys])); $unitcost[$keys] = sprint($funitcost[$keys] / $xrate); $amt[$keys] = sprint($famt[$keys] / $xrate - $disc[$keys]); //$amt[$keys] = sprint($famt[$keys]/$xrate); $Sl = "SELECT * FROM vatcodes WHERE id='{$vatcodes[$keys]}'"; $Ri = db_exec($Sl); if (pg_num_rows($Ri) < 1) { return details($_POST, "<li class='err'>Please select the vatcode for all your items.</li>"); } $vd = pg_fetch_array($Ri); if ($vd['zero'] == "Yes") { $excluding = "y"; } else { $excluding = ""; } if (TAX_VAT != $vd['vat_amount'] and $vd['vat_amount'] != "0.00") { $showvat = FALSE; } $vr = vatcalc($amt[$keys], $inv['chrgvat'], $excluding, $inv['traddisc'], $vd['vat_amount']); $vrs = explode("|", $vr); $ivat = $vrs[0]; $iamount = $vrs[1]; $vatamount += $ivat; # Check Tax Excempt if ($stk['exvat'] == 'yes' || $vd['zero'] == "Yes") { $taxex += $amt[$keys]; } # insert invoice items $sql = "\n\t\t\t\t\t\tINSERT INTO inv_items (\n\t\t\t\t\t\t\tinvid, whid, stkid, qty, unitcost, \n\t\t\t\t\t\t\tfunitcost, amt, famt, disc, \n\t\t\t\t\t\t\tdiscp, serno, div, vatcode, del\n\t\t\t\t\t\t) VALUES (\n\t\t\t\t\t\t\t'{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}', \n\t\t\t\t\t\t\t'{$funitcost[$keys]}', '{$amt[$keys]}', '{$famt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', \n\t\t\t\t\t\t\t'{$sernos[$keys]}', '" . USER_DIV . "', '{$vatcodes[$keys]}', '0'\n\t\t\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); if (strlen($sernos[$keys]) > 0) { ext_resvSer($sernos[$keys], $stk['stkid']); } # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '{$qtys[$keys]}') WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); } # everything is set place done button $_POST["done"] = " | <input name='doneBtn' type='submit' value='Process'>"; } } else { $_POST["done"] = ""; } db_conn('cubit'); $Sl = "SELECT * FROM vatcodes WHERE id='{$delvat}'"; $Ri = db_exec($Sl); $vd = pg_fetch_array($Ri); // if(pg_num_rows($Ri)>0) { // $taxex += $delchrg; // } if ($vd['zero'] == "Yes") { $excluding = "y"; } else { $excluding = ""; } if (TAX_VAT != $vd['vat_amount'] and $vd['vat_amount'] != "0.00") { $showvat = FALSE; } $_POST['showvat'] = $showvat; $vr = vatcalc($delchrg, $inv['chrgvat'], $excluding, $inv['traddisc'], $vd['vat_amount']); $vrs = explode("|", $vr); $ivat = $vrs[0]; $iamount = $vrs[1]; $vatamount += $ivat; /* --- ----------- Clac --------------------- */ ##----------------------NEW---------------------- $sub = 0.0; if (isset($amt)) { $sub = sprint(array_sum($amt)); } $VATP = TAX_VAT; if ($chrgvat == "exc") { $taxex = sprint($taxex - $taxex * $traddisc / 100); $subtotal = sprint($sub + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); // $VAT=sprint(($subtotal-$taxex)*$VATP/100); $VAT = $vatamount; $SUBTOT = $sub; $TOTAL = sprint($subtotal + $VAT); $delexvat = sprint($delchrg); } elseif ($chrgvat == "inc") { $ot = $taxex; $taxex = sprint($taxex - $taxex * $traddisc / 100); $subtotal = sprint($sub + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); //$VAT=sprint(($subtotal-$taxex)*$VATP/(100+$VATP)); $VAT = $vatamount; $SUBTOT = sprint($sub); $TOTAL = sprint($subtotal); $delexvat = sprint($delchrg); $traddiscmt = sprint($traddiscmt); } else { $subtotal = sprint($sub + $delchrg); $traddiscmt = sprint($subtotal * $traddisc / 100); $subtotal = sprint($subtotal - $traddiscmt); $VAT = sprint(0); $SUBTOT = $sub; $TOTAL = $subtotal; $delexvat = sprint($delchrg); } /* --- ----------- Clac --------------------- */ ##----------------------END---------------------- /* --- ----------- Clac --------------------- # calculate subtot $SUBTOT = 0.00; if(isset($amt)) $SUBTOT = array_sum($amt); $SUBTOT -= $taxex; # duplicate $SUBTOTAL = $SUBTOT; $VATP = TAX_VAT; if($chrgvat == "exc"){ $SUBTOTAL = $SUBTOTAL; $delexvat= ($delchrg); }elseif($chrgvat == "inc"){ $SUBTOTAL = sprint(($SUBTOTAL * 100)/(100 + $VATP)); $delexvat = sprint(($delchrg * 100)/($VATP + 100)); }else{ $SUBTOTAL = ($SUBTOTAL); $delexvat = ($delchrg); } $SUBTOT = $SUBTOTAL; $EXVATTOT = $SUBTOT; $EXVATTOT += $delexvat; # Minus trade discount from taxex if($traddisc > 0){ $traddiscmtt = (($traddisc/100) * $taxex); }else{ $traddiscmtt = 0; } $taxext = ($taxex - $traddiscmtt); if($traddisc > 0) { $traddiscmt = ($EXVATTOT * ($traddisc/100)); }else{ $traddiscmt = 0; } $EXVATTOT -= $traddiscmt; // $EXVATTOT -= $taxex; $traddiscmt = sprint($traddiscmt + $traddiscmtt); if($chrgvat != "nov"){ $VAT = sprint($EXVATTOT * ($VATP/100)); }else{ $VAT = 0; } $TOTAL = sprint($EXVATTOT + $VAT + $taxext); $SUBTOT += $taxex; /* --- ----------- Clac --------------------- */ $FTOTAL = sprint($TOTAL * $xrate); /* --- ----------- Clac --------------------- */ # insert invoice to DB $sql = "\n\t\t\tUPDATE invoices \n\t\t\tSET delvat='{$delvat}', cusnum = '{$cusnum}', deptname = '{$dept['deptname']}', cusacc = '{$cust['accno']}', \n\t\t\t\tcusname = '{$cust['cusname']}', surname = '{$cust['surname']}', cusaddr = '{$cust['addr1']}', \n\t\t\t\tcusvatno = '{$cust['vatnum']}', cordno = '{$cordno}', ordno = '{$ordno}', chrgvat = '{$chrgvat}', docref = '{$docref}', \n\t\t\t\tterms = '{$terms}', salespn = '{$salespn}', fcid = '{$cust['fcid']}', currency = '{$currs['symbol']}', xrate = '{$xrate}', \n\t\t\t\todate = '{$odate}', traddisc = '{$traddisc}', delchrg = '{$delchrg}', subtot = '{$SUBTOT}', vat = '{$VAT}', \n\t\t\t\ttotal = '{$TOTAL}', balance = '{$FTOTAL}', fbalance = '{$TOTAL}', comm = '{$comm}', location = '{$cust['location']}', \n\t\t\t\tserd = 'y', discount='{$traddiscmt}', delivery='{$delexvat}' \n\t\t\tWHERE invid = '{$invid}'"; $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF); # remove old data $sql = "DELETE FROM inv_data WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice data in Cubit.", SELF); # pu in new data $sql = "INSERT INTO inv_data(invid, dept, customer, addr1, div) VALUES('{$invid}', '{$dept['deptname']}', '{$cust['cusname']} {$cust['surname']}', '{$cust['addr1']}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice data to Cubit.", SELF); # commit updating pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); if (strlen($bar) > 0) { $Sl = "SELECT * FROM possets WHERE div = '" . USER_DIV . "'"; $Rs = db_exec($Sl) or errDie("Unable to add supplier to the system.", SELF); if (pg_numrows($Rs) < 1) { return details($_POST, "<a href='pos-set.php'>Please set the point of sale setting by clicking here.</a>"); } $Dets = pg_fetch_array($Rs); if ($Dets['opt'] == "No") { switch (substr($bar, strlen($bar) - 1, 1)) { case "0": $tab = "ss0"; break; case "1": $tab = "ss1"; break; case "2": $tab = "ss2"; break; case "3": $tab = "ss3"; break; case "4": $tab = "ss4"; break; case "5": $tab = "ss5"; break; case "6": $tab = "ss6"; break; case "7": $tab = "ss7"; break; case "8": $tab = "ss8"; break; case "9": $tab = "ss9"; break; default: return details($_POST, "The code you selected is invalid"); } db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = barext_dbget($tab, 'code', $bar, 'stock'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "\n\t\t\t\tINSERT INTO inv_items (\n\t\t\t\t\tinvid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div, del\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$invid}', '{$s['whid']}', '{$stid}', '1', '{$s['selamt']}', '{$s['selamt']}', '0', '0', '{$bar}', '" . USER_DIV . "', '0'\n\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); $Sl = "UPDATE " . $tab . " SET active = 'no' WHERE code = '{$bar}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } else { db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = ext_dbget('stock', 'bar', $bar, 'stkid'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "\n\t\t\t\tINSERT INTO inv_items (\n\t\t\t\t\tinvid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div, del\n\t\t\t\t) VALUES (\n\t\t\t\t\t'{$invid}', '{$s['whid']}', '{$stid}', '1', '{$s['selamt']}', '{$s['selamt']}', '0', '0','{$bar}', '" . USER_DIV . "', '0'\n\t\t\t\t)"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } } /* --- Start button Listeners --- */ if (isset($doneBtn)) { # Check if stock was selected(yes = put done button) db_connect(); $sql = "SELECT stkid FROM inv_items WHERE invid = '{$inv['invid']}' AND div = '" . USER_DIV . "'"; $crslt = db_exec($sql); if (pg_numrows($crslt) < 1) { $error = "<li class='err'> Error : Invoice number has no items.</li>"; return details($_POST, $error); } # Insert quote to DB $sql = "UPDATE invoices SET done = 'y' WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice status in Cubit.", SELF); $Sl = "SELECT * FROM settings WHERE constant='Delivery Note'"; $Ri = db_exec($Sl) or errDie("Unable to get settings."); $data = pg_fetch_array($Ri); if ($data['value'] == "Yes") { # Print the invoice $OUTPUT = "<script>nhprinter('invoice-delnote.php?invid={$invid}','Delivery Note');printer('intinvoice-print.php?invid={$invid}');move('main.php');</script>"; } else { # Print the invoice $OUTPUT = "<script>printer('intinvoice-print.php?invid={$invid}');move('main.php');</script>"; } require "template.php"; } elseif (isset($saveBtn)) { // Final Laytout $write = "\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t<tr>\n\t\t\t\t\t<th>New International Invoice Saved</th>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td>International Invoice for customer <b>{$cust['cusname']} {$cust['surname']}</b> has been saved.</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t\t<p>\n\t\t\t<table " . TMPL_tblDflts . ">\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Quick Links</th>\n\t\t\t\t</tr>\n\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t<td><a href='invoice-view.php'>View Invoices</a></td>\n\t\t\t\t</tr>\n\t\t\t\t<script>document.write(getQuicklinkSpecial());</script>\n\t\t\t</table>"; return $write; } else { if (isset($wtd)) { $_POST['wtd'] = $wtd; } if (strlen($ria) > 0) { $_POST['ria'] = $ria; } return details($_POST); } }
function write($_POST) { #get vars foreach ($_POST as $key => $value) { ${$key} = $value; } # validate input require_lib("validate"); $v = new validate(); $v->isOk($client, "string", 0, 20, "Invalid Customer."); $v->isOk($invid, "num", 1, 20, "Invalid Invoice Number."); $v->isOk($cordno, "string", 0, 20, "Invalid Customer Order Number."); $v->isOk($comm, "string", 0, 255, "Invalid Comments."); $v->isOk($ordno, "num", 0, 20, "Invalid sales order number."); $v->isOk($chrgvat, "string", 1, 4, "Invalid charge vat option."); $v->isOk($salespn, "string", 1, 255, "Invalid sales person."); $v->isOk($oday, "num", 1, 2, "Invalid Invoice Date day."); $v->isOk($omon, "num", 1, 2, "Invalid Invoice Date month."); $v->isOk($oyear, "num", 1, 5, "Invalid Invoice Date year."); $odate = $oyear . "-" . $omon . "-" . $oday; if (!checkdate($omon, $oday, $oyear)) { $v->isOk($odate, "num", 1, 1, "Invalid Invoice Date."); } $v->isOk($traddisc, "float", 0, 20, "Invalid Trade Discount."); if ($traddisc > 100) { $v->isOk($traddisc, "float", 0, 0, "Error : Trade Discount cannot be more than 100 %."); } $v->isOk($delchrg, "float", 0, 20, "Invalid Delivery Charge."); $v->isOk($SUBTOT, "float", 0, 20, "Invalid Delivery Charge."); # used to generate errors $error = "asa@"; # check quantities if (isset($qtys)) { foreach ($qtys as $keys => $qty) { $v->isOk($qty, "num", 1, 10, "Invalid Quantity for product number : <b>" . ($keys + 1) . "</b>"); $v->isOk($disc[$keys], "float", 0, 20, "Invalid Discount for product number : <b>" . ($keys + 1) . "</b>."); if ($disc[$keys] > $unitcost[$keys]) { $v->isOk($disc[$keys], "float", 0, 0, "Error : Discount for product number : <b>" . ($keys + 1) . "</b> is more than the unitcost."); } $v->isOk($discp[$keys], "float", 0, 20, "Invalid Discount Percentage for product number : <b>" . ($keys + 1) . "</b>."); $v->isOk($unitcost[$keys], "float", 1, 20, "Invalid Unit Price for product number : <b>" . ($keys + 1) . "</b>."); if ($qty < 1) { $v->isOk($qty, "num", 0, 0, "Error : Item Quantity must be at least one. Product number : <b>" . ($keys + 1) . "</b>"); } } } # check whids if (isset($whids)) { foreach ($whids as $keys => $whid) { $v->isOk($whid, "num", 1, 10, "Invalid Store number, please enter all details."); } } # check stkids if (isset($stkids)) { foreach ($stkids as $keys => $stkid) { $v->isOk($stkid, "num", 1, 10, "Invalid Stock number, please enter all details."); } } # check amt if (isset($amt)) { foreach ($amt as $keys => $amount) { $v->isOk($amount, "float", 1, 20, "Invalid Amount, please enter all details."); } } # display errors, if any $err = ""; if ($v->isError()) { $errors = $v->getErrors(); foreach ($errors as $e) { $err .= "<li class=err>" . $e["msg"]; } return details($_POST, $err); } if (strlen($client) < 1) { $client = "Cash Sale"; } $_POST['client'] = $client; # Get invoice info db_connect(); $sql = "SELECT * FROM pinvoices WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $invRslt = db_exec($sql) or errDie("Unable to get invoice information"); if (pg_numrows($invRslt) < 1) { return "<li>- Invoice Not Found</li>"; } $inv = pg_fetch_array($invRslt); # check if invoice has been printed if ($inv['printed'] == "y") { $error = "<li class=err> Error : Invoice number <b>{$invid}</b> has already been printed."; $error .= "<p><input type=button onClick='JavaScript:history.back();' value='« Correct submission'>"; return $error; } # get department db_conn("exten"); $sql = "SELECT * FROM departments WHERE deptid = '{$inv['deptid']}' AND div = '" . USER_DIV . "'"; $deptRslt = db_exec($sql); if (pg_numrows($deptRslt) < 1) { $dept['deptname'] = "<i class=err>Not Found</i>"; } else { $dept = pg_fetch_array($deptRslt); } # fix those nasty zeros $traddisc += 0; $delchrg += 0; # insert invoice to DB db_connect(); # Begin updating pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); /* -- Start remove old items -- */ # get selected stock in this invoice $sql = "SELECT * FROM pinv_items WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $stktRslt = db_exec($sql); while ($stkt = pg_fetch_array($stktRslt)) { # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc - '{$stkt['qty']}') WHERE stkid = '{$stkt['stkid']}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); } # remove old items $sql = "DELETE FROM pinv_items WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice items in Cubit.", SELF); /* -- End remove old items -- */ $taxex = 0; if (isset($qtys)) { foreach ($qtys as $keys => $value) { if (isset($remprod)) { if (in_array($keys, $remprod)) { # skip product (wonder if $keys still align) $amt[$keys] = 0; continue; } else { # get selamt from selected stock $sql = "SELECT * FROM stock WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $stkRslt = db_exec($sql); $stk = pg_fetch_array($stkRslt); # Calculate the Discount discount if ($disc[$keys] < 1) { if ($discp[$keys] > 0) { $disc[$keys] = $discp[$keys] / 100 * $unitcost[$keys]; } } else { $discp[$keys] = $disc[$keys] * 100 / $unitcost[$keys]; } # Calculate amount $amt[$keys] = $qtys[$keys] * ($unitcost[$keys] - $disc[$keys]); # Check Tax Excempt if ($stk['exvat'] == 'yes') { $taxex += $amt[$keys]; } # insert invoice items $sql = "INSERT INTO pinv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp, div) VALUES('{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}', '{$amt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '{$qtys[$keys]}') WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); } } else { # get selamt from selected stock $sql = "SELECT * FROM stock WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $stkRslt = db_exec($sql); $stk = pg_fetch_array($stkRslt); # Calculate the Discount discount if ($disc[$keys] < 1) { if ($discp[$keys] > 0) { $disc[$keys] = $discp[$keys] / 100 * $unitcost[$keys]; } } else { $discp[$keys] = $disc[$keys] * 100 / $unitcost[$keys]; } # Calculate amount $amt[$keys] = $qtys[$keys] * ($unitcost[$keys] - $disc[$keys]); # Check Tax Excempt if ($stk['exvat'] == 'yes') { $taxex += $amt[$keys]; } # insert invoice items $sql = "INSERT INTO pinv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp, div) VALUES('{$invid}', '{$whids[$keys]}', '{$stkids[$keys]}', '{$qtys[$keys]}', '{$unitcost[$keys]}','{$amt[$keys]}', '{$disc[$keys]}', '{$discp[$keys]}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '{$qtys[$keys]}') WHERE stkid = '{$stkids[$keys]}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); } # everything is set place done button $_POST["done"] = " | <input name=doneBtn type=submit value='Done'>"; } } else { $_POST["done"] = ""; } /* --- Clac --- */ # calculate subtot if (isset($amt)) { $SUBTOT = array_sum($amt); } else { $SUBTOT = 0.0; } # Calculate tradediscm if ($traddisc > 0) { $traddiscm = sprint($traddisc / 100 * $SUBTOT); } else { $traddiscm = 0.0; } /* Trade discount fix */ # Calculate tradediscm if ($traddisc > 0) { $traddiscmt = sprint($traddisc / 100 * $taxex); } else { $traddiscmt = 0.0; } $taxex -= $traddiscmt; /* Trade discount fix */ # minus discount # $SUBTOT -= $disc; --> already minused # duplicate $SUBTOTAL = $SUBTOT; # minus trade discount $SUBTOTAL -= $traddiscm; # add del charge $SUBTOTAL += $delchrg; # if vat must be charged if ($chrgvat == "yes") { $VATP = TAX_VAT; $VAT = sprint($VATP / 100 * ($SUBTOTAL - $taxex)); } else { $VATP = 0; $VAT = "0.00"; } # total $TOTAL = sprint($SUBTOTAL + $VAT); /* --- End Clac --- */ # insert invoice to DB $sql = "UPDATE pinvoices SET deptname = '{$dept['deptname']}', cusname = '{$client}', cordno = '{$cordno}', ordno = '{$ordno}', chrgvat = '{$chrgvat}', salespn = '{$salespn}',\n\t\todate = '{$odate}', traddisc = '{$traddisc}', delchrg = '{$delchrg}', subtot = '{$SUBTOT}', vat = '{$VAT}', total = '{$TOTAL}', balance = '{$TOTAL}', comm = '{$comm}' WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice in Cubit.", SELF); # remove old data $sql = "DELETE FROM pinv_data WHERE invid='{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice data in Cubit.", SELF); # put in new data $sql = "INSERT INTO pinv_data(invid, dept, customer, div) VALUES('{$invid}', '{$dept['deptname']}', '{$client}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice data to Cubit.", SELF); # commit updating pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); if (strlen($bar) > 0) { $Sl = "SELECT * FROM possets WHERE div = '" . USER_DIV . "'"; $Rs = db_exec($Sl) or errDie("Unable to add supplier to the system.", SELF); if (pg_numrows($Rs) < 1) { return details($_POST, "<a href='pos-set.php'>Please set the point of sale setting by clicking here.</a>"); } $Dets = pg_fetch_array($Rs); if ($Dets['opt'] == "No") { switch (substr($bar, strlen($bar) - 1, 1)) { case "0": $tab = "ss0"; break; case "1": $tab = "ss1"; break; case "2": $tab = "ss2"; break; case "3": $tab = "ss3"; break; case "4": $tab = "ss4"; break; case "5": $tab = "ss5"; break; case "6": $tab = "ss6"; break; case "7": $tab = "ss7"; break; case "8": $tab = "ss8"; break; case "9": $tab = "ss9"; break; default: return details($_POST, "The code you selected is invalid"); } db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = barext_dbget($tab, 'code', $bar, 'stock'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO pinv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}','{$s['selamt']}','0','0','{$bar}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); $Sl = "UPDATE " . $tab . " SET active = 'no' WHERE code = '{$bar}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } else { db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = ext_dbget('stock', 'bar', $bar, 'stkid'); if (!($stid > 0)) { return details($_POST, "The bar code you selected is not in the system or is not available."); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO pinv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp,ss, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}','{$s['selamt']}','0','0','{$bar}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } } /* --- Start button Listeners --- */ if (isset($doneBtn)) { # check if stock was selected(yes = put done button) db_connect(); $sql = "SELECT stkid FROM pinv_items WHERE invid = '{$inv['invid']}' AND div = '" . USER_DIV . "'"; $crslt = db_exec($sql); if (pg_numrows($crslt) < 1) { $error = "<li class=err> Error : Invoice number has no items."; return details($_POST, $error); } # insert quote to DB $sql = "UPDATE pinvoices SET done = 'y' WHERE invid = '{$invid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update invoice status in Cubit.", SELF); # print the invoice header("Location:pos-invoice-print.php?invid={$invid}"); } elseif (isset($saveBtn)) { // Final Laytout $write = "\n\t\t<table border=0 cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "'>\n\t\t\t<tr><th>New Invoice Saved</th></tr>\n\t\t\t<tr class='bg-even'><td>Invoice for customer <b>{$client}</b> has been saved.</td></tr>\n\t\t</table>\n\t\t<p>\n\t\t<table border=0 cellpadding='" . TMPL_tblCellPadding . "' cellspacing='" . TMPL_tblCellSpacing . "'>\n\t\t\t<tr><th>Quick Links</th></tr>\n\t\t\t<tr class='bg-odd'><td><a href='pos-invoice-new.php'>New Point of Sale Invoice</a></td></tr>\n\t\t\t<tr class='bg-odd'><td><a href='pos-invoice-edit.php'>View Point of Sale Invoices</a></td></tr>\n\t\t\t<script>document.write(getQuicklinkSpecial());</script>\n\t\t</table>"; return $write; } else { return details($_POST); } /* --- End button Listeners --- */ }
function write($_POST) { $Out = ""; #get & send vars foreach ($_POST as $key => $value) { ${$key} = $value; $Out .= "<input type=hidden name=\${$key} value='{$value}'>"; } $blength = strlen($barcodes); $start = 0; while ($start < $blength) { $value = substr($barcodes, $start, $clength); $start = $start + $clength; if (strlen($value) == $clength) { $bars[] = $value; } } # validate input require_lib("validate"); $v = new validate(); foreach ($bars as $each) { $v->isOk($each, "num", 1, $clength, "Invalid bar code."); } # display errors, if any if ($v->isError()) { $errors = ""; $Errors = $v->getErrors(); foreach ($Errors as $e) { $errors .= "<li class=err>" . $e["msg"] . "</li>"; } $errors .= "<input type=hidden name=errors value='{$errors}'>"; return read_bars($_POST, $errors); } #we can only add as many barcodes as there is stock, so find the max and reduce the array if it exceeds the max // pglib_transaction("begin"); // // $Sl = "SELECT stkcod,stkdes,units,alloc FROM stock WHERE stkid='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to view stock"); // if(pg_numrows($Rs)<1) {return "Invalid Stock id.";} // $St = pg_fetch_array($Rs); // $Av=$St['units']-$St['alloc']; // // $i=0; // // $Sl = "SELECT code FROM ss0 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss1 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss2 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss3 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss4 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss5 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss6 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss7 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss8 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // $Sl = "SELECT code FROM ss9 WHERE stock='$id' AND div = '".USER_DIV."'"; // $Rs = db_exec ($Sl) or errDie ("Unable to retrieve barcodes from db"); // while($Tp = pg_fetch_array($Rs)){$i++;} // // pglib_transaction("commit"); // // $Wob=$Av-$i; // if ($Wob>0){ // #doesnt exceed, do nothing // foreach($bars as $each){ // $bars2[] = $each; // } // }else { // $bars2 = array (); // for($count = 0; $count <= $Wob; $count++){ // $bars2[] = $bars[$count]; // } // } db_conn("cubit"); foreach ($bars as $each) { $Sl = "SELECT * FROM possets WHERE div = '" . USER_DIV . "'"; $Rs = db_exec($Sl) or errDie("Unable to add supplier to the system.", SELF); if (pg_numrows($Rs) < 1) { return read_bars($_POST, "<li class='err'>Please go set the point of sale settings under the stock settings</li>"); } $Dets = pg_fetch_array($Rs); if ($Dets['opt'] == "No") { switch (substr($each, strlen($each) - 1, 1)) { case "0": $tab = "ss0"; break; case "1": $tab = "ss1"; break; case "2": $tab = "ss2"; break; case "3": $tab = "ss3"; break; case "4": $tab = "ss4"; break; case "5": $tab = "ss5"; break; case "6": $tab = "ss6"; break; case "7": $tab = "ss7"; break; case "8": $tab = "ss8"; break; case "9": $tab = "ss9"; break; default: return read_bars($_POST, "<li class='err'>The code you selected is invalid.</li>"); } db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = barext_dbget($tab, 'code', $each, 'stock'); if (!($stid > 0)) { return read_bars($_POST, "<li class='err'>The bar code you selected is not in the system or is not available.</li>"); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO pinv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp, ss, vatcode, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}','{$s['selamt']}','0','0','{$each}', '{$s['vatcode']}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); $Sl = "UPDATE " . $tab . " SET active = 'no' WHERE code = '{$each}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } else { db_conn('cubit'); pglib_transaction("BEGIN") or errDie("Unable to start a database transaction.", SELF); $stid = ext_dbget('stock', 'bar', $each, 'stkid'); if (!($stid > 0)) { return read_bars($_POST, "<li class='err'>The bar code you selected is not in the system or is not available.</li>"); } $Sl = "SELECT * FROM stock WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $Rs = db_exec($Sl); $s = pg_fetch_array($Rs); # put scanned-in product into invoice db $sql = "INSERT INTO pinv_items(invid, whid, stkid, qty, unitcost, amt, disc, discp, ss, vatcode, div) VALUES('{$invid}', '{$s['whid']}', '{$stid}', '1','{$s['selamt']}','{$s['selamt']}','0','0','{$each}', '{$s['vatcode']}', '" . USER_DIV . "')"; $rslt = db_exec($sql) or errDie("Unable to insert invoice items to Cubit.", SELF); # update stock(alloc + qty) $sql = "UPDATE stock SET alloc = (alloc + '1') WHERE stkid = '{$stid}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to update stock to Cubit.", SELF); pglib_transaction("COMMIT") or errDie("Unable to commit a database transaction.", SELF); } } #print and reload parent window //opener.document.form.submit() return "\n\t\t<script>\n\t\t\twindow.close();\n\t\t\topener.document.location='pos-invoice-new.php?invid={$invid}&cont=yes'\n\t\t</script>"; }