Task Analysis Dashboard

Load necessary libraries

library(shiny) library(dplyr) library(readxl) library(DT) library(lubridate) library(knitr) library(rmarkdown)

Define the UI

ui <- fluidPage( uiOutput(“dynamicTitle”),

sidebarLayout( sidebarPanel( fileInput(“file1”, “Upload Excel File”, accept = c(“.xls”, “.xlsx”)), textInput(“department”, “Department Name”, value = ““), dateInput(”task_date”, “Select Task Date”), downloadButton(“downloadPDF”, “Download Report (PDF)”) ),

mainPanel(
  h3("Task Analysis by Assignees"),
  dataTableOutput("assigneeTable"),
  
  h3("Task Analysis by Project"),
  dataTableOutput("projectTable")
)

) )

Define the server logic

server <- function(input, output, session) { output\(dynamicTitle <- renderUI({ department <- input\)department if (department != ““) { titlePanel(HTML(paste(”Task Analysis - “, department,”“))) } else { titlePanel(”Task Analysis”) } })

data <- reactive({ req(input\(file1) df <- read_excel(input\)file1\(datapath) df <- df %>% select(Project, Assignees, Task, Progress, `Task Date`) %>% mutate(`Task Date` = mdy(paste(`Task Date`, "2024")) %>% as.Date()) %>% filter(`Task Date` == input\)task_date) return(df) })

output$assigneeTable <- renderDataTable({ df <- data() assignee_summary <- df %>% group_by(Assignees) %>% summarise( Total_Tasks = n(), Completed_Percentage = mean(Progress == “Completed”) * 100 ) datatable(assignee_summary) })

output$projectTable <- renderDataTable({ df <- data() project_summary <- df %>% group_by(Project) %>% summarise( Total_Tasks = n(), Completed_Percentage = mean(Progress == “Completed”) * 100 ) datatable(project_summary) })

output\(downloadPDF <- downloadHandler( filename = function() { paste("task_analysis_", Sys.Date(), ".pdf", sep = "") }, content = function(file) { tempReport <- file.path(tempdir(), "report_template.Rmd") fileConn <- file(tempReport) writeLines(c( "---", "title: 'Task Analysis Report'", "output: pdf_document", "params:", " data: NULL", " department: ''", "---", "", "## Department: **`r params\)department`**“,”“,”{r, echo=FALSE, message=FALSE, warning=FALSE}", "library(dplyr)", "library(knitr)", "", "df <- params$data", "", "## Task Summary by Assignee", "assignee_summary <- df %>%", " group_by(Assignees) %>%", " summarise(", " Total_Tasks = n(),", " Completed_Percentage = mean(Progress == \"Completed\") * 100", " )", "kable(assignee_summary, caption = \"Task Summary by Assignee\")", "", "## Task Summary by Project", "project_summary <- df %>%", " group_by(Project) %>%", " summarise(", " Total_Tasks = n(),", " Completed_Percentage = mean(Progress == \"Completed\") * 100", " )", "kable(project_summary, caption = \"Task Summary by Project\")", "” ), fileConn) close(fileConn)

  rmarkdown::render(tempReport, output_file = file, params = list(
    data = data(),
    department = input$department
  ))
}

) }

Run the Shiny app

shinyApp(ui = ui, server = server)