function scan()
{
    $invoice = array("invoice" => "Scan Invoice");
    $barcode = flashRed($invoice);
    $barcode = $barcode["invoice"];
    $sorder_num = decrypt_barcode($barcode);
    if (empty($sorder_num) || !is_numeric($sorder_num)) {
        $sorder_num = 0;
    }
    $prd_union = array();
    for ($i = 1; $i <= 14; $i++) {
        $prd_union[] = "SELECT pslip_sordid FROM \"{$i}\".pinvoices WHERE pslip_sordid='{$sorder_num}'";
    }
    $pinvoices_sql = implode(" UNION ", $prd_union);
    $sql = "SELECT pslip_sordid FROM cubit.invoices WHERE pslip_sordid='{$sorder_num}' UNION {$pinvoices_sql}";
    $invoice_rslt = db_exec($sql) or errDie("Unable to check sales order id.");
    if (!pg_num_rows($invoice_rslt) || $sorder_num == 0) {
        return scan_error("Scanned invoice does not exist.");
    }
    $sql = "SELECT sordid FROM cubit.pslip_signed_index WHERE sordid='{$sorder_num}'";
    $psi_rslt = db_exec($sql) or errDie("Unable to retrieve index.");
    if (pg_num_rows($psi_rslt) > 0) {
        scan_error("Signed invoice already uploaded");
    }
    return enter($sorder_num);
}
function display($OUTPUT = "", $user_id = 0)
{
    $flashes = array("user_id" => "Scan Employee");
    list($user_id) = array_values(flashRed($flashes, $OUTPUT));
    if (!is_numeric($user_id)) {
        header("Location: " . SELF);
    } else {
        //new
        $get_emp = "SELECT empnum FROM employees WHERE enum = '{$user_id}' LIMIT 1";
        $run_emp = db_exec($get_emp) or errDie("Unable to get employee information.");
        if (pg_numrows($run_emp) > 0) {
            $empnum = pg_fetch_result($run_emp, 0, 0);
            $get_userid = "SELECT userid FROM users WHERE empnum = '{$empnum}' LIMIT 1";
            $run_userid = db_exec($get_userid) or errDie("Unable to get user information.");
            if (pg_numrows($run_userid) > 0) {
                $user_id = pg_fetch_result($run_userid, 0, 0);
            } else {
                header("Location: " . SELF);
            }
        } else {
            header("Location: " . SELF);
        }
        $sql = "SELECT userid,empnum FROM cubit.users WHERE userid='{$user_id}'";
        $user_rslt = db_exec($sql) or errDie("Unable to retrieve user.");
        if (!pg_num_rows($user_rslt)) {
            header("Location: " . SELF);
        }
        $user_arr = pg_fetch_array($user_rslt);
        $sql = "SELECT empnum, enum, sname, fnames FROM cubit.employees WHERE empnum = '{$user_arr['empnum']}' LIMIT 1";
        $emp_rslt = db_exec($sql) or errDie("Unable to retrieve employees.");
        $emp_data = pg_fetch_array($emp_rslt);
    }
    $attendance = do_attendance($user_id);
    if ($attendance) {
        list($book_type, $time) = array_values($attendance);
    } else {
        unset($_POST);
        display();
    }
    define("TIMEOUT", 10);
    $OUTPUT = "\n\t\t<center>\n\t\t<script>\n\t\t\tsetTimeout('Redirect()', " . TIMEOUT * 1000 . ");\n\t\t\tfunction Redirect()\n\t\t\t{\n\t\t\t\tlocation.href = '" . SELF . "';\n\t\t\t}\n\t\t</script>\n\t\t<h3>Employee Time and Attendance</h3>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td align='center'><li class='err'>Next scan in " . TIMEOUT . " seconds...</li></td>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td style='font-size: 1.2em'>{$book_type}: {$time}</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t<br>\n\t\t<table " . TMPL_tblDflts . ">\n\t\t\t<tr>\n\t\t\t\t<th colspan='5'>Employee</th>\n\t\t\t</tr>\n\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t<td><img src='../employee-view-image.php?id={$emp_data['empnum']}' width='60' height='75' /></td>\n\t\t\t\t<td>{$emp_data['sname']}</td>\n\t\t\t\t<td>{$emp_data['fnames']}</td>\n\t\t\t\t<td>{$emp_data['username']}</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t</center>";
    return $OUTPUT;
}
function scan()
{
    // Check setting
    $sql = "SELECT set FROM cubit.picking_slip_setting";
    $setting_rslt = db_exec($sql) or errDie("Unable to retrieve setting.");
    $setting = pg_fetch_result($setting_rslt, 0);
    if ($setting == "n") {
        header("Location: picking_slip_settings.php");
    }
    $invoice = array("invoice" => "Scan Invoice");
    list($barcode) = array_values(flashRed($invoice));
    $sordid = decrypt_barcode($barcode);
    if (empty($sordid) || !is_numeric($sordid)) {
        $sordid = 0;
    }
    // Has this invoice been scanned before
    $sql = "SELECT id FROM cubit.pslip_scans WHERE sordid='{$sordid}'";
    $scan_rslt = db_exec($sql) or errDie("Unable to retrieve scans.");
    $sql = "SELECT sordid FROM cubit.sorders WHERE sordid='{$sordid}'";
    $sorder_rslt = db_exec($sql) or errDie("Unable to retrieve sales order.");
    if (pg_num_rows($sorder_rslt)) {
        $reason = "";
        if (pg_num_rows($scan_rslt)) {
            $reason = "DUPLICATE (No reason)";
        }
        $sql = "\n\t\t\tINSERT INTO cubit.pslip_scans (\n\t\t\t\tsordid, timestamp, userid, reason\n\t\t\t) VALUES (\n\t\t\t\t'{$sordid}', current_timestamp, '" . USER_ID . "', '{$reason}'\n\t\t\t)";
        db_exec($sql) or errDie("Unable to record scan.");
    } else {
        return scan_error();
    }
    if (pg_num_rows($scan_rslt)) {
        $scan_id = pglib_lastid("cubit.pslip_scans", "id");
        return reason($scan_id);
    }
    return dispatch($sordid);
}
function invoice_scan()
{
    extract($_REQUEST);
    /*
    	// Check setting
    	$sql = "SELECT set FROM cubit.picking_slip_setting";
    	$setting_rslt = db_exec($sql) or errDie("Unable to retrieve setting.");
    	$setting = pg_fetch_result($setting_rslt, 0);
    
    	if ($setting == "n") {
    		header("Location: picking_slip_settings.php");
    	}
    */
    $invoice = array("invoice" => "Scan Invoice");
    list($barcode) = array_values(flashRed($invoice, "", $_REQUEST));
    $invid = decrypt_barcode($barcode);
    if (empty($invid) || !is_numeric($invid)) {
        $invid = 0;
    }
    /*
    	// Has this invoice been scanned before
    	$sql = "SELECT id FROM cubit.pslip_scans WHERE sordid='$sordid'";
    	$scan_rslt = db_exec($sql) or errDie("Unable to retrieve scans.");
    */
    $sql = "SELECT id FROM cubit.dispatch_scans WHERE invid='{$invid}'";
    $scan_rslt = db_exec($sql) or errDie("Unable to retrieve scans.");
    $sql = "SELECT invid FROM " . which_invoice($invid) . " WHERE invid='{$invid}'";
    $inv_rslt = db_exec($sql) or errDie("Unable to retrieve invoice.");
    $duplicate = pg_num_rows($scan_rslt) ? 1 : 0;
    if (pg_num_rows($inv_rslt)) {
        $sql = "\n\t\t\tINSERT INTO cubit.dispatch_scans (invid, timestamp, userid,\n\t\t\t\tduplicate, dispatch_type)\n\t\t\t\tVALUES ('{$invid}', current_timestamp, '" . USER_ID . "',\n\t\t\t\t\t'{$duplicate}', '{$dispatch_type}')";
        db_exec($sql) or errDie("Unable to record scan.");
    }
    $scan_id = pglib_lastid("cubit.pslip_scans", "id");
    if (pg_num_rows($scan_rslt)) {
        return invoice_error_block($scan_id);
    } else {
        if (!pg_num_rows($inv_rslt)) {
            return invoice_error_notfound();
        }
    }
    return dispatch_now($scan_id);
}