=head1 NAME
Business::Shipping::USPS_Online::Package
=head1 METHODS
=head2 container
Default 'None'.
=head2 size
Default 'Regular'.
=head2 machinable
Default 'False'.
=head2 mail_type
Default 'Package'.
=head2 pounds
=head2 ounces
=cut
use version; our $VERSION = qv('400');
has 'container' => (is => 'rw', default => undef);
has 'size' => (is => 'rw', default => 'Regular');
has 'machinable' => (is => 'rw', default => undef);
has 'mail_type' => (is => 'rw', default => 'Package');
has 'ounces' => (is => 'rw', default => '0.00');
has 'pounds' => (is => 'rw', default => '0.00');
has 'width' => (is => 'rw', default => '');
has 'height' => (is => 'rw', default => '');
has 'length' => (is => 'rw', default => '');
has 'girth' => (is => 'rw', default => '');
__PACKAGE__->meta()->make_immutable();
=head2 weight
Overrides the standard weight definition so that it can correctly set pounds &
ounces.
=cut
sub weight {
my ($self, $in_weight) = @_;
trace('()');
if ($in_weight) {
$self->set_lbs_oz($in_weight);
}
# Convert back to 'weight' (i.e. one number) when returning.
my $out_weight = $self->lbs_oz_to_weight;
return $out_weight;
}
=head2 set_lbs_oz
Set pounds and ounces. Converts from fractional pounds.
=cut
sub set_lbs_oz {
my ($self, $in_weight) = @_;
my $pounds = 0;
my $ounces = 0;
$pounds = int $in_weight;
my $remainder = $in_weight - $pounds;
# For some weights (e.g. 2.4), this is necessary.
$remainder = 0 if $remainder < 0;
if ($remainder) {
$ounces = $remainder * 16;
$ounces = sprintf("%1.0f", $ounces);
}
$self->pounds($pounds);
$self->ounces($ounces);
return;
}
=head2 lbs_oz_to_weight
Converts pounds + ounces to fractional weight. Returns weight.
,
=cut
sub lbs_oz_to_weight {
my ($self) = @_;
trace '()';
my $pounds = $self->pounds || 0;
my $ounces = $self->ounces || 0;
my $fractional_pounds = $ounces ? ($ounces / 16) : 0;
my $weight = ($pounds + $fractional_pounds);
return $weight;
}
1;
__END__
=head1 AUTHOR
Daniel Browning, db@kavod.com, L<http://www.kavod.com/>
=head1 COPYRIGHT AND LICENCE
Copyright 2003-2011 Daniel Browning <db@kavod.com>. All rights reserved.
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself. See LICENSE for more info.
=cut