module DredgePos.Migrations.PopulateTestData open DredgeFramework open DredgePos.Types open System.IO let CreatePageFromDirectory index (dir: string) = let dirName = DirectoryInfo(dir).Name let printGroup = match dirName.ToLower() with | "beer" | "wine" -> (Entity.GetFirstByColumn "name" "Beverage").id | _ -> (Entity.GetFirstByColumn "name" "Food").id let parentName = match dirName.ToLower() with | "beer" | "wine" -> "Beverage" | _ -> "Food" let parentCategory = Entity.GetFirstByColumn "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=index venue_id=1 label=dirName grid_id=NewGrid.id } |> 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="Food" printer_id=1 venue_id=1 } |> ignore Entity.Create { id=0 name="Beverage" printer_id=1 venue_id=1 } |> ignore path let CreateDefaultVenue (path: string) = let venue: venue = { id=0 name="Megalomania" } Entity.Create venue |>ignore path let CreateDefaultClerk (path: string) = let venue: clerk = { id=0 name="Josh" login_code=1408 user_group_id=1 } Entity.Create venue |>ignore path let CreateDefaultSalesCategories (path: string) = Entity.Create { id=0 parent=0 name="Food" print_group_id=(Entity.GetFirstByColumn "name" "Food").id venue_id=1 } |> ignore Entity.Create { id=0 parent=0 name="Beverage" print_group_id=(Entity.GetFirstByColumn "name" "Beverage").id venue_id=1 } |> 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 "name" "Entrees" let DipSalesCategory = Entity.GetFirstByColumn "name" "Dips" let Entrees = Entity.GetAllByColumn "sales_category_id" SalesCategory.id let Dips = Entity.GetAllByColumn "sales_category_id" DipSalesCategory.id let GridData = [| 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; |] |> 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 -> 0 | 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 -> 0 | Some x -> x.id ) let grid = Entity.GetFirstByColumn "label" "Entrees" |> Entity.GetRelated let newGrid = {grid with data=(jsonEncode {|page1=GridData|})} Entity.Update newGrid |> ignore () let populateMainGrid (category: string) () = let SalesCategory = Entity.GetFirstByColumn "name" category let Mains = Entity.GetAllByColumn "sales_category_id" SalesCategory.id let getId index = match Mains |> Array.tryItem index with | None -> 0 | Some x -> x.id let GridData = [| getId 0; 0; getId 1; 0; getId 2; 0; 0; 0; 0; 0; 0; 0; getId 3; 0; getId 4; 0; getId 5; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; |] let grid = Entity.GetFirstByColumn "label" category |> Entity.GetRelated let newGrid = {grid with data=(jsonEncode {|page1=GridData|})} Entity.Update newGrid |> ignore let populateDessertGrid () = let SalesCategory = Entity.GetFirstByColumn "name" "Dessert" let Desserts = Entity.GetAllByColumn "sales_category_id" SalesCategory.id let getId index = match Desserts |> Array.tryItem index with | None -> 0 | Some x -> x.id let GridData = [| getId 0; 0; getId 1; 0; 0 ; 0; 0; 0; 0; 0; 0; 0; 0; getId 2; 0; getId 4; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; |] let grid = Entity.GetFirstByColumn "label" "Dessert" |> Entity.GetRelated let newGrid = {grid with data=(jsonEncode {|page1=GridData|})} Entity.Update newGrid |> ignore let populateBeerGrid () = let SalesCategory = Entity.GetFirstByColumn "name" "Beer" let Beers = Entity.GetAllByColumn "sales_category_id" SalesCategory.id let grid = Entity.GetFirstByColumn "label" "Beer" |> Entity.GetRelated let GridData = Beers |> Array.chunkBySize 24 |> Array.map (fun beerPage -> let getId index = match beerPage |> Array.tryItem index with | None -> 0 | Some x -> x.id [| getId 0; getId 1; getId 2; getId 3; getId 4 ; getId 5; 0; 0; 0; 0; 0 ;0; getId 6; getId 7; getId 8; getId 9; getId 10 ; getId 11; 0; 0; 0; 0; 0 ;0; getId 12; getId 13; getId 14; getId 15; getId 16 ; getId 17; 0; 0; 0; 0; 0 ;0; getId 18; getId 19; getId 20; getId 21; getId 22 ; getId 23; 0; 0; 0; 0; 0 ;0; |] ) |> Array.mapi (fun index beerpage -> (map [$"page{index+1}", beerpage])) |> jsonEncode let newGrid = {grid with data=GridData} Entity.Update newGrid |> ignore let populateSteakTemperaturesGrid () = let SalesCategory = Entity.GetFirstByColumn "name" "Steak Temperatures" let Temps = Entity.GetAllByColumn "sales_category_id" SalesCategory.id let grid = Entity.GetFirstByColumn "label" "Steak Temperatures" |> Entity.GetRelated let getId index = match Temps |> Array.tryItem index with | None -> 0 | Some x -> x.id let GridData = [| getId 0; 0; getId 1; 0; getId 2; 0; 0; 0; 0; 0; 0; 0; getId 3; 0; getId 4; 0; getId 5; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; |] let newGrid = {grid with data=(jsonEncode {|page1=GridData|}); rows=4; cols=6} Entity.Update newGrid |> ignore let steakButtons = Entity.GetAllByColumn