From a48c3a68e0788551d32a40d6d5265487ae651e56 Mon Sep 17 00:00:00 2001 From: Josh Date: Sun, 21 Nov 2021 20:44:44 +1000 Subject: [PATCH] Added Basic Order Screen --- AjaxController.fs | 58 ++--- Decorations.module.fs | 42 +--- DredgeFramework.module.fs | 2 + DredgePos.fsproj | 3 + Floorplan.module.fs | 109 ++-------- GenericEntities.module.fs | 52 ++++- OrderScreen.module.fs | 104 +++++++++ PageController.fs | 50 +++-- Program.fs | 18 +- Theme.module.fs | 5 +- Types.fs | 43 +++- wwwroot/images/8bit.png | Bin 39499 -> 0 bytes wwwroot/images/bacon.png | Bin 55135 -> 0 bytes wwwroot/images/balter.png | Bin 35038 -> 0 bytes wwwroot/images/beetrootdip.png | Bin 65664 -> 0 bytes wwwroot/images/bentspoke.png | Bin 42332 -> 0 bytes wwwroot/images/boags.png | Bin 58287 -> 0 bytes wwwroot/images/brooklyn.png | Bin 54190 -> 0 bytes wwwroot/images/brouhaha.png | Bin 40657 -> 0 bytes wwwroot/images/brulee.png | Bin 38574 -> 0 bytes wwwroot/images/bruschetta.png | Bin 53548 -> 0 bytes wwwroot/images/budvar.png | Bin 38727 -> 0 bytes wwwroot/images/budweiser.png | Bin 28585 -> 0 bytes wwwroot/images/burger.png | Bin 33245 -> 0 bytes wwwroot/images/casablanca.png | Bin 42210 -> 0 bytes wwwroot/images/chaffey.png | Bin 17102 -> 0 bytes wwwroot/images/colonialhazy.png | Bin 48550 -> 0 bytes wwwroot/images/cooperssession.png | Bin 43509 -> 0 bytes wwwroot/images/corona.png | Bin 42067 -> 0 bytes wwwroot/images/curry.png | Bin 50490 -> 0 bytes wwwroot/images/cusquena.png | Bin 31606 -> 0 bytes wwwroot/images/elvis.png | Bin 59353 -> 0 bytes wwwroot/images/estrella.png | Bin 44963 -> 0 bytes wwwroot/images/fosters.png | Bin 53975 -> 0 bytes wwwroot/images/frenchonion.png | Bin 66560 -> 0 bytes wwwroot/images/galactopus.png | Bin 49794 -> 0 bytes wwwroot/images/goat.png | Bin 49861 -> 0 bytes wwwroot/images/guinness.png | Bin 34071 -> 0 bytes wwwroot/images/hemingwayxpa.png | Bin 39563 -> 0 bytes wwwroot/images/hopthief.png | Bin 51188 -> 0 bytes wwwroot/images/hornet.png | Bin 41158 -> 0 bytes wwwroot/images/hotdog.png | Bin 46727 -> 0 bytes wwwroot/images/jedi.png | Bin 46663 -> 0 bytes wwwroot/images/kaiju.png | Bin 54810 -> 0 bytes wwwroot/images/kofta.png | Bin 61644 -> 0 bytes wwwroot/images/kronenbourg.png | Bin 41377 -> 0 bytes wwwroot/images/larry.png | Bin 48733 -> 0 bytes wwwroot/images/matsos.png | Bin 55286 -> 0 bytes wwwroot/images/mb.png | Bin 46211 -> 0 bytes wwwroot/images/moduspale.png | Bin 43233 -> 0 bytes wwwroot/images/moet.png | Bin 20824 -> 0 bytes wwwroot/images/moosehead.png | Bin 30104 -> 0 bytes wwwroot/images/nail.png | Bin 50612 -> 0 bytes wwwroot/images/neopolitan.png | Bin 44803 -> 0 bytes wwwroot/images/no.png | Bin 38680 -> 0 bytes wwwroot/images/nomad.png | Bin 49538 -> 0 bytes wwwroot/images/oysters.png | Bin 89139 -> 0 bytes wwwroot/images/paradigm.png | Bin 22053 -> 0 bytes wwwroot/images/pencarrow.png | Bin 17931 -> 0 bytes wwwroot/images/perthlocal.png | Bin 32776 -> 0 bytes wwwroot/images/pickledan.png | Bin 53563 -> 0 bytes wwwroot/images/pineapple.png | Bin 45136 -> 0 bytes wwwroot/images/pinkening.png | Bin 57795 -> 0 bytes wwwroot/images/piratelife.png | Bin 42710 -> 0 bytes wwwroot/images/pita.png | Bin 85096 -> 0 bytes wwwroot/images/pudding.png | Bin 53587 -> 0 bytes wwwroot/images/quilmes.png | Bin 57928 -> 0 bytes wwwroot/images/ribs.png | Bin 58809 -> 0 bytes wwwroot/images/salsa.png | Bin 66840 -> 0 bytes wwwroot/images/scallops.png | Bin 84404 -> 0 bytes wwwroot/images/slipstream.png | Bin 47404 -> 0 bytes wwwroot/images/sludgebeast.png | Bin 37620 -> 0 bytes wwwroot/images/squab.png | Bin 30658 -> 0 bytes wwwroot/images/steakblue.png | Bin 27891 -> 0 bytes wwwroot/images/steakmedium.png | Bin 31813 -> 0 bytes wwwroot/images/steakmidrare.png | Bin 28766 -> 0 bytes wwwroot/images/steakmidwell.png | Bin 30047 -> 0 bytes wwwroot/images/steakrare.png | Bin 29785 -> 0 bytes wwwroot/images/steakwelldone.png | Bin 31066 -> 0 bytes wwwroot/images/stonewood.png | Bin 58914 -> 0 bytes wwwroot/images/taco.png | Bin 28647 -> 0 bytes wwwroot/images/tapenade.png | Bin 64083 -> 0 bytes wwwroot/images/tiramisu.png | Bin 60984 -> 0 bytes wwwroot/images/tooheysold.png | Bin 28734 -> 0 bytes wwwroot/images/tusker.png | Bin 25783 -> 0 bytes wwwroot/images/viru.png | Bin 21668 -> 0 bytes wwwroot/images/wellington.png | Bin 47577 -> 0 bytes wwwroot/images/wholefish.png | Bin 41107 -> 0 bytes wwwroot/images/windhoek.png | Bin 28631 -> 0 bytes wwwroot/images/xxxxgold.png | Bin 43702 -> 0 bytes wwwroot/images/zambezi.png | Bin 31299 -> 0 bytes wwwroot/images/zulia.png | Bin 49090 -> 0 bytes wwwroot/scripts/ts/dredgepos.core.ts | 2 +- wwwroot/scripts/ts/dredgepos.floorplan.ts | 11 +- wwwroot/scripts/ts/dredgepos.orderScreen.ts | 48 +++++ wwwroot/scripts/ts/types.ts | 6 +- wwwroot/styles/sass/dark.theme.sass | 1 + wwwroot/styles/sass/dredgepos.core.sass | 27 ++- .../styles/sass/dredgepos.orderScreen.sass | 198 ++++++++++++++++++ .../themes/restaurant/authenticate.tpl.htm | 2 +- wwwroot/themes/restaurant/orderScreen.tpl.htm | 160 ++++++-------- .../orderScreen/button_image.tpl.htm | 1 + .../orderScreen/grid_button.tpl.htm | 6 + .../restaurant/orderScreen/page.tpl.htm | 3 + .../restaurant/orderScreen/page_group.tpl.htm | 3 + .../orderScreen/page_group_button.tpl.htm | 3 + .../themes/restaurant/virtualNumpad.tpl.htm | 28 +-- 107 files changed, 678 insertions(+), 307 deletions(-) create mode 100644 OrderScreen.module.fs delete mode 100644 wwwroot/images/8bit.png delete mode 100644 wwwroot/images/bacon.png delete mode 100644 wwwroot/images/balter.png delete mode 100644 wwwroot/images/beetrootdip.png delete mode 100644 wwwroot/images/bentspoke.png delete mode 100644 wwwroot/images/boags.png delete mode 100644 wwwroot/images/brooklyn.png delete mode 100644 wwwroot/images/brouhaha.png delete mode 100644 wwwroot/images/brulee.png delete mode 100644 wwwroot/images/bruschetta.png delete mode 100644 wwwroot/images/budvar.png delete mode 100644 wwwroot/images/budweiser.png delete mode 100644 wwwroot/images/burger.png delete mode 100644 wwwroot/images/casablanca.png delete mode 100644 wwwroot/images/chaffey.png delete mode 100644 wwwroot/images/colonialhazy.png delete mode 100644 wwwroot/images/cooperssession.png delete mode 100644 wwwroot/images/corona.png delete mode 100644 wwwroot/images/curry.png delete mode 100644 wwwroot/images/cusquena.png delete mode 100644 wwwroot/images/elvis.png delete mode 100644 wwwroot/images/estrella.png delete mode 100644 wwwroot/images/fosters.png delete mode 100644 wwwroot/images/frenchonion.png delete mode 100644 wwwroot/images/galactopus.png delete mode 100644 wwwroot/images/goat.png delete mode 100644 wwwroot/images/guinness.png delete mode 100644 wwwroot/images/hemingwayxpa.png delete mode 100644 wwwroot/images/hopthief.png delete mode 100644 wwwroot/images/hornet.png delete mode 100644 wwwroot/images/hotdog.png delete mode 100644 wwwroot/images/jedi.png delete mode 100644 wwwroot/images/kaiju.png delete mode 100644 wwwroot/images/kofta.png delete mode 100644 wwwroot/images/kronenbourg.png delete mode 100644 wwwroot/images/larry.png delete mode 100644 wwwroot/images/matsos.png delete mode 100644 wwwroot/images/mb.png delete mode 100644 wwwroot/images/moduspale.png delete mode 100644 wwwroot/images/moet.png delete mode 100644 wwwroot/images/moosehead.png delete mode 100644 wwwroot/images/nail.png delete mode 100644 wwwroot/images/neopolitan.png delete mode 100644 wwwroot/images/no.png delete mode 100644 wwwroot/images/nomad.png delete mode 100644 wwwroot/images/oysters.png delete mode 100644 wwwroot/images/paradigm.png delete mode 100644 wwwroot/images/pencarrow.png delete mode 100644 wwwroot/images/perthlocal.png delete mode 100644 wwwroot/images/pickledan.png delete mode 100644 wwwroot/images/pineapple.png delete mode 100644 wwwroot/images/pinkening.png delete mode 100644 wwwroot/images/piratelife.png delete mode 100644 wwwroot/images/pita.png delete mode 100644 wwwroot/images/pudding.png delete mode 100644 wwwroot/images/quilmes.png delete mode 100644 wwwroot/images/ribs.png delete mode 100644 wwwroot/images/salsa.png delete mode 100644 wwwroot/images/scallops.png delete mode 100644 wwwroot/images/slipstream.png delete mode 100644 wwwroot/images/sludgebeast.png delete mode 100644 wwwroot/images/squab.png delete mode 100644 wwwroot/images/steakblue.png delete mode 100644 wwwroot/images/steakmedium.png delete mode 100644 wwwroot/images/steakmidrare.png delete mode 100644 wwwroot/images/steakmidwell.png delete mode 100644 wwwroot/images/steakrare.png delete mode 100644 wwwroot/images/steakwelldone.png delete mode 100644 wwwroot/images/stonewood.png delete mode 100644 wwwroot/images/taco.png delete mode 100644 wwwroot/images/tapenade.png delete mode 100644 wwwroot/images/tiramisu.png delete mode 100644 wwwroot/images/tooheysold.png delete mode 100644 wwwroot/images/tusker.png delete mode 100644 wwwroot/images/viru.png delete mode 100644 wwwroot/images/wellington.png delete mode 100644 wwwroot/images/wholefish.png delete mode 100644 wwwroot/images/windhoek.png delete mode 100644 wwwroot/images/xxxxgold.png delete mode 100644 wwwroot/images/zambezi.png delete mode 100644 wwwroot/images/zulia.png create mode 100644 wwwroot/scripts/ts/dredgepos.orderScreen.ts create mode 100644 wwwroot/styles/sass/dredgepos.orderScreen.sass create mode 100644 wwwroot/themes/restaurant/orderScreen/button_image.tpl.htm create mode 100644 wwwroot/themes/restaurant/orderScreen/grid_button.tpl.htm create mode 100644 wwwroot/themes/restaurant/orderScreen/page.tpl.htm create mode 100644 wwwroot/themes/restaurant/orderScreen/page_group.tpl.htm create mode 100644 wwwroot/themes/restaurant/orderScreen/page_group_button.tpl.htm diff --git a/AjaxController.fs b/AjaxController.fs index d74c1c6..9ec7c9c 100644 --- a/AjaxController.fs +++ b/AjaxController.fs @@ -42,19 +42,27 @@ let unmergeTable tableNumber = unmergedTables |> json -let getFloorplanData venue = - let tableList = Floorplan.tableList venue +let getFloorplanData (id: int) = + let tableList = Entity.getAllInVenue let reservationList = getReservationList tableList {| tables = tableList - decorations = Decorations.decorationList venue - activeTableNumbers = Floorplan.getActiveTables venue - rooms = Floorplan.getRoomList venue + decorations = Entity.getAllInVenue + activeTableNumbers = Floorplan.getActiveTables (getCurrentVenue()) + rooms = Entity.getAllInVenue reservations = reservationList |} |> ajaxSuccess |> json +let getOrderScreenData (id: int) = + let pages = Entity.getAllInVenue + {| + order_screen_pages = pages + |} + |> ajaxSuccess + |> json + let getKeyboardLayout (language: string) = let layout = $"""wwwroot/languages/{language}/keyboardLayout.json""" |> GetFileContents map [ @@ -62,28 +70,13 @@ let getKeyboardLayout (language: string) = "data", layout ] |> json - -let getRoomTablesAndDecorations roomId = - let tables = Floorplan.tablesInRoom roomId - let decorations = Decorations.decorationsInRoom roomId - let data = {| - tables = tables - decorations = decorations - |} - - data |> ajaxSuccess |> json - -let getTableData tableNumber = json <| Floorplan.getTable tableNumber - -let updateTableShape (table: floorplan_table) = - Floorplan.updateTableShape table |> ignore - getTableData table.table_number - let transformTable (table: floorplan_table) = - Floorplan.updateTablePosition table |> ignore - getTableData table.table_number + Entity.updateInDatabase table + |> ajaxSuccess + |> json let createTable (tableData: floorplan_table) = + let result = if tableExists tableData.table_number = "False" then ajaxSuccess (addNewTable tableData) @@ -92,7 +85,8 @@ let createTable (tableData: floorplan_table) = result |> json let deleteTable (table: floorplan_table) = - Floorplan.deleteTable table.table_number + Entity.deleteById table.id + |> ignore table |> ajaxSuccess |> json let transferTable (origin, destination) = @@ -116,13 +110,19 @@ let AddDecoration (data: floorplan_decoration) = decoration_room = data.decoration_room } - Decorations.CreateDecoration decoration |> ajaxSuccess |> json + Entity.addToDatabase decoration + |> ajaxSuccess + |> json -let UpdateDecoration data = - Decorations.UpdateDecoration data |> ignore +let UpdateDecoration (data: floorplan_decoration) = + Entity.updateInDatabase data + |> ignore ajaxSuccess "true" |> json -let DeleteDecoration id = ajaxSuccess (Decorations.DeleteDecoration id) |> json +let DeleteDecoration (decorationToDelete: floorplan_decoration) = + Entity.deleteById decorationToDelete.id + |> ajaxSuccess + |> json let newEmptyReservation (reservation: reservation) = let newReservation = {reservation with diff --git a/Decorations.module.fs b/Decorations.module.fs index ef643cb..1fe2989 100644 --- a/Decorations.module.fs +++ b/Decorations.module.fs @@ -8,22 +8,7 @@ open Dapper.FSharp open DredgePos open Types -let decorationList venue = - select { - table "floorplan_decorations" - innerJoin "floorplan_rooms" "id" "decoration_room" - } - |> db.SelectJoin - |> Array.filter (fun (_, room) -> room.venue_id = venue ) - |> Array.map fst - -let decorationsInRoom (roomId: int) = - select { - table "floorplan_decorations" - where (eq "decoration_room" roomId) - } - |> db.Select - +let decorationsInRoom (roomId: int) = Entity.getAllByColumn "decoration_room" roomId let getImageName (image: string, path: string) = let imageName = @@ -60,27 +45,4 @@ let generateDecorator () = |> Array.map getImageHTML |> Array.chunkBySize 4 |> Array.map getImageRowHtml - |> JoinArray "" - -let CreateDecoration (decoration: floorplan_decoration) = - insert { - table "floorplan_decorations" - value decoration - } - |> db.InsertOutput - |> first - - -let UpdateDecoration (decoration: floorplan_decoration) = - update { - table "floorplan_decorations" - set decoration - where (eq "id" decoration.id ) - } |> db.Update - -let DeleteDecoration (decoration: floorplan_decoration) = - delete { - table "floorplan_decorations" - where (eq "id" decoration.id) - } |> db.Delete |> ignore - decoration \ No newline at end of file + |> JoinArray "" \ No newline at end of file diff --git a/DredgeFramework.module.fs b/DredgeFramework.module.fs index 245e541..481f7ef 100644 --- a/DredgeFramework.module.fs +++ b/DredgeFramework.module.fs @@ -16,6 +16,8 @@ open Thoth.Json.Net let (|?) lhs rhs = if lhs = null then rhs else lhs +let getCurrentVenue () = 1 + let map list = list |> Map.ofList let JoinArray (char: string) (array: 'a[]) = String.Join(char, array) diff --git a/DredgePos.fsproj b/DredgePos.fsproj index 6ae78fb..baec57e 100644 --- a/DredgePos.fsproj +++ b/DredgePos.fsproj @@ -14,6 +14,7 @@ + @@ -41,6 +42,7 @@ + @@ -63,6 +65,7 @@ + diff --git a/Floorplan.module.fs b/Floorplan.module.fs index 0c4c71a..d7a0a37 100644 --- a/Floorplan.module.fs +++ b/Floorplan.module.fs @@ -3,8 +3,6 @@ open DredgePos open Reservations -let currentVenue = 1 - open System open System.IO open System.Xml.Linq @@ -14,28 +12,6 @@ open Dapper.FSharp open Thoth.Json.Net open Types -let floorplan_table_decoder : Decoder = - Decode.object - (fun get -> - { - table_number = get.Required.Field "table_number" Decode.int - room_id = get.Required.Field "room_id" Decode.int - venue_id = get.Required.Field "venue_id" Decode.int - pos_x = get.Required.Field "pos_x" Decode.int - pos_y = get.Required.Field "pos_y" Decode.int - shape = get.Required.Field "shape" Decode.string - width = get.Required.Field "width" Decode.int - height = get.Required.Field "height" Decode.int - default_covers = get.Required.Field "default_covers" Decode.int - rotation = get.Required.Field "rotation" Decode.int - merged_children = get.Required.Field "merged_children" Decode.string - previous_state = get.Required.Field "previous_state" Decode.string - status = get.Required.Field "status" Decode.int - id = get.Required.Field "id" Decode.int - }) - - - let activeTablePath = "tables/active/" let getTableFile (tableNumber: int) = @@ -54,7 +30,7 @@ let fileNameToTableNumber (fileName: string) = //Takes a file name for a floorpl (fileName.Split "/table").[1] |> int else 0 -let openTables = //Get a list of all open tables. +let openTables () = //Get a list of all open tables. let tableList = Directory.GetFiles(activeTablePath) tableList @@ -117,12 +93,13 @@ let saveOrderToTable orderXML tableNumber = File.WriteAllText(tableFile, tableXML) let getTable (tableNumber : int) = - select { + let query = select { table "floorplan_tables" - where (eq "table_number" tableNumber + eq "venue_id" currentVenue) + where (eq "table_number" tableNumber + eq "venue_id" (getCurrentVenue())) } - |> db.Select - |> first + + let result = query |> db.Select + result |> first let getTableById (id : int) = select { @@ -138,12 +115,6 @@ let getRoom (roomId: int) = where (eq "id" roomId) } |> db.Select |> first -let getRoomList (venueId: int) = - select { - table "floorplan_rooms" - where (eq "venue_id" venueId) - } |> db.Select - let updateFloorplanTable (tableNumber:int) (column: string) value = //TODO: Make update query venue specific let sql = "Update floorplan_tables Set @column = @value Where table_number = @tableNumber" @@ -156,16 +127,11 @@ let updateTableShape (floorplanTable: floorplan_table) = update { table "floorplan_tables" set floorplanTable - where (eq "table_number" floorplanTable.table_number + eq "venue_id" currentVenue) + where (eq "table_number" floorplanTable.table_number + eq "venue_id" (getCurrentVenue())) } |> db.Update -let updateTablePosition (floorplanTable: floorplan_table) = - update { - table "floorplan_tables" - set floorplanTable - where (eq "table_number" floorplanTable.table_number + eq "venue_id" currentVenue) - } |> db.Update +let updateTablePosition (floorplanTable: floorplan_table) = Entity.updateInDatabase floorplanTable let createEmptyReservation (reservation: reservation) = update { @@ -174,12 +140,7 @@ let createEmptyReservation (reservation: reservation) = where(eq "id" reservation.reservation_table_id) } |> db.Update |> ignore - insert{ - table "reservations" - value reservation - } |> db.InsertOutput |> first - - + Entity.addToDatabase reservation let getChildTables tableNumber = let table = getTable tableNumber @@ -213,15 +174,13 @@ let tableExists (tableNumber: int) = let numberOfResults = select{ table "floorplan_tables" - where (eq "table_number" tableNumber + eq "venue_id" currentVenue) + where (eq "table_number" tableNumber + eq "venue_id" (getCurrentVenue())) } |> db.Select |> length match numberOfResults with | 0 -> let allTables = - select { - table "floorplan_tables" - } |> db.Select + Entity.getAllInVenue |> Array.map(findChildTable tableNumber) |> Array.filter(fun tableNumber -> tableNumber <> 0) @@ -248,21 +207,7 @@ let addNewTableWithoutOutput (newTable: floorplan_table) = } |> db.Insert -let addNewTable (newTable: floorplan_table) = - let newTableList = - insert{ - table "floorplan_tables" - value newTable - } - |> db.InsertOutput - - newTableList |> first - -let deleteTable (tableNumber: int) = - delete { - table "floorplan_tables" - where (eq "table_number" tableNumber + eq "venue_id" currentVenue) - } |> db.Delete |> ignore +let addNewTable (newTable: floorplan_table) = Entity.addToDatabase newTable let mergeTables parent child = //Merge two tables together if parent = child then false else @@ -292,13 +237,12 @@ let mergeTables parent child = //Merge two tables together let existingChildrenJson = parentTable.merged_children |> StringTrim let existingChildren = - existingChildrenJson - |> Decode.fromString(Decode.list floorplan_table_decoder) + existingChildrenJson |> Decode.Auto.fromString let tableList = match existingChildren with - | Error _ -> [newChildTable] - | Ok tables -> tables @ [newChildTable] + | Error _ -> [|newChildTable|] + | Ok tables -> [tables ; [|newChildTable|]] |> Array.concat let newChildrenJson = tableList |> jsonEncode let parentPreviousState = parentTable |> jsonEncode @@ -314,10 +258,11 @@ let mergeTables parent child = //Merge two tables together pos_y = newPosY default_covers = parentTable.default_covers + childTable.default_covers |} - where (eq "table_number" parent + eq "venue_id" currentVenue) + where (eq "table_number" parent + eq "venue_id" (getCurrentVenue())) } |> db.Update |> ignore - deleteTable child + Entity.deleteById newChildTable.id + |> ignore true @@ -326,7 +271,7 @@ let updateUnmergedTables parentTable childTable = update { table "floorplan_tables" set parentTable - where(eq "table_number" parentTable.table_number + eq "venue_id" currentVenue) + where(eq "table_number" parentTable.table_number + eq "venue_id" (getCurrentVenue())) } |> db.Update |> ignore addNewTableWithoutOutput childTable |> ignore @@ -350,7 +295,7 @@ let unmergeTable tableNumber = //Separates a merged table into itself and the la Some (getTable currentTable.table_number, unmergedChild) | Error _ -> None -let convertRoomListToLinks (room: floorplan_room) = +let makeRoomButton (room: floorplan_room) = let vars = map [ "roomId", room.id |> string "roomName", room.room_name @@ -377,17 +322,7 @@ let newReservation name time covers = reservation_created_at = CurrentTime() } - insert { - table "reservations" - value reservation - } |> db.Insert + Entity.addToDatabase reservation -let tableList venueId = - select{ - table "floorplan_tables" - innerJoin "floorplan_rooms" "id" "floorplan_tables.room_id" - } - |> db.SelectJoin - |> Array.filter (fun (_, room) -> room.venue_id = venueId ) - |> Array.map fst +let tableList () = Entity.getAllInVenue diff --git a/GenericEntities.module.fs b/GenericEntities.module.fs index 5e42c48..fe8b8d5 100644 --- a/GenericEntities.module.fs +++ b/GenericEntities.module.fs @@ -3,11 +3,16 @@ open DredgePos open Types open Dapper.FSharp open DredgeFramework +open Pluralize.NET.Core +open FSharp.Reflection +let getDatabaseTable<'x> = + let typeName = typeof<'x>.Name + Pluralizer().Pluralize typeName + -let getDatabaseTable (record: 'a) = record.GetType().ToString().ToLower() + "s" let addToDatabase (record: 'x)= - let tableName = getDatabaseTable record + let tableName = getDatabaseTable<'x> insert { table tableName value record @@ -15,12 +20,49 @@ let addToDatabase (record: 'x)= |> db.InsertOutput |> first -let updateInDatabase (record: 'x) = - let tableName = getDatabaseTable record + +let inline updateInDatabase (record: ^x) = + let tableName = getDatabaseTable<'x> + let id = ((^x) : (member id : int) (record)) (* Run an update query *) update { table tableName set record + where (eq "id" id) } |> db.Update |> ignore - record \ No newline at end of file + record + +let getAll<'x> = + let typeName = typeof<'x>.Name + let tableName = Pluralizer().Pluralize typeName + + select { + table tableName + } + |> db.Select<'x> + +let getAllByColumn<'x> (column: string) (value: obj) = + let typeName = typeof<'x>.Name + let tableName = Pluralizer().Pluralize typeName + + select { + table tableName + where (eq column value) + } |> db.Select<'x> + +let getAllInVenue<'x> = getAllByColumn<'x> "venue_id" (getCurrentVenue ()) +let getById<'x> (id: int) = getAllByColumn<'x> "id" id |> first + +let deleteById<'x> id = + let typeName = typeof<'x>.Name + let tableName = Pluralizer().Pluralize typeName + + let entity = getById<'x> id + + delete { + table tableName + where (eq "id" id) + } |> db.Delete |> ignore + + entity \ No newline at end of file diff --git a/OrderScreen.module.fs b/OrderScreen.module.fs new file mode 100644 index 0000000..338b108 --- /dev/null +++ b/OrderScreen.module.fs @@ -0,0 +1,104 @@ +module OrderScreen +open System.Security.Cryptography.Xml +open DredgeFramework +open DredgePos +open FSharp.Collections +open Thoth.Json.Net +open Types +open Theme + +let htmlAttributes (attributes: Map) = + " " + (attributes + |> Map.toArray + |> Array.map (fun (attribute, value) -> attribute+"="+value) + |> String.concat " ") + + +let getAllPageGrids () = Entity.getAllInVenue + |> Array.filter(fun pageGroup -> pageGroup.grid_id <> 0) + |> Array.map(fun pageGroup -> (Entity.getById pageGroup.grid_id), pageGroup) + +let getImageButtonData (button: button) = + let item = Entity.getAllByColumn "item_code" button.primary_action_value + |> first + + let extraData = + map [ + "data-item-code", item.item_code + "data-item-price", item.price1.ToString() + "data-item-name", item.item_name + "data-item-type", item.item_type + "data-item-category", item.item_category.ToString() + ] |> htmlAttributes + + {| + extra_data = extraData + text = item.item_name + |} + + +let renderButton (buttonId: int) = + let button = Entity.getById