public function parse($str) { $ret = $this->default_json(); if (is_numeric(CoreLocal::get('VoidLimit')) && CoreLocal::get('VoidLimit') > 0) { Database::getsubtotals(); if (CoreLocal::get('voidTotal') > CoreLocal::get('VoidLimit') && CoreLocal::get('voidOverride') != 1) { CoreLocal::set('strRemembered', CoreLocal::get('strEntered')); CoreLocal::set('voidOverride', 0); $ret['main_frame'] = MiscLib::base_url() . 'gui-modules/adminlogin.php?class=Void'; return $ret; } } if (strlen($str) > 2) { $ret = $this->voidupc(substr($str, 2), $ret); } elseif (CoreLocal::get("currentid") == 0) { $ret['output'] = DisplayLib::boxMsg(_("No Item on Order"), '', false, DisplayLib::standardClearButton()); } else { $id = CoreLocal::get("currentid"); $status = PrehLib::checkstatus($id); $this->discounttype = $status['discounttype']; $this->discountable = $status['discountable']; $this->caseprice = $status['caseprice']; $this->scaleprice = $status['scaleprice']; /** Voided values: 2 => "you saved" line 3 => subtotal line 4 => discount notice 5 => % Discount line 6 => tare weight, case disc notice, 8 => FS change, regular change 10 => tax exempt */ if ($status['voided'] == 2) { // void preceeding item $ret = $this->voiditem($id - 1, $ret); } else { if ($status['voided'] == 3 || $status['voided'] == 6 || $status['voided'] == 8) { $ret['output'] = DisplayLib::boxMsg(_("Cannot void this entry"), '', false, DisplayLib::standardClearButton()); } else { if ($status['voided'] == 4 || $status['voided'] == 5) { PrehLib::percentDiscount(0); } else { if ($status['voided'] == 10) { TransRecord::reverseTaxExempt(); } else { if ($status['status'] == "V") { $ret['output'] = DisplayLib::boxMsg(_("Item already voided"), '', false, DisplayLib::standardClearButton()); } else { $ret = $this->voiditem($id, $ret); } } } } } } if (empty($ret['output']) && empty($ret['main_frame'])) { $ret['output'] = DisplayLib::lastpage(); $ret['redraw_footer'] = true; $ret['udpmsg'] = 'goodBeep'; } elseif (empty($ret['main_frame'])) { $ret['udpmsg'] = 'errorBeep'; } return $ret; }
function preprocess() { $this->box_color = "coloredArea"; $this->msg = "Undo transaction"; if (isset($_REQUEST['reginput'])) { $trans_num = strtoupper($_REQUEST['reginput']); // clear/cancel undo attempt if ($trans_num == "" || $trans_num == "CL") { $this->change_page($this->page_url . "gui-modules/pos2.php"); return False; } // error: malformed transaction number if (!strpos($trans_num, "-")) { $this->box_color = "errorColoredArea"; $this->msg = "Transaction not found"; return True; } $temp = explode("-", $trans_num); // error: malformed transaction number (2) if (count($temp) != 3) { $this->box_color = "errorColoredArea"; $this->msg = "Transaction not found"; return True; } $emp_no = $temp[0]; $register_no = $temp[1]; $old_trans_no = $temp[2]; // error: malformed transaction number (3) if (!is_numeric($emp_no) || !is_numeric($register_no) || !is_numeric($old_trans_no)) { $this->box_color = "errorColoredArea"; $this->msg = "Transaction not found"; return True; } $db = 0; $query = ""; if ($register_no == CoreLocal::get("laneno")) { // look up transation locally $db = Database::tDataConnect(); $query = "select upc, description, trans_type, trans_subtype,\n trans_status, department, quantity, scale, unitPrice,\n total, regPrice, tax, foodstamp, discount, memDiscount,\n discountable, discounttype, voided, PercentDiscount,\n ItemQtty, volDiscType, volume, VolSpecial, mixMatch,\n matched, card_no, trans_id\n from localtranstoday where register_no = {$register_no}\n and emp_no = {$emp_no} and trans_no = {$old_trans_no}\n and datetime >= " . $db->curdate() . "\n and trans_status <> 'X'\n order by trans_id"; } else { if (CoreLocal::get("standalone") == 1) { // error: remote lookups won't work in standalone $this->box_color = "errorColoredArea"; $this->msg = "Transaction not found"; return True; } else { // look up transaction remotely $db = Database::mDataConnect(); $query = "select upc, description, trans_type, trans_subtype,\n trans_status, department, quantity, scale, unitPrice,\n total, regPrice, tax, foodstamp, discount, memDiscount,\n discountable, discounttype, voided, PercentDiscount,\n ItemQtty, volDiscType, volume, VolSpecial, mixMatch,\n matched, card_no, trans_id\n from dtransactions where register_no = {$register_no}\n and emp_no = {$emp_no} and trans_no = {$old_trans_no}\n and datetime >= " . $db->curdate() . "\n and trans_status <> 'X'\n order by trans_id"; } } $result = $db->query($query); // transaction not found if ($db->num_rows($result) < 1) { $this->box_color = "errorColoredArea"; $this->msg = "Transaction not found"; return True; } /* change the cashier to the original transaction's cashier */ $prevCashier = CoreLocal::get("CashierNo"); CoreLocal::set("CashierNo", $emp_no); CoreLocal::set("transno", Database::gettransno($emp_no)); /* rebuild the transaction, line by line, in reverse */ $card_no = 0; TransRecord::addcomment("VOIDING TRANSACTION {$trans_num}"); while ($row = $db->fetch_array($result)) { $card_no = $row["card_no"]; if ($row["upc"] == "TAX") { //TransRecord::addtax(); } elseif ($row["trans_type"] == "T") { if ($row["description"] == "Change") { TransRecord::addchange(-1 * $row["total"]); } elseif ($row["description"] == "FS Change") { TransRecord::addfsones(-1 * $row["total"]); } else { TransRecord::addtender($row["description"], $row["trans_subtype"], -1 * $row["total"]); } } elseif (strstr($row["description"], "** YOU SAVED")) { $temp = explode("\$", $row["description"]); TransRecord::adddiscount(substr($temp[1], 0, -3), $row["department"]); } elseif ($row["upc"] == "FS Tax Exempt") { TransRecord::addfsTaxExempt(); } elseif (strstr($row["description"], "% Discount Applied")) { $temp = explode("%", $row["description"]); TransRecord::discountnotify(substr($temp[0], 3)); } elseif ($row["description"] == "** Order is Tax Exempt **") { TransRecord::addTaxExempt(); } elseif ($row["description"] == "** Tax Excemption Reversed **") { TransRecord::reverseTaxExempt(); } elseif ($row["description"] == " * Manufacturers Coupon") { TransRecord::addCoupon($row["upc"], $row["department"], -1 * $row["total"]); } elseif (strstr($row["description"], "** Tare Weight")) { $temp = explode(" ", $row["description"]); TransRecord::addTare($temp[3] * 100); } elseif ($row["upc"] == "DISCOUNT") { //TransRecord::addTransDiscount(); } elseif ($row["trans_status"] != "M" && $row["upc"] != "0" && (is_numeric($row["upc"]) || strstr($row["upc"], "DP"))) { $row["trans_status"] = "V"; $row["total"] *= -1; $row["discount"] *= -1; $row["memDiscount"] *= -1; $row["quantity"] *= -1; $row["ItemQtty"] *= -1; TransRecord::addRecord($row); } } PrehLib::setMember($card_no, 1); CoreLocal::set("autoReprint", 0); /* do NOT restore logged in cashier until this transaction is complete */ $this->change_page($this->page_url . "gui-modules/undo_confirm.php"); return False; } return True; }
public function testTransRecord() { if (!class_exists('lttLib')) { include 'lttLib.php'; } lttLib::clear(); CoreLocal::set('infoRecordQueue', array()); TransRecord::addQueued('1234567890123', 'UNIT TEST', 1, 'UT', 1.99); $queue = CoreLocal::get('infoRecordQueue'); $this->assertInternalType('array', $queue); $this->assertEquals(1, count($queue)); $this->assertArrayHasKey(0, $queue); $this->assertInternalType('array', $queue[0]); $this->assertArrayHasKey('upc', $queue[0]); $this->assertEquals('1234567890123', $queue[0]['upc']); $this->assertArrayHasKey('description', $queue[0]); $this->assertEquals('UNIT TEST', $queue[0]['description']); $this->assertArrayHasKey('numflag', $queue[0]); $this->assertEquals(1, $queue[0]['numflag']); $this->assertArrayHasKey('charflag', $queue[0]); $this->assertEquals('UT', $queue[0]['charflag']); $this->assertArrayHasKey('regPrice', $queue[0]); $this->assertEquals(1.99, $queue[0]['regPrice']); TransRecord::emptyQueue(); $queue = CoreLocal::get('infoRecordQueue'); $this->assertInternalType('array', $queue); $this->assertEquals(0, count($queue)); $record = lttLib::genericRecord(); $record['upc'] = '1234567890123'; $record['description'] = 'UNIT TEST'; $record['numflag'] = 1; $record['charflag'] = 'UT'; $record['regPrice'] = 1.99; $record['trans_type'] = 'C'; $record['trans_status'] = 'D'; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); CoreLocal::set('taxTotal', 1.23); TransRecord::addtax(); $record = lttLib::genericRecord(); $record['upc'] = 'TAX'; $record['description'] = 'Tax'; $record['trans_type'] = 'A'; $record['total'] = 1.23; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addtender('UT TENDER', 'UT', 2.34); $record = lttLib::genericRecord(); $record['description'] = 'UT TENDER'; $record['trans_type'] = 'T'; $record['trans_subtype'] = 'UT'; $record['total'] = 2.34; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addcomment('UNIT TEST COMMENT'); $record = lttLib::genericRecord(); $record['description'] = 'UNIT TEST COMMENT'; $record['trans_type'] = 'C'; $record['trans_subtype'] = 'CM'; $record['trans_status'] = 'D'; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addchange(3.14, 'UT'); $record = lttLib::genericRecord(); $record['description'] = 'Change'; $record['trans_type'] = 'T'; $record['trans_subtype'] = 'UT'; $record['total'] = 3.14; $record['voided'] = 8; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addfsones(3); $record = lttLib::genericRecord(); $record['description'] = 'FS Change'; $record['trans_type'] = 'T'; $record['trans_subtype'] = 'FS'; $record['total'] = 3; $record['voided'] = 8; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::adddiscount(5.45, 25); $record = lttLib::genericRecord(); $record['description'] = '** YOU SAVED $5.45 **'; $record['trans_type'] = 'I'; $record['trans_status'] = 'D'; $record['department'] = 25; $record['voided'] = 2; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addfsTaxExempt(); $record = lttLib::genericRecord(); $record['upc'] = 'FS Tax Exempt'; $record['description'] = ' Fs Tax Exempt '; $record['trans_type'] = 'C'; $record['trans_status'] = 'D'; $record['voided'] = 17; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::discountnotify(5); $record = lttLib::genericRecord(); $record['description'] = '** 5% Discount Applied **'; $record['trans_status'] = 'D'; $record['voided'] = 4; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addTaxExempt(); $record = lttLib::genericRecord(); $record['description'] = '** Order is Tax Exempt **'; $record['trans_status'] = 'D'; $record['voided'] = 10; $record['tax'] = 9; lttLib::verifyRecord(1, $record, $this); $this->assertEquals(1, CoreLocal::get('TaxExempt')); lttLib::clear(); TransRecord::reverseTaxExempt(); $record = lttLib::genericRecord(); $record['description'] = '** Tax Exemption Reversed **'; $record['trans_status'] = 'D'; $record['voided'] = 10; $record['tax'] = 9; lttLib::verifyRecord(1, $record, $this); $this->assertEquals(0, CoreLocal::get('TaxExempt')); lttLib::clear(); CoreLocal::set('casediscount', 7); TransRecord::addcdnotify(); $record = lttLib::genericRecord(); $record['description'] = '** 7% Case Discount Applied'; $record['trans_status'] = 'D'; $record['voided'] = 6; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addCoupon('0051234512345', 123, -1.23, 1); $record = lttLib::genericRecord(); $record['upc'] = '0051234512345'; $record['description'] = ' * Manufacturers Coupon'; $record['trans_type'] = 'I'; $record['trans_subtype'] = 'CP'; $record['trans_status'] = 'C'; $record['department'] = 123; $record['unitPrice'] = -1.23; $record['total'] = -1.23; $record['regPrice'] = -1.23; $record['foodstamp'] = 1; $record['quantity'] = 1; $record['ItemQtty'] = 1; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addhousecoupon('0049999912345', 122, -1.22); $record = lttLib::genericRecord(); $record['upc'] = '0049999912345'; $record['description'] = ' * Store Coupon'; $record['trans_type'] = 'I'; $record['trans_subtype'] = 'IC'; $record['trans_status'] = 'C'; $record['department'] = 122; $record['unitPrice'] = -1.22; $record['total'] = -1.22; $record['regPrice'] = -1.22; $record['quantity'] = 1; $record['ItemQtty'] = 1; $record['discountable'] = 1; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::additemdiscount(345, 3.45); $record = lttLib::genericRecord(); $record['upc'] = 'ITEMDISCOUNT'; $record['description'] = ' * Item Discount'; $record['trans_type'] = 'I'; $record['department'] = 345; $record['unitPrice'] = -3.45; $record['total'] = -3.45; $record['regPrice'] = -3.45; $record['quantity'] = 1; $record['ItemQtty'] = 1; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addtare(5); $record = lttLib::genericRecord(); $record['description'] = '** Tare Weight 0.05 **'; $record['trans_status'] = 'D'; $record['voided'] = 6; lttLib::verifyRecord(1, $record, $this); $this->assertEquals(0.05, CoreLocal::get('tare')); lttLib::clear(); CoreLocal::set('transDiscount', 3.24); TransRecord::addTransDiscount(); $record = lttLib::genericRecord(); $record['upc'] = 'DISCOUNT'; $record['description'] = 'Discount'; $record['trans_type'] = 'S'; $record['quantity'] = 1; $record['ItemQtty'] = 1; $record['unitPrice'] = -3.24; $record['total'] = -3.24; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); TransRecord::addCashDrop('90.78'); $record = lttLib::genericRecord(); $record['upc'] = 'DROP'; $record['description'] = 'Cash Drop'; $record['trans_type'] = 'I'; $record['trans_status'] = 'X'; $record['quantity'] = 1; $record['ItemQtty'] = 1; $record['unitPrice'] = -90.78; $record['total'] = -90.78; $record['charflag'] = 'CD'; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); $record = lttLib::genericRecord(); $record['upc'] = 'UNITTEST'; $record['description'] = 'Unit Test'; $record['department'] = 5; $record['numflag'] = 4; $record['charflag'] = 'UT'; $record['amount1'] = 1.23; $record['total'] = 1.23; $record['amount2'] = 1.24; $record['regPrice'] = 1.24; TransRecord::add_log_record($record); unset($record['amount1']); // not real column unset($record['amount2']); // not real column $record['trans_type'] = 'L'; $record['trans_subtype'] = 'OG'; $record['trans_status'] = 'D'; lttLib::verifyRecord(1, $record, $this); lttLib::clear(); }