diff --git a/ledgerr.Rproj b/ledgerr.Rproj index d063e8b..d6ff804 100644 --- a/ledgerr.Rproj +++ b/ledgerr.Rproj @@ -11,3 +11,9 @@ Encoding: UTF-8 RnwWeave: knitr LaTeX: pdfLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackagePath: ledgerr +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace 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..2c64ae6 --- /dev/null +++ b/ledgerr/DESCRIPTION @@ -0,0 +1,12 @@ +Package: ledgerr +Title: R Functions For Bookkeeping +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 +RoxygenNote: 5.0.1.9000 diff --git a/ledgerr/NAMESPACE b/ledgerr/NAMESPACE new file mode 100644 index 0000000..e6f4cb7 --- /dev/null +++ b/ledgerr/NAMESPACE @@ -0,0 +1,5 @@ +# Generated by roxygen2: do not edit by hand + +export(net) +export(net.acc) +export(net.class) diff --git a/ledgerr/R/net.R b/ledgerr/R/net.R new file mode 100644 index 0000000..70925e8 --- /dev/null +++ b/ledgerr/R/net.R @@ -0,0 +1,29 @@ +#' Calculate net +#' +#' This function reads in your journal, subsets it according to queries, and calculates net. +#' @param journ Journal dataframe +#' @param classselect Which classes to include. c("class1","class2",...). Defaults to "all". +#' @param accselect Which accounts to include. c("class1","class2",...). Defaults to "all". +#' @param dates Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all". +#' @keywords net +#' @export +#' @examples +#' net() +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..d679607 --- /dev/null +++ b/ledgerr/R/net.acc.R @@ -0,0 +1,40 @@ +#' Calculate net per account and present as a table +#' +#' This function reads in your journal, subsets it according to queries, calculates net for each account, and prints a table.. +#' @param journ Journal dataframe +#' @param classselect Which classes to include. c("class1","class2",...). Defaults to "all". +#' @param accselect Which accounts to include. c("class1","class2",...). Defaults to "all". +#' @param dates Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all". +#' @keywords net account +#' @export +#' @examples +#' net.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) +} \ 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..11f1359 --- /dev/null +++ b/ledgerr/R/net.class.R @@ -0,0 +1,38 @@ +#' Calculate net per class and present as a table +#' +#' This function reads in your journal, subsets it according to queries, calculates net for each class, and prints a table.. +#' @param journ Journal dataframe +#' @param classselect Which classes to include. c("class1","class2",...). Defaults to "all". +#' @param accselect Which accounts to include. c("class1","class2",...). Defaults to "all". +#' @param dates Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all". +#' @keywords net class +#' @export +#' @examples +#' net.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) +} \ No newline at end of file diff --git a/ledgerr/man/net.Rd b/ledgerr/man/net.Rd new file mode 100644 index 0000000..e9a26bc --- /dev/null +++ b/ledgerr/man/net.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/net.R +\name{net} +\alias{net} +\title{Calculate net} +\usage{ +net(journ, classselect = "all", accselect = "all", dates = "all") +} +\arguments{ +\item{journ}{Journal dataframe} + +\item{classselect}{Which classes to include. c("class1","class2",...). Defaults to "all".} + +\item{accselect}{Which accounts to include. c("class1","class2",...). Defaults to "all".} + +\item{dates}{Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all".} +} +\description{ +This function reads in your journal, subsets it according to queries, and calculates net. +} +\examples{ +net() +} +\keyword{net} + diff --git a/ledgerr/man/net.acc.Rd b/ledgerr/man/net.acc.Rd new file mode 100644 index 0000000..ef9b09e --- /dev/null +++ b/ledgerr/man/net.acc.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/net.acc.R +\name{net.acc} +\alias{net.acc} +\title{Calculate net per account and present as a table} +\usage{ +net.acc(journ, classselect = "all", accselect = "all", dates = "all", + total = F) +} +\arguments{ +\item{journ}{Journal dataframe} + +\item{classselect}{Which classes to include. c("class1","class2",...). Defaults to "all".} + +\item{accselect}{Which accounts to include. c("class1","class2",...). Defaults to "all".} + +\item{dates}{Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all".} +} +\description{ +This function reads in your journal, subsets it according to queries, calculates net for each account, and prints a table.. +} +\examples{ +net.account() +} +\keyword{account} +\keyword{net} + diff --git a/ledgerr/man/net.class.Rd b/ledgerr/man/net.class.Rd new file mode 100644 index 0000000..5cacaff --- /dev/null +++ b/ledgerr/man/net.class.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/net.class.R +\name{net.class} +\alias{net.class} +\title{Calculate net per class and present as a table} +\usage{ +net.class(journ, classselect = "all", accselect = "all", dates = "all", + total = F) +} +\arguments{ +\item{journ}{Journal dataframe} + +\item{classselect}{Which classes to include. c("class1","class2",...). Defaults to "all".} + +\item{accselect}{Which accounts to include. c("class1","class2",...). Defaults to "all".} + +\item{dates}{Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all".} +} +\description{ +This function reads in your journal, subsets it according to queries, calculates net for each class, and prints a table.. +} +\examples{ +net.class() +} +\keyword{class} +\keyword{net} + 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