NAME
Shipment::Base
VERSION
version 3.10
SYNOPSIS
This module does not DO anything, but can be extended to create a real interface for a shipping service.
package Shipment::SomeShippingService;
use Moose;
extends 'Shipment::Base';
sub ship {
# routine to ship something somewhere via some shipping service
}
no Moose;
which can then be used to actually DO stuff:
use Shipment::SomeShippingService;
use Shipment::Address;
use Shipment::Package;
my $shipment = Shipment::SomeShippingService->new(
from_address => Shipment::Address->new( ... ),
to_address => Shipment::Address->new( ... ),
packages => [ Shipment::Package->new( ... ), ],
);
$shipment->ship( 'ground' );
NAME
Shipment::Base - base class for a shipping module
ABOUT
This is a base class for a shipping service such as UPS or FedEx.
Class Attributes
from_address, to_address
Where the shipment is being shipped from and to
type: Shipment::Address
account
The shipper's account number
type: String
bill_account
The billing account number
type: String
defaults to the account
bill_address
The billing address (typically not needed)
type: Shipment::Address
bill_type
Who to bill for the shipment (sender, recipient, third_party)
type: BillingOptions
default: sender
pickup_type
Whether the shipment will be picked up or dropped off (most shipping services have multiple pickup options)
type: PickupOptions
default: pickup
printer_type
Defines the kind of label that will be generated (i.e. pdf, thermal, image)
type: Str
default: pdf
signature_type
Whether a signature confirmation is required, and what type (default, required, not_required, adult)
type: SignatureOptions
default: default (the default setting for the chosen service)
package_type
The type of packaging used (custom, envelope, tube, box, pack)
type: PackageOptions
default: custom
packages
The list of individual packages being shipped
type: ArrayRef[Shipment::Package]
methods handled: all_packages # returns a list of Shipment::Package get_package(index) # returns a Shipment::Package add_package(Shipment::Package) count_packages # returns the number of packages
weight_unit, dim_unit
What units we're dealing with for weight and dimensions (lb, kg and in, cm)
default: lb, in (pounds and inches)
currency
What currency we're dealing with (USD,CAD, etc)
default: USD
insured_value
The total value of the shipment to be insured
type: Data::Currency
goods_value
The total value of the shipment
type: Data::Currency
pickup_date
When the shipment will be ready for pickup
type: DateAndTime
services
The available services
type: HashRef[Shipment::Service]
methods handled: all_services # returns a list of Shipment::Service
service
Details of what was returned from a call to rate
type: Shipment::Service
tracking_id
The tracking_id returned from a call to ship OR the tracking_id to be used in a call to cancel or track
type: String
activities
The tracking activities returned from a call to track
status, ship_date
most recent tracking status
ship_date is when the shipment was passed off to the carrier, set by a call to track
documents
All documents for a shipment including all labels
type: Shipment::Label
manifest
The manifest document (usually generated by an end of day close, but may also be generated on a per shipment basis)
type: Shipment::Label
debug
turn debugging on
1 == warnings for notices and errors
>1 == warnings for raw response xml
error
The last error generated by a method. Should only be non-empty if a method was unsuccessful.
type: String
notice
The last warning/alert/notice generated by a method.
type: String
references
The references for the shipment
type: ArrayRef[String]
methods handled: all_references get_reference(index) add_reference($reference) count_references # returns the number of reference strings
special_instructions
Special Delivery Instructions
type: String
carbon_offset
If available, add a carbon offset charge for the shipment
type: Bool
Class Methods
_build_services
The routine which compiles a list of available shipping services for from and to addresses.
foreach my $service ( $shipment->all_services ) {
print $service->name . "\n";
}
Standard services - ground, express, priority - can be mapped to actual service id's
print $shipment->services->{ground}->id . "\n";
rate
The routine that fetches a detailed rate for a given service type
$shipment->rate( 'ground' );
print $shipment->service->cost . "\n";
print $shipment->service->etd . "\n";
ship
The routine that creates a shipment/label
$shipment->ship( 'ground' );
$shipment->get_package(0)->label->save;
return
The routine that creates a return shipment
$shipment->return( 'ground' );
cancel
The routine that cancels a shipment
$shipment->tracking_id( '12345' );
$shipment->cancel;
end_of_day
The routine that runs end of day close
$shipment->end_of_day;
track
The routine that fetches tracking information
$shipment->tracking_id( '12345' );
$shipment->track;
coerce_datetime
In the pre-Moo era Shipment used MooseX::Types::DateTime::ButMaintained for DateTime types but now we use MooX::Types::MooseLike::DateTime which does not do coercion for us.
This method provides coercion for DateTime/DateAndTime types in the way existing code expects it to work so we don't break anything.
AUTHOR
Andrew Baerg @ <andrew at pullingshots dot ca>
http://pullingshots.ca/
BUGS
Issues can be submitted at https://github.com/pullingshots/Shipment/issues
COPYRIGHT
Copyright (C) 2016 Andrew J Baerg, All Rights Reserved
NO WARRANTY
Absolutely, positively NO WARRANTY, neither express or implied, is offered with this software. You use this software at your own risk. In case of loss, no person or entity owes you anything whatsoever. You have been warned.
LICENSE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Andrew Baerg <baergaj@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2018 by Andrew Baerg.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.