diff options
Diffstat (limited to 'LedgerSMB/Taxes')
-rwxr-xr-x | LedgerSMB/Taxes/Simple.pm | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/LedgerSMB/Taxes/Simple.pm b/LedgerSMB/Taxes/Simple.pm new file mode 100755 index 00000000..57777be4 --- /dev/null +++ b/LedgerSMB/Taxes/Simple.pm @@ -0,0 +1,64 @@ +#===================================================================== +# +# Simple Tax support module for LedgerSMB +# Taxes::Simple +# Default simple tax application +# +# LedgerSMB +# Small Medium Business Accounting software +# http://www.ledgersmb.org/ +# +# +# Copyright (C) 2006 +# This work contains copyrighted information from a number of sources all used +# with permission. It is released under the GNU General Public License +# Version 2 or, at your option, any later version. See COPYRIGHT file for +# details. +# +# +#====================================================================== +# This package contains tax related functions: +# +# calculate_tax - calculates tax on subtotal +# apply_tax - sets $value to the tax value for the subtotal +# extract_tax - sets $value to the tax value on a tax-included subtotal +# +#==================================================================== +package Taxes::Simple; + +use Class::Struct; +use Math::BigFloat; + +struct Taxes::Simple => { + taxnumber => '$', + description => '$', + rate => 'Math::BigFloat', + chart => '$', + account => '$', + value => 'Math::BigFloat', + pass => '$' +}; + +sub calculate_tax { + my ($self, $form, $subtotal, $extract, $passrate) = @_; + my $rate = $self->rate; + my $tax = $subtotal * $rate / (Math::BigFloat->bone() + $passrate); + $tax = $subtotal * $rate if not $extract; + return $tax; +} + +sub apply_tax { + my ($self, $form, $subtotal) = @_; + my $tax = $self->calculate_tax($form, $subtotal, 0); + $self->value($tax); + return $tax; +} + +sub extract_tax { + my ($self, $form, $subtotal, $passrate) = @_; + my $tax = $self->calculate_tax($form, $subtotal, 1, $passrate); + $self->value($tax); + return $tax; +} + +1; |