#===================================================================== # # 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;