@ -11,3 +11,9 @@ Encoding: UTF-8
|
|||||||
|
|
||||||
RnwWeave: knitr
|
RnwWeave: knitr
|
||||||
LaTeX: pdfLaTeX
|
LaTeX: pdfLaTeX
|
||||||
|
|
||||||
|
BuildType: Package
|
||||||
|
PackageUseDevtools: Yes
|
||||||
|
PackagePath: ledgerr
|
||||||
|
PackageInstallArgs: --no-multiarch --with-keep.source
|
||||||
|
PackageRoxygenize: rd,collate,namespace
|
||||||
|
2
ledgerr/.Rbuildignore
Normal file
2
ledgerr/.Rbuildignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
^.*\.Rproj$
|
||||||
|
^\.Rproj\.user$
|
3
ledgerr/.gitignore
vendored
Normal file
3
ledgerr/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.Rproj.user
|
||||||
|
.Rhistory
|
||||||
|
.RData
|
12
ledgerr/DESCRIPTION
Normal file
12
ledgerr/DESCRIPTION
Normal file
@ -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
|
5
ledgerr/NAMESPACE
Normal file
5
ledgerr/NAMESPACE
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Generated by roxygen2: do not edit by hand
|
||||||
|
|
||||||
|
export(net)
|
||||||
|
export(net.acc)
|
||||||
|
export(net.class)
|
29
ledgerr/R/net.R
Normal file
29
ledgerr/R/net.R
Normal file
@ -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)
|
||||||
|
}
|
40
ledgerr/R/net.acc.R
Normal file
40
ledgerr/R/net.acc.R
Normal file
@ -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)
|
||||||
|
}
|
38
ledgerr/R/net.class.R
Normal file
38
ledgerr/R/net.class.R
Normal file
@ -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)
|
||||||
|
}
|
25
ledgerr/man/net.Rd
Normal file
25
ledgerr/man/net.Rd
Normal file
@ -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}
|
||||||
|
|
27
ledgerr/man/net.acc.Rd
Normal file
27
ledgerr/man/net.acc.Rd
Normal file
@ -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}
|
||||||
|
|
27
ledgerr/man/net.class.Rd
Normal file
27
ledgerr/man/net.class.Rd
Normal file
@ -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}
|
||||||
|
|
86
working.Rmd
86
working.Rmd
@ -35,92 +35,6 @@ journal$Account<-as.factor(journal$Account)
|
|||||||
journal$Debit<-as.numeric(sub(",","",journal$Debit))
|
journal$Debit<-as.numeric(sub(",","",journal$Debit))
|
||||||
journal$Credit<-as.numeric(sub(",","",journal$Credit))
|
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
|
# See other reports in QB and Ledger
|
||||||
|
|
||||||
```
|
```
|
Reference in New Issue
Block a user