Skip to content

Commit

Permalink
ConfirmationRequest (#42)
Browse files Browse the repository at this point in the history
* More ConfirmationRequest model

* no need for UnitOfMeasure

* More ConfirmationRequest model

* +confirmID
  • Loading branch information
mathielen authored Feb 26, 2025
1 parent e0e549f commit 18ca30c
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 28 deletions.
41 changes: 41 additions & 0 deletions src/CXml/Model/ConfirmationItem.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace CXml\Model;

use JMS\Serializer\Annotation as Serializer;

#[Serializer\AccessorOrder(order: 'custom', custom: ['quantity', 'lineNumber', 'unitOfMeasure', 'confirmationStatus'])]
class ConfirmationItem
{
public function __construct(
#[Serializer\XmlAttribute]
#[Serializer\SerializedName('quantity')]
public readonly int $quantity,
#[Serializer\XmlAttribute]
public readonly int $lineNumber,
#[Serializer\SerializedName('UnitOfMeasure')]
#[Serializer\XmlElement(cdata: false)]
public readonly string $unitOfMeasure,
/**
* @var ConfirmationStatus[]
*/
#[Serializer\XmlList(entry: 'ConfirmationStatus', inline: true)]
#[Serializer\Type('array<CXml\Model\ConfirmationStatus>')]
public array $confirmationStatus = [],
) {
}

public static function create(int $quantity, int $lineNumber, string $unitOfMeasure): self
{
return new self($quantity, $lineNumber, $unitOfMeasure);
}

public function addConfirmationStatus(ConfirmationStatus $confirmationStatus): self
{
$this->confirmationStatus[] = $confirmationStatus;

return $this;
}
}
43 changes: 43 additions & 0 deletions src/CXml/Model/ConfirmationStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

declare(strict_types=1);

namespace CXml\Model;

use Assert\Assertion;
use CXml\Model\Request\ConfirmationHeader;
use DateTimeInterface;
use JMS\Serializer\Annotation as Serializer;

#[Serializer\AccessorOrder(order: 'custom', custom: ['quantity', 'type', 'shipmentDate', 'deliveryDate', 'unitOfMeasure', 'itemIn'])]
readonly class ConfirmationStatus
{
public function __construct(
#[Serializer\XmlAttribute]
#[Serializer\SerializedName('quantity')]
public int $quantity,
#[Serializer\SerializedName('UnitOfMeasure')]
#[Serializer\XmlElement(cdata: false)]
public string $unitOfMeasure,
#[Serializer\SerializedName('ItemIn')]
#[Serializer\XmlElement(cdata: false)]
private ItemIn $itemIn,
#[Serializer\XmlAttribute]
public ?DateTimeInterface $shipmentDate = null,
#[Serializer\XmlAttribute]
public ?DateTimeInterface $deliveryDate = null,
#[Serializer\SerializedName('type')]
#[Serializer\XmlAttribute]
public string $type = ConfirmationHeader::TYPE_ACCEPT,
) {
Assertion::inArray($type, [
ConfirmationHeader::TYPE_ACCEPT,
ConfirmationHeader::TYPE_ALLDETAIL,
ConfirmationHeader::TYPE_DETAIL,
ConfirmationHeader::TYPE_BACKORDERED,
ConfirmationHeader::TYPE_REJECT,
ConfirmationHeader::TYPE_REQUESTTOPAY,
ConfirmationHeader::TYPE_UNKNOWN,
]);
}
}
8 changes: 3 additions & 5 deletions src/CXml/Model/InventoryQuantity.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@

readonly class InventoryQuantity
{
#[Serializer\SerializedName('UnitOfMeasure')]
public UnitOfMeasure $unitOfMeasure;

public function __construct(
#[Serializer\XmlAttribute]
public int $quantity,
string $unitOfMeasure,
#[Serializer\SerializedName('UnitOfMeasure')]
#[Serializer\XmlElement(cdata: false)]
public string $unitOfMeasure,
) {
$this->unitOfMeasure = new UnitOfMeasure($unitOfMeasure);
}
}
9 changes: 7 additions & 2 deletions src/CXml/Model/Request/ConfirmationHeader.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@ class ConfirmationHeader

final public const TYPE_REPLACE = 'replace';

final public const TYPE_UNKNOWN = 'unknown';

public function __construct(
#[Serializer\SerializedName('type')]
#[Serializer\XmlAttribute]
public readonly string $type,
#[Serializer\XmlAttribute]
public readonly DateTimeInterface $noticeDate = new DateTime(),
#[Serializer\SerializedName('confirmID')]
#[Serializer\XmlAttribute]
public readonly ?string $confirmId = null,
) {
Assertion::inArray($type, [
self::TYPE_ACCEPT,
Expand All @@ -52,11 +56,12 @@ public function __construct(
]);
}

public static function create(string $type, DateTimeInterface $noticeDate = new DateTime()): self
public static function create(string $type, DateTimeInterface $noticeDate = new DateTime(), ?string $confirmId = null): self
{
return new self(
$type,
$noticeDate,
$confirmId,
);
}
}
22 changes: 18 additions & 4 deletions src/CXml/Model/Request/ConfirmationRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,36 @@

namespace CXml\Model\Request;

use CXml\Model\ConfirmationItem;
use CXml\Model\OrderReference;
use JMS\Serializer\Annotation as Serializer;

#[Serializer\AccessorOrder(order: 'custom', custom: ['confirmationHeader', 'orderReference'])]
readonly class ConfirmationRequest implements RequestPayloadInterface
#[Serializer\AccessorOrder(order: 'custom', custom: ['confirmationHeader', 'orderReference', 'confirmationItems'])]
class ConfirmationRequest implements RequestPayloadInterface
{
public function __construct(
#[Serializer\SerializedName('ConfirmationHeader')]
public ConfirmationHeader $confirmationHeader,
public readonly ConfirmationHeader $confirmationHeader,
#[Serializer\SerializedName('OrderReference')]
public OrderReference $orderReference,
public readonly OrderReference $orderReference,
/**
* @var ConfirmationItem[]
*/
#[Serializer\XmlList(entry: 'ConfirmationItem', inline: true)]
#[Serializer\Type('array<CXml\Model\ConfirmationItem>')]
public array $confirmationItems = [],
) {
}

public static function create(ConfirmationHeader $confirmationHeader, OrderReference $orderReference): self
{
return new self($confirmationHeader, $orderReference);
}

public function addConfirmationItem(ConfirmationItem $confirmationItem): self
{
$this->confirmationItems[] = $confirmationItem;

return $this;
}
}
3 changes: 2 additions & 1 deletion src/CXml/Model/ScheduleLine.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
{
private function __construct(
#[Serializer\SerializedName('UnitOfMeasure')]
public UnitOfMeasure $unitOfMeasure,
#[Serializer\XmlElement(cdata: false)]
public string $unitOfMeasure,
#[Serializer\XmlAttribute]
public int $quantity,
#[Serializer\XmlAttribute]
Expand Down
16 changes: 0 additions & 16 deletions src/CXml/Model/UnitOfMeasure.php

This file was deleted.

0 comments on commit 18ca30c

Please sign in to comment.