Amazon-MWS

 view release on metacpan or  search on metacpan

lib/Amazon/MWS/XML/Product.pm  view on Meta::CPAN

=item search_terms

An (optional) arrayref of search terms (max 5)

=item features

An (optional) arrayref of strings with features (max 5)

=item condition

Possible values which validates correctly: Club CollectibleAcceptable
CollectibleGood CollectibleLikeNew CollectibleVeryGood New Refurbished
UsedAcceptable UsedGood UsedLikeNew UsedVeryGood

Defaults to C<New>

=item condition_note

An arbitrary string shorter than 2000 characters with comments about
the condition.

lib/Amazon/MWS/XML/Product.pm  view on Meta::CPAN

has inventory => (is => 'rw',
                  default => sub { '0' },
                  isa => Int);

has ship_in_days => (is => 'ro',
                     isa => Int,
                     default => sub { '2' });

has price => (is => 'ro',
              required => 1,
              isa => \&_validate_price);

sub _validate_price {
    my ($price) = @_;
    die "$price is not a number" unless is_Num($price);
    die "$price is negative" if $price < 0;
}


has sale_price => (is => 'ro',
                   isa => \&_validate_price);

has sale_start => (is => 'ro',
                   isa => sub {
                       die "Not a datetime"
                         unless $_[0]->isa('DateTime');
                   });

has sale_end => (is => 'ro',
                   isa => sub {
                       die "Not a datetime"

lib/Amazon/MWS/XML/ShippedOrder.pm  view on Meta::CPAN

use DateTime;
use DateTime::Format::ISO8601;
use Moo;

=head1 NAME

Amazon::MWS::XML::ShippedOrder

=head1 DESCRIPTION

Class to validate and generate a shipping confirmation feed. While
L<Amazon::MWS::XML::Order> is meant to be used to parse the response,
this is meant to produce the XML, generating a structure suitable to
satisfy the Amazon XSD.

=head1 SYNOPSIS

 my $shipped = Amazon::MWS::XML::ShippedOrder->new(....); # see below the accessors
 print Dumper($shipped->as_shipping_confirmation_hashref);

=head1 CONSTRUCTOR ARGUMENTS/ACCESSORS

lib/Amazon/MWS/XML/ShippedOrder.pm  view on Meta::CPAN

                             my $dt = $_[0];
                             die "Not a DateTime object"
                               unless ref($dt) && $dt->isa('DateTime');
                         },
                         default => sub { DateTime->now(time_zone => 'Europe/Berlin')},
                        );
has carrier => (is => 'ro', required => 1);
has shipping_method => (is => 'ro');
has shipping_tracking_number => (is => 'ro');
has items => (is => 'ro',
              isa => \&_validate_items,
              required => 1,
             );

sub _validate_items {
    my $items = $_[0];
    die "items should be an hashref"
      unless ($items and ref($items) eq 'ARRAY');
    foreach my $item (@$items) {
        die "An item passed is not an hashref"
          unless ($item and ref($item) eq 'HASH');

        die "An item is missing amazon_order_item_code or merchant_order_item_code"
          unless
            $item->{amazon_order_item_code} || $item->{merchant_order_item_code};

lib/Amazon/MWS/XML/ShippedOrder.pm  view on Meta::CPAN

    foreach my $item (@{ $self->items }) {
        my %item_struct;
        # precedence to amazon order item
        if ($item->{amazon_order_item_code}) {
            $item_struct{AmazonOrderItemCode} = $item->{amazon_order_item_code};
        }
        elsif ($item->{merchant_order_item_code}) {
            $item_struct{MerchantOrderItemID} = $item->{merchant_order_item_code};
        }
        else {
            die "This shouldn't happen, item was validated";
        }
        if ($item->{merchant_fulfillment_item_id}) {
            $item_struct{MerchantFulfillmentItemID} = $item->{merchant_fulfillment_item_id};
        }
        # more items and partial shipping
        if ($item->{quantity}) {
            $item_struct{Quantity} = $item->{quantity};
        }
        push @items, \%item_struct;
    }

t/shipping-confirmation.t  view on Meta::CPAN

                          # amazon_order_item_code => '4444',
                          merchant_order_item_code => '5555',
                          merchant_fulfillment_item_id => '6666',
                          quantity => 3,
                         }
                        ],
              );

my $shipped_order = Amazon::MWS::XML::ShippedOrder->new(%shipped);

ok($shipped_order, "constructor validates");

is_deeply($shipped_order->as_shipping_confirmation_hashref,
          {
           MerchantOrderID => 8888888,
           MerchantFulfillmentID => '666666',
           FulfillmentDate => '2014-11-14T11:11:00+01:00',
           FulfillmentData => {
                               CarrierCode => 'UPS',
                               ShippingMethod => 'Second Day',
                               ShipperTrackingNumber => '123412341234',

t/shipping-confirmation.t  view on Meta::CPAN

                                          access_key_id => '12341234',
                                          secret_key => '123412341234',
                                          marketplace_id => '123412341234',
                                          endpoint => 'https://mws-eu.amazonservices.com',
                                          feed_dir => $feed_dir,
                                          schema_dir => $schema_dir,
                                          );
ok($uploader, "Uploader ok");

my $feed = $uploader->shipping_confirmation_feed($shipped_order);
ok($feed, "Can create the feed and validates against the schema"); # and diag $feed;

# test against the example provided in the documentation


my $expected = <<'XML';
<?xml version="1.0" encoding="UTF-8"?>
<AmazonEnvelope>
  <Header>
    <DocumentVersion>1.1</DocumentVersion>
    <MerchantIdentifier>My Store</MerchantIdentifier>



( run in 0.481 second using v1.01-cache-2.11-cpan-a5abf4f5562 )