From 56d42f1339f58772f9510a08d5f08a246af4b13f Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 8 Jan 2022 19:25:01 +1000 Subject: [PATCH] Added open food/freetext commands --- AjaxController.fs | 1 + DredgeFramework.module.fs | 2 + PageController.fs | 9 ++++ wwwroot/languages/english/main.json | 4 +- wwwroot/scripts/ts/dredgepos.orderScreen.ts | 45 ++++++++++++++++++- wwwroot/styles/sass/dredgepos.core.sass | 1 + wwwroot/themes/restaurant/orderScreen.tpl.htm | 4 +- 7 files changed, 61 insertions(+), 5 deletions(-) diff --git a/AjaxController.fs b/AjaxController.fs index e56e032..b33a1bb 100644 --- a/AjaxController.fs +++ b/AjaxController.fs @@ -59,6 +59,7 @@ let getOrderScreenData (id: int) = order_screen_pages = Entity.getAllInVenue sales_categories = Entity.getAllInVenue print_groups = Entity.getAllInVenue + custom_item = Entity.getAllByColumn "item_code" "OPEN000" |> first |} |> ajaxSuccess |> json diff --git a/DredgeFramework.module.fs b/DredgeFramework.module.fs index 566f8fd..3639052 100644 --- a/DredgeFramework.module.fs +++ b/DredgeFramework.module.fs @@ -38,8 +38,10 @@ let GetFileName (file: string) = Path.GetFileName file let length (variable: 'T[]) = variable.Length let first (array: 'a[]) = array[0] + let last (array: 'a[]) = array[array.Length-1] +let filterFirst (array:'a[]) = if array.Length > 0 then [|array[0]|] else [||] let removeFalseValues (variable: bool[]) = variable |> Array.filter id diff --git a/PageController.fs b/PageController.fs index 3bfa88f..f45c0ff 100644 --- a/PageController.fs +++ b/PageController.fs @@ -2,6 +2,7 @@ open System open DredgePos.Types +open FSharp.Data open Microsoft.AspNetCore.Http open Floorplan open Giraffe @@ -64,6 +65,13 @@ let loadOrderScreen (ctx: HttpContext) (tableNumber: int) : HttpHandler = |> Array.map OrderScreen.getPagesHTML |> String.concat "\n" + let customItem = + Entity.getAllByColumn "item_code" "OPEN000" + |> filterFirst + |> Array.map jsonEncode + |> String.concat "" + + let variables = map [ "title", "Order" "categoryList", categoryList @@ -72,6 +80,7 @@ let loadOrderScreen (ctx: HttpContext) (tableNumber: int) : HttpHandler = "coverSelectorButton", coverSelectorButton "covers", coverString "salesCategoryOverrideButtons", OrderScreen.generateSalesCategoryOverrideButtons () + "custom", OrderScreen.generateSalesCategoryOverrideButtons () ] let styles = ["dredgepos.orderScreen.css"] diff --git a/wwwroot/languages/english/main.json b/wwwroot/languages/english/main.json index 65561fb..1a6444b 100644 --- a/wwwroot/languages/english/main.json +++ b/wwwroot/languages/english/main.json @@ -90,5 +90,7 @@ "msgbox_amount_select":"Enter Amount", "msgbox_qty_select":"How many would you like to select?", - "void_mode": "Void Mode is ON." + "void_mode": "Void Mode is ON.", + "enter_item_name": "Enter Item Name", + "enter_item_price": "Enter Item Price" } \ No newline at end of file diff --git a/wwwroot/scripts/ts/dredgepos.orderScreen.ts b/wwwroot/scripts/ts/dredgepos.orderScreen.ts index ab6f8bf..19b057e 100644 --- a/wwwroot/scripts/ts/dredgepos.orderScreen.ts +++ b/wwwroot/scripts/ts/dredgepos.orderScreen.ts @@ -2,6 +2,7 @@ type OrderScreenData = { order_screen_pages: order_screen_page[] sales_categories: sales_category[] print_groups: print_group[] + custom_item: item } type OrderScreen = { @@ -14,6 +15,7 @@ type OrderScreen = { selected_item_ids: number[] qty_override: number print_group_override: print_group + custom_item: item, } let OrderScreen : OrderScreen = { @@ -25,7 +27,8 @@ let OrderScreen : OrderScreen = { order_item_id_generator: newestId(), selected_item_ids: [], qty_override: 1, - print_group_override: null + print_group_override: null, + custom_item: null } const loadPageGroup = (e: Event) => { @@ -49,12 +52,16 @@ const setupOrderScreen = (data: OrderScreenData) => { OrderScreen.order_screen_pages = data.order_screen_pages OrderScreen.sales_categories = data.sales_categories OrderScreen.print_groups = data.print_groups + OrderScreen.custom_item = data.custom_item + updateOrderBoxTotals() let doc = $(document) doc.on('click', '.nextButton', goToNextPage) doc.on('click', '.prevButton', goToPrevPage) doc.on('click', '.loadPageGroup', loadPageGroup) doc.on('click', '[data-primary-action=item]', itemButtonClicked) + doc.on('click', '.freetextButton', freetext) + doc.on('click', '.openItemButton', openItem) doc.on('click', '.orderBoxTable tbody tr', itemRowClicked) doc.on('click', '.voidButton', voidButtonClicked) doc.on('dblclick', '.voidButton', voidLastItem) @@ -131,12 +138,15 @@ const addInstructionToOrderBox = (instruction: orderItem) => { if(parentRow.is(selectedRow) || !parentRow.hasClass('selected')) { const newRow = createOrderRow(instruction) getLastInstructionRow(selectedRow).after(newRow.pulse()) + newRow.setColumnValue(lang('printgroup_header'), selectedRow.getColumnValue(lang('printgroup_header'))) } }) return } + const lastRow = orderBox.find('tr').last() orderBox.append(newRow.pulse()) + newRow.setColumnValue(lang('printgroup_header'), lastRow.getColumnValue(lang('printgroup_header'))) } @@ -363,7 +373,6 @@ const scrollToElement = (element: JQuery) => element.get()[0].scrollIntoView() const overrideQty = () => showVirtualNumpad(lang('multiplier'), 4, false, true, true, qtyOverridden) - const qtyOverridden = (qtyString: string) => OrderScreen.qty_override = Number(qtyString) const printGroupOverride = (e: JQuery.TriggeredEvent) => { @@ -387,4 +396,36 @@ const printGroupOverride = (e: JQuery.TriggeredEvent) => { } } +const freetext = () => showVirtualKeyboard('', 32,false, freetextSubmitted) + +const freetextSubmitted = (text: string) => { + if(text.trim().length < 1) return + + if($('.orderBoxTable tbody tr').length < 1){ + posAlert(lang('freetext_no_order')) + } + + const item = OrderScreen.custom_item + item.item_type = 'instruction' + item.item_name = text + + addNewItem(item) + +} + +const openItem = () => showVirtualKeyboard(lang('enter_item_name'), 32,false, openItemTextSubmitted) + +const openItemTextSubmitted = (text: string) => { + const submitFunction = (priceString: string) => { + const price = currency(priceString) + const item = OrderScreen.custom_item + item.item_type = 'item' + item.item_name = text + item.price1 = price.value + + addNewItem(item) + } + showVirtualNumpad(lang('enter_item_price'), 4, false, true, true, submitFunction) +} + $(() => ajax('/orderScreen/getOrderScreenData/1', null, 'get', setupOrderScreen, null, null) ) \ No newline at end of file diff --git a/wwwroot/styles/sass/dredgepos.core.sass b/wwwroot/styles/sass/dredgepos.core.sass index 5ca8ff0..4496e22 100644 --- a/wwwroot/styles/sass/dredgepos.core.sass +++ b/wwwroot/styles/sass/dredgepos.core.sass @@ -99,6 +99,7 @@ body .posButton.active, .posButton:active border: inset 2px + background: var(--posbutton-background-active) .posButton.voidButton background: var(--void-button-background) diff --git a/wwwroot/themes/restaurant/orderScreen.tpl.htm b/wwwroot/themes/restaurant/orderScreen.tpl.htm index 7dd837d..41a2942 100644 --- a/wwwroot/themes/restaurant/orderScreen.tpl.htm +++ b/wwwroot/themes/restaurant/orderScreen.tpl.htm @@ -48,12 +48,12 @@
- +
- +