You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
5.1 KiB
212 lines
5.1 KiB
---
|
|
title: "Pre"
|
|
author: "Scary Scarecrow"
|
|
date: '2022-06-27'
|
|
output: html_document
|
|
---
|
|
|
|
```{r setup, include=FALSE}
|
|
knitr::opts_chunk$set(echo = TRUE)
|
|
library(dplyr)
|
|
library(echarts4r)
|
|
library(lubridate)
|
|
library(shinymanager)
|
|
```
|
|
|
|
## Credentials
|
|
|
|
```{r}
|
|
credentials <- data.frame(
|
|
user = c("shiny", "asitav", "rigo", "aldo"),
|
|
password = c("lanubia@2021", "lanubia@2021","lanubia@2021","lanubia@2021"),
|
|
admin = c(FALSE, TRUE, FALSE, FALSE),
|
|
email = c("hello@asitavsen.com","asitav.sen@lanubia.com","rigo.selassa@lanubia.com","aldo.silvano@lanubia.com"),
|
|
stringsAsFactors = FALSE
|
|
)
|
|
|
|
create_db(
|
|
credentials_data = credentials,
|
|
sqlite_path = "./cred.sqlite", # will be created
|
|
passphrase = "kJuyhG657Hj&^%gshj*762hjsknh&662"
|
|
)
|
|
```
|
|
|
|
|
|
## DB
|
|
|
|
```{r}
|
|
connec <- dbConnect(
|
|
RPostgres::Postgres(),
|
|
dbname = dsn_database,
|
|
host = dsn_hostname,
|
|
port = dsn_port,
|
|
user = dsn_uid,
|
|
password = dsn_pwd
|
|
)
|
|
```
|
|
|
|
|
|
|
|
```{r}
|
|
#dat<-read.csv("./data/initial.csv")
|
|
#lims<-read.csv("./data/dev.limits.csv")
|
|
dat.1<-
|
|
dat |>
|
|
mutate(devia=Actual-Plan) |>
|
|
mutate(devia.per=round(devia/Plan,2))
|
|
#dbCreateTable(connec, "calculated", dat.1)
|
|
dbWriteTable(connec, "calculated", dat.1, append=TRUE)
|
|
dbWriteTable(connec, "limits", lims, append=TRUE)
|
|
|
|
#dbRemoveTable(connec,"calculated")
|
|
dat<-dbGetQuery(
|
|
connec,
|
|
'SELECT * FROM calculated'
|
|
)
|
|
|
|
lims<-dbGetQuery(
|
|
connec,
|
|
'SELECT * FROM limits'
|
|
)
|
|
|
|
#dbReadTable(connec, "calculated")
|
|
|
|
exp<-
|
|
dat |>
|
|
inner_join(lims, by=c("GL.account")) |>
|
|
mutate(act.req=ifelse(devia.per>Limit & devia > 500,T,F)) |>
|
|
filter(act.req) |>
|
|
select(1:3) |>
|
|
mutate(explanation=c("Cyberattack","Overwork","Interview","Maintenance","Quarterly Report","New Legislation"))
|
|
|
|
dbWriteTable(connec, "explanations", exp, append=TRUE)
|
|
exp<-dbGetQuery(
|
|
connec,
|
|
'SELECT * FROM explanations'
|
|
)
|
|
|
|
approvals<- exp |> mutate(approved=F)
|
|
|
|
dbWriteTable(connec, "approvals", approvals, overwrite=T)
|
|
|
|
approvals<-dbGetQuery(
|
|
connec,
|
|
'SELECT * FROM approvals'
|
|
)
|
|
|
|
|
|
dat |>
|
|
inner_join(lims, by=c("GL.account")) |>
|
|
mutate(act.req=ifelse(devia.per>Limit & devia > 500,T,F)) |>
|
|
filter(act.req) |>
|
|
left_join(exp, by=c("month"="month","Cost.center"="Cost.center","GL.account"="GL.account"))
|
|
|
|
|
|
emailsids<-dat |>
|
|
select(Cost.center, GL.account) |>
|
|
distinct() |>
|
|
mutate(email=c("asitav.sen@lanubia.com"))
|
|
dbWriteTable(connec, "emails", emailsids, overwrite=T)
|
|
emailsids<-dbGetQuery(
|
|
connec,
|
|
'SELECT * FROM emails'
|
|
)
|
|
|
|
sel.emails<- emailsids |>
|
|
filter(email=="asitav.sen@lanubia.com")
|
|
|
|
dat |>
|
|
inner_join(lims, by=c("GL.account")) |>
|
|
mutate(act.req=ifelse(devia.per>Limit & devia > 500,T,F)) |>
|
|
filter(act.req) |>
|
|
left_join(sel.emails, by=c("Cost.center"="Cost.center","GL.account"="GL.account")) |>
|
|
left_join(exp, by=c("month"="month","Cost.center"="Cost.center","GL.account"="GL.account")) |>
|
|
filter(is.na(explanation) | explanation=="") |>
|
|
filter(email=="asitav.sen@lanubia.com") |>
|
|
select(-c(9,10))
|
|
|
|
exp
|
|
```
|
|
|
|
|
|
|
|
```{r}
|
|
|
|
dat.2<-
|
|
dat |>
|
|
mutate(month=ym(month)) |>
|
|
group_by(month) |>
|
|
summarise(Plan=sum(Plan),Actual=sum(Actual)) |>
|
|
mutate(devia=Actual-Plan) |>
|
|
mutate(deviation.percent=round(devia*100/Plan,2))
|
|
|
|
e_chart(dat.2, x=month) |>
|
|
e_line(serie = deviation.percent, smooth=T, color="cyan") |>
|
|
e_area(serie = deviation.percent, smooth=T, color="gray") |>
|
|
e_axis_labels(x = "month", y="Deviation") |>
|
|
e_format_y_axis(suffix = " %") |>
|
|
e_title("Deviation", "Selected Cost Centers") |>
|
|
e_tooltip() |>
|
|
e_legend(right = 100) |>
|
|
e_datazoom(x_index = c(0, 1)) |>
|
|
e_toolbox_feature(feature = c("saveAsImage","dataView")) |>
|
|
e_theme("chalk")
|
|
|
|
history<-dat.2 |> select(month,deviation.percent) |> rename(ds=month, y=deviation.percent)
|
|
model <- prophet::prophet(history)
|
|
future <- prophet::make_future_dataframe(model, periods = 2)
|
|
forecast <- predict(model, future)
|
|
|
|
dat |>
|
|
filter(month==max(month)) |>
|
|
mutate(cost_gl=paste0(Cost.center,"_",GL.account)) |>
|
|
group_by(cost_gl) |>
|
|
summarise(Plan=sum(Plan),Actual=sum(Actual)) |>
|
|
mutate(devia=Actual-Plan) |>
|
|
mutate(deviation.percent=round(devia*100/Plan,2)) |>
|
|
arrange(desc(deviation.percent)) |>
|
|
e_charts(cost_gl) |>
|
|
e_bar(Plan, name = "Plan", color="gray") |>
|
|
e_step(Actual, name = "Actual", color="red") |>
|
|
e_axis_labels(x = "GL+Cost Center", y="Deviation") |>
|
|
e_title("Selected Cost Centers") |>
|
|
e_tooltip() |>
|
|
e_legend(right = 100) |>
|
|
e_datazoom(x_index = 0, type = "slider") |>
|
|
e_datazoom(y_index = 0, type = "slider") |>
|
|
e_toolbox_feature(feature = c("saveAsImage","dataView")) |>
|
|
e_theme("chalk")
|
|
```
|
|
```{r}
|
|
unique(dat$Cost.center) |> saveRDS("./data/costcenters.RDS")
|
|
unique(dat$GL.account) |> saveRDS("./data/glaccounts.RDS")
|
|
unique(dat$month) |> saveRDS("./data/months.RDS")
|
|
lims
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
```{r}
|
|
dat.dev<-dat |>
|
|
filter(devia>0) |>
|
|
select(2,3,6)
|
|
|
|
e_charts(dat.dev) |>
|
|
e_pie(devia)
|
|
|
|
blastula::create_smtp_creds_file(
|
|
file = "email_creds",
|
|
user = "apikey",
|
|
host = "smtp.sendgrid.net",
|
|
port = 465,
|
|
use_ssl = TRUE
|
|
)
|
|
|
|
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
|
|
```
|
|
|
|
|
|
|
|
|
|
|