diff --git a/ledgerr/.Rbuildignore b/ledgerr/.Rbuildignore new file mode 100644 index 0000000..91114bf --- /dev/null +++ b/ledgerr/.Rbuildignore @@ -0,0 +1,2 @@ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/ledgerr/.gitignore b/ledgerr/.gitignore new file mode 100644 index 0000000..807ea25 --- /dev/null +++ b/ledgerr/.gitignore @@ -0,0 +1,3 @@ +.Rproj.user +.Rhistory +.RData diff --git a/ledgerr/DESCRIPTION b/ledgerr/DESCRIPTION new file mode 100644 index 0000000..e582a12 --- /dev/null +++ b/ledgerr/DESCRIPTION @@ -0,0 +1,9 @@ +Package: ledgerr +Title: R Functions For Bookkeeping (one line, title case) +Version: 0.0.0.9000 +Authors@R: person("Matt", "Burton-Kelly", email = "bedrocks@gmail.com", role = c("aut", "cre")) +Description: This package acts as a frontend for simple bookkeeping spreadsheets and provides functions for reports. +Depends: R (>= 3.2.4) +License: GNU Affero General Public Licenseā€ version 3 (AGPL-3) +Encoding: UTF-8 +LazyData: true diff --git a/ledgerr/NAMESPACE b/ledgerr/NAMESPACE new file mode 100644 index 0000000..884a631 --- /dev/null +++ b/ledgerr/NAMESPACE @@ -0,0 +1,2 @@ +# Generated by roxygen2: fake comment so roxygen2 overwrites silently. +exportPattern("^[^\\.]") diff --git a/ledgerr/R/net.R b/ledgerr/R/net.R new file mode 100644 index 0000000..dee9701 --- /dev/null +++ b/ledgerr/R/net.R @@ -0,0 +1,18 @@ +net<-function(journ, + classselect="all", + accselect="all", + dates="all"){ + if("all" %in% classselect) { + classselect<-levels(journ$Class) + } + if("all" %in% accselect) { + accselect<-levels(journ$Account) + } + if("all" %in% dates) { + dates<-c(min(journ$Date),max(journ$Date)) + } + net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], + na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], + na.rm=T) + return(net) +} \ No newline at end of file diff --git a/ledgerr/R/net.acc.R b/ledgerr/R/net.acc.R new file mode 100644 index 0000000..fdc5774 --- /dev/null +++ b/ledgerr/R/net.acc.R @@ -0,0 +1,29 @@ +net.acc<-function(journ, + classselect="all", + accselect="all", + dates="all", + total=F) { + # List of classes - need to do this here before passing to net() + if("all" %in% accselect) { + accselect<-unique(journ$Account) + } + # Set up data frame + net.acc.out<-data.frame(Account=character(), + Net=numeric(), + stringsAsFactors=FALSE) + # Loop through accounts, calculate net, and add to data frame + for (i in 1:length(accselect)) { + net.acc.out[i,] <- c(as.character(accselect[i]), + net(journ, + classselect=classselect, + accselect=accselect[i], + dates=dates)) + } + # Sort by account name + net.acc.out<-net.acc.out[order(net.acc.out$Account) , ] + # Add total net row + if(total) { + net.acc.out[nrow(net.acc.out)+1,]<-c("Total",net(journal)) + } + return(net.acc.out) +} \ No newline at end of file diff --git a/ledgerr/R/net.class.R b/ledgerr/R/net.class.R new file mode 100644 index 0000000..eba2bc5 --- /dev/null +++ b/ledgerr/R/net.class.R @@ -0,0 +1,27 @@ +net.class<-function(journ, + classselect="all", + accselect="all", + dates="all", + total=F) { + # List of classes + if("all" %in% classselect) { + classselect<-levels(journ$Class) + } + # Set up data frame + net.class.out<-data.frame(Class=character(), + Net=numeric(), + stringsAsFactors=FALSE) + # Loop through classes, calculate net, and add to data frame + for (i in 1:length(classselect)) { + net.class.out[i,] <- c(classselect[i], + net(journ, + classselect=classselect[i], + accselect=accselect, + dates="all")) + } + # Add total net row + if(total) { + net.class.out[nrow(net.class.out)+1,]<-c("Total",net(journal)) + } + return(net.class.out) +} \ No newline at end of file diff --git a/working.Rmd b/working.Rmd index e4c4e2c..9772619 100644 --- a/working.Rmd +++ b/working.Rmd @@ -35,92 +35,6 @@ journal$Account<-as.factor(journal$Account) journal$Debit<-as.numeric(sub(",","",journal$Debit)) journal$Credit<-as.numeric(sub(",","",journal$Credit)) -## Temp function location -# TODO https://github.com/mattbk/ledgerr/issues/1 -########## net() function, takes journal, class name(s), and date range as arguments -net<-function(journ,classselect="all",accselect="all",dates="all"){ - if("all" %in% classselect) { - classselect<-levels(journ$Class) - } - if("all" %in% accselect) { - accselect<-levels(journ$Account) - } - if("all" %in% dates) { - dates<-c(min(journ$Date),max(journ$Date)) - } - net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], - na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], - na.rm=T) - return(net) -} -########## - -########## Net table by class -net.class<-function(journ, - classselect="all", - accselect="all", - dates="all", - total=F) { -# List of classes - if("all" %in% classselect) { - classselect<-levels(journ$Class) - } -# Set up data frame -net.class.out<-data.frame(Class=character(), - Net=numeric(), - stringsAsFactors=FALSE) -# Loop through classes, calculate net, and add to data frame -for (i in 1:length(classselect)) { - net.class.out[i,] <- c(classselect[i], - net(journ, - classselect=classselect[i], - accselect=accselect, - dates="all")) - } -# Add total net row -if(total) { - net.class.out[nrow(net.class.out)+1,]<-c("Total",net(journal)) - } -return(net.class.out) -} -########## - -########## Net table by account -net.acc<-function(journ, - classselect="all", - accselect="all", - dates="all", - total=F) { -# List of classes - need to do this here before passing to net() - if("all" %in% accselect) { - accselect<-unique(journ$Account) - } -# Set up data frame -net.acc.out<-data.frame(Account=character(), - Net=numeric(), - stringsAsFactors=FALSE) -# Loop through accounts, calculate net, and add to data frame -for (i in 1:length(accselect)) { - net.acc.out[i,] <- c(as.character(accselect[i]), - net(journ, - classselect=classselect, - accselect=accselect[i], - dates=dates)) -} -# Sort by account name -net.acc.out<-net.acc.out[order(net.acc.out$Account) , ] -# Add total net row -if(total) { - net.acc.out[nrow(net.acc.out)+1,]<-c("Total",net(journal)) - } -return(net.acc.out) -} -########## - - - - - # See other reports in QB and Ledger ``` \ No newline at end of file