Beispiel #1
0
 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;
 }
Beispiel #2
0
 public function add()
 {
     parent::add();
     TransRecord::addfsTaxExempt();
 }
Beispiel #3
0
 public function cleanup($json)
 {
     switch (CoreLocal::get("paycard_mode")) {
         case PaycardLib::PAYCARD_MODE_ADDVALUE:
         case PaycardLib::PAYCARD_MODE_ACTIVATE:
             CoreLocal::set("autoReprint", 1);
             $ttl = CoreLocal::get("paycard_amount");
             PrehLib::deptkey($ttl * 100, 9020);
             $bal = CoreLocal::get('GiftBalance');
             CoreLocal::set("boxMsg", "<b>Success</b><font size=-1>\n                                           <p>New card balance: \$" . $bal . "\n                                           <p>[enter] to continue\n                                           <br>\"rp\" to reprint slip</font>");
             break;
         case PaycardLib::PAYCARD_MODE_BALANCE:
             $bal = CoreLocal::get('DatacapBalanceCheck');
             CoreLocal::set("boxMsg", "<b>Success</b><font size=-1>\n                                           <p>Card balance: \$" . $bal . "\n                                           <p>\"rp\" to print\n                                           <br>[enter] to continue</font>");
             break;
         case PaycardLib::PAYCARD_MODE_AUTH:
             // cast to string. tender function expects string input
             // numeric input screws up parsing on negative values > $0.99
             $amt = "" . -1 * CoreLocal::get("paycard_amount");
             $type = CoreLocal::get("CacheCardType");
             $t_type = 'CC';
             if (CoreLocal::get('paycard_issuer') == 'American Express') {
                 $t_type = 'AX';
             }
             if ($type == 'EBTFOOD') {
                 // extra tax exemption steps
                 TransRecord::addfsTaxExempt();
                 CoreLocal::set("fntlflag", 0);
                 Database::setglobalvalue("FntlFlag", 0);
             }
             list($tender_code, $tender_description) = PaycardLib::getTenderInfo($type, CoreLocal::get('paycard_issuer'));
             // if the transaction has a non-zero paycardTransactionID,
             // include it in the tender line
             $record_id = $this->last_paycard_transaction_id;
             $charflag = $record_id != 0 ? 'PT' : '';
             TransRecord::addFlaggedTender($tender_description, $tender_code, $amt, $record_id, $charflag);
             $appr_type = 'Approved';
             if (CoreLocal::get('paycard_partial')) {
                 $appr_type = 'Partial Approval';
             } elseif (CoreLocal::get('paycard_amount') == 0) {
                 $appr_type = 'Declined';
                 $json['receipt'] = 'ccDecline';
             }
             CoreLocal::set('paycard_partial', false);
             $isCredit = CoreLocal::get('CacheCardType') == 'CREDIT' || CoreLocal::get('CacheCardType') == '' ? true : false;
             $needSig = CoreLocal::get('paycard_amount') > CoreLocal::get('CCSigLimit') || CoreLocal::get('paycard_amount') < 0 ? true : false;
             if (($isCredit || CoreLocal::get('EmvSignature') === true) && $needSig) {
                 CoreLocal::set("boxMsg", "<b>{$appr_type}</b>\n                            <font size=-1>\n                            <p>Please verify cardholder signature\n                            <p>[enter] to continue\n                            <br>\"rp\" to reprint slip\n                            <br>[void] " . _('to reverse the charge') . "\n                            </font>");
                 if (CoreLocal::get('PaycardsSigCapture') != 1) {
                     $json['receipt'] = 'ccSlip';
                 }
             } else {
                 CoreLocal::set("boxMsg", "<b>{$appr_type}</b>\n                            <font size=-1>\n                            <p>No signature required\n                            <p>[enter] to continue\n                            <br>[void] " . _('to reverse the charge') . "\n                            </font>");
             }
             break;
         case PaycardLib::PAYCARD_MODE_VOID:
             $void = new Void();
             $void->voidid(CoreLocal::get("paycard_id"), array());
             // advanced ID to the void line
             CoreLocal::set('paycard_id', CoreLocal::get('paycard_id') + 1);
             CoreLocal::set("boxMsg", "<b>Voided</b>\n                                           <p><font size=-1>[enter] to continue\n                                           <br>\"rp\" to reprint slip</font>");
             break;
     }
     return $json;
 }
Beispiel #4
0
 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();
 }