Change Log

8/12/2015
====================================================
- Fixed Item Grouping and Discounts reporting.
- Fixed crash that occured when paying an order (only cloud was affected).
- Fixed a refresh problem that occured with applying a discount override when there is no manager pin set.
- Fixed receipts with discounts listed on them. They will now appear in ( ) to indicate that the discount is a negative amount applied to the item.
- Clairified receipts to show option prices with a "+" or "-".

8/5/2015
====================================================
- Fixed a couple issues related to first-time run.

7/18/2015
====================================================
- Fixed a crash that can occur on startup when processes can clash with each other.
- Discounts: Macro function applyDiscount() can now override discount conditions with manager pin.

7/15/2015
====================================================
- Discounts: Can now set a time of day restriction for discounts.

7/12/2015
====================================================
- Item Editor: Fixed crash that occured with removing all item groups.
- Item Editor: Added "Copy Macro" and "Paste Macro" to the macro line.
- Macros: New functions: selectPrevious(), selectNext(), and selectFirstChild().
- Now reports sequence numbers to the server. Useful if a tablet is replaced, the new tablet will start using the sequence numbers of the old tablet.

5/31/2015
====================================================
- Server access configuration is now stored in the database.

5/22/2015
====================================================
- Discounts System: Fixed a problem with applying discounts to items in a group.

5/19/2015
====================================================
- Sync Service: Fixed crash that could occur if certain background syncs didn't complete in less than 1 second.
- Order Split: Fixed crash that occured when trying to split to 3 or 4 orders.

5/18/2015
====================================================
- Training Mode: Many more fixes for training mode.
- Order Select: Fixed a problem that occured when long-press an order, then try to select another order.
- Fixed a problem with opening orders in training mode.
- Order Split: Fixed problems with order split screen when in Training mode or local mode.

5/14/2015
====================================================
- Fixed a problem when storing a new order. (Would sometimes not show new delivery orders in the dispatch screen. This problem surfaced when we changed how the system assigns order numbers.)
- Employee Manager: Fixed many issues with the employee manager (specifically when the system is offline.) Note: The employee manager DOES NOT sync once it's online again.
- Dispatch Screen: Fixed many issues with the dispatch screen (specifically when the system is offline.)
- Training Mode: When entering training mode, the user is prompted if they wish to reset the training mode data.

5/7/2015
====================================================
- re-designed customer identifiers to be the same way as order numbers. This guarentees that each device can generate a unique id number for each customer weather the system is online or offline.
- Training mode now extends to customer data.
- Sync Service: customer and customer log data are now sync'd with the database server.
- Many fixes for training mode and the sync service.

5/5/2015
*** MAJOR UPDATE *** - We are currently in the process of changing how data gets sync'd to the database server. Our ultimate goal for doing this is to have a robust fallback system that will allow the system to function when the database service is not available or when there are network problems.
- We have re-designed the orders functionality to store all order data locally, then request a sync to the database service. When the database service is un-reachable, the point of sale system will go into "local mode" indicated by a yellow top bar. The sync service will then continue to try to communicate with the database service, once the service is reachable, the sync service will sync all updated data to the database server.
- We plan to bring this sync functionality to all data that needs to be shared between multiple devices.
- Currently, order data is syncronized in this way with the database server.
- In our testing, there is a slight speed up when storing order data.
====================================================
Other Updates Include:
- New: Training mode! This will re-direct data updates for orders to temporary tables while the training mode is active. This allows employees to learn the point of sale system and programming without affecting the live order data. The top bar turns green when in training mode.

4/27/2015
====================================================
- Macro Editor: Fixed macro editor when creating a new menu button with a macro.
- Report Groups: Fixed crash due to group ID not being entered while adding new reporting groups. Now will inform user that an ID must be provided.
- Startup: Fixed potential issue that could occur when automatic database backup takes more than 1 second.
- Main Menu: Scan a barcode now checks if the order is paid. If it is paid, the order will be opened instead of tendered.
- Disabled "full screen" mode as many devices don't honor the full screen flag.

4/20/2015
====================================================
- Dispatch Screen: In multi-device mode, the auto-refresh no longer displays a dialog when there are no orders.
- Preferences > Database: Added a "Port" option and a "Database Key" option.
- Started work on the cloud database service option.

4/17/2015
====================================================
- Added barcode support. Now prints barcodes on receipts.
- Main Menu: Scan a barcode to pay orders.

4/16/2015
====================================================
- Updated communications protocol to be more HTTP like, for future cloud options.

4/13/2015
====================================================
- Customer Search: Increased search result line height (to make it easier to choose a line) and hide the on-screen keyboard when the search button is pressed.
- Print Preview: Altered "Print" button locations.
- Order Dispatch: Created an advanced order dispatch mode for multi-device enviroments.
- Order Dispatch: Added a "Refresh" button.
- Sign-in Screen: Added a shortcut to "Order Dispatch."

4/2/2015
====================================================
- New support for Brother Label printer model QL-720NW. Currently, label printing is tailored to a pizzeria restaurant.
- Options Editor: New grouping type labeled "Ingredients 2." Acts exactly as Ingredients except removes the keyword "Add" from any selections chosen. For example: Instead of "Add Pepperoni" it would just say "Pepperoni."

1/29/2015
====================================================
- Reports: Now includes discounts section for Nightly Z.
- Macros: Added new function addRemark().
- Discounts: Changed the discounts behavior as follows: 1) discounts will not apply to children items in an item grouping and 2) discounts considers all price amounts of an item grouping when determining if a discount is valid.

1/29/2015
====================================================
- Discounts System: New feature. Can specify discounts and discount conditions via Settings > Programming > Discounts Programming.
Note: discounts not automatically applied needs macro buttons using applyDiscount() to apply a discount to the selected item.
- Macro Editor: Created new functions applyDiscount() and applyManualDiscount().

1/22/2015
====================================================
- Main: New button selector mode. Currently Used in the Macro Editor for button type selection.
- Macro Editor: Made the if() function value a smart selector (ie. choosing variable "sid" will launch the button selector in multi-select mode, choosing variable "qty" will give a number pad, choosing variable "dow" will give a day of week selector.)

1/22/2015
====================================================
- Macros: Fixed problem using variable "sgroupid".
- 3d Cart API: Added API for 3dCart. This API can: Get product data, and update inventory values.
- Added support for (keyboard emulated) barcode scanners.

1/16/2015
====================================================
- Split Order Screen: Moves items 1 at a time for quantities > 1.

12/23/2014
====================================================
- TWD Inventory API: Can now automatically adjust inventory quantities.

12/13/2014
====================================================
- Added macro options to addItem() and addItemWithGroup() to dis-allow negative price values for items being added via macro. (this flag does not persist.)
- Fixed children items to display negative price values.
- Added new macro variables to get options count or options with price count.
- Added new macro function promptManagerPin() to prompt for manager pin. Stops macro processing if user doesn't enter the correct pin.

12/08/2014
====================================================
- Options Dialog: Adjusted text colors for better contrast with yellow and green background colors.
- Added a duplicate function to options programming page.
- Added a button copy/paste function to the menu editor. Press-hold a button and choose "Copy" then tap a category to paste to.

11/08/2014
====================================================
- Added support for the Paypal Sideloader to accept credit card payments via Paypal Here.

11/08/2014
====================================================
- Fixed an error with Options dialog that sometimes caused just the price to be on new line in the remarks.
- Moved database auto-backup settings from General tab to Database tab.
- Fixed an error with paths for Database Backup when user chooses the "Auto Backup Location" option.
- Macro Editor: Fixed a couple instances that can cause a crash when clicking Cancel in a dialog or upon exiting the function editor.
- Menu Item Editor: Fixed a crash in the menu button editor when adding a new button and trying to set option groups or choose default options.
- Menu Item Editor: Added a "Save" button to the top right menu area. Performs the same action as pressing Save on the bottom.

11/06/2014
====================================================
- Fixed a critical error with incorrectly adding up order totals on receipts and in orders table.
- Fixed Options to charge the Add price when "Easy" is chosen for ingredients an item doesn't normally have.
- Fixed Options to charge the Add price when "Extra" is chosen for ingreditents a item normally does have.
- Fixed a couple variable maintainence issues when importing a database.

11/01/2014
====================================================
- Macros: Fixed a few minor issues with the macro system not parsing/returning/setting variables.
- Macros: Added a cancel(); function which cancels the default button press action and turns the button into a "Macro Only" button.

10/29/2014
====================================================
- Implimented the database server side of the coding for the new Options and Ooptions Groups feature.
- Made icons for all the companion apps made for the Restaurant Order Pad.
- Fixed a few force close issues found with the new Options and Option Groups feature.

10/28/2014
====================================================
- Added a new "Options & Option Groups" feature that makes it easier to do order modifications.

10/24/2014
====================================================
- Launcher: fixed crash caused by missing packages(apps)
- Launcher: now 100% locked down, prevents users from using any unauthorized apps!

10/22/2014
====================================================
- Created a "Launcher" app to replace the default Home Screen on Android. (To prevent employees from accessing other apps that may be on the tablet or change the configuration of the tablet itself.)
- Set a separate "Manager Pin" for the new Launcher app. Manager pin is required to launch the Android launcher for configuration purposes.

10/18/2014
====================================================
- Added "Register Number" to the General preferences; to identify terminal numbers. Able to set the Register Number upon startup if none is set.
- Deleted header information on the Main Menu. Replaced it with an Information Bar at the bottom to display Register Number, Drawer ID, and User ID.
- Added new tab to preferences titled "Programming" to handle functions related to terminal programming. Moved the "Menu Editor" option from the main menu to the new tab.
- Added new tab to preferences titled "Database" to handle database functions (Replaces the "Database Utilities" page.) Moved all "Database Utilities" options from all menus to the new tab.

9/4/2014
====================================================
- Added ability to create timed orders.
- Removed "Paid" text (if order is paid) from packing slip.
- Fixed a critical error with storing a new order using multi-terminal mode. Sometimes the order ID would be missing from the order items.
- Fixed a critical error with retriving data in multi-terminal mode.

8/31/2014
====================================================
- Changing the quantity of a bundled item or it's children is no longer allowed!
- Changing the price of a bundled item's child is no longer allowed!
- Fixed an error with packing slip data not being saved in multi-terminal mode.
- Can now print multiple documents at once to the same printer.
- Fixed a crash caused by inproper interface cleanup in remote database code.

8/29/2014
====================================================
- Various bug fixes introduced with packing slip and kitchen printing features.
- User Manager: will no longer launch the main menu when a new user is added.
- User Manager: adding users now uses the full user dialog.
- Macros: Math() function can now perform rounding.

8/27/2014
====================================================
- The Kitchen Video Server and Database Server are now seperate apps.
- Refined the discoverer functions to accomodate the above change.
- Added support for a kitchen printer.
- Added packing slip / condiments feature.
- Added support for a packing slip printer.
- Fixed a problem with "open drawer" missing when the cash drawer option is enabled.

8/23/2014
====================================================
- Order Select: Altered the way the "List Orders" page works. It now works like a single item selection with a row of function buttons above the order list.
- Main Menu: "Pay Order" button is no longer needed due to above change!
- Order Select: Fixed a problem where somtimes "Print Order" would cause a app crash. (This occured because the database reference was closed before the print activity could query the database.)
- Order Select: Fixed a crash where you locate an order by order number, then try to locate another order/customer by order number.
- Order Select: Order Void option now provides a confirmation dialog before order is actually voided.

8/22/2014
====================================================
- Fixed a stack overflow error while using the "print receipt" option.
- Fixed a problem with database server communication timeouts. This would cause the splash screen to appear frozen for over a minute when communication fails with the database server.
- New option to enable letter input in table #.

8/10/2014
====================================================
- Fixed an error where a "customer credit" is sent to the kitchen video.
- Created a split order interface.
- Fixed a problem with the kitchen video, service would stop and not re-start when the database is restored (imported.)

8/7/2014
====================================================
- Customer Search: Can search/view customer log by Order Number.
- Order Search: Locate customers by Order Number.
- Order Search: Retrieve orders (print preview) by Order Number.
- Order Dispatch: Uses multi-selection mode instead of removing orders from the screen.

8/3/2014
====================================================
- Customer entries can now have a comment automatically attached to their orders. (Useful for entering directions to customer's location.)
- Customer's can now be flagged as "Do Not Serve" or "No Checks."
- Created a "customer log" to log various customer related activity. (For Example: entering NSF or No Checks records or Do Not Serve records.)
- Customer credits are now also logged in the customer log in addition to the credit log.
- Created a new customer viewer for all the above new functionality! All existing functions where an order list by customer id is retrieved, this viewer now opens in it's place!

7/31/2014
====================================================
- Customer Search: Changed how the customer search handles parse exceptions on the address field. The address field will now accept any text input.
- Customer Search: When pressing an existing customer entry that doesn't exactly match the input fields, user is now prompted if they want to update the existing customer record.
- Fixed a crash caused by launching the main register without loading certain Global values.

7/23/2014
====================================================
- Added a new condition when system tries to combine like items. Fixes a problem with using macros to set a price, then using the same macro with a different price.
- Fixed a possible app crash in the number pad dialog.
- Fixed an issue with the macro editor that causes app crashes in certain situations.

7/19/2014
====================================================
- Fixed an error where app restart is required but it didn't restart.
- Fixed an error with change tender in retail mode.
- Fixed an error with using the "Enter Customer Info" option in the menu screen.
- Now using our number pad dialog for "Enter Customer Info" to enter a table #, if the order type is a table.

7/13/2014
====================================================
- Fixed an error caused by manually changing an item price.

7/12/2014
====================================================
- Added a basic Function editor for the Macro editor. (later will create specific dialogs/pages for each argument type.)

7/10/2014
====================================================
- Fixed an error in global variables remote database read function.
- Fixed a crash when the macro editor closes.
- Added a remote database version check on startup to ensure both server and client have the same version.

7/8/2014
====================================================
- Created a macro editor (a basic one for now to make it easier to visualize the macro flow, insert new macro functions, move them up/down, delete functions.)
- Added additional code to make macro arguments more relaxed (does not require quotes anymore however, use them if you use special characters or a comma!)

7/7/2014
====================================================
- Sync'd database changes to the Database Server.
- Added ability for database server to receive and process multiple database changes at the same time. (Speedup while storing orders.)
- Fixed a bug when a macro adds an item as part of a group and that item already exists. (would increment qty instead of adding a new line item as expected.)

7/6/2014
====================================================
- Added color coding for order items that are part of a group (highlighted in yellow.)
- Changed "Void Item" functionality to accomodate order item groups. User will be asked if they want to void the entire group or remove the item grouping. Removing the item grouping will reset certain attributes (price, clears the child flag.)
- Fixed a bug when the user presses the top heading item. (bug created when the auto-category on item press was introduced.)

7/4/2014
====================================================
- Fixed an bug with the menu editor. When you delete a button, it would still appear to be there although the button's data was deleted from the database. System now forces a menu and button refresh when a button is deleted.
- Category is now attached to the order list items. This will activate the category that created it when you select the order item from the order list.
- Added setItemCategory(); to programmically change the category that the selected item is attached to.

7/2/2014
====================================================
- Added setVar(); function to programmically set variables.
- Added math(); function to perform math operations.
- Added newGroupId(); function to incriment the group ID for use with grouping items in a bundle.
- Added a "IsChild" flag to items list—to identify child items as part of a group. Items marked as a child will not display it's qty. Will only display a price if it is > 0.
- Added new fields to database to support group id's and isChild flag. Also added a "category" field which will record which category was active when the order item was created.

6/29/2014
====================================================
- Added new variables to retrieve properties of the selected order item. (Used in conditional processing.)
- Added addItem(); and addItems(); to button macro framework. (Makes it possible to create bundled items such as a 2 for $ offer.)
- Added "Button ID" to the button editor (need button ID's for above mentioned macro functions.)
- Added setItemText(); and setItemQty(); to button macro framework to change attributes of the selected order item.
- Fixed an error in conditional processing flow.
- Added ability to use OR "|" conditions in the if(); function.
Sample: if("bid","=","23|46|92"); ... endif(); would match button id's 23, 46, or 92 to be true.

6/28/2014
====================================================
- Fixed an issue with item selection that occured when loading orders while in portrit orientation.