NAME
Business::Price - Handles prices with tax and discount
VERSION
version 1.000_1
SYNOPSIS
use Business::Price;
my $price = Business::Price->new( value => 10, tax => 0.1, discount => 0.5 );
is( $price->full, 11 );
is( $price->full->discounted, 5.5 );
ATTRIBUTES
value ( Num )
Required
The object stringifies to this attribute.
discount ( Num | ArrayRef | HashRef | CodeRef )
Default: 0
tax ( Num )
Default: 0
Defines the tax rate. Valid values are from 0 to 1 (excluded).
incl ( Bool )
Default: 0
Specifies whether value includes tax or not.
METHODS
Methods will always return a new Business::Price object. It stringifies to value and you can do math on those object since it uses overload.
my $price = Business::Price->new( value => 10 );
ok( $price->isa('Business::Price') );
is( $price, 10 );
is( $price / 2, 5 );
net
Returns an object with the net price applied (i.e. without tax).
my $price = Business::Price->new( value => 1.1, tax => 0.1, incl => 1);
is( $price->net, 1 );
full
Returns an object with the full price applied (i.e. tax applied).
my $price = Business::Price->new( value => 1, tax => 0.1 );
is( $price->full, 1.1 );
discounted ( Any )
Discount the price by the format defined in discount.
my $price = Business::Price->new( value => 1, discount => 0.5 );
is( $price->discounted, 0.5 );
is( $price->discounted->discounted, 0.25 );
my $price = Business::Price->new(
value => 1,
discount => sub {
my ( $self, $is_reseller ) = @_;
return $is_reseller ? $self / 2 : $self;
}
);
is( $price->discounted(0), 1 );
is( $price->discounted(1), 0.5 );
clone ( Hash )
Clone the object. Any parameters overwrite the object's attributes.
my $price_excl = Business::Price->new( value => 1, incl => 0 );
my $price_incl = $price->clone( incl => 1 );
SEE ALSO
Business::Tax::Canada, Business::Tax::VAT, Moose
AUTHOR
Moritz Onken <onken@netcubed.de>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2010 by Moritz Onken.
This is free software, licensed under:
The (three-clause) BSD License