library(shiny)
library(shinydashboard)
## Warning: package 'shinydashboard' was built under R version 4.1.3
## 
## Attaching package: 'shinydashboard'
## The following object is masked from 'package:graphics':
## 
##     box
library(plotly)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
#Definir interfaz
ui <- dashboardPage(
  dashboardHeader(title = "Portafolio Acciones"),
  dashboardSidebar(
    sidebarMenu(
      #https://fontawesome.com/search?q=google&o=r
      menuItem("Apple", tabName = "APL", icon = icon("apple")),
      menuItem("Google", tabName = "GOG", icon = icon("google"))
    )
  ),
  
  dashboardBody(
    tabItems(
      
      # Tabla de la accion APPLE
      tabItem(tabName = "APL",
              
              sidebarLayout(
                #Inputs en barra lateral
                sidebarPanel(
                  fileInput(inputId = "inputAPL",label = "Cargar archivo de accion de Apple",accept = c("text/csv","text/comma-separated-values","text/plain",".csv")),
                  dateRangeInput(inputId = "fechasAPL",label = "Escoja un rango de fechas para graficar el precio",start = "2019-01-01",end = "2019-06-15")
                ),
                
                #Outputs en panel principal
                mainPanel(
                  box(title = "Serie historica del precio de cierre de la accion de Apple",
                      plotlyOutput(outputId = "Graf_APL_Precio"),width=13, collapsible = TRUE)
                )
              )
      ),
      # Tabla de la accion APPLE
      tabItem(tabName = "GOG",
              
              sidebarLayout(
                #Inputs en barra lateral
                sidebarPanel(
                  fileInput(inputId = "inputGOG",label = "Cargar archivo de accion de Google",accept = c("text/csv","text/comma-separated-values","text/plain",".csv")),
                  dateRangeInput(inputId = "fechasGOG",label = "Escoja un rango de fechas para graficar el precio",start = "2019-01-01",end = "2019-06-15")
                ),
                
                #Outputs en panel principal
                mainPanel(
                  box(title = "Serie historica del precio de cierre de la accion de Google",
                      plotlyOutput(outputId = "Graf_GOG_Precio"),width=13, collapsible = TRUE)
                )
              )
      )
    ) #Cierra Items
  )#Cierra Body
)#Cierra Dashboard



# Definir la logica en la generacion de graficas
server <- function(input, output) {
  
  #Reactividad: Solo leer archivo cuando se selecciona uno nuevo
  archivoAPL<-eventReactive(input$inputAPL,{
    if(is.null(input$inputAPL)){return(NULL)}
    dataFileAPL<-read.csv(input$inputAPL$datapath)
    return(dataFileAPL)
  })
  
  archivoGOG<-eventReactive(input$inputGOG,{
    if(is.null(input$inputGOG)){return(NULL)}
    dataFileGOG<-read.csv(input$inputGOG$datapath)
    return(dataFileGOG)
  })
  
  #Renderizar grafica del precio de la accion de APPL
  
  output$Graf_APL_Precio<-renderPlotly({
    
    #Obtener datos
    datos<-archivoAPL()
    
    #Dar formato de fecha a la columna date de los datos cargados
    datos$Date<-as.Date(datos$Date)
    
    #Determinar cual es el min y max de fecha que enta en el archivo para luego comparar
    minFecha<-min(datos$Date)
    maxFecha<-max(datos$Date)
    
    
    #Crear variables con las fechas ingresadas por el usuario
    fecha1<-input$fechasAPL[1]
    fecha2<-input$fechasAPL[2]
    
    #Graficar solo si las fechas dadas por user estan contenidas en el archivo de datos
    if(fecha1>=minFecha & fecha2<=maxFecha){
      
      #Determinar valores a graficar en las fechas
      x<-datos$Date[datos$Date>=fecha1 & datos$Date<=fecha2]
      precio<-datos$Close[datos$Date>=fecha1 & datos$Date<=fecha2]
      
      #Graficar
      grafica<-plot_ly(x=~x,y=~precio, type = "scatter",mode="lines")
      
    }
    
    grafica
  })
  
  #Renderizar grafica del precio de la accion de Google
  
  output$Graf_GOG_Precio<-renderPlotly({
    
    #Obtener datos
    datos<-archivoGOG()
    
    #Dar formato de fecha a la columna date de los datos cargados
    datos$Date<-as.Date(datos$Date)
    
    #Determinar cual es el min y max de fecha que enta en el archivo para luego comparar
    minFecha<-min(datos$Date)
    maxFecha<-max(datos$Date)
    
    
    #Crear variables con las fechas ingresadas por el usuario
    fecha1<-input$fechasGOG[1]
    fecha2<-input$fechasGOG[2]
    
    #Graficar solo si las fechas dadas por user estan contenidas en el archivo de datos
    if(fecha1>=minFecha & fecha2<=maxFecha){
      
      #Determinar valores a graficar en las fechas
      x<-datos$Date[datos$Date>=fecha1 & datos$Date<=fecha2]
      precio<-datos$Close[datos$Date>=fecha1 & datos$Date<=fecha2]
      
      #Graficar
      grafica<-plot_ly(x=~x,y=~precio, type = "scatter",mode="lines")
      
    }
    
    grafica
  })
  
   
}



# Run the application 
shinyApp(ui = ui, server = server)

Shiny applications not supported in static R Markdown documents