################# # Author: PMF # ################# require(shiny) require(DT) # preperation: # Get the status if r shiny is running in docker or not readRenviron("./.status-docker") statusDocker <- Sys.getenv("statusDockerENV") # loading data from csv files brews <- (read.csv(file = "./data/brews.csv", header = TRUE, sep = ",", row.names = 1)) machines <- (read.csv(file = "./data/machines.csv", header = TRUE, sep = ",", row.names = 1)) grinders <- (read.csv(file = "./data/grinders.csv", header = TRUE, sep = ",", row.names = 1)) coffees <- (read.csv(file = "./data/coffees.csv", header = TRUE, sep = ",", row.names = 1)) # get last used coffee lastUsedParameters <- tail(brews, n=1) ui <- navbarPage("EpriLog", tabPanel("Brews", sidebarLayout( mainPanel( h1('Brew History'), DT::dataTableOutput('history') ), sidebarPanel( h1('New Entry'), dateInput("date", "Date:"), #maybe better to automatically generate with time selectInput("alias", "Whats the nick name of the coffee?", choices = coffees$alias, multiple = FALSE, selected = lastUsedParameters$Alias), #selectInput("coffeeName", "Whats the name of the coffee?", coffees$coffeeName, multiple = FALSE), # Taste Rating (sour = none, 10 = perfect, 20 = bitter) sliderInput("taste", "Taste (0=Sour, 10=perfect, 20=bitter):", value = 10, min = 0, max = 20), # Flow rate (0 = none, 10 = perfect, 20 = water) sliderInput("flowResult", "Flow rate (10 is Perfect):", value = lastUsedParameters$FlowResult, min = 0, max = 20), # Grind Time sliderInput("grindTime", "Ginding Time", value = lastUsedParameters$GrindTime, min = 0, max = 30, step = 0.2), # Grind Size (my Grinder can go up to 70 but thats no longer Espresso..) sliderInput("grindSize", "Ginding Size", value = lastUsedParameters$GrindSize, min = 0, max = 30), # WDT Tool checkboxInput("wdt", "WDT Tool used?", value = TRUE), # Brew Temp numericInput("brewTemp", "Brew Temperature:", value = 94, min = 0, max = 110), # Brew preinfusion time numericInput("brewPreinfusion", "Brew Preinfusion Time", value =2, min = 0, max = 60), # Brew wait Time after Preinfusion numericInput("brewPreinfusionWait", "Brew Wait after Preinfusion Time", value = 5, min = 0, max = 60), # Brew Time numericInput("brewTime", "Brew Time after Preinfusion Time", value = 21, min = 0, max = 100), # Grinder Device selectInput("grinderDevice", "Which Grinder was used?", grinders$name, multiple = FALSE), # Espresso Device selectInput("machineDevice", "Which Espresso machine was used?", machines$name, multiple = FALSE), # Siebeinsatz numericInput("portaInsert", "Siever insert size", value = 12, min = 0, max = 100), # Notes textInput("notes", "Notes:", value = "I´m satisfied with my coffee."), # submit actionButton("createEntry", "Submit new entry!", icon("save")), ) ) ), tabPanel("Configuration", sidebarLayout( mainPanel( h1('Already available Coffees'), DT::dataTableOutput('coffees') ), sidebarPanel( h2('Add New Coffees'), textInput("brandName", "Brand Name", value = ""), textInput("coffeeNameNew", "Coffee Name", value = ""), textInput("aliasNew", "Nick Name", value = ""), dateInput("expDate", "Expiration Date"), numericInput("arabicaPercentage", "Arabica Percentage", value = "50"), numericInput("robustaPercentage", "Robusta Percentage", value = "50"), numericInput("sourPercentage", "Sourness Percentage", value = "50"), numericInput("strongnessPercentage", "Strongness Percentage", value = "50"), numericInput("roastDarknessPercentage", "Roast Darkness Percentage", value = 50), textInput("originCountry", "Origin County of the Coffee", value = "Coffee World"), actionButton("addCoffee", "Save new entry!", icon("save")), ) ) )) server <- function(input, output, session){ # loading data from csv files brews <- (read.csv(file = "./data/brews.csv", header = TRUE, sep = ",", row.names = 1)) machines <- (read.csv(file = "./data/machines.csv", header = TRUE, sep = ",", row.names = 1)) grinders <- (read.csv(file = "./data/grinders.csv", header = TRUE, sep = ",", row.names = 1)) coffees <- (read.csv(file = "./data/coffees.csv", header = TRUE, sep = ",", row.names = 1)) # get last used coffee lastUsedParameters <- tail(brews, n=1) # Render Brew History Table output$history = DT::renderDataTable( brews, server = TRUE, options = list(order = list(3, "desc"), list(scrollX = TRUE), columnDefs = list(list(visible = FALSE, targets = c(1,2,3,5,10,11,12,13,14,15,16))) )) # Creating new brew record # observeEvent(input$createEntry, { # get currentTime currentTime <- Sys.time() # count up for new brew id newID <- (runif(1, 1, 10000000000)) coffeeName <- "SEE_COFFEES_CSV" # add new line entry to history brews[nrow(brews) + 1, 1] <- newID brews[nrow(brews), 2] <- input$date brews[nrow(brews), 3] <- currentTime brews[nrow(brews), 4] <- input$alias brews[nrow(brews), 5] <- coffeeName brews[nrow(brews), 6] <- input$grindTime brews[nrow(brews), 7] <- input$grindSize brews[nrow(brews), 8] <- input$flowResult brews[nrow(brews), 9] <- input$taste brews[nrow(brews), 10] <- input$wdt brews[nrow(brews), 11] <- input$brewTemp brews[nrow(brews), 12] <- input$brewPreinfusion brews[nrow(brews), 13] <- input$brewPreinfusionWait brews[nrow(brews), 14] <- input$brewTime brews[nrow(brews), 15] <- input$grinderDevice brews[nrow(brews), 16] <- input$machineDevice brews[nrow(brews), 17] <- input$portaInsert brews[nrow(brews), 18] <- input$notes # save changes to .csv file write.csv(brews, file = "./data/brews.csv") showNotification("New Record added.") session$reload() }) # Render Coffees Table for Configuration Page # output$coffees = DT::renderDataTable( coffees, server = TRUE, options = list(scrollX = TRUE) #colnames = c("ID", "Brand Name", "Coffee Name", ) #options = list(order = list(3, "desc") #columnDefs = list(list(visible = FALSE, targets = c(1,2,10,11,12,13,14,15,16))) ) # Add new Coffee entry # observeEvent(input$addCoffee, { # get currentTime creationDate <- Sys.time() # count up for new brew id newID <- (runif(1, 1, 10000000000)) # inserting new row coffees[nrow(coffees) + 1, 1] <- newID coffees[nrow(coffees), 2] <- input$brandName coffees[nrow(coffees), 3] <- input$coffeeNameNew coffees[nrow(coffees), 4] <- input$aliasNew coffees[nrow(coffees), 5] <- input$expDate coffees[nrow(coffees), 6] <- input$arabicaPercentage coffees[nrow(coffees), 7] <- input$robustaPercentage coffees[nrow(coffees), 8] <- input$sourPercentage coffees[nrow(coffees), 9] <- input$strongnessPercentage coffees[nrow(coffees), 10] <- input$roastDarknessPercentage coffees[nrow(coffees), 11] <- input$originCountry coffees[nrow(coffees), 12] <- creationDate # save changes to .csv file write.csv(coffees, file = "./data/coffees.csv") showNotification("New Coffee added.") session$reload() }) } if (statusDocker == "false") { runApp(shinyApp(ui = ui, server = server, options = list(launch.browser = TRUE))) } else { shinyApp(ui = ui, server = server) }