File Coverage

blib/lib/Amazon/MWS/XML/OrderlineItem.pm
Criterion Covered Total %
statement 19 30 63.3
branch 1 4 25.0
condition 1 4 25.0
subroutine 8 14 57.1
pod 11 11 100.0
total 40 63 63.4


line stmt bran cond sub pod time code
1             package Amazon::MWS::XML::OrderlineItem;
2              
3 7     7   68 use strict;
  7         19  
  7         243  
4 7     7   43 use warnings;
  7         20  
  7         225  
5 7     7   43 use Moo;
  7         197  
  7         49  
6              
7              
8             =head1 ACCESSORS (they map the XML data)
9              
10             =over 4
11              
12             =item PromotionDiscount
13              
14             =item Title
15              
16             =item OrderItemId
17              
18             =item ASIN
19              
20             =item GiftWrapPrice
21              
22             =item GiftWrapTax
23              
24             =item SellerSKU
25              
26             =item ShippingPrice
27              
28             =item ShippingTax
29              
30             =item ShippingDiscount
31              
32             =item ItemTax
33              
34             =item ConditionId
35              
36             =item ItemPrice
37              
38             =item ConditionSubtypeId
39              
40             =item QuantityShipped
41              
42             =item QuantityOrdered
43              
44             =back
45              
46             =cut
47              
48             has PromotionDiscount => (is => 'ro',
49             isa => sub { die unless ref($_[0]) eq 'HASH'});
50              
51             has Title => (is => 'ro');
52              
53             has OrderItemId => (is => 'ro');
54              
55             has ASIN => (is => 'ro');
56              
57             has GiftWrapPrice => (is => 'ro',
58             isa => sub { die unless ref($_[0]) eq 'HASH'});
59              
60             has GiftWrapTax => (is => 'ro',
61             isa => sub { die unless ref($_[0]) eq 'HASH'});
62              
63             has SellerSKU => (is => 'ro');
64              
65             has ShippingPrice => (is => 'ro',
66             isa => sub { die unless ref($_[0]) eq 'HASH'});
67              
68             has ShippingTax => (is => 'ro',
69             isa => sub { die unless ref($_[0]) eq 'HASH'});
70              
71             has ShippingDiscount => (is => 'ro',
72             isa => sub { die unless ref($_[0]) eq 'HASH'});
73              
74             has ItemTax => (is => 'ro',
75             isa => sub { die unless ref($_[0]) eq 'HASH'});
76              
77             has ConditionId => (is => 'ro');
78              
79             has ItemPrice => (is => 'ro',
80             isa => sub { die unless ref($_[0]) eq 'HASH'});
81              
82             has ConditionSubtypeId => (is => 'ro');
83              
84             has QuantityShipped => (is => 'ro');
85             has QuantityOrdered => (is => 'ro');
86              
87             =head2 amazon_order_item
88              
89             The amazon id for the given item (read-only)
90              
91             =head2 remote_shop_order_item
92              
93             Alias for C<amazon_order_item>
94              
95             =head2 merchant_order_item
96              
97             Our id (read-write).
98              
99             =head2 currency
100              
101             The currency code.
102              
103             =cut
104              
105             has merchant_order_item => (is => 'rw');
106              
107             sub amazon_order_item {
108 2     2 1 10 return shift->OrderItemId;
109             }
110              
111             sub remote_shop_order_item {
112 1     1 1 3 return shift->amazon_order_item;
113             }
114              
115              
116             sub currency {
117 0     0 1 0 return shift->ItemPrice->{CurrencyCode};
118             }
119              
120             =head2 price
121              
122             Amazon report the item price's as the sum of the items, not the
123             individual price. So we have to do a division for what we know as the
124             item's price. This looks ugly anyway.
125              
126             From
127             L<http://docs.developer.amazonservices.com/en_US/orders/2013-09-01/Orders_ListOrderItems.html>:
128              
129             The selling price of the order item. Note that an order item is an
130             item and a quantity. This means that the value of ItemPrice is equal
131             to the selling price of the item multiplied by the quantity ordered.
132             Note that ItemPrice excludes ShippingPrice and GiftWrapPrice.
133              
134             =cut
135              
136             sub price {
137 2     2 1 2033 my $self = shift;
138 2         5 return sprintf('%.2f', $self->subtotal / $self->quantity);
139             }
140              
141             =head2 shipping
142              
143             The ShippingPrice amount.
144              
145             =head2 subtotal
146              
147             The price of the items for the given quantity (see above, C<price>).
148              
149             =cut
150              
151             sub shipping {
152 0     0 1 0 my $self = shift;
153 0         0 my $shipping = 0;
154 0 0       0 if (my $price = $self->ShippingPrice) {
155 0   0     0 $shipping = $price->{Amount} || 0;
156             }
157 0         0 return sprintf('%.2f', $shipping);
158             }
159              
160             =head2 as_ack_orderline_item_hashref
161              
162             Return an hashref suitable for the building of an ack order feed.
163              
164             =cut
165              
166             =head2 Aliases
167              
168             =over 4
169              
170             =item sku (SellerSKU)
171              
172             =item asin (ASIN)
173              
174             =item quantity (QuantityOrdered)
175              
176             =item name (Title)
177              
178             =back
179              
180              
181             =cut
182              
183             sub sku {
184 0     0 1 0 return shift->SellerSKU;
185             }
186             sub asin {
187 0     0 1 0 return shift->ASIN;
188             }
189              
190             sub quantity {
191 2     2 1 20 return shift->QuantityOrdered;
192             }
193              
194             sub name {
195 0     0 1 0 return shift->Title;
196             }
197              
198             sub subtotal {
199 3     3 1 28 my $self = shift;
200 3         6 my $amount = 0;
201 3 50       15 if (my $price = $self->ItemPrice) {
202 3   50     12 $amount = $price->{Amount} || 0;
203             }
204 3         52 return sprintf('%.2f', $amount);
205             }
206              
207             sub as_ack_orderline_item_hashref {
208 0     0 1   my $self = shift;
209             return {
210 0           AmazonOrderItemCode => $self->amazon_order_item,
211             MerchantOrderItemID => $self->merchant_order_item,
212             };
213             }
214              
215              
216             1;