<?php namespace Xentral\Modules\AmazonVendorDF\Data; class PurchaseOrderItem { /** @var string */ private $itemSequenceNumber; /** @var string */ private $buyerProductIdentifier; /** @var string */ private $vendorProductIdentifier; /** @var string */ private $title; /** @var Quantity */ private $quantity; /** @var Price */ private $price; /** @var float */ private $taxRate; public function __construct( string $itemSequenceNumber, string $buyerProductIdentifier, string $vendorProductIdentifier, string $title, Quantity $quantity, Price $price, float $taxRate ) { $this->itemSequenceNumber = $itemSequenceNumber; $this->buyerProductIdentifier = $buyerProductIdentifier; $this->vendorProductIdentifier = $vendorProductIdentifier; $this->title = $title; $this->quantity = $quantity; $this->price = $price; $this->taxRate = $taxRate; } public function getItemSequenceNumber(): string { return $this->itemSequenceNumber; } public function getBuyerProductIdentifier(): string { return $this->buyerProductIdentifier; } public function getVendorProductIdentifier(): string { return $this->vendorProductIdentifier; } public function setVendorProductIdentifier(string $vendorProductIdentifier): void { $this->vendorProductIdentifier = $vendorProductIdentifier; } public function getQuantity(): Quantity { return $this->quantity; } public function getPrice(): Price { return $this->price; } public function getTitle(): string { return $this->title; } public function getTaxRate(): float { return $this->taxRate; } public function reject(string $code): AcknowledgementItem { return new AcknowledgementItem($this, $code); } public function accept(): AcknowledgementItem { return new AcknowledgementItem($this, AcknowledgementItem::CODE_ACCEPTED); } public static function fromPurchaseOrderResponse(array $data): self { return new static( $data['itemSequenceNumber'], $data['buyerProductIdentifier'], $data['vendorProductIdentifier'], $data['title'], Quantity::fromArray($data['orderedQuantity']), new Price($data['netPrice']['currencyCode'], $data['netPrice']['amount']), (float)$data['taxDetails']['taxLineItem'][0]['taxRate'] ); } }