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