The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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