Files
DredgePos/Migrations/PopulateTestData.fs

485 lines
16 KiB
Forth

module DredgePos.Migrations.PopulateTestData
open DredgeFramework
open DredgePos.Types
open System.IO
let spaceButton () = (Entity.GetFirstByColumn<button> "primary_action" "spacer").id
let getPageOrder pageName =
match pageName with
| "entrees" -> 1
| "mains" -> 2
| "dessert" -> 3
| "beer" -> 4
| "wine" -> 5
| _ -> 0
let CreatePageFromDirectory index (dir: string) =
let dirName = DirectoryInfo(dir).Name
let printGroup =
match dirName.ToLower() with
| "beer" | "wine" -> (Entity.GetFirstByColumn<print_group> "name" "Drinks").id
| "entrees" | "dips" -> (Entity.GetFirstByColumn<print_group> "name" "Entrees").id
| "dessert" -> (Entity.GetFirstByColumn<print_group> "name" "Desserts").id
| _ -> (Entity.GetFirstByColumn<print_group> "name" "Mains").id
let parentName =
match dirName.ToLower() with
| "beer" | "wine" -> "Beverage"
| _ -> "Food"
let parentCategory = Entity.GetFirstByColumn<sales_category> "name" parentName
if dirName.ToLower() <> "dips" && dirName.ToLower() <> "steak temperatures" then
let NewGrid = Entity.Create {
id=0
name=dirName
rows=8
cols=6
data=""
}
Entity.Create {
id=0
order= getPageOrder (dirName.ToLower())
venue_id=1
label=dirName
grid_id=NewGrid.id
} |> ignore
elif dirName.ToLower() = "steak temperatures" then
Entity.Create {
id=0
name=dirName
rows=4
cols=6
data=""
} |> ignore
else ()
Entity.Create {
id=0
parent=parentCategory.id
name=dirName
print_group_id=printGroup
venue_id=1
} |> ignore
dir
let CreateDefaultPrintGroups (path: string) =
Entity.Create {
id=0
name="Entrees"
printer_id=1
venue_id=1
} |> ignore
Entity.Create {
id=0
name="Mains"
printer_id=1
venue_id=1
} |> ignore
Entity.Create {
id=0
name="Desserts"
printer_id=1
venue_id=1
} |> ignore
Entity.Create {
id=0
name="Drinks"
printer_id=2
venue_id=1
} |> ignore
path
let CreateDefaultVenue (path: string) =
{
id=0
name="Megalomania"
}
|> Entity.Create
|>ignore
path
let CreateDefaultClerk (path: string) =
{
id=0
name="Josh"
login_code=1408
user_group_id=1
}
|> Entity.Create
|>ignore
path
let CreateDefaultSalesCategories (path: string) =
Entity.Create {
id=0
parent=0
name="Food"
print_group_id=(Entity.GetFirstByColumn<print_group> "name" "Mains").id
venue_id=1
} |> ignore
Entity.Create {
id=0
parent=0
name="Beverage"
print_group_id=(Entity.GetFirstByColumn<print_group> "name" "Drinks").id
venue_id=1
} |> ignore
path
let CreateDefaultButtons (path: string) =
Entity.Create {
id = 0
text = ""
primary_action = "spacer"
secondary_action = ""
primary_action_value = ""
secondary_action_value = ""
image = ""
extra_classes = "invisible"
extra_styles = ""
}
|> ignore
path
let CreateDefaultItems (path: string) =
Entity.Create {
id = 0
name = "Custom Item"
code = "OPEN000"
sales_category_id = (Entity.GetFirstByColumn<sales_category> "name" "Food").id
item_type = "item"
price1 = 0
}
|> ignore
path
let CreateRooms () =
"wwwroot/images/rooms"
|> Directory.GetFiles
|> Array.filter (fun file -> Path.GetExtension file = ".png" || Path.GetExtension file = ".jpg")
|> Array.iter (fun image ->
let roomName = Path.GetFileNameWithoutExtension image
Entity.Create {
id=0
name=roomName
background_image= Path.GetFileName image
venue_id=1
} |> ignore
)
let populateEntreeGrid () =
let SalesCategory = Entity.GetFirstByColumn<sales_category> "name" "Entrees"
let DipSalesCategory = Entity.GetFirstByColumn<sales_category> "name" "Dips"
let Entrees = Entity.GetAllByColumn<item> "sales_category_id" SalesCategory.id
let Dips = Entity.GetAllByColumn<item> "sales_category_id" DipSalesCategory.id
let space = spaceButton()
let GridData =
[|
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
|]
|> Array.mapi (fun index current ->
let isFirstColumn = (index % 6) = 0
if not isFirstColumn then current else
let entree = Entrees |> Array.tryItem (index/6)
match entree with
| None -> space
| Some x -> x.id
)
|> Array.mapi (fun index current ->
let isSecondRow = index > 6 && index < 12
if not isSecondRow then current else
let entree = Dips |> Array.tryItem (index-7)
match entree with
| None -> space
| Some x -> x.id
)
let grid =
Entity.GetFirstByColumn<order_screen_page_group> "label" "Entrees"
|> Entity.GetRelated<grid, order_screen_page_group>
let newGrid = {grid with data=(jsonEncode {|page1=GridData|})}
Entity.Update newGrid |> ignore
()
let populateMainGrid (category: string) () =
let SalesCategory = Entity.GetFirstByColumn<sales_category> "name" category
let Mains = Entity.GetAllByColumn<item> "sales_category_id" SalesCategory.id
let space = spaceButton()
let getId index =
match Mains |> Array.tryItem index with
| None -> space
| Some x -> x.id
let GridData =
[|
getId 0; space; getId 1; space; getId 2; space;
space; space; space; space; space; space;
getId 3; space; getId 4; space; getId 5; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
|]
let grid =
Entity.GetFirstByColumn<order_screen_page_group> "label" category
|> Entity.GetRelated<grid, order_screen_page_group>
let newGrid = {grid with data=(jsonEncode {|page1=GridData|})}
Entity.Update newGrid |> ignore
let populateDessertGrid () =
let space = spaceButton()
let SalesCategory = Entity.GetFirstByColumn<sales_category> "name" "Dessert"
let Desserts = Entity.GetAllByColumn<item> "sales_category_id" SalesCategory.id
let getId index =
match Desserts |> Array.tryItem index with
| None -> space
| Some x -> x.id
let GridData =
[|
getId 0; space; getId 1; space; space ; space;
space; space; space; space; space; space;
space; getId 2; space; getId 3; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
space; space; space; space; space; space;
|]
let grid =
Entity.GetFirstByColumn<order_screen_page_group> "label" "Dessert"
|> Entity.GetRelated<grid, order_screen_page_group>
let newGrid = {grid with data=(jsonEncode {|page1=GridData|})}
Entity.Update newGrid |> ignore
let populateBeerGrid () =
let space = spaceButton()
let SalesCategory = Entity.GetFirstByColumn<sales_category> "name" "Beer"
let Beers = Entity.GetAllByColumn<item> "sales_category_id" SalesCategory.id
let grid =
Entity.GetFirstByColumn<order_screen_page_group> "label" "Beer"
|> Entity.GetRelated<grid, order_screen_page_group>
let mutable buttonMap = Map.empty<string, int[]>
Beers
|> Array.chunkBySize 24
|> Array.map (fun beerPage ->
let getId index =
match beerPage |> Array.tryItem index with
| None -> space
| Some x -> x.id
[|
getId 0; getId 1; getId 2; getId 3; getId 4 ; getId 5;
space; space; space; space; space; space;
getId 6; getId 7; getId 8; getId 9; getId 10 ; getId 11;
space; space; space; space; space; space;
getId 12; getId 13; getId 14; getId 15; getId 16 ; getId 17;
space; space; space; space; space; space;
getId 18; getId 19; getId 20; getId 21; getId 22 ; getId 23;
space; space; space; space; space; space;
|]
)
|> Array.iteri (fun index buttonIds ->
buttonMap <- buttonMap |> Map.add $"page{index+1}" buttonIds
)
let GridData = buttonMap |> jsonEncode
let newGrid = {grid with data=GridData}
Entity.Update newGrid |> ignore
let populateSteakTemperaturesGrid () =
let space = spaceButton()
let SalesCategory = Entity.GetFirstByColumn<sales_category> "name" "Steak Temperatures"
let Temps = Entity.GetAllByColumn<item> "sales_category_id" SalesCategory.id
let grid = Entity.GetFirstByColumn<grid> "name" "Steak Temperatures"
let getId index =
match Temps |> Array.tryItem index with
| None -> space
| Some x -> x.id
let GridData =
[|
getId 0; space; getId 1; space; getId 2; space;
space; space; space; space; space; space;
getId 3; space; getId 4; space; getId 5; space;
space; space; space; space; space; space;
|]
let newGrid = {grid with data=(jsonEncode {|page1=GridData|}); rows=4; cols=6}
Entity.Update newGrid |> ignore
let steakButtons = Entity.GetAllByColumn<button> "text" "Venison Wellington"
steakButtons |> Array.iter (fun button ->
Entity.Update {button with secondary_action="grid"; secondary_action_value=newGrid.id.ToString()} |> ignore
)
let PopulateGrids () =
populateEntreeGrid ()
|> populateMainGrid "Mains"
|> populateMainGrid "Wine"
|> populateDessertGrid
|> populateBeerGrid
|> populateSteakTemperaturesGrid
let CreateItemFromFileName (index: int) (dirName: string) (file: string) =
let extension = Path.GetExtension file
let fileName = Path.GetFileNameWithoutExtension file
let itemType =
match dirName.ToLower() with
| "dips" | "steak temperatures" -> "instruction"
| _ -> "item"
let categories = (Entity.GetAllByColumn<sales_category> "name" dirName)
let categoryID =
if categories.Length > 0 then categories[0].id
else (Entity.GetFirstByColumn<sales_category> "name" "Mains").id
let newItem = Entity.Create {
id = 0
code = $"{dirName}0{index+1}" |> StringReplace " " ""
sales_category_id=categoryID
name=fileName
item_type=itemType
price1=1000
}
let classes =
match dirName.ToLower() with
| "beer" | "dessert" -> "doubleHeight"
| "mains" | "wine" | "steak temperatures" -> "doubleHeight doubleWidth"
| "entrees" -> "doubleWidth"
| _ -> "normal"
Entity.Create {
id=0
text=fileName
primary_action="item"
primary_action_value=newItem.code
secondary_action="None"
secondary_action_value=""
image= $"{dirName}/{fileName}{extension}"
extra_classes=classes
extra_styles=""
} |> ignore
let CreateItemsAndButtons (dir: string) =
let dirName = DirectoryInfo(dir).Name
dir
|> Directory.GetFiles
|> Array.filter (fun file -> Path.GetExtension file = ".png" || Path.GetExtension file = ".jpg")
|> Array.iteri (fun index -> CreateItemFromFileName index dirName)
let addFloorplanTable tableNumber x y shape width height rotation (room:room) =
Entity.Create {
id=0
table_number=tableNumber
pos_x=x
pos_y=y
shape=shape
width=width
height=height
rotation=rotation
room_id=room.id
venue_id=1
default_covers=2
merged_children=""
previous_state=""
status=0
} |> ignore
room
let PopulateRooms () =
Entity.GetFirstByColumn<room> "name" "Deck & Courtyard"
|> addFloorplanTable 1 1151 1145 "square" 115 115 45
|> addFloorplanTable 2 827 1152 "square" 115 115 0
|> addFloorplanTable 3 836 922 "square" 115 115 0
|> addFloorplanTable 4 956 712 "square" 115 115 0
|> addFloorplanTable 5 535 704 "square" 115 115 0
|> addFloorplanTable 6 265 861 "square" 115 115 0
|> addFloorplanTable 7 265 1031 "square" 115 115 0
|> addFloorplanTable 8 265 1197 "square" 115 115 0
|> addFloorplanTable 19 90 533 "square" 115 115 0
|> addFloorplanTable 20 90 378 "square" 115 115 0
|> addFloorplanTable 21 90 233 "square" 115 115 0
|> addFloorplanTable 22 90 77 "square" 115 115 0
|> addFloorplanTable 23 622 80 "square" 115 115 0
|> addFloorplanTable 24 613 296 "square" 115 115 -45
|> addFloorplanTable 25 498 539 "square" 115 115 0
|> addFloorplanTable 26 854 546 "square" 115 115 0
|> addFloorplanTable 27 932 191 "square" 115 115 45
|> addFloorplanTable 28 1136 79 "square" 115 115 0
|> addFloorplanTable 29 1145 317 "square" 115 115 0
|> addFloorplanTable 30 1145 522 "square" 115 115 0
|> ignore
Entity.GetFirstByColumn<room> "name" "Inside"
|> addFloorplanTable 31 943 1196 "square" 215 90 0
|> addFloorplanTable 32 943 952 "square" 215 90 0
|> addFloorplanTable 33 927 565 "circle" 150 150 0
|> addFloorplanTable 39 725 67 "square" 115 115 0
|> addFloorplanTable 40 685 222 "square" 115 115 0
|> addFloorplanTable 41 685 357 "square" 115 115 0
|> addFloorplanTable 42 725 531 "square" 115 115 0
|> addFloorplanTable 43 185 452 "square" 100 100 0
|> addFloorplanTable 44 185 326 "square" 100 100 0
|> addFloorplanTable 45 185 199 "square" 100 100 0
|> addFloorplanTable 46 185 69 "square" 100 100 0
|> addFloorplanTable 51 685 948 "square" 200 100 0
|> addFloorplanTable 52 685 1198 "square" 200 100 0
|> addFloorplanTable 61 415 762 "circle" 100 100 0
|> addFloorplanTable 62 415 901 "circle" 100 100 0
|> addFloorplanTable 63 415 1039 "circle" 100 100 0
|> addFloorplanTable 64 415 1176 "circle" 100 100 0
|> ignore
Entity.GetFirstByColumn<room> "name" "Function Room"
|> addFloorplanTable 71 1039 361 "square" 110 110 0
|> addFloorplanTable 72 1000 652 "square" 200 100 0
|> addFloorplanTable 73 976 966 "square" 130 130 0
|> addFloorplanTable 74 658 962 "square" 120 115 0
|> addFloorplanTable 75 567 629 "square" 110 200 0
|> addFloorplanTable 76 120 511 "square" 230 100 0
|> addFloorplanTable 77 120 847 "square" 230 100 0
let run () =
"wwwroot/images/items"
|> CreateDefaultVenue
|> CreateDefaultClerk
|> CreateDefaultPrintGroups
|> CreateDefaultSalesCategories
|> CreateDefaultItems
|> CreateDefaultButtons
|> Directory.GetDirectories
|> Array.mapi CreatePageFromDirectory
|> Array.iter CreateItemsAndButtons
|> CreateRooms
|> PopulateGrids
|> PopulateRooms