From 61481ad87ce5988b76826c356b30c5129600db01 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 9 Nov 2021 17:16:29 +1000 Subject: [PATCH] Floorplan Updated --- .idea/.idea.DredgePos.dir/.idea/.name | 1 - .idea/config/applicationhost.config | 41 +- AjaxController.fs | 115 +- Clerk.module.fs | 4 +- Database.module.fs | 12 + Decorations.module.fs | 38 +- DredgeFramework.module.fs | 12 +- DredgePos.fsproj | 2 + Floorplan.module.fs | 121 +- GenericEntities.module.fs | 1 + Program.fs | 23 +- Reservations.module.fs | 16 +- Session.module.fs | 22 +- bin/Debug/net6.0/DredgePos.dll | Bin 138752 -> 145408 bytes bin/Debug/net6.0/DredgePos.pdb | Bin 28128 -> 29640 bytes bin/Debug/net6.0/site.map | 4 +- .../languages/english/keyboardlayout.json | 4 +- .../wwwroot/languages/english/main.json | 7 +- obj/Debug/net6.0/DredgePos.dll | Bin 138752 -> 145408 bytes .../DredgePos.fsproj.CoreCompileInputs.cache | 2 +- .../DredgePos.fsprojAssemblyReference.cache | Bin 262 -> 161822 bytes obj/Debug/net6.0/DredgePos.pdb | Bin 28128 -> 29640 bytes wwwroot/languages/english/keyboardLayout.json | 4 +- wwwroot/languages/english/main.json | 7 +- wwwroot/scripts/js/dredgepos.core.js | 87 +- wwwroot/scripts/js/dredgepos.core.js.map | 2 +- wwwroot/scripts/js/dredgepos.floorplan.js | 1312 +++++++-------- wwwroot/scripts/js/dredgepos.floorplan.js.map | 2 +- wwwroot/scripts/js/keyboards.js | 19 +- wwwroot/scripts/js/keyboards.js.map | 2 +- wwwroot/scripts/ts/dredgepos.core.ts | 107 +- wwwroot/scripts/ts/dredgepos.floorplan.ts | 1498 ++++++++--------- wwwroot/scripts/ts/keyboards.ts | 35 +- wwwroot/scripts/ts/test.ts | 1 + wwwroot/scripts/ts/types.ts | 35 +- wwwroot/styles/screen.css | 37 +- wwwroot/themes/restaurant/tableMap.tpl.htm | 51 +- 37 files changed, 1862 insertions(+), 1762 deletions(-) delete mode 100644 .idea/.idea.DredgePos.dir/.idea/.name create mode 100644 GenericEntities.module.fs create mode 100644 wwwroot/scripts/ts/test.ts diff --git a/.idea/.idea.DredgePos.dir/.idea/.name b/.idea/.idea.DredgePos.dir/.idea/.name deleted file mode 100644 index ef3c4c6..0000000 --- a/.idea/.idea.DredgePos.dir/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -DredgePos \ No newline at end of file diff --git a/.idea/config/applicationhost.config b/.idea/config/applicationhost.config index b3f06c7..03a4e12 100644 --- a/.idea/config/applicationhost.config +++ b/.idea/config/applicationhost.config @@ -156,7 +156,7 @@ - + @@ -974,21 +974,26 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AjaxController.fs b/AjaxController.fs index 7828b6c..e35477d 100644 --- a/AjaxController.fs +++ b/AjaxController.fs @@ -1,9 +1,12 @@ module AjaxController open DredgeFramework +open Floorplan open Microsoft.AspNetCore.Http +open Reservations open language open Giraffe +open Dapper.FSharp let loginWithLoginCode (context: HttpContext) (login_code: int) = if Session.clerkLogin login_code context then ajaxSuccess "success" @@ -15,28 +18,50 @@ let getActiveTables venue = Floorplan.getActiveTables venue |> ajaxSuccess |> js let getRoomData roomId = Floorplan.getRoom roomId |> ajaxSuccess |> json -let mergeTables (parent, child) = +let mergeTables (tables: floorplan_table[]) = let status = - if Floorplan.mergeTables parent child then "success" - else "fail" - - map [ - "status", status - "data" , parent |> Floorplan.getTable |> jsonEncode - ] - |> json + if mergeTables tables.[0].table_number tables.[1].table_number then + let outputTables = map [ + "parent", tables.[0]; + "child", tables.[1]; + "merged", getTable tables.[0].table_number; + ] + ajaxSuccess outputTables + else ajaxFail "Could Not Merge Tables" + status |> json let unmergeTable tableNumber = - let status = - if Floorplan.unmergeTable tableNumber then "success" - else "fail" + let unmerged = Floorplan.unmergeTable tableNumber + let unmergedTables = + match unmerged with + | Some (parent, child) -> + map["parent", parent; "child", child] |> ajaxSuccess + | None -> ajaxFail "Could not Unmerge Table" - map [ - "status", status - "data" , "[true]" - ] + unmergedTables |> json + + +let getFloorplanData venue = + let tableList = Floorplan.tableList venue + let reservationList = getReservationList tableList + {| + tables = tableList + decorations = Decorations.decorationList venue + activeTableNumbers = Floorplan.getActiveTables venue + rooms = Floorplan.getRoomList venue + reservations = reservationList + |} + |> ajaxSuccess |> json +let getKeyboardLayout (language: string) = + let layout = $"""wwwroot/languages/{language}/keyboardLayout.json""" |> GetFileContents + map [ + "status", "success" + "data", layout + ] |> json + + let getRoomTablesAndDecorations roomId = let tables = Floorplan.tablesInRoom roomId let decorations = Decorations.decorationsInRoom roomId @@ -53,50 +78,70 @@ let updateTableShape (table: Floorplan.floorplan_table_shape) = Floorplan.updateTableShape table |> ignore getTableData table.table_number -let transformTable (table: Floorplan.floorplan_table_transform) = +let transformTable (table: Floorplan.floorplan_table) = Floorplan.updateTablePosition table |> ignore getTableData table.table_number -let createTable (tableData) = - let newTableCreated = Floorplan.addNewTable tableData +let createTable (tableData: floorplan_table) = let result = - if newTableCreated then Floorplan.getTable tableData.table_number |> jsonEncode |> ajaxSuccess - else Floorplan.tableExists tableData.table_number |> jsonEncode |> ajaxFail + if tableExists tableData.table_number = "False" then + ajaxSuccess (addNewTable tableData) + else ajaxFail (tableExists tableData.table_number) - json result + result |> json + +let deleteTable (table: floorplan_table) = + Floorplan.deleteTable table.table_number + table |> ajaxSuccess |> json let transferTable (origin, destination) = Floorplan.transferTable origin destination - ajaxSuccess "true" |> json + let data = map ["origin", getTable origin ; "destination", getTable destination] + ajaxSuccess data |> json -let AddDecoration (data: Decorations.decoration_creator) = +let AddDecoration (data: Decorations.floorplan_decoration) = let image = "wwwroot/images/decorations/" + data.decoration_image let width, height = image |> GetImageSize let aspectRatio = decimal width / decimal height let decoration : Decorations.floorplan_decoration = { - decoration_id = 0 + id = 0 decoration_height = (200m / aspectRatio) |> int decoration_width = 200 decoration_rotation = 0 decoration_image = data.decoration_image - decoration_pos_x = data.basis/2 - decoration_pos_y = data.basis/2 + decoration_pos_x = data.decoration_pos_x + decoration_pos_y = data.decoration_pos_y decoration_room = data.decoration_room } - Decorations.CreateDecoration decoration |> ignore - ajaxSuccess "true" |> json + Decorations.CreateDecoration decoration |> ajaxSuccess |> json let UpdateDecoration data = Decorations.UpdateDecoration data |> ignore ajaxSuccess "true" |> json -let DeleteDecoration id = - Decorations.DeleteDecorationById id |> ignore - ajaxSuccess "true" |> json +let DeleteDecoration id = ajaxSuccess (Decorations.DeleteDecoration id) |> json -let newEmptyReservation tableNumber = - Floorplan.createEmptyReservation tableNumber 2 +let newEmptyReservation (reservation: reservation) = + let newReservation = {reservation with + reservation_created_at = CurrentTime() + reservation_time = CurrentTime() + } - json <| ajaxSuccess "true" + if reservation.reservation_table_id > 0 then + let table = {(getTableById reservation.reservation_table_id) with + status = 2 + default_covers = reservation.reservation_covers} + updateTablePosition table |> ignore + + let createdReservation = Floorplan.createEmptyReservation newReservation + ajaxSuccess createdReservation |> json + +let updateReservation (reservation: reservation) = updateReservation reservation |> ajaxSuccess |> json + +let unreserveTable (table: floorplan_table) = + let newTable = {table with status = 0} + updateTablePosition newTable |> ignore + DeleteReservation newTable.id + newTable |> ajaxSuccess |> json diff --git a/Clerk.module.fs b/Clerk.module.fs index 0f0d082..9d2ad91 100644 --- a/Clerk.module.fs +++ b/Clerk.module.fs @@ -8,12 +8,12 @@ open Thoth.Json.Net let mutable loginCookie = "" -type clerk = {clerk_id: int; clerk_name: string; clerk_login_code: int; clerk_usergroup: int} +type clerk = {id: int; clerk_name: string; clerk_login_code: int; clerk_usergroup: int} let clerk_decoder : Decoder = Decode.object (fun get -> { - clerk_id = get.Required.Field "clerk_id" Decode.int + id = get.Required.Field "clerk_id" Decode.int clerk_name = get.Required.Field "clerk_name" Decode.string clerk_login_code = get.Required.Field "clerk_login_code" Decode.int clerk_usergroup = get.Required.Field "clerk_usergroup" Decode.int diff --git a/Database.module.fs b/Database.module.fs index 74f9794..a8b1f74 100644 --- a/Database.module.fs +++ b/Database.module.fs @@ -1,5 +1,7 @@ module db +open Dapper +open Dapper.FSharp open Dapper.FSharp.MySQL open MySql.Data.MySqlClient open DredgeFramework @@ -24,6 +26,16 @@ let Insert<'a> asyncQuery = |> connection.InsertAsync<'a> |> RunSynchronously +let InsertOutput<'a> asyncQuery = + asyncQuery + |> connection.InsertAsync<'a> + |> RunSynchronously + |> ignore + + let table = asyncQuery.Table + connection.Query<'a>($"""Select * From {table} Where id = (select last_insert_id())""") + |> EnumerableToArray + let Update<'a> asyncQuery = asyncQuery |> connection.UpdateAsync<'a> diff --git a/Decorations.module.fs b/Decorations.module.fs index 4fcab24..6fc2b54 100644 --- a/Decorations.module.fs +++ b/Decorations.module.fs @@ -6,10 +6,11 @@ open System.Text.RegularExpressions open DredgeFramework open Dapper open Dapper.FSharp +open Floorplan [] type floorplan_decoration = { - decoration_id: int + id: int decoration_room: int decoration_pos_x: int decoration_pos_y: int @@ -19,12 +20,14 @@ type floorplan_decoration = { decoration_image: string } -type decoration_creator = { - decoration_room: int - decoration_image: string - basis: int -} - +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 { @@ -43,8 +46,6 @@ let getImageName (image: string, path: string) = imageName, path - - let isImageFile (fileName: string) = Regex.IsMatch(fileName |> ToLowerCase, @"^.+\.(jpg|jpeg|png|gif)$") let getImageHTML (imageName: string, imageUrl: string) = @@ -77,20 +78,21 @@ let CreateDecoration (decoration: floorplan_decoration) = insert { table "floorplan_decorations" value decoration - } |> db.Insert + } + |> db.InsertOutput + |> first + let UpdateDecoration (decoration: floorplan_decoration) = - let imageFile = GetFileName decoration.decoration_image - let updatedDecoration = {decoration with decoration_image = imageFile} - update { table "floorplan_decorations" - set updatedDecoration - where (eq "decoration_id" decoration.decoration_id ) + set decoration + where (eq "id" decoration.id ) } |> db.Update -let DeleteDecorationById (id: int) = +let DeleteDecoration (decoration: floorplan_decoration) = delete { table "floorplan_decorations" - where (eq "decoration_id" id) - } |> db.Delete \ No newline at end of file + where (eq "id" decoration.id) + } |> db.Delete |> ignore + decoration \ No newline at end of file diff --git a/DredgeFramework.module.fs b/DredgeFramework.module.fs index 5c20022..245e541 100644 --- a/DredgeFramework.module.fs +++ b/DredgeFramework.module.fs @@ -18,9 +18,7 @@ let (|?) lhs rhs = if lhs = null then rhs else lhs let map list = list |> Map.ofList -let JoinArray (char: string) (array: string[]) = String.Join(char, array) - -let first (array: 'a[]) = array.[0] +let JoinArray (char: string) (array: 'a[]) = String.Join(char, array) let StringReplace (search:string) (replace:string) (string:string) = (search, replace) |> string.Replace @@ -37,6 +35,9 @@ let GetFileContents (file: string) = File.ReadAllText file 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 removeFalseValues (variable: bool[]) = variable |> Array.filter id @@ -67,14 +68,15 @@ let RunSynchronously task = |> Async.AwaitTask |> Async.RunSynchronously +let AppendToArray (element: 'T) (array : 'T[]) = Array.append [|element|] array + let ToLowerCase (string: string) = string.ToLower() let ToUpperCase (string: string) = string.ToUpper() let ToTitleCase (string: string) = CultureInfo.CurrentCulture.TextInfo.ToTitleCase <| string let recordToMap (record: 'T) = seq { - for prop in FSharpType.GetRecordFields(typeof<'T>) -> - prop.Name, prop.GetValue(record) |> string + for prop in FSharpType.GetRecordFields(typeof<'T>) -> prop.Name, prop.GetValue(record) |> string } |> Map.ofSeq diff --git a/DredgePos.fsproj b/DredgePos.fsproj index 65bede8..d7950d2 100644 --- a/DredgePos.fsproj +++ b/DredgePos.fsproj @@ -9,6 +9,7 @@ + @@ -31,6 +32,7 @@ PreserveNewest + diff --git a/Floorplan.module.fs b/Floorplan.module.fs index 1d046dc..dbd50b1 100644 --- a/Floorplan.module.fs +++ b/Floorplan.module.fs @@ -38,13 +38,13 @@ type floorplan_table = { rotation: int merged_children: string previous_state: string - status: string - table_id: int + status: int + id: int } [] type floorplan_room = { - room_id: int + id: int room_name: string background_image: string venue_id: int @@ -66,8 +66,8 @@ let floorplan_table_decoder : Decoder = 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.string - table_id = get.Required.Field "table_id" Decode.int + status = get.Required.Field "status" Decode.int + id = get.Required.Field "id" Decode.int }) @@ -78,10 +78,12 @@ let getTableFile (tableNumber: int) = let tableNumberString = tableNumber |> string activeTablePath + "table" + tableNumberString + ".table" -let tableIsOpen (tableNumber: int) = +let tableNumberIsOpen (tableNumber: int) = let tableFile = getTableFile tableNumber File.Exists tableFile +let tableIsOpen (table: floorplan_table) = tableNumberIsOpen table.table_number + let fileNameToTableNumber (fileName: string) = //Takes a file name for a floorplan table and returns the table number if fileName.Contains ".table" then let fileName = (fileName.Split ".").[0] @@ -105,15 +107,14 @@ let tablesInRoom (roomId: int) = //Get a list of all tables in a particular room |> db.Select - let getActiveTables (venueId: int) = select{ table "floorplan_tables" where (eq "venue_id" venueId) } |> db.Select - |> Array.map getTableNumber |> Array.filter tableIsOpen + |> Array.map (fun table -> table.table_number) let openNewTable tableNumber = //Create a new table file pre-populated with skeleton data let tableFile = getTableFile tableNumber @@ -128,10 +129,10 @@ let transferTable origin destination = //Transfers a table from one to another let originFile = getTableFile origin let destinationFile = getTableFile destination - if tableIsOpen origin then + if tableNumberIsOpen origin then (* If the destination is not an already open table, then we simply have to rename the origin to destination *) - if not <| tableIsOpen destination then + if not <| tableNumberIsOpen destination then let content = File.ReadAllText originFile let newContent = content.Replace($"number=\"{origin|>string}\">", $"number=\"{destination|>string}\">") File.WriteAllText(originFile, newContent) @@ -159,10 +160,18 @@ let getTable (tableNumber : int) = |> db.Select |> first +let getTableById (id : int) = + select { + table "floorplan_tables" + where (eq "id" id) + } + |> db.Select + |> first + let getRoom (roomId: int) = select { table "floorplan_rooms" - where (eq "room_id" roomId) + where (eq "id" roomId) } |> db.Select |> first let getRoomList (venueId: int) = @@ -172,6 +181,7 @@ let getRoomList (venueId: int) = } |> 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" let parameters = [("column", box column); ("value", box value); ("tableNumber", box tableNumber)] db.connection.Execute(sql, parameters) |> ignore @@ -185,25 +195,26 @@ let updateTableShape (floorplanTable: floorplan_table_shape) = where (eq "table_number" floorplanTable.table_number + eq "venue_id" currentVenue) } |> db.Update -let updateTablePosition (floorplanTable: floorplan_table_transform) = + +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 createEmptyReservation tableNumber covers = - let table = getTable tableNumber - let status = if table.status = "" then "reserved" else table.status - - //let res = newReservation "" 0 covers - - update{ +let createEmptyReservation (reservation: reservation) = + update { table "floorplan_tables" - set {| status = status |} - where(eq "table_number" tableNumber) + set {| status = 2 |} + where(eq "id" reservation.reservation_table_id) } |> db.Update |> ignore + insert{ + table "reservations" + value reservation + } |> db.InsertOutput |> first + let getChildTables tableNumber = @@ -217,7 +228,7 @@ let matchTable (tableNumberToMatch: int) (floorplanTableToCheck: floorplan_table let findChildTable (childTable: int) (parentTable: floorplan_table) = let json = parentTable.merged_children - let childTables = json |> Decode.fromString(Decode.array floorplan_table_decoder) + let childTables = json |> Decode.Auto.fromString let matchedTables = match childTables with @@ -262,16 +273,24 @@ let tableExists (tableNumber: int) = language.getAndReplace "error_table_exists" [room.room_name] -let addNewTable newTable = - if tableExists newTable.table_number = "False" then - insert{ - table "floorplan_tables" - value newTable - } |> db.Insert |> ignore - true - else false +let addNewTableWithoutOutput (newTable: floorplan_table) = + insert{ + table "floorplan_tables" + value newTable + } + |> db.Insert -let deleteTable tableNumber = +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) @@ -342,7 +361,7 @@ let updateUnmergedTables parentTable childTable = where(eq "table_number" parentTable.table_number + eq "venue_id" currentVenue) } |> db.Update |> ignore - addNewTable childTable |> ignore + addNewTableWithoutOutput childTable |> ignore true let processUnmerge originalTable unmergedChild = @@ -354,25 +373,35 @@ let processUnmerge originalTable unmergedChild = let unmergeTable tableNumber = //Separates a merged table into itself and the last table merged into it. let currentTable = getTable tableNumber - let mergedChildren = currentTable.merged_children |> Decode.fromString(Decode.list floorplan_table_decoder) + let mergedChildren = currentTable.merged_children |> Decode.Auto.fromString match mergedChildren with | Ok listOfChildTables -> - let unmergedChild = listOfChildTables |> List.last - processUnmerge currentTable unmergedChild - | Error _ -> false + let unmergedChild = listOfChildTables |> last + processUnmerge currentTable unmergedChild |> ignore + Some (getTable currentTable.table_number, unmergedChild) + | Error _ -> None let convertRoomListToLinks (room: floorplan_room) = let vars = map [ - "roomId", room.room_id |> string + "roomId", room.id |> string "roomName", room.room_name ] Theme.loadTemplateWithVars "roomButton" vars +let getReservationList (tableList: floorplan_table[]) = + let tableIds = + tableList + |> Array.map(fun table -> table.id) + |> JoinArray "," + + db.connection.Query($"""Select * From reservations Where reservation_table_id In ({tableIds})""") + |> EnumerableToArray + let newReservation name time covers = let reservation = { - reservation_id = 0 + id = 0 reservation_name = name reservation_time = time reservation_covers = covers @@ -385,12 +414,12 @@ let newReservation name time covers = value reservation } |> db.Insert -let unReserveTable tableNumber = - let table = getTable tableNumber - DeleteReservation table.table_id - if table.status = "reserved" then - update { - table "floorplan_tables" - set {| status = "" ; reservation_id = 0 |} - } |> db.Update |> ignore +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 diff --git a/GenericEntities.module.fs b/GenericEntities.module.fs new file mode 100644 index 0000000..d2badc2 --- /dev/null +++ b/GenericEntities.module.fs @@ -0,0 +1 @@ +module GenericEntities diff --git a/Program.fs b/Program.fs index 0a6dea3..bba4273 100644 --- a/Program.fs +++ b/Program.fs @@ -1,6 +1,7 @@ namespace WebApplication open Clerk +open Floorplan open Microsoft.AspNetCore.Http open Microsoft.AspNetCore.Mvc.RazorPages open Microsoft.Extensions.Hosting; @@ -23,25 +24,28 @@ module Program = post "/authenticateClerk" (bindJson (handlePostRoute AjaxController.loginWithLoginCode) ) post "/getTableData" (bindJson AjaxController.getTableData) post "/updateTableShape" (bindJson AjaxController.updateTableShape) - post "/transformTable" (bindJson AjaxController.transformTable) + post "/transformTable" (bindJson AjaxController.transformTable) post "/createTable" (bindJson AjaxController.createTable) - post "/addDecoration" (bindJson AjaxController.AddDecoration) + post "/addDecoration" (bindJson AjaxController.AddDecoration) post "/updateDecoration" (bindJson AjaxController.UpdateDecoration) - post "/deleteDecoration" (bindJson AjaxController.DeleteDecoration) - post "/newEmptyReservation" (bindJson AjaxController.newEmptyReservation) + post "/deleteDecoration" (bindJson AjaxController.DeleteDecoration) + post "/deleteTable" (bindJson AjaxController.deleteTable) + post "/mergeTables" (bindJson AjaxController.mergeTables) + post "/newEmptyReservation" (bindJson AjaxController.newEmptyReservation) + post "/updateReservation" (bindJson AjaxController.updateReservation) post "/getReservation" (bindJson (fun reservation -> json <| GetReservationById reservation) ) - post "/unreserveTable" (bindJson (fun tableNumber -> json <| Floorplan.unReserveTable tableNumber) ) + post "/unreserveTable" (bindJson AjaxController.unreserveTable ) getf "/getRoomData/%i" AjaxController.getRoomData + getf "/getKeyboardLayout/%s" AjaxController.getKeyboardLayout getf "/getTablesAndDecorations/%i" AjaxController.getRoomTablesAndDecorations get "/languageVars" (json <| AjaxController.getLanguageVars) get "/getOpenTables" (json <| Floorplan.getActiveTables Floorplan.currentVenue) getf "/getActiveTables/%i" AjaxController.getActiveTables - getf "/tableIsOpen/%i" (fun tableNumber -> json <| Floorplan.tableIsOpen tableNumber) - getf "/transferTables/%i/%i" AjaxController.transferTable - getf "/mergeTables/%i/%i" AjaxController.mergeTables + getf "/getFloorplanData/%i" AjaxController.getFloorplanData + getf "/tableIsOpen/%i" (fun tableNumber -> json <| Floorplan.tableNumberIsOpen tableNumber) + getf "/transferTable/%i/%i" AjaxController.transferTable getf "/unmergeTable/%i" AjaxController.unmergeTable getf "/tableExists/%i" (fun tableNumber -> json <| Floorplan.tableExists tableNumber) - getf "/deleteTable/%i" (fun tableNumber -> json <| Floorplan.deleteTable tableNumber) } let pageRouter = router { @@ -56,6 +60,7 @@ module Program = let app = application { use_static "wwwroot" use_router pageRouter + } run app diff --git a/Reservations.module.fs b/Reservations.module.fs index f58c9f5..c161ae1 100644 --- a/Reservations.module.fs +++ b/Reservations.module.fs @@ -3,9 +3,9 @@ open System open DredgeFramework open Dapper.FSharp - +[] type reservation = { - reservation_id: int + id: int reservation_name: string reservation_time: int reservation_covers: int @@ -16,13 +16,21 @@ type reservation = { let GetReservationById (id: int) = select { table "reservations" - where (eq "reservation_id" id) + where (eq "id" id) } |> db.Select |> first +let updateReservation (reservation: reservation) = + update{ + table "reservations" + set reservation + where(eq "id" reservation.id) + } |> db.Update |> ignore + reservation + let DeleteReservation (tableId: int) = delete { table "reservations" - where (eq "table_id" tableId) + where (eq "reservation_table_id" tableId) } |> db.Delete |> ignore \ No newline at end of file diff --git a/Session.module.fs b/Session.module.fs index 62e8e5c..674dbc0 100644 --- a/Session.module.fs +++ b/Session.module.fs @@ -6,7 +6,8 @@ open Dapper.FSharp open Clerk open Thoth.Json.Net -type session = {session_id: string; clerk_json: string; clerk_id: int; expires: int} +[] +type session = {id: int; session_id: string; clerk_json: string; clerk_id: int; expires: int} let deleteSession sessionId context = delete { @@ -25,19 +26,22 @@ let deleteSessionByClerkId clerk_id context = let createNewSession (clerk: clerk) context = if (getClerkByLoginCode clerk.clerk_login_code).IsSome then - deleteSessionByClerkId clerk.clerk_id context + deleteSessionByClerkId clerk.id context let newSessionId = (Guid.NewGuid().ToString "N") + (Guid.NewGuid().ToString "N") - let newSession = { session_id = newSessionId + let newSession = { + id = 0 + session_id = newSessionId clerk_json = clerk |> jsonEncode - clerk_id = clerk.clerk_id + clerk_id = clerk.id expires = int <| DateTimeOffset.Now.AddHours(24.0).ToUnixTimeSeconds() } - insert { table "sessions" value newSession - } |> db.Insert |> ignore + } + |> db.Insert + |> ignore Browser.setCookie "dredgepos_clerk_logged_in" newSessionId (DateTimeOffset.UtcNow.AddHours(24.0)) context @@ -63,7 +67,7 @@ let sessionExists (sessionId: string) context = let checkAuthentication clerk = let existingClerk = getClerkByLoginCode clerk.clerk_login_code if existingClerk.IsSome - && existingClerk.Value.clerk_id = clerk.clerk_id + && existingClerk.Value.id = clerk.id && existingClerk.Value.clerk_name = clerk.clerk_name && existingClerk.Value.clerk_login_code = clerk.clerk_login_code then true @@ -79,12 +83,12 @@ let getSession (sessionId: string) = } |> db.Select match sessions |> length with - | 0 -> {session_id = ""; clerk_json = ""; clerk_id= 0; expires= 0} + | 0 -> {session_id = ""; clerk_json = ""; clerk_id= 0; expires= 0; id=0} | _ -> sessions |> first let getCurrentClerk context = let cookie = getLoginCookie context - let emptyClerk = {clerk_id=0; clerk_login_code=0; clerk_usergroup=0; clerk_name=""} + let emptyClerk = {id=0; clerk_login_code=0; clerk_usergroup=0; clerk_name=""} match cookie with | "" -> Browser.redirect "/login" context diff --git a/bin/Debug/net6.0/DredgePos.dll b/bin/Debug/net6.0/DredgePos.dll index f5f221f86aa648ad1730d383da8a31a33a4cc718..e86668218060c13e05b83f26683aff25eef0a16b 100644 GIT binary patch literal 145408 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 Or1I8pG5`N-;NJnXC_%sg literal 138752 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 literal 28128 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 V@>m@b;W#LZPvq6zj^#r@{Vy;T(1-v4 diff --git a/bin/Debug/net6.0/site.map b/bin/Debug/net6.0/site.map index 83f96fd..c1320de 100644 --- a/bin/Debug/net6.0/site.map +++ b/bin/Debug/net6.0/site.map @@ -7,7 +7,6 @@ /ajax/getActiveTables/%i, GET, /ajax/tableIsOpen/%i, GET, /ajax/tableExists/%i, GET, -/ajax/deleteTable/%i, GET, /ajax/authenticateClerk, POST, /ajax/getTableData, POST, /ajax/updateTableShape, POST, @@ -16,7 +15,10 @@ /ajax/addDecoration, POST, /ajax/updateDecoration, POST, /ajax/deleteDecoration, POST, +/ajax/deleteTable, POST, +/ajax/mergeTables, POST, /ajax/newEmptyReservation, POST, +/ajax/updateReservation, POST, /ajax/getReservation, POST, /ajax/unreserveTable, POST, , NotFoundHandler, \ No newline at end of file diff --git a/bin/Debug/net6.0/wwwroot/languages/english/keyboardlayout.json b/bin/Debug/net6.0/wwwroot/languages/english/keyboardlayout.json index 7613c07..07d54e9 100644 --- a/bin/Debug/net6.0/wwwroot/languages/english/keyboardlayout.json +++ b/bin/Debug/net6.0/wwwroot/languages/english/keyboardlayout.json @@ -117,10 +117,10 @@ "<", ">", "?" - ], + ], "row5": [ "[space]space" - ], + ], "row5_shift": [ "[space] " ] diff --git a/bin/Debug/net6.0/wwwroot/languages/english/main.json b/bin/Debug/net6.0/wwwroot/languages/english/main.json index 3546af1..a1fa358 100644 --- a/bin/Debug/net6.0/wwwroot/languages/english/main.json +++ b/bin/Debug/net6.0/wwwroot/languages/english/main.json @@ -14,7 +14,7 @@ "logged_in_as":"Logged in as [1]", "covers":"[1] Covers", "selected_cover":"Cover [1]", - "activeTable":"Table [1]", + "active_table":"Table [1]", "totalPrice":"Total Price: [1]", "selectedPrice":"([1] Selected)", "next_page":"Next Page", @@ -60,7 +60,8 @@ "delete_table":"Delete Table", "change_shape":"Change Shape", "new_table_number":"New Table Number", - "transfer_table":"Transfer to New Table", + "transfer_table":"Transfer to Other Table", + "transfer_self_error":"Cannot transfer a table to itself.", "add_decoration":"Add Decoration", "choose_decoration":"Choose a Decoration", "delete_decoration":"Delete Decoration", @@ -68,9 +69,11 @@ "reserved_for":"Reserved for [1]", "reserved":"Reserved", "confirm_delete_reservation":"Are you sure you want to delete the reservation on table [1]?", + "confirm_reservation_name":"Who is this reservation for?", "error_table_exists":"Table already exists in room \"[1]\"", "error_table_exists_merged":"Table already exists in room \"[1]\", it is merged with table [2].", "error_delete_existing_table":"Can't delete a table that's currently active.", + "error_self_merge" : "You can't merge a table with itself", "confirm_delete_table":"Are you sure you want to delete table [1]?", "orig_qty_header":"Original Qty", "selected_qty_header":"Selected Qty", diff --git a/obj/Debug/net6.0/DredgePos.dll b/obj/Debug/net6.0/DredgePos.dll index f5f221f86aa648ad1730d383da8a31a33a4cc718..e86668218060c13e05b83f26683aff25eef0a16b 100644 GIT binary patch literal 145408 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 Or1I8pG5`N-;NJnXC_%sg literal 138752 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℘b?vs%ZpX?~dVIrnr|5=f; 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 delta 26 hcmbRDfwPT?*Vid1*qM=$k%57M(RZ?;rs_naD*#+52A%)_ diff --git a/obj/Debug/net6.0/DredgePos.pdb b/obj/Debug/net6.0/DredgePos.pdb index 7d767eabf48d6dc2e19c0c99c721dd576e784313..dbb1f8f7ec0365d80d3dde18747cb803c6841f0d 100644 GIT binary patch literal 29640 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 literal 28128 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 V@>m@b;W#LZPvq6zj^#r@{Vy;T(1-v4 diff --git a/wwwroot/languages/english/keyboardLayout.json b/wwwroot/languages/english/keyboardLayout.json index 7613c07..07d54e9 100644 --- a/wwwroot/languages/english/keyboardLayout.json +++ b/wwwroot/languages/english/keyboardLayout.json @@ -117,10 +117,10 @@ "<", ">", "?" - ], + ], "row5": [ "[space]space" - ], + ], "row5_shift": [ "[space] " ] diff --git a/wwwroot/languages/english/main.json b/wwwroot/languages/english/main.json index 3546af1..a1fa358 100644 --- a/wwwroot/languages/english/main.json +++ b/wwwroot/languages/english/main.json @@ -14,7 +14,7 @@ "logged_in_as":"Logged in as [1]", "covers":"[1] Covers", "selected_cover":"Cover [1]", - "activeTable":"Table [1]", + "active_table":"Table [1]", "totalPrice":"Total Price: [1]", "selectedPrice":"([1] Selected)", "next_page":"Next Page", @@ -60,7 +60,8 @@ "delete_table":"Delete Table", "change_shape":"Change Shape", "new_table_number":"New Table Number", - "transfer_table":"Transfer to New Table", + "transfer_table":"Transfer to Other Table", + "transfer_self_error":"Cannot transfer a table to itself.", "add_decoration":"Add Decoration", "choose_decoration":"Choose a Decoration", "delete_decoration":"Delete Decoration", @@ -68,9 +69,11 @@ "reserved_for":"Reserved for [1]", "reserved":"Reserved", "confirm_delete_reservation":"Are you sure you want to delete the reservation on table [1]?", + "confirm_reservation_name":"Who is this reservation for?", "error_table_exists":"Table already exists in room \"[1]\"", "error_table_exists_merged":"Table already exists in room \"[1]\", it is merged with table [2].", "error_delete_existing_table":"Can't delete a table that's currently active.", + "error_self_merge" : "You can't merge a table with itself", "confirm_delete_table":"Are you sure you want to delete table [1]?", "orig_qty_header":"Original Qty", "selected_qty_header":"Selected Qty", diff --git a/wwwroot/scripts/js/dredgepos.core.js b/wwwroot/scripts/js/dredgepos.core.js index d71c222..8d9c851 100644 --- a/wwwroot/scripts/js/dredgepos.core.js +++ b/wwwroot/scripts/js/dredgepos.core.js @@ -1,11 +1,11 @@ let Application = { keyboard: null, - mode: "default", + mode: [], languageVars: {} }; /** Parses a language variable. */ let lang = (key, replacements) => { - let finalValue = Application.languageVars[key]; + let finalValue = Application.languageVars[key] || ''; if (!replacements) return finalValue; if (typeof replacements === 'string') @@ -28,16 +28,19 @@ let ajax = (endpoint, data, method = 'POST', successFunction, errorFunction, bef method: method, data: data, success: (response) => { - if (successFunction) + if (successFunction && response.status == 'success') successFunction(JSON.parse(response.data)); + else if (errorFunction && response.status != 'success') { + errorFunction(JSON.parse(response.data)); + } }, - error: errorFunction, + error: (error) => console.log(error.statusCode), beforeSend: beforeFunction }); }; /* For the flow of the app, synchronous is commonly preferred - though trying to keep it's usage as low as possible. + though trying to keep its usage as low as possible. */ let ajaxSync = (endpoint, data, method = 'POST') => { let response = JSON.parse($.ajax({ @@ -56,11 +59,14 @@ let ajaxSync = (endpoint, data, method = 'POST') => { let redirect = (url) => { window.location.href = url; }; -let setLanguageVariables = () => { - Application.languageVars = ajaxSync('/ajax/languageVars', null, 'GET'); +let setupCore = (languageVars) => { + Application.languageVars = languageVars; + const doc = $(document); + doc.on('click', '#alertNo, #alertOk', hideAlerts); + setElementVisibilityByMode(); }; // @ts-ignore -let alert = (message, title = 'Message') => { +let posAlert = (message, title = 'Message') => { let alertBox = $('#alert'); alertBox.css('display', 'flex'); alertBox.data('value', ''); @@ -70,12 +76,11 @@ let alert = (message, title = 'Message') => { $('#alertYes').css('display', 'none'); $('#alertNo').css('display', 'none'); }; -// @ts-ignore -let confirm = (message, data, title = 'Confirm', submitFunction = (data) => { hideAlerts(); }) => { +let confirmation = (message, data, title = 'Confirm', submitFunction = (data) => { hideAlerts(); }) => { let alert = $('#alert'); $(document).on('click', '#alert #alertYes', () => { - submitFunction(data); hideAlerts(); + submitFunction(data); $(document).off('click', '#alert #alertYes'); }); alert.css('display', 'flex'); @@ -85,12 +90,58 @@ let confirm = (message, data, title = 'Confirm', submitFunction = (data) => { hi $('#alertYes').css('display', 'flex'); $('#alertNo').css('display', 'flex'); }; -let hideAlerts = () => { - $('#alert').hide(); +let hideAlerts = () => $('#alert').hide(); +let turnOnMode = (mode) => { + Application.mode.push(mode); + setElementVisibilityByMode(); }; -$(() => { - let doc = $(document); - setLanguageVariables(); - doc.on('click', '#alertNo, #alertOk', () => $('#alert').hide()); -}); +let turnOffMode = (mode) => { + Application.mode = Application.mode.filter((value) => value != mode); + setElementVisibilityByMode(); +}; +let toggleMode = (mode) => { + if (!isInMode(mode)) + turnOnMode(mode); + else + turnOffMode(mode); +}; +let clearModes = () => { Application.mode = []; }; +let isInMode = (mode) => Application.mode.includes(mode); +let setElementVisibilityByMode = () => { + const mode = Application.mode; + const elements = $('[data-visible-in-mode]'); + elements.each((index, elem) => { + let element = $(elem); + let visibleInModes = element.data('visible-in-mode'); + let showElement = visibleInModes.every(visibleMode => { + return mode.includes(visibleMode); + }); + if (element.hasClass('useVisibility')) { + if (showElement) { + element.css('visibility', 'visible'); + } + else + element.css('visibility', 'hidden'); + } + else + element.toggle(showElement); + }); + const invisibleElements = $('[data-invisible-in-mode]'); + invisibleElements.each((index, elem) => { + let element = $(elem); + let inVisibleInModes = element.data('invisible-in-mode'); + let hideElement = inVisibleInModes.every(invisibleMode => { + return mode.includes(invisibleMode); + }); + element.toggle(!hideElement); + }); + $('[data-active-in-mode]').each((index, elem) => { + const button = $(elem); + const activeInMode = button.data('active-in-mode'); + mode.includes(activeInMode) + ? button.addClass('active') + : button.removeClass('active'); + }); +}; +$(() => ajax('/ajax/languageVars', null, 'GET', setupCore, null, null)); //# sourceMappingURL=dredgepos.core.js.map \ No newline at end of file diff --git a/wwwroot/scripts/js/dredgepos.core.js.map b/wwwroot/scripts/js/dredgepos.core.js.map index 528d941..77a1276 100644 --- a/wwwroot/scripts/js/dredgepos.core.js.map +++ b/wwwroot/scripts/js/dredgepos.core.js.map @@ -1 +1 @@ -{"version":3,"file":"dredgepos.core.js","sourceRoot":"","sources":["../ts/dredgepos.core.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dredgepos.core.js","sourceRoot":"","sources":["../ts/dredgepos.core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/wwwroot/scripts/js/dredgepos.floorplan.js b/wwwroot/scripts/js/dredgepos.floorplan.js index 734010a..991d481 100644 --- a/wwwroot/scripts/js/dredgepos.floorplan.js +++ b/wwwroot/scripts/js/dredgepos.floorplan.js @@ -1,301 +1,107 @@ /// -let stage; -let transformer; -let tableLayer; -let editMode = false; -let activeTables = []; -let selectedTable; -let selectedTableNumber; -let currentRoom; -let basis = 1280; -let scale = 1; -let newTable; -let roomName; -//Makes sure canvas always fits inside the div -function getDimensions(parentDiv) { - let tableMap = $('#tableMap'); - let outerWidth = parentDiv.outerWidth(); - let outerHeight = parentDiv.outerHeight(); - let width = outerWidth; - let height = outerWidth; - if (outerWidth >= outerHeight) { - width = outerHeight; - height = outerHeight; - } - tableMap.height(height); - tableMap.width(width); - scale = width / basis; - return { width: width, height: height }; -} -function setupTableMap() { - let doc = $(document); - activeTables = ajaxSync('/ajax/getActiveTables/1', null, 'GET'); - let dimensions = getDimensions($('#mapContainer')); - roomName = 'Deck & Courtyard'; - stage = new Konva.Stage({ - container: 'tableMap', - width: dimensions.width, - height: dimensions.height, - }); - $('body').on('click', '.editModeButton', () => { toggleEditMode(); }); - $('.roomButton').on('click', function () { - roomName = $(this).text(); - loadRoom($(this).data('value')); - }); - $('.transferTableButton').on('click', function () { - transferModeOn(); - }); - $('.addDecoration').on('click', function () { - $('#decorator').css('display', 'flex'); - }); - $('.deleteDecoration').on('click', function () { - deleteDecoration(selectedDecoration); - }); - $('.decoratorItem').on('click', function () { - addDecoration(this); - }); - $('.changeShapeButton').on('click', function () { - changeTableShape(selectedTableNumber); - }); - $('.reserveTableButton').on('click', function () { - if ($(this).text() === lang('reserve_table')) { - reserveTable(); +const Floorplan = { + rooms: [], + tables: [], + decorations: [], + reservations: [], + activeTableNumbers: [], + stage: null, + transformer: null, + tableLayer: null, + selectedTableNumber: 0, + currentRoom: null, + roomToLoad: null, + visualScale: 1, + visualScaleBasis: 1280, + floorplanDiv: null, + selectedDecorationId: 0 +}; +$(() => ajax('/ajax/getFloorplanData/1', null, 'get', setupFloorplan, null, null)); +const setupFloorplanEvents = () => { + const doc = $(document); + doc.on('click', '.roomButton', roomButtonClicked); + doc.on('click', '.editModeButton', editModeButtonClicked); + doc.on('click', '.changeShapeButton', changeTableShape); + doc.on('click', '.addTableButton', showAddTablePopup); + doc.on('click', '.deleteTableButton', confirmDeleteTable); + doc.on('click', '.addDecoration', showDecorator); + doc.on('click', '.deleteDecoration', deleteDecoration); + doc.on('click', '.decoratorItem', addDecoration); + doc.on('click', '.mergeButton', toggleMergeMode); + doc.on('click', '.unmergeButton', unmergeTable); + doc.on('click', '.transferTableButton', toggleTransferMode); + doc.on('click', '.reserveTableButton', reserveTable); + doc.on('click', '.unreserveTableButton', unreserveTable); +}; +const roomButtonClicked = (e) => { + const button = $(e.target); + const roomId = button.data('value'); + loadRoom(getRoomById(roomId)); +}; +const editModeButtonClicked = (e) => { + const button = $(e.target); + button.toggleClass('active'); + toggleMode('edit'); + if (isInMode('edit')) { + Floorplan.stage.find('Group, Image').forEach(table => table.draggable(true)); + if (isInMode('tableSelected')) { + const selectedTableShape = getTableShapeFromTableNumber(Floorplan.selectedTableNumber); + selectTable(selectedTableShape); } - else { - unreserveTable(); - } - }); - $('.addTableButton').on('click', function () { - addTable(); - }); - $('.deleteTableButton').on('click', function () { - deleteTable(); - }); - loadRoom(roomToLoad); -} -let updateTableShape = (tableData) => { - return ajaxSync('/ajax/updateTableShape', tableData); -}; -//Change the shape of a table in edit mode. -function changeTableShape(tableNumber) { - let tableData = getTableData(tableNumber); - let tableShape = tableData['shape']; - let tableWidth = tableData['width']; - let tableHeight = tableData['height']; - let tableRotation = tableData['rotation']; - let order = ['square', 'rect', 'longrect', 'diamond', 'circle', 'ellipse', 'longellipse']; - if (order.indexOf(tableShape) === -1) - tableShape = 'square'; - //What the next shape is - let currentIndex = order.indexOf(tableShape); - let nextIndex = currentIndex + 1; - if (nextIndex > (order.length) - 1) - nextIndex = 0; - let nextShape = order[nextIndex]; - switch (nextShape) { - case 'square': - case 'circle': - tableHeight = tableWidth; - tableRotation = 0; - break; - case 'diamond': - tableHeight = tableWidth; - tableRotation = 45; - break; - case 'rect': - case 'ellipse': - tableHeight = tableWidth * 2; - tableRotation = 0; - break; - case 'longrect': - case 'longellipse': - tableRotation = 90; - break; - } - let updateData = { - table_number: tableNumber, - shape: nextShape, - height: tableHeight, - width: tableWidth, - rotation: tableRotation - }; - tableData = updateTableShape(updateData); - let tableGroup = stage.find('#' + tableNumber)[0]; - transformer.nodes([]); - tableGroup.destroy(); - let newTable = createTableElement(tableData); - tableLayer.add(newTable); - stage.draw(); - selectTable(tableNumber); - loadRoom(currentRoom, tableNumber); -} -let createTable = (tableData) => { - return ajaxSync('/ajax/createTable', tableData); -}; -let tableExists = (tableNumber) => { - return ajaxSync(`/ajax/tableExists/${tableNumber}`); -}; -function addTable(tableNumber) { - if (!tableNumber) { - showVirtualNumpad(lang('new_table_number'), 4, false, false, true, addTable); } else { - let newTableInfo = { - table_number: tableNumber, - room_id: currentRoom, - default_covers: 2, - width: 200, - height: 200, - rotation: 0, - pos_x: basis / 2, - pos_y: basis / 2, - shape: 'square', - merged_children: '', - previous_state: '', - status: 0, - reservation: 0, - venue_id: 1 - }; - let newTableData = createTable(newTableInfo); - if (!newTableData.table_number) { - alert(newTableData); - return false; - } - newTable = createTableElement(newTableData); - tableLayer.add(newTable); - tableLayer.draw(); - selectTable(tableNumber); + setTransformerNodes([]); + Floorplan.stage.find('Group, Image').forEach(table => table.draggable(false)); } -} -function selectTable(tableNumber) { - let table = stage.find('#' + tableNumber)[0]; - table.fire('click'); -} -function deleteTable(tableNumber = 0) { - if (!tableNumber) { - confirm(lang('confirm_delete_table', selectedTableNumber), selectedTableNumber, 'Confirm', deleteTable); - } - else { - if (tableIsOpen(selectedTableNumber)) { - alert(lang('error_delete_existing_table')); - } - else { - ajax(`/ajax/deleteTable/${selectedTableNumber}`, null, 'GET'); - let table = stage.find('#' + tableNumber)[0]; - transformer.nodes([]); - table.destroy(); - tableLayer.draw(); - selectedTable = null; - selectedTableNumber = null; - } - } -} -// Rotate a shape around any point. -// shape is a Konva shape -// angleDegrees is the angle to rotate by, in degrees. -// point is an object {x: posX, y: posY} -function rotateAroundPoint(shape, angleDegrees, point) { - let angleRadians = angleDegrees * Math.PI / 180; - // they lied, I did have to use trigonometry - const x = point.x + - (shape.x() - point.x) * Math.cos(angleRadians) - - (shape.y() - point.y) * Math.sin(angleRadians); - const y = point.y + - (shape.x() - point.x) * Math.sin(angleRadians) + - (shape.y() - point.y) * Math.cos(angleRadians); - shape.rotation(shape.rotation() + angleDegrees); // rotate the shape in place - shape.x(x); // move the rotated shape in relation to the rotation point. - shape.y(y); -} -function createDecoration(data, idToSelect = false) { - let draggable = editMode; - var decoration = new Image(); - decoration.onload = function () { - var dec = new Konva.Image({ - id: data.decoration_id.toString(), - x: data.decoration_pos_x * scale, - y: data.decoration_pos_y * scale, - image: decoration, - offsetX: data.decoration_width * 0.5 * scale, - offsetY: data.decoration_height * 0.5 * scale, - rotation: data.decoration_rotation, - width: data.decoration_width * scale, - height: data.decoration_height * scale, - draggable: draggable, - }); - if (editMode && dec.id() === idToSelect) { - transformer.nodes([dec]); - transformer.moveToTop(); - } - dec.on('click', function () { - selectDecoration(this); - }); - dec.on('tap', function () { - selectDecoration(this); - }); - dec.on('dragend', function () { - saveDecTransformation(this); - }); - dec.on('transformend', function () { - saveDecTransformation(this); - }); - // add the shape to the layer - tableLayer.add(dec); - tableLayer.draw(); - dec.moveToBottom(); - }; - decoration.src = 'images/decorations/' + data.decoration_image; - return decoration; -} -var selectedDecoration = false; -function selectDecoration(decoration) { - if (editMode) { - if ((transformer.nodes().length > 0 && transformer.nodes()[0] != decoration) || transformer.nodes().length == 0) { - resetActiveTable(); - transformer.nodes([decoration]); - decoration.moveToTop(); - transformer.moveToTop(); - selectedDecoration = decoration; - toggleFloorplanControls(); - } - else { - transformer.nodes([]); - selectedDecoration = false; - $('.deleteDecoration').css('display', 'none'); - } - } -} -function createTableElement(data, selectTable = false) { - // Create container group - let draggable = editMode || newTable === data.table_number; - let table = new Konva.Group({ - x: data.pos_x * scale, - y: data.pos_y * scale, +}; +const setupFloorplan = (floorplanData) => { + Floorplan.tables = floorplanData.tables; + Floorplan.activeTableNumbers = floorplanData.activeTableNumbers; + Floorplan.rooms = floorplanData.rooms; + Floorplan.decorations = floorplanData.decorations; + Floorplan.reservations = floorplanData.reservations; + getDimensions(); + setupFloorplanEvents(); + loadRoom(Floorplan.rooms[0]); +}; +const loadRoom = (roomToLoad) => { + setRoomBackground(roomToLoad); + setupKonva(); + const tablesInRoom = Floorplan.tables.filter(table => table.room_id == roomToLoad.id); + const decorationsInRoom = Floorplan.decorations.filter(decoration => decoration.decoration_room == roomToLoad.id); + decorationsInRoom.forEach(decoration => createDecorationShape(decoration, false)); + tablesInRoom.forEach(createTableShape); + Floorplan.currentRoom = roomToLoad; +}; +const getRoomById = (roomId) => { + return Floorplan.rooms.find((room) => room.id == roomId); +}; +const tableIsOpen = (table) => Floorplan.activeTableNumbers.includes(table.table_number); +const createTableShape = (table) => { + const draggable = isInMode('edit'); + const tableGroup = new Konva.Group({ + x: table.pos_x * Floorplan.visualScale, + y: table.pos_y * Floorplan.visualScale, draggable: draggable, listening: true, - id: data.table_number.toString() + id: table.table_number.toString() }); - let fillColor = 'gray'; - if (data.status === 'reserved') { - fillColor = 'lightgreen'; - } - if (activeTables.includes(data.table_number)) { - fillColor = 'lightblue'; - } - data.width = data.width * scale; - data.height = data.height * scale; - // Create background shape - let shape; - switch (data.shape) { + const fillColor = tableIsOpen(table) + ? 'lightblue' + : table.status == 2 + ? 'lightgreen' + : 'gray'; + let tableShape; + switch (table.shape) { case "circle": // fall-through case "ellipse": // fall-through case "longellipse": - shape = new Konva.Ellipse({ + tableShape = new Konva.Ellipse({ x: 0, y: 0, - radiusX: data.width * 0.5, - radiusY: data.height * 0.5, - rotation: data.rotation, + radiusX: table.width * 0.5 * Floorplan.visualScale, + radiusY: table.height * 0.5 * Floorplan.visualScale, + rotation: table.rotation, fill: fillColor, stroke: "black", strokeWidth: 4, @@ -304,14 +110,14 @@ function createTableElement(data, selectTable = false) { }); break; default: - shape = new Konva.Rect({ + tableShape = new Konva.Rect({ x: 0, y: 0, - offsetX: data.width * 0.5, - offsetY: data.height * 0.5, - width: data.width, - height: data.height, - rotation: data.rotation, + offsetX: table.width * 0.5 * Floorplan.visualScale, + offsetY: table.height * 0.5 * Floorplan.visualScale, + width: table.width * Floorplan.visualScale, + height: table.height * Floorplan.visualScale, + rotation: table.rotation, fill: fillColor, stroke: "black", strokeWidth: 4, @@ -319,466 +125,514 @@ function createTableElement(data, selectTable = false) { listening: true }); break; - } // End switch - // Create label - let label = new Konva.Text({ - x: data.width * -0.5, - y: data.height * -0.5, - width: data.width, - height: data.height, - text: data.table_number.toString(), - fontSize: 40 * scale, + } + const label = new Konva.Text({ + x: table.width * -0.5 * Floorplan.visualScale, + y: table.height * -0.5 * Floorplan.visualScale, + width: table.width * Floorplan.visualScale, + height: table.height * Floorplan.visualScale, + text: table.table_number.toString(), + fontSize: 40 * Floorplan.visualScale, fill: "black", align: "center", verticalAlign: "middle", draggable: false, listening: false }); - tableNumber = data.tablenumber; - table.add(shape, label); - table.on('dblclick', function () { - tableNumber = parseInt(getTableNumber(this)); - if (!editMode) { - loadScreen('orderScreen', 'table=' + tableNumber); - } - }); - table.on('dbltap', function () { - tableNumber = getTableNumber(this); - loadScreen('orderScreen', 'table=' + tableNumber); - }); - table.on('dragend', function () { - saveTransformation(table); - }); - innerShape = getTableShape(table); - table.on('click', function () { - selectTableShape(this); - }); - table.on('tap', function () { - selectTableShape(this); - }); - innerShape.on('transformend', function () { - saveTransformation(table); - }); - // add the shape to the layer - tableLayer.add(table); - table.moveToTop(); - if (tableNumber === selectedTableNumber) { - selectTable = table; - } - if (selectTable) { - if (selectTable === tableNumber) { - table.fire('click'); - } - } - return table; -} -function loadRoom(room, selectTable = 0, selectDecoration = false) { - //if (room === currentRoom) return false - ajax(`/ajax/getRoomData/${room}`, null, 'GET', (response) => { - let floorplanDiv = $('#tableMap'); - let backgroundImage = response.background_image; - floorplanDiv.css("background-image", `url(images/rooms/${backgroundImage})`); - floorplanDiv.css("background-size", `${width}px ${height}px`); - }, null, null); - $('.roomButton').removeClass('active'); - let selector = ".roomButton:contains('" + roomName + "')"; - $(selector).addClass('active'); - currentRoom = room; - resetActiveTable(); - stage.destroy(); - stage = new Konva.Stage({ - container: 'tableMap', - width: width, - height: height, - }); - transformer = new Konva.Transformer({ - rotationSnaps: [0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 225, 270, -15, -30, -45, -60, -75, -90, -105, -120, -135, -150, -165, -180, -225, -270, 360, -360], - anchorSize: 40 * scale, - ignoreStroke: true, - centeredScaling: true - }); - let tablesAndDecorations = ajaxSync(`/ajax/getTablesAndDecorations/${room}`, null, 'GET'); - let decorations = tablesAndDecorations['decorations']; - let tables = tablesAndDecorations['tables']; - tableLayer = new Konva.Layer(); - tableLayer.add(transformer); - // Loop data and call the creation method for each decoration/table. - decorations.forEach(itemData => { - createDecoration(itemData, selectDecoration); - }); - tables.forEach(itemData => { - tableLayer.add(createTableElement(itemData, selectTable)); - }); - activeTables = getOpenTables(); - stage.add(tableLayer); -} -var mergeMode = false; -var parentMergeTable; -var childMergeTable; -var tableTransferOrigin; -var transferMode = false; -function transferModeOn() { - mergeModeOff(); - if (!transferMode) { - tableTransferOrigin = selectedTableNumber; - transferMode = true; - $('.transferTableButton').addClass('active'); - $('.transferTableButton').text('Select a table to transfer items to'); - } - else { - transferModeOff(); - } -} -function transferModeOff() { - transferMode = false; - $('.transferTableButton').removeClass('active'); - $('.transferTableButton').text(lang('transfer_table')); -} -let getOpenTables = () => { - return ajaxSync('/ajax/getActiveTables/1', null, 'GET'); + tableGroup.add(tableShape, label); + setupTableEvents(tableGroup); + Floorplan.tableLayer.add(tableGroup); + return tableGroup; }; -let transferTableAjax = (origin, destination) => { - ajax(`/ajax/transferTables/${origin}/${destination}`, null, 'GET'); +const setupTableEvents = (tableGroup) => { + const tableShape = getTableShapeFromGroup(tableGroup); + tableGroup.on('click', (e) => tableClicked(e.target)); + tableGroup.on('tap', (e) => tableClicked(e.target)); + tableGroup.on('dragend', (e) => saveTableTransformation(e.target)); + tableShape.on('transformend', (e) => { + const group = getTableGroupFromShape(e.target); + saveTableTransformation(group); + }); }; -function transferTables() { - destination = selectedTableNumber; - origin = tableTransferOrigin; - if (destination !== origin) { - transferTableAjax(origin, destination); - activeTables = getOpenTables(); - transferModeOff(); - getTableShape(selectedTable).fill('lightblue'); - getTableShape(getTableGroup(origin)).fill('gray'); - } - else { - alert("Can't transfer a table to itself."); - transferModeOff(); - } -} -function mergeModeOn() { - transferModeOff(); - if (!mergeMode) { - mergeMode = true; - $('.mergeButton').addClass('active'); - $('.mergeButton').text('Select a table to merge with Table ' + selectedTableNumber); - parentMergeTable = selectedTableNumber; - } - else { - mergeModeOff(); - } -} -function mergeModeOff() { - mergeMode = false; - $('.mergeButton').removeClass('active'); - $('.mergeButton').text(lang('merge_table')); -} -let ajaxMergeTables = (parent, child) => { - return ajaxSync(`/ajax/mergeTables/${parent}/${child}`, null, 'GET'); +const getTableShapeFromGroup = (group) => group.getChildren()[0]; +const getTableGroupFromShape = (shape) => shape.parent; +const saveTableTransformation = (tableGroup) => { + const originalTable = getTableDataFromGroup(tableGroup); + const tableShape = getTableShapeFromGroup(tableGroup); + const newTableInfo = { + table_number: originalTable.table_number, + previous_state: originalTable.previous_state, + merged_children: originalTable.merged_children, + id: originalTable.id, + width: Math.round(tableShape.scaleX() * tableShape.width() / Floorplan.visualScale), + height: Math.round(tableShape.scaleY() * tableShape.height() / Floorplan.visualScale), + pos_x: Math.round(tableGroup.x() / Floorplan.visualScale), + pos_y: Math.round(tableGroup.y() / Floorplan.visualScale), + rotation: Math.round(tableShape.rotation()), + room_id: originalTable.room_id, + status: originalTable.status, + venue_id: originalTable.venue_id, + shape: originalTable.shape, + default_covers: originalTable.default_covers, + }; + saveTable(newTableInfo); + redrawTable(tableGroup); }; -let ajaxUnmergeTable = (parent) => { - return ajaxSync(`/ajax/unmergeTable/${parent}`, null, 'GET'); +const saveTable = (tableToUpdate) => { + const tables = Floorplan + .tables + .filter(table => { + return table.id != tableToUpdate.id; + }); + tables.push(tableToUpdate); + Floorplan.tables = tables; + ajax("/ajax/transformTable", tableToUpdate, 'post', null, null, null); }; -function mergeTables() { - parentMergeTable = parseInt(parentMergeTable); - childMergeTable = parseInt(childMergeTable); - if (childMergeTable !== parentMergeTable) { - let result = ajaxMergeTables(parentMergeTable, childMergeTable); - mergeModeOff(); - loadRoom(currentRoom); - newTable = getTableGroup(parentMergeTable); - newTable.draggable(true); - if (tableIsOpen(parentMergeTable)) { - getTableShape(newTable).fill('lightblue'); - } - } - else { - alert("Can't merge a table with itself!"); - mergeModeOff(); - } -} -//When a table is passed (a group of the shape plus the text), returns the number as string. -function getTableNumber(tableGroup) { - textItem = tableGroup.getChildren()[1]; - return textItem.getText(); -} -function getTableGroup(tableNumber) { - return stage.find('#' + tableNumber)[0]; -} -function getTableShape(tableGroup) { +const setTransformerNodes = (nodes) => { + Floorplan.transformer.moveToTop(); + if (nodes.length < 1) + Floorplan.transformer.moveToBottom(); + Floorplan.transformer.nodes(nodes); +}; +const getTableDataFromTableNumber = (tableNumber) => { + return Floorplan.tables.filter(table => table.table_number == tableNumber)[0]; +}; +const getTableDataFromGroup = (tableGroup) => { + const tableNumber = tableGroup.attrs.id; + return Floorplan.tables.find(table => tableNumber == table.table_number); +}; +const getTableDataFromShape = (tableShape) => getTableDataFromGroup(tableShape.parent); +const getTableShapeFromTableNumber = (tableNumber) => { + const tableGroup = Floorplan.stage.find('Group').find((group) => { + return group.attrs.id == tableNumber; + }); return tableGroup.getChildren()[0]; -} -function getReservation(id) { - return ajaxSync('/ajax/getReservation', id); -} -//When a user selects a table. -function selectTableShape(table) { - let tableNumber = getTableNumber(table); - let shape = getTableShape(table); - let strokeColor = shape.stroke(); - selectedTable = table; - selectedTableNumber = tableNumber; - if (transferMode) - transferTables(); - if (mergeMode) { - childMergeTable = tableNumber; - mergeTables(); - } - else { - //If table is not selected - if (strokeColor !== "yellow") { - let tableData = getTableData(selectedTableNumber); - let coverNumberString = lang('covers', tableData.default_covers.toString()); - let tableString = '' + lang('activeTable', selectedTableNumber.toString()) + ''; - $('.reserveTableButton').text(lang('reserve_table')); - if (tableData.status === 'reserved') { - let reservation = getReservation(tableData.reservation_id); - console.log(reservation); - $('.reserveTableButton').text(lang('unreserve_table')); - if (reservation.reservation_name) { - reservationString = lang('reserved_for', reservation.reservation_name); - } - else { - reservationString = lang('reserved'); - } - tableString += '' + reservationString + ''; - } - tableString += " (" + coverNumberString + ")"; - $('.currentTable').html(tableString); - stage.find('Rect').forEach(function (rect, index) { - rect.stroke("black"); - }); - stage.find('Ellipse').forEach(function (circ, index) { - circ.stroke("black"); - }); - shape.stroke("yellow"); - toggleEditControls(true); - if (editMode) { - toggleFloorplanControls(); - $('.deleteDecoration').css('display', 'none'); - transformer.nodes([getTableShape(table)]); - table.moveToTop(); - transformer.moveToTop(); - } - tableLayer.draw(); - //If the table is already selected - } - else { - resetActiveTable(); - transformer.nodes([]); - tableLayer.draw(); - } - } -} -let getTableData = (tableNumber) => { - return ajaxSync('/ajax/getTableData', tableNumber); }; -let isTableMerged = (tableNumber) => { - let mergeData = getTableData(tableNumber).merged_children; - return mergeData !== ""; +const getTableGroupFromTableNumber = (tableNumber) => { + const tableShape = getTableShapeFromTableNumber(tableNumber); + return getTableGroupFromShape(tableShape); }; -function resetActiveTable() { - if (!transferMode) { - if (selectedTable) { - getTableShape(selectedTable).stroke('black'); - } - selectedTable = null; - selectedTableNumber = ""; - toggleFloorplanControls(false, editMode); - toggleEditControls(false); - } - else { - $('.editControls').css('display', 'none'); - } -} -function addDecoration(button) { - let insertData = { - decoration_room: currentRoom, - basis: basis, - decoration_image: $(button).data('image') - }; - ajaxSync('/ajax/addDecoration', insertData); - $('#decorator').css('display', 'none'); - selectedDecoration = false; - loadRoom(currentRoom); -} -function deleteDecoration(decoration) { - ajax('/ajax/deleteDecoration', decoration.id()); - $('.deleteDecoration').css('display', 'none'); - decoration.destroy(); - selectedDecoration = false; - transformer.nodes([]); -} -function saveDecTransformation(decoration) { - let newData = { - decoration_id: decoration.id(), - decoration_pos_x: decoration.x() / scale, - decoration_pos_y: decoration.y() / scale, - decoration_width: parseInt((decoration.scaleX() * decoration.width()) / scale), - decoration_height: parseInt((decoration.scaleY() * decoration.height()) / scale), - decoration_rotation: parseInt(decoration.rotation()), - decoration_image: decodeURIComponent(decoration.image().src), - decoration_room: currentRoom - }; - if (editMode) { - idToSelect = decoration.id(); - } - ajax('/ajax/updateDecoration', newData); -} -//When a table has been resized, rotated etc. -function saveTransformation(table) { - tableNumber = getTableNumber(table); - shape = getTableShape(table); - newRotation = parseInt(shape.rotation()); - newWidth = parseInt(shape.scaleX() * shape.width() / scale); - newHeight = parseInt((shape.scaleY() * shape.height()) / scale); - newXPos = parseInt(table.x() / scale); - newYPos = parseInt(table.y() / scale); - updateData = { - table_number: tableNumber, - rotation: newRotation, - width: newWidth, - height: newHeight, - pos_x: newXPos, - pos_y: newYPos - }; - transformTable(updateData); -} -let transformTable = (tableData) => { - return ajax("/ajax/transformTable", tableData); -}; -function unmergeTable() { - ajaxUnmergeTable(selectedTableNumber); - loadRoom(currentRoom); -} -function reserveTable(covers) { - if (!covers) { - showVirtualNumpad(lang('how_many_covers'), 2, false, false, true, reserveTable); - } - else { - let table = getTableGroup(selectedTableNumber); - let newReservation = ajaxSync('/ajax/newEmptyReservation', selectedTableNumber); - table.fire('click'); - let tableShape = getTableShape(table); +const setReservationStatus = (table) => { + const reservationText = $('.reservationStatus'); + const tableShape = getTableShapeFromTableNumber(table.table_number); + reservationText.text(''); + if (table.status == 2) { tableShape.fill('lightgreen'); - table.draw(); - table.fire('click'); - completeReservation(newReservation); - } -} -function unreserveTable(input) { - if (!input) { - confirm(lang('confirm_delete_reservation', selectedTableNumber), selectedTableNumber, lang('confirm'), unreserveTable); - } - else { - ajaxSync('/ajax/unreserveTable', input); - hideAlerts(); - table = getTableGroup(input); - table.fire('click'); - tableShape = getTableShape(table); - tableShape.fill('gray'); - table.draw(); - table.fire('click'); - } -} -function completeReservation(resName) { - if (!resName) { - showVirtualKeyboard(lang('enter_reservation_name')); - } - else { - //callPhpFunction('updateTableMapTable', [selectedTableNumber, 'reservation_name', resName]); - loadRoom(currentRoom, selectedTableNumber); - } -} -function toggleEditMode() { - let editModeButton = $('.editModeButton'); - if (editMode === true) { - editMode = false; - loadRoom(currentRoom); - editModeButton.removeClass('active'); - editModeButton.html(lang('edit_floorplan')); - toggleFloorplanControls(false); - if (selectedTable) - selectedTable.fire('click'); - stage.find('Group').forEach(function (table, index) { - table.draggable(false); - }); - } - else { - editMode = true; - stage.find('Group').forEach(function (table, index) { - table.draggable(true); - if (getTableShape(table).stroke() === "yellow") { - table.moveToTop(); - transformer.nodes([getTableShape(table)]); - transformer.moveToTop(); + const reservations = Floorplan.reservations.filter(reservation => reservation.reservation_table_id == table.id); + if (reservations.length) { + turnOnMode('reservedTableSelected'); + reservationText.text(lang('reserved')); + let reservation = reservations[0]; + if (reservation.reservation_name != '') { + reservationText.text(lang('reserved_for', reservation.reservation_name)); } - }); - stage.find('Image').forEach(function (img, index) { - img.draggable(true); - }); - toggleFloorplanControls(); - transformer.moveToTop(); - tableLayer.draw(); - editModeButton.addClass('active'); - editModeButton.html(lang('stop_edit_floorplan')); - } -} -function toggleFloorplanControls(onOrOff = true, subControlsOnly = false) { - if (onOrOff || subControlsOnly) { - $('.floorplanControls').css('visibility', 'visible'); + } } else { - $('.floorplanControls').css('visibility', 'hidden'); + let fillColor = tableIsOpen(table) ? 'lightblue' : 'gray'; + tableShape.fill(fillColor); + turnOffMode('reservedTableSelected'); } - if (selectedTable) { - $('.changeShapeButton').css('visibility', 'visible'); - $('.deleteTableButton').css('visibility', 'visible'); - } - else { - $('.changeShapeButton').css('visibility', 'hidden'); - $('.deleteTableButton').css('visibility', 'hidden'); - } - if (selectedDecoration) { - $('.deleteDecoration').css('display', 'flex'); - } - else { - $('.deleteDecoration').css('display', 'none'); - } -} -let tableIsOpen = (tableNumber) => { - return ajaxSync(`/ajax/tableIsOpen/${tableNumber}`, null, 'GET'); }; -function toggleEditControls(onOrOff = true) { - if (onOrOff) { - $('.editControls').css("display", "flex"); - if (isTableMerged(selectedTableNumber)) { - $('.mergeControls').css("visibility", "visible"); - $('.unmergeButton').css('display', 'flex'); - $('.mergeButton').css('display', 'flex'); +const reserveTable = () => { + showVirtualNumpad(lang('how_many_covers'), 2, false, false, true, createEmptyReservation); +}; +const createEmptyReservation = (covers) => { + const newReservation = { + id: 0, + reservation_covers: covers, + reservation_created_at: 0, + reservation_table_id: getSelectedTableData().id, + reservation_name: '', + reservation_time: 0, + }; + ajax('/ajax/newEmptyReservation', newReservation, 'post', emptyReservationCreated, null, null); +}; +const emptyReservationCreated = (reservation) => { + Floorplan.reservations.push(reservation); + const selectedTable = getSelectedTableData(); + selectedTable.status = 2; + selectedTable.default_covers = reservation.reservation_covers; + updateTableData(selectedTable); + updateCoverText(selectedTable); + setReservationStatus(getSelectedTableData()); + showVirtualKeyboard(lang('confirm_reservation_name'), 32, false, addReservationName); +}; +const addReservationName = (name) => { + hideVirtualKeyboard(); + const reservation = Floorplan.reservations.filter(reservation => reservation.reservation_table_id == getSelectedTableData().id)[0]; + reservation.reservation_name = name; + ajax('/ajax/updateReservation', reservation, 'post', reservationNameAdded, null, null); +}; +const reservationNameAdded = (updatedReservation) => { + console.log(updatedReservation); + Floorplan.reservations = Floorplan.reservations.filter(reservation => reservation.id != updatedReservation.id); + Floorplan.reservations.push(updatedReservation); + setReservationStatus(getSelectedTableData()); +}; +const getReservationsOnTable = (table) => Floorplan.reservations.filter(reservation => reservation.reservation_table_id == table.id); +const updateTableData = (tableToRemove) => { + Floorplan.tables = Floorplan.tables.filter(table => table.id != tableToRemove.id); + Floorplan.tables.push(tableToRemove); +}; +const unreserveTable = () => { + const selectedTable = getSelectedTableData(); + selectedTable.status = 0; + ajax('/ajax/unreserveTable', selectedTable, 'post', tableUnreserved, null, null); +}; +const tableUnreserved = (table) => { + Floorplan.reservations = Floorplan.reservations.filter(reservation => reservation.reservation_table_id != table.id); + updateTableData(table); + setReservationStatus(table); +}; +const getSelectedTableData = () => getTableDataFromTableNumber(Floorplan.selectedTableNumber); +const deselectTables = () => { + Floorplan.stage.find('Rect, Ellipse').forEach((shape, index) => { + shape.stroke('black'); + }); + Floorplan.selectedDecorationId = 0; + Floorplan.selectedTableNumber = 0; + turnOffMode('tableSelected'); + turnOffMode('activeTableSelected'); + turnOffMode('decorationSelected'); + turnOffMode('merge'); + turnOffMode('transfer'); + setTransformerNodes([]); +}; +const selectTable = (tableShape) => { + tableShape.stroke('yellow'); + const table = getTableDataFromShape(tableShape); + Floorplan.selectedTableNumber = table.table_number; + if (isInMode('edit')) { + setTransformerNodes([tableShape]); + } + if (tableIsOpen(table)) { + turnOnMode('activeTableSelected'); + } + $('.reservationStatus').html('' + lang('active_table', table.table_number.toString() + '')); + updateCoverText(table); + $('.selectedTableNumber').text(lang('active_table', table.table_number.toString())); + setReservationStatus(table); + const unmergeVisibility = table.merged_children ? 'visible' : 'hidden'; + $('.unmergeButton').css('visibility', unmergeVisibility); + turnOnMode('tableSelected'); +}; +const updateCoverText = (table) => $('.selectedTableCovers').text(lang('covers', table.default_covers.toString())); +const tableClicked = (tableShape) => { + const table = getTableDataFromShape(tableShape); + if (isInMode('merge')) { + mergeTables(getTableDataFromTableNumber(Floorplan.selectedTableNumber), table); + return; + } + if (isInMode('transfer')) { + transferTables(getTableDataFromTableNumber(Floorplan.selectedTableNumber), table); + } + const selectedTableNumber = Floorplan.selectedTableNumber; + deselectTables(); + if (selectedTableNumber != table.table_number) { + selectTable(tableShape); + } +}; +const createDecorationShape = (decoration, select) => { + const draggable = isInMode('edit'); + const decorationShape = new Image(); + decorationShape.onload = () => { + const decorationImage = new Konva.Image({ + id: decoration.id.toString(), + x: decoration.decoration_pos_x * Floorplan.visualScale, + y: decoration.decoration_pos_y * Floorplan.visualScale, + image: decorationShape, + offsetX: decoration.decoration_width * 0.5 * Floorplan.visualScale, + offsetY: decoration.decoration_height * 0.5 * Floorplan.visualScale, + rotation: decoration.decoration_rotation, + width: decoration.decoration_width * Floorplan.visualScale, + height: decoration.decoration_height * Floorplan.visualScale, + draggable: draggable, + }); + // add the shape to the layer + Floorplan.tableLayer.add(decorationImage); + Floorplan.tableLayer.draw(); + decorationImage.moveToBottom(); + setupDecorationEvents(decorationImage); + if (select) { + decorationImage.moveToTop(); + selectDecorationShape(decorationImage); + } + }; + decorationShape.src = 'images/decorations/' + decoration.decoration_image; +}; +const setupDecorationEvents = (decorationShape) => { + decorationShape.on('click', e => { + decorationClicked(e.target); + }); + decorationShape.on('transformend', e => { + decorationTransformed(e.target); + }); + decorationShape.on('dragend', e => { + decorationTransformed(e.target); + }); +}; +const decorationClicked = (decorationShape) => { + if (isInMode('edit')) { + turnOffMode('tableSelected'); + if ((Floorplan.transformer.nodes().length > 0 && Floorplan.transformer.nodes()[0] != decorationShape) || Floorplan.transformer.nodes().length == 0) { + selectDecorationShape(decorationShape); } else { - $('.mergeControls').css("visibility", "visible"); - $('.mergeButton').css('display', 'flex'); - $('.unmergeButton').css('display', 'none'); - } - if (tableIsOpen(selectedTableNumber)) { - $('.payTableButton').css('display', 'flex'); - $('.viewTableButton').css('display', 'flex'); - $('.reserveTableButton').css('display', 'none'); - $('.transferTableButton').css('display', 'flex'); - } - else { - $('.payTableButton').css('display', 'none'); - $('.viewTableButton').css('display', 'none'); - $('.reserveTableButton').css('display', 'flex'); - $('.transferTableButton').css('display', 'none'); + deselectTables(); + decorationShape.moveToBottom(); } } - else { - $('.editControls').css("display", "none"); - $('.mergeControls').css("visibility", "hidden"); - $('.mergeButton').css("display", "none"); - $('.unmergeButton').css("display", "none"); +}; +const selectDecorationShape = (decorationShape) => { + deselectTables(); + Floorplan.transformer.nodes([decorationShape]); + Floorplan.selectedDecorationId = Number(decorationShape.id()); + decorationShape.moveToTop(); + Floorplan.transformer.moveToTop(); + turnOnMode('decorationSelected'); +}; +const getDecorationDataById = (id) => { + return Floorplan.decorations.find(decoration => id == decoration.id); +}; +const decorationTransformed = (decorationShape) => { + const oldDecorationData = getDecorationDataById(Number(decorationShape.id())); + const newDecoration = { + id: oldDecorationData.id, + decoration_room: oldDecorationData.decoration_room, + decoration_pos_x: Math.round(decorationShape.x() / Floorplan.visualScale), + decoration_pos_y: Math.round(decorationShape.y() / Floorplan.visualScale), + decoration_rotation: Math.round(decorationShape.rotation()), + decoration_width: Math.round((decorationShape.scaleX() * decorationShape.width()) / Floorplan.visualScale), + decoration_height: Math.round((decorationShape.scaleY() * decorationShape.height()) / Floorplan.visualScale), + decoration_image: oldDecorationData.decoration_image, + }; + saveDecoration(newDecoration); +}; +const saveDecoration = (decorationToUpdate) => { + const decorations = Floorplan + .decorations + .filter(decoration => { + return decoration.id != decorationToUpdate.id; + }); + decorations.push(decorationToUpdate); + Floorplan.decorations = decorations; + ajax("/ajax/updateDecoration", decorationToUpdate, 'post', null, null, null); +}; +const showDecorator = () => $('#decorator').css('display', 'flex'); +const hideDecorator = () => $('#decorator').css('display', 'flex').hide(); +const addDecoration = (e) => { + const button = $(e.currentTarget); + const newDecoration = { + id: 0, + decoration_room: Floorplan.currentRoom.id, + decoration_pos_x: Floorplan.visualScaleBasis / 2, + decoration_pos_y: Floorplan.visualScaleBasis / 2, + decoration_rotation: 0, + decoration_width: 200, + decoration_height: 200, + decoration_image: button.data('image') + }; + ajax('/ajax/addDecoration', newDecoration, 'post', decorationAdded, null, null); +}; +const decorationAdded = (decoration) => { + Floorplan.decorations.push(decoration); + createDecorationShape(decoration, true); + hideDecorator(); +}; +const deleteDecoration = () => ajax('/ajax/deleteDecoration', getDecorationDataById(Floorplan.selectedDecorationId), 'post', decorationDeleted, null, null); +const decorationDeleted = (deletedDecoration) => { + Floorplan.decorations = Floorplan.decorations.filter(decoration => decoration.id != deletedDecoration.id); + const decorationShape = Floorplan.stage.findOne(`#${deletedDecoration.id}`); + decorationShape.destroy(); + deselectTables(); +}; +const setRoomBackground = (roomToLoad) => { + const width = Floorplan.floorplanDiv.width(); + const height = Floorplan.floorplanDiv.height(); + Floorplan.floorplanDiv.css("background-image", `url(images/rooms/${roomToLoad.background_image})`); + Floorplan.floorplanDiv.css("background-size", `${width}px ${height}px`); +}; +const setupKonva = () => { + const dimensions = getDimensions(); + if (Floorplan.stage !== null) + Floorplan.stage.destroy(); + Floorplan.stage = new Konva.Stage({ + container: 'tableMap', + width: dimensions.width, + height: dimensions.height, + }); + Floorplan.stage.on('click', e => { + if (e.target == Floorplan.stage) { + deselectTables(); + } + }); + Floorplan.transformer = new Konva.Transformer({ + rotationSnaps: [0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 225, 270, -15, -30, -45, -60, -75, -90, -105, -120, -135, -150, -165, -180, -225, -270, 360, -360], + anchorSize: 30 * Floorplan.visualScale, + ignoreStroke: true, + centeredScaling: true, + anchorCornerRadius: 10, + }); + Floorplan.tableLayer = new Konva.Layer(); + Floorplan.tableLayer.add(Floorplan.transformer); + Floorplan.stage.add(Floorplan.tableLayer); +}; +const resetKonva = setupKonva; +const changeTableShape = () => { + if (!Floorplan.selectedTableNumber) + return; + const table = getTableDataFromTableNumber(Floorplan.selectedTableNumber); + const tableGroup = getTableGroupFromTableNumber(table.table_number); + const order = ['square', 'rect', 'longrect', 'diamond', 'circle', 'ellipse', 'longellipse']; + if (order.indexOf(table.shape) === -1) + table.shape = 'square'; + const currentIndex = order.indexOf(table.shape); + let nextIndex = currentIndex + 1; + if (nextIndex > (order.length) - 1) + nextIndex = 0; + table.shape = order[nextIndex]; + switch (table.shape) { + case 'square': + case 'circle': + // noinspection JSSuspiciousNameCombination + table.height = table.width; + table.rotation = 0; + break; + case 'diamond': + // noinspection JSSuspiciousNameCombination + table.height = table.width; + table.rotation = 45; + break; + case 'rect': + case 'ellipse': + table.height = table.width * 2; + table.rotation = 0; + break; + case 'longrect': + case 'longellipse': + table.rotation = 90; + break; } -} + saveTable(table); + deselectTables(); + redrawTable(tableGroup); +}; +const redrawTable = (tableGroup) => { + deselectTables(); + const draggable = tableGroup.draggable(); + const table = getTableDataFromGroup(tableGroup); + tableGroup.destroy(); + const newTableGroup = createTableShape(table); + const newTableShape = getTableShapeFromTableNumber(table.table_number); + selectTable(newTableShape); + newTableGroup.draggable(draggable); +}; +const showAddTablePopup = () => showVirtualNumpad(lang('new_table_number'), 4, false, false, true, addTable); +const addTable = (tableNumber) => { + const newTable = { + id: 0, + table_number: tableNumber, + room_id: Floorplan.currentRoom.id, + default_covers: 2, + width: 200, + height: 200, + rotation: 0, + pos_x: Floorplan.visualScaleBasis / 2, + pos_y: Floorplan.visualScaleBasis / 2, + shape: 'square', + merged_children: '', + previous_state: '', + status: 0, + venue_id: 1 + }; + ajax('/ajax/createTable', newTable, 'post', tableAdded, tableNotAdded, null); +}; +const tableAdded = (table) => { + deselectTables(); + const newTableGroup = createTableShape(table); + Floorplan.tables.push(table); + selectTable(getTableShapeFromGroup(newTableGroup)); +}; +const tableNotAdded = (response) => { + posAlert(response); +}; +const confirmDeleteTable = () => confirmation(lang('confirm_delete_table', Floorplan.selectedTableNumber.toString()), Floorplan.selectedTableNumber, 'Confirm', deleteTable); +const deleteTable = (tableNumber) => { + if (!tableNumber) + return false; + const tableToDelete = getTableDataFromTableNumber(tableNumber); + if (tableIsOpen(tableToDelete)) { + posAlert(lang('error_delete_existing_table')); + return false; + } + ajax(`/ajax/deleteTable`, tableToDelete, 'post', tableDeleted, null, null); +}; +const tableDeleted = (deletedTable) => { + Floorplan.tables = Floorplan.tables.filter(table => table.table_number != deletedTable.table_number); + const tableGroup = getTableGroupFromTableNumber(deletedTable.table_number); + deselectTables(); + tableGroup.destroy(); +}; +const toggleMergeMode = () => toggleMode('merge'); +const mergeTables = (table1, table2) => { + toggleMergeMode(); + if (table1.table_number == table2.table_number) { + posAlert(lang('error_self_merge')); + return false; + } + ajax('/ajax/mergeTables', [table1, table2], 'post', tablesMerged, null, null); +}; +const tablesMerged = (tables) => { + tableDeleted(tables['child']); + tableDeleted(tables['parent']); + tableAdded(tables['merged']); + deselectTables(); + const tableGroup = getTableGroupFromTableNumber(tables['merged'].table_number); + selectTable(getTableShapeFromGroup(tableGroup)); + tableGroup.draggable(true); +}; +const unmergeTable = () => ajax(`/ajax/unmergeTable/${Floorplan.selectedTableNumber}`, null, 'get', tablesUnmerged, null, null); +const tablesUnmerged = (tables) => { + const parentTable = tables['parent']; + const childTable = tables['child']; + tableDeleted(parentTable); + tableAdded(parentTable); + tableAdded(childTable); + deselectTables(); +}; +const toggleTransferMode = () => toggleMode('transfer'); +const transferTables = (origin, destination) => { + if (origin.table_number == destination.table_number) { + posAlert(lang('transfer_self_error')); + return; + } + ajax(`/ajax/transferTable/${origin.table_number}/${destination.table_number}`, null, 'get', tableTransferred, null, null); +}; +const tableTransferred = (tables) => { + const origin = tables['origin']; + const destination = tables['destination']; + Floorplan.activeTableNumbers = Floorplan.activeTableNumbers.filter(tableNumber => tableNumber != origin.table_number); + Floorplan.activeTableNumbers.push(destination.table_number); + if (Floorplan.currentRoom.id == origin.room_id) { + redrawTable(getTableGroupFromTableNumber(origin.table_number)); + } + redrawTable(getTableGroupFromTableNumber(destination.table_number)); +}; +const getDimensions = () => { + Floorplan.floorplanDiv = $('#tableMap'); + const parentDiv = $('#mapContainer'); + const outerWidth = parentDiv.outerWidth(); + const outerHeight = parentDiv.outerHeight(); + let width = outerWidth; + let height = outerWidth; + if (outerWidth >= outerHeight) { + width = outerHeight; + height = outerHeight; + } + Floorplan.floorplanDiv.height(height); + Floorplan.floorplanDiv.width(width); + Floorplan.visualScale = width / Floorplan.visualScaleBasis; + return { width: width, height: height }; +}; //# sourceMappingURL=dredgepos.floorplan.js.map \ No newline at end of file diff --git a/wwwroot/scripts/js/dredgepos.floorplan.js.map b/wwwroot/scripts/js/dredgepos.floorplan.js.map index 51005a1..b091686 100644 --- a/wwwroot/scripts/js/dredgepos.floorplan.js.map +++ b/wwwroot/scripts/js/dredgepos.floorplan.js.map @@ -1 +1 @@ -{"version":3,"file":"dredgepos.floorplan.js","sourceRoot":"","sources":["../ts/dredgepos.floorplan.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dredgepos.floorplan.js","sourceRoot":"","sources":["../ts/dredgepos.floorplan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/wwwroot/scripts/js/keyboards.js b/wwwroot/scripts/js/keyboards.js index c9f7cdc..d6b1b02 100644 --- a/wwwroot/scripts/js/keyboards.js +++ b/wwwroot/scripts/js/keyboards.js @@ -17,8 +17,8 @@ let showVirtualNumpad = (heading, maxlength = 4, isPassword, allowDecimals = tru numpad.data('submitfunction', submitFunction); numpad.data('password', isPassword); numpad.data('allowdecimals', allowDecimals); - $(document).unbind('keyup'); - $(document).keyup(e => { + $(document).off('keyup'); + $(document).on('keyup', e => { let key = e.key; switch (key) { case 'Backspace': @@ -52,7 +52,6 @@ let virtualNumpadInput = (input) => { let submitFunction = numpad.data('submitfunction'); let allowedValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'submit', 'clear']; let currentValue = numpad.data('value').toString(); - //Test if (allowDecimals) allowedValues.push('.', ','); let validInput = allowedValues.includes(input); @@ -91,11 +90,12 @@ let setupVirtualNumpad = () => { hideVirtualNumpad(); }); }; -let setupVirtualKeyboard = () => { +let setupVirtualKeyboard = (keyboardLayouts) => { Application.keyboard = { capsLock: false, shift: false, - layout: 'default' + layouts: keyboardLayouts, + currentLayout: 'default', }; $(document).on('click', '.virtualKeyboardButton', e => { virtualKeyboardInput($(e.target).data('value')); @@ -138,7 +138,7 @@ let virtualKeyboardInput = (input) => { case 'submit': hideVirtualKeyboard(); let submitFunction = keyboard.data('submitfunction'); - submitFunction(); + submitFunction(inputBox.text()); break; case 'shift': if (Application.keyboard.capsLock) @@ -174,16 +174,17 @@ let virtualKeyboardInput = (input) => { } }; let setKeyboardLayout = (layout, modifier = '') => { - let keyboardLayout = ajaxSync('/languages/english/keyboardLayout.json', null, 'get'); if (modifier != '') modifier = `_${modifier}`; + Application.keyboard.currentLayout = layout; + let layoutToLoad = Application.keyboard.layouts[layout]; $('.virtualKeyboardRow').each((index, row) => { /* We start at 1 instead of 0. Makes it easier for non-programmers and translators making their own language packs */ index = index + 1; - let currentRow = keyboardLayout[layout]["row" + index + modifier]; + let currentRow = layoutToLoad[`row${index}${modifier}`]; $(row).children('a').each((keyIndex, button) => { let key = $(button); let keyValue = currentRow[keyIndex]; @@ -211,6 +212,6 @@ let setKeyboardLayout = (layout, modifier = '') => { }; $(() => { setupVirtualNumpad(); - setupVirtualKeyboard(); + ajax('/ajax/getKeyboardLayout/english', null, 'get', setupVirtualKeyboard, null, null); }); //# sourceMappingURL=keyboards.js.map \ No newline at end of file diff --git a/wwwroot/scripts/js/keyboards.js.map b/wwwroot/scripts/js/keyboards.js.map index 2db3eeb..ecd7e1d 100644 --- a/wwwroot/scripts/js/keyboards.js.map +++ b/wwwroot/scripts/js/keyboards.js.map @@ -1 +1 @@ -{"version":3,"file":"keyboards.js","sourceRoot":"","sources":["../ts/keyboards.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"keyboards.js","sourceRoot":"","sources":["../ts/keyboards.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/wwwroot/scripts/ts/dredgepos.core.ts b/wwwroot/scripts/ts/dredgepos.core.ts index 04fc556..73c8be3 100644 --- a/wwwroot/scripts/ts/dredgepos.core.ts +++ b/wwwroot/scripts/ts/dredgepos.core.ts @@ -1,13 +1,13 @@  let Application : ApplicationState = { keyboard : null, - mode: "default", + mode: [], languageVars: {} } /** Parses a language variable. */ let lang = (key: string, replacements?: string[] | string) => { - let finalValue = Application.languageVars[key] + let finalValue = Application.languageVars[key] || '' if(!replacements) return finalValue if(typeof replacements === 'string') replacements = [replacements] @@ -26,17 +26,20 @@ } /** Call an Ajax function asynchronously */ - let ajax = (endpoint : string, data: any, method = 'POST', successFunction : Function , errorFunction : JQuery.Ajax.ErrorCallback, beforeFunction: any) => { + let ajax = (endpoint : string, data: any, method = 'POST', successFunction : Function , errorFunction : Function, beforeFunction: any) => { data = (data == null) ? data : JSON.stringify(data) return $.ajax({ url: endpoint, method: method, data: data, - success: (response) => { - if(successFunction) + success: (response: ajaxResult) => { + if(successFunction && response.status == 'success') successFunction(JSON.parse(response.data)) + else if (errorFunction && response.status != 'success'){ + errorFunction(JSON.parse(response.data)) + } }, - error: errorFunction, + error: (error) => console.log(error.statusCode), beforeSend: beforeFunction }) } @@ -44,7 +47,7 @@ /* For the flow of the app, synchronous is commonly preferred - though trying to keep it's usage as low as possible. + though trying to keep its usage as low as possible. */ let ajaxSync = (endpoint : string, data?: any, method = 'POST') => { let response = JSON.parse( @@ -69,12 +72,17 @@ } - let setLanguageVariables = () => { - Application.languageVars = ajaxSync('/ajax/languageVars', null, 'GET') - } + let setupCore = (languageVars: Record) => { + Application.languageVars = languageVars + const doc = $(document) + doc.on('click', '#alertNo, #alertOk', hideAlerts) + + setElementVisibilityByMode() + } + // @ts-ignore - let alert = (message: string, title='Message') => { + let posAlert = (message: string, title='Message') => { let alertBox = $('#alert') alertBox.css('display', 'flex'); alertBox.data('value', ''); @@ -86,13 +94,12 @@ $('#alertNo').css('display', 'none'); } - // @ts-ignore - let confirm = (message: string, data: any, title='Confirm', submitFunction = (data: any) => {hideAlerts()}) => { + let confirmation = (message: string, data: any, title='Confirm', submitFunction = (data: any) => {hideAlerts()}) => { let alert = $('#alert') $(document).on('click', '#alert #alertYes', () => { - submitFunction(data) hideAlerts() + submitFunction(data) $(document).off('click', '#alert #alertYes') }) @@ -106,13 +113,69 @@ } - let hideAlerts = () => { - $('#alert').hide() - } + let hideAlerts = () => $('#alert').hide() -$( () => { - let doc = $(document) - setLanguageVariables() + let turnOnMode = (mode : PosMode) => { + Application.mode.push(mode) + setElementVisibilityByMode() + } - doc.on('click', '#alertNo, #alertOk', () => $('#alert').hide()) -}) \ No newline at end of file + let turnOffMode = (mode : PosMode) => { + Application.mode = Application.mode.filter((value) => value != mode) + setElementVisibilityByMode() + + } + + let toggleMode = (mode: PosMode) => { + if(!isInMode(mode)) + turnOnMode(mode) + else + turnOffMode(mode) + } + + let clearModes = () => {Application.mode = []} + let isInMode = (mode: PosMode) => Application.mode.includes(mode) + + let setElementVisibilityByMode = () => { + const mode = Application.mode + const elements = $('[data-visible-in-mode]') + + elements.each((index, elem) => { + let element = $(elem) + let visibleInModes : PosModes = element.data('visible-in-mode') + + let showElement = visibleInModes.every( visibleMode => { + return mode.includes(visibleMode) + }); + + if(element.hasClass('useVisibility')){ + if(showElement) { + element.css('visibility', 'visible') + } else element.css('visibility', 'hidden') + } else element.toggle(showElement) + }) + + const invisibleElements = $('[data-invisible-in-mode]') + invisibleElements.each((index, elem) => { + let element = $(elem) + let inVisibleInModes: PosModes = element.data('invisible-in-mode') + let hideElement = inVisibleInModes.every(invisibleMode => { + return mode.includes(invisibleMode) + }) + element.toggle(!hideElement) + }) + + + $('[data-active-in-mode]').each((index, elem) =>{ + const button = $(elem) + const activeInMode : PosMode = button.data('active-in-mode') + + mode.includes(activeInMode) + ? button.addClass('active') + : button.removeClass('active') + + }) + + } + +$( () => ajax('/ajax/languageVars', null, 'GET', setupCore, null, null)) \ No newline at end of file diff --git a/wwwroot/scripts/ts/dredgepos.floorplan.ts b/wwwroot/scripts/ts/dredgepos.floorplan.ts index 787e9c5..8ed9686 100644 --- a/wwwroot/scripts/ts/dredgepos.floorplan.ts +++ b/wwwroot/scripts/ts/dredgepos.floorplan.ts @@ -1,335 +1,163 @@ /// -let stage : Konva.Stage -let transformer: Konva.Transformer; -let tableLayer: Konva.Layer; -let editMode = false; -let activeTables : number[] = []; -let selectedTable : table; -let selectedTableNumber : number; -let currentRoom : number; -let basis = 1280; -let scale : number = 1; -let newTable : number; -let roomName : string; -//Makes sure canvas always fits inside the div -function getDimensions(parentDiv : JQuery) { - let tableMap = $('#tableMap') - let outerWidth = parentDiv.outerWidth(); - let outerHeight = parentDiv.outerHeight(); - - let width = outerWidth; - let height = outerWidth; - - if (outerWidth >= outerHeight) { - width = outerHeight; - height = outerHeight; - } - - tableMap.height(height) - tableMap.width(width) - scale = width / basis - - return {width: width, height:height} +interface dimensions{ + height:number + width:number } -function setupTableMap() { - let doc = $(document) - activeTables = ajaxSync('/ajax/getActiveTables/1', null, 'GET'); +interface floorplan{ + stage: Konva.Stage + transformer: Konva.Transformer + tableLayer: Konva.Layer + rooms: room[] + tables: table[] + decorations: decoration[] + activeTableNumbers: number[] + selectedTableNumber: number + selectedDecorationId: number + currentRoom: room + roomToLoad: room + visualScale: number + visualScaleBasis: number + floorplanDiv: JQuery + reservations: reservation[] +} - let dimensions = getDimensions($('#mapContainer')); - roomName = 'Deck & Courtyard'; - stage = new Konva.Stage({ - container: 'tableMap', - width: dimensions.width, - height: dimensions.height, - }); +interface floorplan_data{ + tables: table[] + decorations: decoration[] + activeTableNumbers: number[] + rooms: room[] + reservations:reservation[] +} - $('body').on('click', '.editModeButton', () => {toggleEditMode()} ) - $('.roomButton').on('click', function () { - roomName = $(this).text(); - loadRoom($(this).data('value')); - }); - $('.transferTableButton').on('click', function () { - transferModeOn(); - }); - $('.addDecoration').on('click', function () { - $('#decorator').css('display', 'flex'); - }); - $('.deleteDecoration').on('click', function () { - deleteDecoration(selectedDecoration); - }); - $('.decoratorItem').on('click', function () { - addDecoration(this); - }); - $('.changeShapeButton').on('click', function () { - changeTableShape(selectedTableNumber); - }); - $('.reserveTableButton').on('click', function () { - if ($(this).text() === lang('reserve_table')) { - reserveTable(); +const Floorplan: floorplan = { + rooms: [], + tables: [], + decorations:[], + reservations:[], + activeTableNumbers: [], + stage: null, + transformer:null, + tableLayer: null, + selectedTableNumber: 0, + currentRoom: null, + roomToLoad: null, + visualScale: 1, + visualScaleBasis: 1280, + floorplanDiv: null, + selectedDecorationId: 0 +}; + +$(() => ajax('/ajax/getFloorplanData/1', null, 'get', setupFloorplan, null, null) ) + + +const setupFloorplanEvents = () => { + const doc = $(document) + doc.on('click', '.roomButton', roomButtonClicked) + doc.on('click', '.editModeButton', editModeButtonClicked) + doc.on('click', '.changeShapeButton', changeTableShape) + doc.on('click', '.addTableButton', showAddTablePopup) + doc.on('click', '.deleteTableButton', confirmDeleteTable) + doc.on('click', '.addDecoration', showDecorator) + doc.on('click', '.deleteDecoration', deleteDecoration) + doc.on('click', '.decoratorItem', addDecoration) + doc.on('click', '.mergeButton', toggleMergeMode) + doc.on('click', '.unmergeButton', unmergeTable) + doc.on('click', '.transferTableButton', toggleTransferMode) + doc.on('click', '.reserveTableButton', reserveTable) + doc.on('click', '.unreserveTableButton', unreserveTable) +} + +const roomButtonClicked = (e: Event) => { + const button = $(e.target) + const roomId = button.data('value') + loadRoom(getRoomById(roomId)) +} + +const editModeButtonClicked = (e: Event) => { + const button = $(e.target) + button.toggleClass('active') + toggleMode('edit') + + if(isInMode('edit')){ + Floorplan.stage.find('Group, Image').forEach(table => table.draggable(true)) + + if(isInMode('tableSelected')){ + const selectedTableShape = getTableShapeFromTableNumber(Floorplan.selectedTableNumber) + selectTable(selectedTableShape) } - else { - unreserveTable(); - } - }); - $('.addTableButton').on('click', function () { - addTable(); - }); - $('.deleteTableButton').on('click', function () { - deleteTable(); - }); - loadRoom(roomToLoad); -} - -let updateTableShape = (tableData) => { - return ajaxSync('/ajax/updateTableShape', tableData) -} - -//Change the shape of a table in edit mode. -function changeTableShape(tableNumber: number) { - let tableData = getTableData(tableNumber) - let tableShape = tableData['shape'] - let tableWidth = tableData['width'] - let tableHeight = tableData['height'] - let tableRotation = tableData['rotation'] - - let order = ['square', 'rect', 'longrect', 'diamond', 'circle', 'ellipse', 'longellipse'] - - if (order.indexOf(tableShape) === -1) tableShape = 'square' - - //What the next shape is - let currentIndex = order.indexOf(tableShape) - let nextIndex = currentIndex + 1 - if (nextIndex > (order.length) - 1) nextIndex = 0 - - let nextShape = order[nextIndex] - - switch(nextShape) { - case 'square': - case 'circle': - tableHeight = tableWidth - tableRotation = 0 - break - case 'diamond': - tableHeight = tableWidth - tableRotation = 45 - break - case 'rect': - case 'ellipse': - tableHeight = tableWidth * 2 - tableRotation = 0 - break - case 'longrect': - case 'longellipse': - tableRotation = 90 - break - } - - let updateData = { - table_number: tableNumber, - shape: nextShape, - height: tableHeight, - width: tableWidth, - rotation: tableRotation - } - - tableData = updateTableShape(updateData) - let tableGroup = stage.find('#' + tableNumber)[0] - transformer.nodes([]); - tableGroup.destroy(); - - let newTable = createTableElement(tableData); - tableLayer.add(newTable); - stage.draw(); - - selectTable(tableNumber); - loadRoom(currentRoom, tableNumber); -} - -let createTable = (tableData) => { - return ajaxSync('/ajax/createTable', tableData) -} - -let tableExists = (tableNumber : number) => { - return ajaxSync(`/ajax/tableExists/${tableNumber}`) -} - -function addTable(tableNumber : number) { - if (!tableNumber) { - showVirtualNumpad(lang('new_table_number'), 4, false, false, true, addTable); - } - else { - let newTableInfo = { - table_number: tableNumber, - room_id: currentRoom, - default_covers: 2, - width: 200, - height: 200, - rotation: 0, - pos_x: basis / 2, - pos_y: basis / 2, - shape: 'square', - merged_children : '', - previous_state: '', - status: 0, - reservation: 0, - venue_id: 1 - }; - - let newTableData = createTable(newTableInfo) - - if (!newTableData.table_number){ - alert(newTableData) - return false - } - - newTable = createTableElement(newTableData); - tableLayer.add(newTable); - tableLayer.draw(); - selectTable(tableNumber); - + } else { + setTransformerNodes([]) + Floorplan.stage.find('Group, Image').forEach(table => table.draggable(false)) } } -function selectTable(tableNumber: number) { - let table = stage.find('#' + tableNumber)[0]; - table.fire('click'); + +const setupFloorplan = (floorplanData : floorplan_data) => { + + Floorplan.tables = floorplanData.tables + Floorplan.activeTableNumbers = floorplanData.activeTableNumbers + Floorplan.rooms = floorplanData.rooms + Floorplan.decorations = floorplanData.decorations + Floorplan.reservations = floorplanData.reservations + + getDimensions() + setupFloorplanEvents() + + loadRoom(Floorplan.rooms[0]) } -function deleteTable(tableNumber = 0) { - if (!tableNumber) { - confirm(lang('confirm_delete_table', selectedTableNumber), selectedTableNumber, 'Confirm', deleteTable); - } - else { - if (tableIsOpen(selectedTableNumber)) { - alert(lang('error_delete_existing_table')); - } - else { - ajax(`/ajax/deleteTable/${selectedTableNumber}`, null, 'GET'); - let table = stage.find('#' + tableNumber)[0]; - transformer.nodes([]); - table.destroy(); - tableLayer.draw(); - selectedTable = null - selectedTableNumber = null - } - } -} -// Rotate a shape around any point. -// shape is a Konva shape -// angleDegrees is the angle to rotate by, in degrees. -// point is an object {x: posX, y: posY} -function rotateAroundPoint(shape, angleDegrees, point) { - let angleRadians = angleDegrees * Math.PI / 180; - // they lied, I did have to use trigonometry - const x = point.x + - (shape.x() - point.x) * Math.cos(angleRadians) - - (shape.y() - point.y) * Math.sin(angleRadians); - const y = point.y + - (shape.x() - point.x) * Math.sin(angleRadians) + - (shape.y() - point.y) * Math.cos(angleRadians); - shape.rotation(shape.rotation() + angleDegrees); // rotate the shape in place - shape.x(x); // move the rotated shape in relation to the rotation point. - shape.y(y); +const loadRoom = (roomToLoad: room) => { + setRoomBackground(roomToLoad) + setupKonva() + + const tablesInRoom = Floorplan.tables.filter(table => table.room_id == roomToLoad.id) + const decorationsInRoom = Floorplan.decorations.filter(decoration => decoration.decoration_room == roomToLoad.id) + decorationsInRoom.forEach(decoration => createDecorationShape(decoration, false)) + tablesInRoom.forEach(createTableShape) + + Floorplan.currentRoom = roomToLoad } -function createDecoration(data, idToSelect = false) { - let draggable = editMode; - var decoration = new Image(); - decoration.onload = function () { - var dec = new Konva.Image({ - id: data.decoration_id.toString(), - x: data.decoration_pos_x * scale, - y: data.decoration_pos_y * scale, - image: decoration, - offsetX: data.decoration_width * 0.5 * scale, - offsetY: data.decoration_height * 0.5 * scale, - rotation: data.decoration_rotation, - width: data.decoration_width * scale, - height: data.decoration_height * scale, - draggable: draggable, - }); - - if (editMode && dec.id() === idToSelect) { - transformer.nodes([dec]); - transformer.moveToTop(); - } - - - dec.on('click', function () { - selectDecoration(this); - }); - dec.on('tap', function () { - selectDecoration(this); - }); - dec.on('dragend', function () { - saveDecTransformation(this); - }); - - dec.on('transformend', function () { - saveDecTransformation(this); - }); - // add the shape to the layer - tableLayer.add(dec); - tableLayer.draw(); - dec.moveToBottom(); - }; - decoration.src = 'images/decorations/' + data.decoration_image; - return decoration; +const getRoomById = (roomId: number) => { + return Floorplan.rooms.find( + (room) => room.id == roomId + ) } -var selectedDecoration = false; -function selectDecoration(decoration) { - if (editMode) { - if ((transformer.nodes().length > 0 && transformer.nodes()[0] != decoration) || transformer.nodes().length == 0) { - resetActiveTable(); - transformer.nodes([decoration]); - decoration.moveToTop(); - transformer.moveToTop(); - selectedDecoration = decoration; - toggleFloorplanControls(); - } - else { - transformer.nodes([]); - selectedDecoration = false; - $('.deleteDecoration').css('display', 'none'); - } - } -} -function createTableElement(data, selectTable = false) { - // Create container group +const tableIsOpen = (table: table) => Floorplan.activeTableNumbers.includes(table.table_number) - let draggable = editMode || newTable === data.table_number; +const createTableShape = (table: table) => { + const draggable = isInMode('edit') - let table = new Konva.Group({ - x: data.pos_x * scale, - y: data.pos_y * scale, + const tableGroup = new Konva.Group({ + x: table.pos_x * Floorplan.visualScale, + y: table.pos_y * Floorplan.visualScale, draggable: draggable, listening: true, - id: data.table_number.toString() + id: table.table_number.toString() }); - let fillColor = 'gray'; - if (data.status === 'reserved') { - fillColor = 'lightgreen'; - } - if (activeTables.includes(data.table_number)) { - fillColor = 'lightblue'; - } - data.width = data.width * scale; - data.height = data.height * scale; - // Create background shape - let shape; - switch (data.shape) { + + const fillColor = tableIsOpen(table) + ? 'lightblue' + : table.status == 2 + ? 'lightgreen' + : 'gray' + + + let tableShape: Konva.Shape + + switch(table.shape){ case "circle": // fall-through case "ellipse": // fall-through case "longellipse": - shape = new Konva.Ellipse({ + tableShape = new Konva.Ellipse({ x: 0, y: 0, - radiusX: data.width * 0.5, - radiusY: data.height * 0.5, - rotation: data.rotation, + radiusX: table.width * 0.5 * Floorplan.visualScale, + radiusY: table.height * 0.5 * Floorplan.visualScale, + rotation: table.rotation, fill: fillColor, stroke: "black", strokeWidth: 4, @@ -338,14 +166,14 @@ function createTableElement(data, selectTable = false) { }); break; default: - shape = new Konva.Rect({ + tableShape = new Konva.Rect({ x: 0, y: 0, - offsetX: data.width * 0.5, - offsetY: data.height * 0.5, - width: data.width, - height: data.height, - rotation: data.rotation, + offsetX: table.width * 0.5 * Floorplan.visualScale, + offsetY: table.height * 0.5 * Floorplan.visualScale, + width: table.width * Floorplan.visualScale, + height: table.height * Floorplan.visualScale, + rotation: table.rotation, fill: fillColor, stroke: "black", strokeWidth: 4, @@ -353,497 +181,643 @@ function createTableElement(data, selectTable = false) { listening: true }); break; - } // End switch - // Create label - let label = new Konva.Text({ - x: data.width * -0.5, - y: data.height * -0.5, - width: data.width, - height: data.height, - text: data.table_number.toString(), - fontSize: 40 * scale, + } + + const label = new Konva.Text({ + x: table.width * -0.5 * Floorplan.visualScale, + y: table.height * -0.5 * Floorplan.visualScale, + width: table.width * Floorplan.visualScale, + height: table.height * Floorplan.visualScale, + text: table.table_number.toString(), + fontSize: 40 * Floorplan.visualScale, fill: "black", align: "center", verticalAlign: "middle", draggable: false, listening: false }); - tableNumber = data.tablenumber; - table.add(shape, label); - table.on('dblclick', function () { - tableNumber = parseInt(getTableNumber(this)); - if (!editMode) { - loadScreen('orderScreen', 'table=' + tableNumber); - } - }); - table.on('dbltap', function () { - tableNumber = getTableNumber(this); - loadScreen('orderScreen', 'table=' + tableNumber); - }); - table.on('dragend', function () { - saveTransformation(table); - }); - innerShape = getTableShape(table); - table.on('click', function () { - selectTableShape(this); - }); - table.on('tap', function () { - selectTableShape(this); - }); - innerShape.on('transformend', function () { - saveTransformation(table); - }); - // add the shape to the layer - tableLayer.add(table); - table.moveToTop(); - if (tableNumber === selectedTableNumber) { - selectTable = table; - } - if (selectTable) { - if (selectTable === tableNumber) { - table.fire('click'); - } - } - return table; + + tableGroup.add(tableShape, label) + + setupTableEvents(tableGroup) + + Floorplan.tableLayer.add(tableGroup) + return tableGroup } -function loadRoom(room: number, selectTable : number = 0, selectDecoration = false) { - //if (room === currentRoom) return false - ajax(`/ajax/getRoomData/${room}`, null, 'GET', (response) => { - let floorplanDiv = $('#tableMap') - let backgroundImage = response.background_image - floorplanDiv.css("background-image", `url(images/rooms/${backgroundImage})`) - floorplanDiv.css("background-size", `${width}px ${height}px`) - }, null, null) +const setupTableEvents = (tableGroup: Konva.Group) => { + const tableShape = getTableShapeFromGroup(tableGroup) - $('.roomButton').removeClass('active'); - let selector = ".roomButton:contains('" + roomName + "')"; - $(selector).addClass('active'); - currentRoom = room; - resetActiveTable(); - stage.destroy(); - stage = new Konva.Stage({ + tableGroup.on('click', (e) => tableClicked(e.target as Konva.Shape)) + tableGroup.on('tap', (e) => tableClicked(e.target as Konva.Shape)) + tableGroup.on('dragend', (e) => saveTableTransformation(e.target as Konva.Group)) + tableShape.on('transformend', (e) => { + const group = getTableGroupFromShape(e.target as Konva.Shape) + saveTableTransformation(group) + }) +} + +const getTableShapeFromGroup = (group: Konva.Group) => group.getChildren()[0] as Konva.Shape +const getTableGroupFromShape = (shape: Konva.Shape) => shape.parent as Konva.Group + +const saveTableTransformation = (tableGroup: Konva.Group) => { + const originalTable = getTableDataFromGroup(tableGroup) + const tableShape = getTableShapeFromGroup(tableGroup) + + const newTableInfo : table = { + table_number : originalTable.table_number, + previous_state : originalTable.previous_state, + merged_children : originalTable.merged_children, + id : originalTable.id, + width : Math.round(tableShape.scaleX() * tableShape.width()/Floorplan.visualScale), + height: Math.round(tableShape.scaleY() * tableShape.height()/Floorplan.visualScale), + pos_x: Math.round(tableGroup.x()/Floorplan.visualScale), + pos_y: Math.round(tableGroup.y()/Floorplan.visualScale), + rotation: Math.round(tableShape.rotation()), + room_id: originalTable.room_id, + status: originalTable.status, + venue_id: originalTable.venue_id, + shape : originalTable.shape, + default_covers: originalTable.default_covers, + } + + saveTable(newTableInfo) + redrawTable(tableGroup) +} + + +const saveTable = (tableToUpdate: table) => { + const tables = + Floorplan + .tables + .filter(table => { + return table.id != tableToUpdate.id + }) + + tables.push(tableToUpdate) + + Floorplan.tables = tables + ajax("/ajax/transformTable", tableToUpdate, 'post', null,null,null) +} + +const setTransformerNodes = (nodes: Konva.Shape[]) => { + Floorplan.transformer.moveToTop() + if (nodes.length < 1) Floorplan.transformer.moveToBottom() + Floorplan.transformer.nodes(nodes) +} + +const getTableDataFromTableNumber = (tableNumber: number) => { + return Floorplan.tables.filter(table => table.table_number == tableNumber)[0] +} + +const getTableDataFromGroup = (tableGroup: Konva.Node) => { + const tableNumber = tableGroup.attrs.id + return Floorplan.tables.find(table => tableNumber == table.table_number) +} + +const getTableDataFromShape = (tableShape: Konva.Shape) => getTableDataFromGroup(tableShape.parent) + +const getTableShapeFromTableNumber = (tableNumber: number) => { + const tableGroup = Floorplan.stage.find('Group').find((group: Konva.Shape) => { + return group.attrs.id == tableNumber + }) as Konva.Group + + return tableGroup.getChildren()[0] as Konva.Shape +} + +const getTableGroupFromTableNumber = (tableNumber : number) => { + const tableShape = getTableShapeFromTableNumber(tableNumber) + return getTableGroupFromShape(tableShape) +} + +const setReservationStatus = (table: table) => { + const reservationText = $('.reservationStatus') + const tableShape = getTableShapeFromTableNumber(table.table_number) + reservationText.text('') + + if(table.status == 2) { + tableShape.fill('lightgreen') + const reservations = Floorplan.reservations.filter(reservation => reservation.reservation_table_id == table.id) + if (reservations.length) { + turnOnMode('reservedTableSelected') + reservationText.text(lang('reserved')) + let reservation = reservations[0] + if (reservation.reservation_name != '') { + reservationText.text(lang('reserved_for', reservation.reservation_name)) + } + } + } else { + let fillColor = tableIsOpen(table) ? 'lightblue' : 'gray' + tableShape.fill(fillColor) + turnOffMode('reservedTableSelected') + } + +} + +const reserveTable = () => { + showVirtualNumpad(lang('how_many_covers'), 2, false, false, true, createEmptyReservation) +} + +const createEmptyReservation = (covers: number) => { + const newReservation: reservation = { + id: 0, + reservation_covers: covers, + reservation_created_at: 0, + reservation_table_id: getSelectedTableData().id, + reservation_name: '', + reservation_time: 0, + } + + ajax('/ajax/newEmptyReservation', newReservation,'post', emptyReservationCreated, null, null ) +} + +const emptyReservationCreated = (reservation: reservation) => { + Floorplan.reservations.push(reservation) + const selectedTable = getSelectedTableData() + selectedTable.status = 2 + selectedTable.default_covers = reservation.reservation_covers + updateTableData(selectedTable) + updateCoverText(selectedTable) + setReservationStatus(getSelectedTableData()) + + showVirtualKeyboard(lang('confirm_reservation_name'), 32, false, addReservationName) +} + +const addReservationName = (name: string) => { + hideVirtualKeyboard() + const reservation = Floorplan.reservations.filter(reservation => reservation.reservation_table_id == getSelectedTableData().id)[0] + reservation.reservation_name = name + ajax('/ajax/updateReservation', reservation, 'post', reservationNameAdded, null, null) +} + +const reservationNameAdded = (updatedReservation: reservation) => { + console.log(updatedReservation) + Floorplan.reservations = Floorplan.reservations.filter(reservation => reservation.id != updatedReservation.id) + Floorplan.reservations.push(updatedReservation) + setReservationStatus(getSelectedTableData()) +} + +const getReservationsOnTable = (table: table) => Floorplan.reservations.filter(reservation => reservation.reservation_table_id == table.id) + +const updateTableData = (tableToRemove: table) => { + Floorplan.tables = Floorplan.tables.filter(table => table.id != tableToRemove.id) + Floorplan.tables.push(tableToRemove) +} + +const unreserveTable = () => { + const selectedTable = getSelectedTableData() + selectedTable.status = 0 + ajax('/ajax/unreserveTable', selectedTable, 'post', tableUnreserved, null, null) +} + +const tableUnreserved = (table: table) => { + Floorplan.reservations = Floorplan.reservations.filter(reservation => reservation.reservation_table_id != table.id) + updateTableData(table) + setReservationStatus(table) +} + +const getSelectedTableData = () => getTableDataFromTableNumber(Floorplan.selectedTableNumber) + +const deselectTables = () => { + Floorplan.stage.find('Rect, Ellipse').forEach( (shape: Konva.Shape, index) => { + shape.stroke('black') + }); + + Floorplan.selectedDecorationId = 0 + Floorplan.selectedTableNumber = 0 + turnOffMode('tableSelected') + turnOffMode('activeTableSelected') + turnOffMode('decorationSelected') + turnOffMode('merge') + turnOffMode('transfer') + + setTransformerNodes([]) +} + +const selectTable = (tableShape: Konva.Shape) => { + tableShape.stroke('yellow') + const table = getTableDataFromShape(tableShape) + Floorplan.selectedTableNumber = table.table_number + + if(isInMode('edit')){ + setTransformerNodes([tableShape]) + } + + if(tableIsOpen(table)){ + turnOnMode('activeTableSelected') + } + + $('.reservationStatus').html(''+lang('active_table', table.table_number.toString()+'')) + + + updateCoverText(table) + $('.selectedTableNumber').text(lang('active_table', table.table_number.toString())) + setReservationStatus(table) + + const unmergeVisibility = table.merged_children ? 'visible' : 'hidden' + $('.unmergeButton').css('visibility', unmergeVisibility) + turnOnMode('tableSelected') +} + +const updateCoverText = (table:table) => $('.selectedTableCovers').text(lang('covers', table.default_covers.toString())) + +const tableClicked = (tableShape: Konva.Shape) => { + const table = getTableDataFromShape(tableShape) + + if(isInMode('merge')) { + mergeTables(getTableDataFromTableNumber(Floorplan.selectedTableNumber), table) + return; + } + + if(isInMode('transfer')){ + transferTables(getTableDataFromTableNumber(Floorplan.selectedTableNumber), table) + } + + const selectedTableNumber = Floorplan.selectedTableNumber + deselectTables() + + if(selectedTableNumber != table.table_number){ + selectTable(tableShape) + } + +} + +const createDecorationShape = (decoration:decoration, select?: boolean) => { + const draggable = isInMode('edit') + const decorationShape = new Image() + + decorationShape.onload = () => { + const decorationImage = new Konva.Image({ + id: decoration.id.toString(), + x: decoration.decoration_pos_x * Floorplan.visualScale, + y: decoration.decoration_pos_y * Floorplan.visualScale, + image: decorationShape, + offsetX: decoration.decoration_width * 0.5 * Floorplan.visualScale, + offsetY: decoration.decoration_height * 0.5 * Floorplan.visualScale, + rotation: decoration.decoration_rotation, + width: decoration.decoration_width * Floorplan.visualScale, + height: decoration.decoration_height * Floorplan.visualScale, + draggable: draggable, + }); + + // add the shape to the layer + Floorplan.tableLayer.add(decorationImage) + Floorplan.tableLayer.draw() + decorationImage.moveToBottom() + + setupDecorationEvents(decorationImage) + + if(select){ + decorationImage.moveToTop() + selectDecorationShape(decorationImage) + } + } + + decorationShape.src = 'images/decorations/' + decoration.decoration_image +} + +const setupDecorationEvents = (decorationShape: Konva.Image) => { + decorationShape.on('click', e => { + decorationClicked(e.target as Konva.Image) + }) + + decorationShape.on('transformend', e => { + decorationTransformed(e.target as Konva.Image) + }) + + decorationShape.on('dragend', e => { + decorationTransformed(e.target as Konva.Image) + }) +} + +const decorationClicked = (decorationShape: Konva.Image) => { + if(isInMode('edit')){ + turnOffMode('tableSelected') + if ((Floorplan.transformer.nodes().length > 0 && Floorplan.transformer.nodes()[0] != decorationShape) || Floorplan.transformer.nodes().length == 0) { + selectDecorationShape(decorationShape) + } else { + deselectTables() + decorationShape.moveToBottom() + } + } +} + +const selectDecorationShape = (decorationShape: Konva.Image) => { + deselectTables() + Floorplan.transformer.nodes([decorationShape]) + Floorplan.selectedDecorationId = Number(decorationShape.id()) + decorationShape.moveToTop() + Floorplan.transformer.moveToTop() + turnOnMode('decorationSelected') +} + +const getDecorationDataById = (id: number) => { + return Floorplan.decorations.find(decoration => id == decoration.id) +} + +const decorationTransformed = (decorationShape: Konva.Image) => { + + const oldDecorationData = getDecorationDataById(Number(decorationShape.id())) + const newDecoration: decoration = { + id: oldDecorationData.id, + decoration_room: oldDecorationData.decoration_room, + decoration_pos_x: Math.round(decorationShape.x() / Floorplan.visualScale), + decoration_pos_y: Math.round(decorationShape.y() / Floorplan.visualScale), + decoration_rotation: Math.round(decorationShape.rotation()), + decoration_width: Math.round((decorationShape.scaleX() * decorationShape.width()) / Floorplan.visualScale), + decoration_height: Math.round((decorationShape.scaleY() * decorationShape.height()) / Floorplan.visualScale), + decoration_image: oldDecorationData.decoration_image, + } + + saveDecoration(newDecoration) +} + +const saveDecoration = (decorationToUpdate: decoration) => { + const decorations = + Floorplan + .decorations + .filter(decoration => { + return decoration.id != decorationToUpdate.id + }) + + decorations.push(decorationToUpdate) + + Floorplan.decorations = decorations + ajax("/ajax/updateDecoration", decorationToUpdate, 'post', null,null,null) +} + +const showDecorator = () => $('#decorator').css('display', 'flex') +const hideDecorator = () => $('#decorator').css('display', 'flex').hide() + +const addDecoration = (e: Event) => { + const button = $(e.currentTarget) + + const newDecoration: decoration = { + id: 0, + decoration_room: Floorplan.currentRoom.id, + decoration_pos_x: Floorplan.visualScaleBasis / 2, + decoration_pos_y: Floorplan.visualScaleBasis / 2, + decoration_rotation: 0, + decoration_width: 200, + decoration_height: 200, + decoration_image: button.data('image') + } + + ajax('/ajax/addDecoration', newDecoration, 'post', decorationAdded, null, null) +} + +const decorationAdded = (decoration: decoration) => { + Floorplan.decorations.push(decoration) + createDecorationShape(decoration, true) + + hideDecorator() +} + + +const deleteDecoration = () => ajax( + '/ajax/deleteDecoration', + getDecorationDataById(Floorplan.selectedDecorationId), + 'post', decorationDeleted, null, null) + +const decorationDeleted = (deletedDecoration:decoration) => { + Floorplan.decorations = Floorplan.decorations.filter(decoration => decoration.id != deletedDecoration.id) + const decorationShape = Floorplan.stage.findOne(`#${deletedDecoration.id}`) + decorationShape.destroy() + deselectTables() +} + +const setRoomBackground = (roomToLoad: room) => { + const width = Floorplan.floorplanDiv.width() + const height = Floorplan.floorplanDiv.height() + + Floorplan.floorplanDiv.css("background-image", `url(images/rooms/${roomToLoad.background_image})`) + Floorplan.floorplanDiv.css("background-size", `${width}px ${height}px`) +} + +const setupKonva = () => { + const dimensions = getDimensions() + + if(Floorplan.stage !== null) Floorplan.stage.destroy() + + Floorplan.stage = new Konva.Stage({ container: 'tableMap', - width: width, - height: height, - }); + width: dimensions.width, + height: dimensions.height, + }) - transformer = new Konva.Transformer({ + Floorplan.stage.on('click', e => { + if(e.target == Floorplan.stage){ + deselectTables() + } + }) + + Floorplan.transformer = new Konva.Transformer({ rotationSnaps: [0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 225, 270, -15, -30, -45, -60, -75, -90, -105, -120, -135, -150, -165, -180, -225, -270, 360, -360], - anchorSize: 40 * scale, + anchorSize: 30 * Floorplan.visualScale, ignoreStroke: true, - centeredScaling: true + centeredScaling: true, + anchorCornerRadius: 10, }); - let tablesAndDecorations = ajaxSync(`/ajax/getTablesAndDecorations/${room}`, null, 'GET'); - let decorations = tablesAndDecorations['decorations'] - let tables = tablesAndDecorations['tables'] + Floorplan.tableLayer = new Konva.Layer() + Floorplan.tableLayer.add(Floorplan.transformer) - - tableLayer = new Konva.Layer(); - tableLayer.add(transformer); - - // Loop data and call the creation method for each decoration/table. - decorations.forEach(itemData => { - createDecoration(itemData, selectDecoration); - }); - - tables.forEach(itemData => { - tableLayer.add(createTableElement(itemData, selectTable)); - }); - activeTables = getOpenTables() - stage.add(tableLayer); + Floorplan.stage.add(Floorplan.tableLayer) } -var mergeMode = false; -var parentMergeTable; -var childMergeTable; -var tableTransferOrigin; -var transferMode = false; -function transferModeOn() { - mergeModeOff(); - if (!transferMode) { - tableTransferOrigin = selectedTableNumber; - transferMode = true; - $('.transferTableButton').addClass('active'); - $('.transferTableButton').text('Select a table to transfer items to'); - } - else { - transferModeOff(); - } -} -function transferModeOff() { - transferMode = false; - $('.transferTableButton').removeClass('active'); - $('.transferTableButton').text(lang('transfer_table')); -} +const resetKonva = setupKonva -let getOpenTables = () => { - return ajaxSync('/ajax/getActiveTables/1', null, 'GET'); -} +const changeTableShape = () => { -let transferTableAjax = (origin, destination) => { - ajax(`/ajax/transferTables/${origin}/${destination}`, null, 'GET') -} + if(!Floorplan.selectedTableNumber) return -function transferTables() { - destination = selectedTableNumber; - origin = tableTransferOrigin; - if (destination !== origin) { - transferTableAjax(origin, destination) - activeTables = getOpenTables() - transferModeOff(); - getTableShape(selectedTable).fill('lightblue') - getTableShape( getTableGroup(origin) ).fill('gray') - } - else { - alert("Can't transfer a table to itself."); - transferModeOff(); - } -} -function mergeModeOn() { - transferModeOff(); - if (!mergeMode) { - mergeMode = true; - $('.mergeButton').addClass('active'); - $('.mergeButton').text('Select a table to merge with Table ' + selectedTableNumber); - parentMergeTable = selectedTableNumber; - } - else { - mergeModeOff(); - } -} -function mergeModeOff() { - mergeMode = false; - $('.mergeButton').removeClass('active'); - $('.mergeButton').text(lang('merge_table')); -} + const table = getTableDataFromTableNumber(Floorplan.selectedTableNumber) + const tableGroup = getTableGroupFromTableNumber(table.table_number) -let ajaxMergeTables = (parent, child) => { - return ajaxSync(`/ajax/mergeTables/${parent}/${child}`, null, 'GET') -} + const order = ['square', 'rect', 'longrect', 'diamond', 'circle', 'ellipse', 'longellipse'] + if (order.indexOf(table.shape) === -1) + table.shape = 'square' -let ajaxUnmergeTable = (parent) => { - return ajaxSync(`/ajax/unmergeTable/${parent}`, null, 'GET') -} + const currentIndex = order.indexOf(table.shape) + let nextIndex = currentIndex + 1 + if (nextIndex > (order.length) - 1) + nextIndex = 0 -function mergeTables() { - parentMergeTable = parseInt(parentMergeTable); - childMergeTable = parseInt(childMergeTable); - if (childMergeTable !== parentMergeTable) { - let result = ajaxMergeTables(parentMergeTable, childMergeTable) - mergeModeOff(); + table.shape = order[nextIndex] - loadRoom(currentRoom) - newTable = getTableGroup(parentMergeTable); - newTable.draggable(true); - - if (tableIsOpen(parentMergeTable)) { - getTableShape(newTable).fill('lightblue'); - } - } - else { - alert("Can't merge a table with itself!"); - mergeModeOff(); - } -} -//When a table is passed (a group of the shape plus the text), returns the number as string. -function getTableNumber(tableGroup) { - textItem = tableGroup.getChildren()[1]; - return textItem.getText(); -} -function getTableGroup(tableNumber) { - return stage.find('#' + tableNumber)[0]; -} -function getTableShape(tableGroup) { - return tableGroup.getChildren()[0]; -} - -function getReservation(id) { - return ajaxSync('/ajax/getReservation', id) -} - -//When a user selects a table. -function selectTableShape(table) { - let tableNumber = getTableNumber(table); - let shape = getTableShape(table); - let strokeColor = shape.stroke(); - selectedTable = table; - selectedTableNumber = tableNumber; - if(transferMode) transferTables() - if (mergeMode) { - childMergeTable = tableNumber; - mergeTables(); - } - else { - //If table is not selected - if (strokeColor !== "yellow") { - let tableData = getTableData(selectedTableNumber) - - let coverNumberString = lang('covers', tableData.default_covers.toString()); - let tableString = '' + lang('activeTable', selectedTableNumber.toString()) + ''; - $('.reserveTableButton').text(lang('reserve_table')); - if (tableData.status === 'reserved') { - let reservation = getReservation(tableData.reservation_id) - console.log(reservation) - $('.reserveTableButton').text(lang('unreserve_table')); - if (reservation.reservation_name) { - reservationString = lang('reserved_for', reservation.reservation_name); - } - else { - reservationString = lang('reserved'); - } - tableString += '' + reservationString + ''; - } - tableString += " (" + coverNumberString + ")"; - $('.currentTable').html(tableString); - - stage.find('Rect').forEach(function (rect, index) { - rect.stroke("black"); - }); - stage.find('Ellipse').forEach(function (circ, index) { - circ.stroke("black"); - }); - shape.stroke("yellow"); - toggleEditControls(true); - if (editMode) { - toggleFloorplanControls(); - $('.deleteDecoration').css('display', 'none'); - transformer.nodes([getTableShape(table)]); - table.moveToTop(); - transformer.moveToTop(); - } - tableLayer.draw(); - //If the table is already selected - } - else { - resetActiveTable(); - transformer.nodes([]); - tableLayer.draw(); - } - } -} - -let getTableData = (tableNumber) => { - return ajaxSync('/ajax/getTableData', tableNumber) -} - -let isTableMerged = (tableNumber) => { - let mergeData = getTableData(tableNumber).merged_children - return mergeData !== "" -} - -function resetActiveTable() { - if (!transferMode) { - if (selectedTable) { - getTableShape(selectedTable).stroke('black'); - } - selectedTable = null; - selectedTableNumber = ""; - toggleFloorplanControls(false, editMode); - toggleEditControls(false); - } - else { - $('.editControls').css('display', 'none'); - } -} -function addDecoration(button) { - let insertData = { - decoration_room: currentRoom, - basis: basis, - decoration_image: $(button).data('image') + switch(table.shape) { + case 'square': + case 'circle': + // noinspection JSSuspiciousNameCombination + table.height = table.width + table.rotation = 0 + break + case 'diamond': + // noinspection JSSuspiciousNameCombination + table.height = table.width + table.rotation = 45 + break + case 'rect': + case 'ellipse': + table.height = table.width * 2 + table.rotation = 0 + break + case 'longrect': + case 'longellipse': + table.rotation = 90 + break } - ajaxSync('/ajax/addDecoration', insertData) - $('#decorator').css('display', 'none'); - selectedDecoration = false; - loadRoom(currentRoom); -} -function deleteDecoration(decoration) { - ajax('/ajax/deleteDecoration', decoration.id()); - $('.deleteDecoration').css('display', 'none'); - decoration.destroy() - selectedDecoration = false; - transformer.nodes([]) -} -function saveDecTransformation(decoration: Konva.Shape) { - let newData = { - decoration_id: decoration.id(), - decoration_pos_x: decoration.x() / scale, - decoration_pos_y: decoration.y() / scale, - decoration_width: parseInt((decoration.scaleX() * decoration.width()) / scale), - decoration_height: parseInt((decoration.scaleY() * decoration.height()) / scale), - decoration_rotation: parseInt(decoration.rotation()), - decoration_image: decodeURIComponent(decoration.image().src), - decoration_room: currentRoom - }; - if (editMode) { - idToSelect = decoration.id(); - } - ajax('/ajax/updateDecoration', newData) + saveTable(table) + deselectTables() + redrawTable(tableGroup) } -//When a table has been resized, rotated etc. -function saveTransformation(table) { - tableNumber = getTableNumber(table); - shape = getTableShape(table); - newRotation = parseInt(shape.rotation()); - newWidth = parseInt(shape.scaleX() * shape.width() / scale); - newHeight = parseInt((shape.scaleY() * shape.height()) / scale); - newXPos = parseInt(table.x() / scale); - newYPos = parseInt(table.y() / scale); - updateData = { + +const redrawTable = (tableGroup: Konva.Group) => { + deselectTables() + const draggable = tableGroup.draggable() + const table = getTableDataFromGroup(tableGroup) + tableGroup.destroy() + const newTableGroup = createTableShape(table) + const newTableShape = getTableShapeFromTableNumber(table.table_number) + selectTable(newTableShape) + newTableGroup.draggable(draggable) +} + +const showAddTablePopup = () => showVirtualNumpad(lang('new_table_number'), 4, false, false, true, addTable); + +const addTable = (tableNumber: number) => { + const newTable : table = { + id: 0, table_number: tableNumber, - rotation: newRotation, - width: newWidth, - height: newHeight, - pos_x: newXPos, - pos_y: newYPos + room_id: Floorplan.currentRoom.id, + default_covers: 2, + width: 200, + height: 200, + rotation: 0, + pos_x: Floorplan.visualScaleBasis / 2, + pos_y: Floorplan.visualScaleBasis / 2, + shape: 'square', + merged_children : '', + previous_state: '', + status: 0, + venue_id: 1 }; - transformTable(updateData) + + ajax('/ajax/createTable', newTable, 'post', tableAdded, tableNotAdded, null) } -let transformTable = (tableData) => { - return ajax("/ajax/transformTable", tableData) +const tableAdded = (table: table) => { + deselectTables() + const newTableGroup = createTableShape(table) + Floorplan.tables.push(table) + selectTable(getTableShapeFromGroup(newTableGroup)) } -function unmergeTable() { - - ajaxUnmergeTable(selectedTableNumber) - loadRoom(currentRoom); -} -function reserveTable(covers) { - if (!covers) { - showVirtualNumpad(lang('how_many_covers'), 2, false, false, true, reserveTable); - } - else { - let table = getTableGroup(selectedTableNumber); - let newReservation = ajaxSync('/ajax/newEmptyReservation', selectedTableNumber) - - table.fire('click'); - let tableShape = getTableShape(table); - tableShape.fill('lightgreen'); - table.draw(); - table.fire('click'); - completeReservation(newReservation); - } +const tableNotAdded = (response: string) => { + posAlert(response) } -function unreserveTable(input) { - if (!input) { - confirm(lang('confirm_delete_reservation', selectedTableNumber), selectedTableNumber, lang('confirm'), unreserveTable); - } - else { - ajaxSync('/ajax/unreserveTable', input) - hideAlerts() - table = getTableGroup(input); - table.fire('click'); - tableShape = getTableShape(table); - tableShape.fill('gray'); - table.draw(); - table.fire('click'); - } -} -function completeReservation(resName) { - if (!resName) { - showVirtualKeyboard(lang('enter_reservation_name')); - } - else { - //callPhpFunction('updateTableMapTable', [selectedTableNumber, 'reservation_name', resName]); - loadRoom(currentRoom, selectedTableNumber); - } -} -function toggleEditMode() { - let editModeButton = $('.editModeButton'); - if (editMode === true) { - editMode = false; - loadRoom(currentRoom); - editModeButton.removeClass('active'); - editModeButton.html(lang('edit_floorplan')); - toggleFloorplanControls(false); - if (selectedTable) - selectedTable.fire('click'); - stage.find('Group').forEach(function (table, index) { - table.draggable(false); - }); - } - else { - editMode = true; - stage.find('Group').forEach(function (table, index) { - table.draggable(true); - if (getTableShape(table).stroke() === "yellow") { - table.moveToTop(); - transformer.nodes([getTableShape(table)]); - transformer.moveToTop(); - } - }); - stage.find('Image').forEach(function (img, index) { - img.draggable(true); - }); - toggleFloorplanControls(); - transformer.moveToTop(); - tableLayer.draw(); - editModeButton.addClass('active'); - editModeButton.html(lang('stop_edit_floorplan')); - } -} -function toggleFloorplanControls(onOrOff = true, subControlsOnly = false) { - if (onOrOff || subControlsOnly) { - $('.floorplanControls').css('visibility', 'visible'); - } - else { - $('.floorplanControls').css('visibility', 'hidden'); - } - if (selectedTable) { - $('.changeShapeButton').css('visibility', 'visible'); - $('.deleteTableButton').css('visibility', 'visible'); - } - else { - $('.changeShapeButton').css('visibility', 'hidden'); - $('.deleteTableButton').css('visibility', 'hidden'); - } - if (selectedDecoration) { - $('.deleteDecoration').css('display', 'flex'); - } - else { - $('.deleteDecoration').css('display', 'none'); +const confirmDeleteTable = () => confirmation( + lang('confirm_delete_table', Floorplan.selectedTableNumber.toString()), + Floorplan.selectedTableNumber, + 'Confirm', deleteTable) + +const deleteTable = (tableNumber: number) => { + if(!tableNumber) return false + const tableToDelete = getTableDataFromTableNumber(tableNumber) + + if(tableIsOpen(tableToDelete)){ + posAlert(lang('error_delete_existing_table')) + return false } + + ajax(`/ajax/deleteTable`, tableToDelete, 'post', tableDeleted, null, null); } -let tableIsOpen = (tableNumber) => { - return ajaxSync(`/ajax/tableIsOpen/${tableNumber}`, null, 'GET') +const tableDeleted = (deletedTable: table) => { + Floorplan.tables = Floorplan.tables.filter(table => table.table_number != deletedTable.table_number) + const tableGroup = getTableGroupFromTableNumber(deletedTable.table_number) + deselectTables() + tableGroup.destroy() } -function toggleEditControls(onOrOff = true) { - if (onOrOff) { - $('.editControls').css("display", "flex"); - if (isTableMerged(selectedTableNumber)) { - $('.mergeControls').css("visibility", "visible"); - $('.unmergeButton').css('display', 'flex'); - $('.mergeButton').css('display', 'flex'); - } - else { - $('.mergeControls').css("visibility", "visible"); - $('.mergeButton').css('display', 'flex'); - $('.unmergeButton').css('display', 'none'); - } - if (tableIsOpen(selectedTableNumber)) { - $('.payTableButton').css('display', 'flex'); - $('.viewTableButton').css('display', 'flex'); - $('.reserveTableButton').css('display', 'none'); - $('.transferTableButton').css('display', 'flex'); - } - else { - $('.payTableButton').css('display', 'none'); - $('.viewTableButton').css('display', 'none'); - $('.reserveTableButton').css('display', 'flex'); - $('.transferTableButton').css('display', 'none'); - } - } - else { - $('.editControls').css("display", "none"); - $('.mergeControls').css("visibility", "hidden"); - $('.mergeButton').css("display", "none"); - $('.unmergeButton').css("display", "none"); +const toggleMergeMode = () => toggleMode('merge') + + +const mergeTables = (table1: table, table2: table ) => { + toggleMergeMode() + if(table1.table_number == table2.table_number){ + posAlert(lang('error_self_merge')) + return false; } + ajax('/ajax/mergeTables', [table1, table2], 'post', tablesMerged, null, null) } + +const tablesMerged = (tables: Record<'child'|'parent'|'merged', table>) => { + tableDeleted(tables['child']) + tableDeleted(tables['parent']) + tableAdded(tables['merged']) + deselectTables() + const tableGroup = getTableGroupFromTableNumber(tables['merged'].table_number) + selectTable(getTableShapeFromGroup(tableGroup)) + tableGroup.draggable(true) +} + +const unmergeTable = () => ajax(`/ajax/unmergeTable/${Floorplan.selectedTableNumber}`, null, 'get', tablesUnmerged, null, null) + +const tablesUnmerged = (tables: Record<'child'|'parent', table>) => { + const parentTable = tables['parent'] + const childTable = tables['child'] + + tableDeleted(parentTable) + tableAdded(parentTable) + tableAdded(childTable) + deselectTables() +} + +const toggleTransferMode = () => toggleMode('transfer') + +const transferTables = (origin: table, destination: table) => { + if(origin.table_number == destination.table_number){ + posAlert(lang('transfer_self_error')) + return + } + + ajax(`/ajax/transferTable/${origin.table_number}/${destination.table_number}`, null, 'get', tableTransferred, null, null) +} + +const tableTransferred = (tables: Record<"origin"|"destination", table>) => { + const origin = tables['origin'] + const destination = tables['destination'] + + Floorplan.activeTableNumbers = Floorplan.activeTableNumbers.filter(tableNumber => tableNumber != origin.table_number) + Floorplan.activeTableNumbers.push(destination.table_number) + if(Floorplan.currentRoom.id == origin.room_id) { + redrawTable(getTableGroupFromTableNumber(origin.table_number)) + } + redrawTable(getTableGroupFromTableNumber(destination.table_number)) +} + +const getDimensions = () => { + + Floorplan.floorplanDiv = $('#tableMap') + const parentDiv = $('#mapContainer') + const outerWidth = parentDiv.outerWidth() + const outerHeight = parentDiv.outerHeight() + + let width = outerWidth; + let height = outerWidth; + + if (outerWidth >= outerHeight) { + width = outerHeight + height = outerHeight + } + + Floorplan.floorplanDiv.height(height) + Floorplan.floorplanDiv.width(width) + Floorplan.visualScale = width / Floorplan.visualScaleBasis + + return {width: width, height:height} +} \ No newline at end of file diff --git a/wwwroot/scripts/ts/keyboards.ts b/wwwroot/scripts/ts/keyboards.ts index f328615..3c13858 100644 --- a/wwwroot/scripts/ts/keyboards.ts +++ b/wwwroot/scripts/ts/keyboards.ts @@ -1,4 +1,9 @@ - let showVirtualNumpad = (heading: string, maxlength = 4, isPassword: boolean, allowDecimals = true, allowClose = true, submitFunction: Function) => { +type KeyboardRowName = `row${number}${"" | "_"}${string}`; +interface VirtualKeyboard { + [layoutName: string]: Partial>; +} + +let showVirtualNumpad = (heading: string, maxlength = 4, isPassword: boolean, allowDecimals = true, allowClose = true, submitFunction: Function) => { let numpad = $('#virtualNumpad'); let inputBox = $('#virtualNumpadInput') let closeKeyboardButton = $('.closeKeyboards') @@ -23,10 +28,9 @@ numpad.data('password', isPassword); numpad.data('allowdecimals', allowDecimals); - $(document).unbind('keyup'); - $(document).keyup(e => { + $(document).off('keyup'); + $(document).on('keyup', e => { let key = e.key; - switch (key) { case 'Backspace': case 'Delete': @@ -64,7 +68,7 @@ let submitFunction = numpad.data('submitfunction') let allowedValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'submit', 'clear'] let currentValue = numpad.data('value').toString() - //Test + if (allowDecimals) allowedValues.push('.', ',') @@ -96,7 +100,7 @@ let clearNumpadInput = () => { $('#virtualNumpadInput').text("") $('#virtualNumpad').data('value', '') - } + } let setupVirtualNumpad = () => { $(document).on('click', '.virtualNumpadButton', e => { @@ -109,11 +113,12 @@ }); } - let setupVirtualKeyboard = () => { + let setupVirtualKeyboard = (keyboardLayouts: VirtualKeyboard) => { Application.keyboard = { capsLock: false, shift: false, - layout: 'default' + layouts: keyboardLayouts, + currentLayout: 'default', } $(document).on('click', '.virtualKeyboardButton', e => { @@ -123,7 +128,7 @@ setKeyboardLayout('default') } - let showVirtualKeyboard = (heading: string, maxlength = 32, isPassword = false, submitFunction = () => { + let showVirtualKeyboard = (heading: string, maxlength = 32, isPassword = false, submitFunction :Function = () => { hideVirtualKeyboard() }) => { let keyboard = $('#virtualKeyboard') @@ -166,7 +171,7 @@ case 'submit': hideVirtualKeyboard(); let submitFunction = keyboard.data('submitfunction') - submitFunction(); + submitFunction(inputBox.text()); break; case 'shift': if (Application.keyboard.capsLock) break; @@ -206,8 +211,10 @@ } let setKeyboardLayout = (layout: string, modifier = '') => { - let keyboardLayout = ajaxSync('/languages/english/keyboardLayout.json', null, 'get') + if (modifier != '') modifier = `_${modifier}` + Application.keyboard.currentLayout = layout + let layoutToLoad = Application.keyboard.layouts[layout] $('.virtualKeyboardRow').each((index, row) => { /* @@ -215,7 +222,7 @@ and translators making their own language packs */ index = index + 1; - let currentRow: Record = keyboardLayout[layout]["row" + index + modifier] + let currentRow = layoutToLoad[`row${index}${modifier}`] $(row).children('a').each((keyIndex, button) => { let key = $(button); @@ -251,6 +258,6 @@ } $(() => { - setupVirtualNumpad() - setupVirtualKeyboard(); + setupVirtualNumpad() + ajax('/ajax/getKeyboardLayout/english', null, 'get',setupVirtualKeyboard, null, null) }) diff --git a/wwwroot/scripts/ts/test.ts b/wwwroot/scripts/ts/test.ts new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/wwwroot/scripts/ts/test.ts @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wwwroot/scripts/ts/types.ts b/wwwroot/scripts/ts/types.ts index 821a8d7..88c5d4a 100644 --- a/wwwroot/scripts/ts/types.ts +++ b/wwwroot/scripts/ts/types.ts @@ -1,4 +1,5 @@ -type PosMode = "edit" | "void" | "transfer" | "default" +type PosMode = "edit" | "void" | "transfer" | "default" | "tableSelected" | "decorationSelected" | "activeTableSelected" | "merge" | "reservedTableSelected" +type PosModes = PosMode[] interface ajaxResult { status: string @@ -7,11 +8,10 @@ interface ajaxResult { interface ApplicationState { keyboard: keyboard - mode: PosMode + mode: PosModes languageVars: Record } - interface table { table_number: number, room_id: number @@ -25,20 +25,41 @@ interface table { rotation: number merged_children: string previous_state: string - status: string - table_id: number + status: number + id: number +} + +interface decoration { + id: number + decoration_room: number + decoration_pos_x: number + decoration_pos_y: number + decoration_rotation: number + decoration_width: number + decoration_height: number + decoration_image: string } interface room { - room_id: number + id: number room_name: string background_image: string venue_id: number } +interface reservation { + id: number, + reservation_name: string, + reservation_time: number, + reservation_covers: number, + reservation_created_at: number, + reservation_table_id: number, +} + interface keyboard { capsLock: boolean shift: boolean - layout: string + layouts: VirtualKeyboard + currentLayout: string } \ No newline at end of file diff --git a/wwwroot/styles/screen.css b/wwwroot/styles/screen.css index 8b42ae3..9864baf 100644 --- a/wwwroot/styles/screen.css +++ b/wwwroot/styles/screen.css @@ -26,7 +26,7 @@ body{ display:flex; align-items:center; justify-content:center; - + } #tableDetails div{ @@ -154,7 +154,7 @@ body{ #bottomHalf{ flex:1; overflow-x:auto; - overflow-y:hidden; + overflow-y:hidden; scroll-behavior: smooth; } @@ -233,7 +233,7 @@ td .posButton.normal.hasImage a:first-of-type{ flex-basis:24%; background-size:contain; background-repeat:no-repeat; - background-position:center; + background-position:center; align-items:center; } @@ -242,7 +242,7 @@ td .posButton.normal.hasImage a:nth-of-type(2){ } td .posButton.doubleHeight{ - flex-direction:column; + flex-direction:column; } td .posButton.doubleHeight.hasImage a:first-of-type{ @@ -254,7 +254,7 @@ td .posButton.doubleHeight.hasImage a:first-of-type{ flex-basis:66%; background-size:contain; background-repeat:no-repeat; - background-position:center 20%; + background-position:center 20%; } .mobile td .posButton.doubleHeight.hasImage a:first-of-type{ @@ -274,7 +274,7 @@ td .posButton.doubleWidth.hasImage a:first-of-type{ flex-basis:24%; background-size:contain; background-repeat:no-repeat; - background-position:0 center; + background-position:0 center; display:flex; align-items:center; } @@ -294,7 +294,7 @@ td .posButton.doubleWidth.doubleHeight.hasImage a:first-of-type{ height:100%; background-size:contain; background-repeat:no-repeat; - background-position:center; + background-position:center; } td .posButton.doubleWidth.doubleHeight.hasImage a:nth-of-type(2){ @@ -326,7 +326,7 @@ td .posButton.doubleWidth.doubleHeight.hasImage a:nth-of-type(2){ .instructionRow td{ font-weight:lighter !important; font-size:1em !important; - + } td.itemCell{ @@ -489,7 +489,7 @@ a.logOut{ .bottomCell{ flex-basis:10%; - width:100%; + width:100%; } @@ -498,7 +498,7 @@ a.logOut{ display:flex; flex-direction:column; flex-basis:80%; - + } #tablemapLeftColumn a, @@ -553,14 +553,14 @@ a.logOut{ .floorplanControls, .mergeControls{ - visibility:hidden; width:100%; flex-basis:33%; display:flex; flex-direction:column; } -.editControls a{ +.editControls > a, +.editControls .posHeader{ height:100%; display:flex; flex-wrap:wrap; @@ -568,12 +568,23 @@ a.logOut{ align-items:center; justify-content:center; text-align:center; + padding:0.5em; } - .editControls .posHeader{ flex-direction:column; } +.posHeader.currentTable > * { + width: 100%; + flex:1; + align-items: center; + display: flex; + justify-content: center; +} + +.posHeader.currentTable b {align-items: flex-end} +.posHeader.currentTable small {align-items: flex-start} + .floorplanControls a, .mergeControls a{ display:flex; diff --git a/wwwroot/themes/restaurant/tableMap.tpl.htm b/wwwroot/themes/restaurant/tableMap.tpl.htm index 43b9a62..7fb4e23 100644 --- a/wwwroot/themes/restaurant/tableMap.tpl.htm +++ b/wwwroot/themes/restaurant/tableMap.tpl.htm @@ -27,13 +27,17 @@
-
- - - - - - +
+
+ + + +
+ + + + +
@@ -43,22 +47,22 @@
-
- +
+ - - - + + +
-
- - - +
+ + +
-
-
+
+
-
+
@@ -70,14 +74,5 @@
- \ No newline at end of file