Basic Sendcloud integration with Shipment rework
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class Document
|
||||
{
|
||||
public const TYPE_LABEL = 'label';
|
||||
public const TYPE_CP71 = 'cp71';
|
||||
public const TYPE_CN23 = 'cn23';
|
||||
public const TYPE_CN23_DEFAULT = 'cn23-default';
|
||||
public const TYPE_COMMERCIAL_INVOICE = 'commercial-invoice';
|
||||
|
||||
public string $Type;
|
||||
public string $Size;
|
||||
public string $Link;
|
||||
|
||||
public static function fromApiResponse(object $data): Document
|
||||
{
|
||||
$obj = new Document();
|
||||
$obj->Type = $data->type;
|
||||
$obj->Size = $data->size;
|
||||
$obj->Link = $data->link;
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
abstract class ParcelBase
|
||||
{
|
||||
public ?string $Name = null;
|
||||
public ?string $CompanyName = null;
|
||||
public ?string $Address = null;
|
||||
public ?string $Address2 = null;
|
||||
public ?string $HouseNumber = null;
|
||||
public ?string $City = null;
|
||||
public ?string $PostalCode = null;
|
||||
public ?string $Telephone = null;
|
||||
public bool $RequestLabel = true;
|
||||
public ?string $EMail = null;
|
||||
public ?string $Country = null;
|
||||
public ?int $ShippingMethodId = null;
|
||||
/**
|
||||
* @var ?int weight in grams
|
||||
*/
|
||||
public ?int $Weight = null;
|
||||
public ?string $OrderNumber = null;
|
||||
public ?string $TotalOrderValueCurrency = null;
|
||||
public ?float $TotalOrderValue = null;
|
||||
public ?string $CountryState = null;
|
||||
public ?string $CustomsInvoiceNr = null;
|
||||
public ?int $CustomsShipmentType = null;
|
||||
public ?string $ExternalReference = null;
|
||||
public ?int $TotalInsuredValue = null;
|
||||
public ?array $ParcelItems = array();
|
||||
public bool $IsReturn = false;
|
||||
public ?string $Length = null;
|
||||
public ?string $Width = null;
|
||||
public ?string $Height = null;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class ParcelCreation extends ParcelBase
|
||||
{
|
||||
public ?int $SenderAddressId = null;
|
||||
|
||||
public function toApiRequest(): array {
|
||||
return [
|
||||
'name' => $this->Name,
|
||||
'company_name' => $this->CompanyName,
|
||||
'address' => $this->Address,
|
||||
'address_2' => $this->Address2,
|
||||
'house_number' => $this->HouseNumber,
|
||||
'city' => $this->City,
|
||||
'postal_code' => $this->PostalCode,
|
||||
'telephone' => $this->Telephone,
|
||||
'request_label' => $this->RequestLabel,
|
||||
'email' => $this->EMail,
|
||||
'country' => $this->Country,
|
||||
'shipment' => ['id' => $this->ShippingMethodId],
|
||||
'weight' => number_format($this->Weight / 1000, 3, '.', null),
|
||||
'order_number' => $this->OrderNumber,
|
||||
'total_order_value_currency' => $this->TotalOrderValueCurrency,
|
||||
'total_order_value' => number_format($this->TotalOrderValue, 2, '.', null),
|
||||
'country_state' => $this->CountryState,
|
||||
'sender_address' => $this->SenderAddressId,
|
||||
'customs_invoice_nr' => $this->CustomsInvoiceNr,
|
||||
'customs_shipment_type' => $this->CustomsShipmentType,
|
||||
'external_reference' => $this->ExternalReference,
|
||||
'total_insured_value' => $this->TotalInsuredValue,
|
||||
'parcel_items' => array_map(fn(ParcelItem $item)=>$item->toApiRequest(), $this->ParcelItems),
|
||||
'is_return' => $this->IsReturn,
|
||||
'length' => $this->Length,
|
||||
'width' => $this->Width,
|
||||
'height' => $this->Height,
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class ParcelCreationError
|
||||
{
|
||||
public int $Code;
|
||||
public string $Message;
|
||||
public string $Request;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class ParcelItem
|
||||
{
|
||||
public string $HsCode;
|
||||
|
||||
/**
|
||||
* @var int weight in grams
|
||||
*/
|
||||
public int $Weight;
|
||||
public int $Quantity;
|
||||
public string $Description;
|
||||
public string $OriginCountry;
|
||||
public float $Price;
|
||||
public string $PriceCurrency;
|
||||
public string $Sku;
|
||||
public string $ProductId;
|
||||
|
||||
public function toApiRequest(): array {
|
||||
return [
|
||||
'hs_code' => $this->HsCode,
|
||||
'weight' => number_format($this->Weight / 1000, 3, '.', null),
|
||||
'quantity' => $this->Quantity,
|
||||
'description' => $this->Description,
|
||||
'price' => [
|
||||
'value' => $this->Price,
|
||||
'currency' => $this->PriceCurrency,
|
||||
],
|
||||
'origin_country' => $this->OriginCountry,
|
||||
'sku' => $this->Sku,
|
||||
'product_id' => $this->ProductId,
|
||||
];
|
||||
}
|
||||
|
||||
public static function fromApiResponse(object $data): ParcelItem
|
||||
{
|
||||
$obj = new ParcelItem();
|
||||
$obj->HsCode = $data->hs_code;
|
||||
$obj->Weight = intval(floatval($data->weight)*1000);
|
||||
$obj->Quantity = $data->quantity;
|
||||
$obj->Description = $data->description;
|
||||
$obj->Price = $data->price->value;
|
||||
$obj->PriceCurrency = $data->price->currency;
|
||||
$obj->OriginCountry = $data->origin_country;
|
||||
$obj->Sku = $data->sku;
|
||||
$obj->ProductId = $data->product_id;
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
use DateTimeImmutable;
|
||||
use Exception;
|
||||
|
||||
class ParcelResponse extends ParcelBase
|
||||
{
|
||||
public int $Id;
|
||||
public string $CarrierCode;
|
||||
public DateTimeImmutable $DateCreated;
|
||||
public DateTimeImmutable $DateUpdated;
|
||||
public DateTimeImmutable $DateAnnounced;
|
||||
public string $ShipmentMethodName;
|
||||
public int $StatusId;
|
||||
public string $StatusMessage;
|
||||
public array $Documents;
|
||||
public ?string $TrackingNumber = null;
|
||||
public ?string $TrackingUrl = null;
|
||||
public ?array $Errors;
|
||||
|
||||
public function GetDocumentByType(string $type): ?Document
|
||||
{
|
||||
/** @var Document $item */
|
||||
foreach ($this->Documents as $item)
|
||||
if ($item->Type == $type)
|
||||
return $item;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function fromApiResponse(object $data): ParcelResponse
|
||||
{
|
||||
$obj = new ParcelResponse();
|
||||
$obj->Address = $data->address_divided->street;
|
||||
$obj->Address2 = $data->address_2;
|
||||
$obj->HouseNumber = $data->address_divided->house_number;
|
||||
$obj->CarrierCode = $data->carrier->code;
|
||||
$obj->City = $data->city;
|
||||
$obj->CompanyName = $data->company_name;
|
||||
$obj->Country = $data->country->iso_2;
|
||||
$obj->CustomsInvoiceNr = $data->customs_invoice_nr;
|
||||
$obj->CustomsShipmentType = $data->customs_shipment_type;
|
||||
$obj->DateCreated = new DateTimeImmutable($data->date_created);
|
||||
$obj->DateUpdated = new DateTimeImmutable($data->date_updated);
|
||||
$obj->DateAnnounced = new DateTimeImmutable($data->date_announced);
|
||||
$obj->EMail = $data->email;
|
||||
$obj->Id = $data->id;
|
||||
$obj->Name = $data->name;
|
||||
$obj->OrderNumber = $data->order_number;
|
||||
$obj->ParcelItems = array_map(fn($item)=>ParcelItem::fromApiResponse($item), $data->parcel_items);
|
||||
$obj->PostalCode = $data->postal_code;
|
||||
$obj->ExternalReference = $data->external_reference;
|
||||
$obj->ShippingMethodId = $data->shipment->id;
|
||||
$obj->ShipmentMethodName = $data->shipment->name;
|
||||
$obj->StatusId = $data->status->id;
|
||||
$obj->StatusMessage = $data->status->message;
|
||||
$obj->Documents = array_map(fn($item)=>Document::fromApiResponse($item), $data->documents);
|
||||
$obj->Telephone = $data->telephone;
|
||||
$obj->TotalInsuredValue = $data->total_insured_value;
|
||||
$obj->TotalOrderValue = $data->total_order_value;
|
||||
$obj->TotalOrderValueCurrency = $data->total_order_value_currency;
|
||||
$obj->TrackingNumber = $data->tracking_number;
|
||||
$obj->TrackingUrl = $data->tracking_url;
|
||||
$obj->Weight = $data->weight;
|
||||
$obj->Length = $data->length;
|
||||
$obj->Height = $data->height;
|
||||
$obj->Width = $data->width;
|
||||
$obj->IsReturn = $data->is_return;
|
||||
$obj->Errors = $data->errors->non_field_errors;
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class SenderAddress {
|
||||
public ?string $City;
|
||||
public ?string $CompanyName;
|
||||
public ?string $ContactName;
|
||||
public string $Country;
|
||||
public ?string $CountryState;
|
||||
public ?string $Email;
|
||||
public ?string $HouseNumber;
|
||||
public int $Id;
|
||||
public ?string $PostalBox;
|
||||
public ?string $PostalCode;
|
||||
public ?string $Street;
|
||||
public ?string $Telephone;
|
||||
public ?string $VatNumber;
|
||||
public ?string $EoriNumber;
|
||||
public int $BrandId;
|
||||
public ?string $Label;
|
||||
public ?string $SignatureFullName;
|
||||
public ?string $SignatureInitials;
|
||||
|
||||
public function __toString(): string
|
||||
{
|
||||
return "$this->CompanyName; $this->ContactName; $this->Street $this->HouseNumber; $this->PostalCode; $this->City";
|
||||
}
|
||||
|
||||
|
||||
public static function fromApiResponse(object $data): SenderAddress {
|
||||
$obj = new SenderAddress();
|
||||
$obj->City = $data->city;
|
||||
$obj->CompanyName = $data->company_name;
|
||||
$obj->ContactName = $data->contact_name;
|
||||
$obj->Country = $data->country;
|
||||
$obj->CountryState = $data->country_state;
|
||||
$obj->Email = $data->email;
|
||||
$obj->HouseNumber = $data->house_number;
|
||||
$obj->Id = $data->id;
|
||||
$obj->PostalBox = $data->postal_box;
|
||||
$obj->PostalCode = $data->postal_code;
|
||||
$obj->Street = $data->street;
|
||||
$obj->Telephone = $data->telephone;
|
||||
$obj->VatNumber = $data->vat_number;
|
||||
$obj->EoriNumber = $data->eori_number;
|
||||
$obj->BrandId = $data->brand_id;
|
||||
$obj->Label = $data->label;
|
||||
$obj->SignatureFullName = $data->signature_full_name;
|
||||
$obj->SignatureInitials = $data->signature_initials;
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class ShippingMethod {
|
||||
public int $Id;
|
||||
public string $Name;
|
||||
public ?string $Carrier;
|
||||
public int $MinWeight;
|
||||
public int $MaxWeight;
|
||||
public int $MaxLength;
|
||||
public int $MaxWidth;
|
||||
public int $MaxHeight;
|
||||
public string $Unit;
|
||||
|
||||
public static function fromApiResponse(object $data):ShippingMethod {
|
||||
$obj = new ShippingMethod();
|
||||
$obj->Id = $data->id;
|
||||
$obj->Name = $data->name;
|
||||
$obj->Carrier = $data->carrier ?? null;
|
||||
$obj->MinWeight = $data->properties->min_weight;
|
||||
$obj->MaxWeight = $data->properties->max_weight;
|
||||
$obj->MaxLength = $data->properties->max_dimensions->length;
|
||||
$obj->MaxWidth = $data->properties->max_dimensions->width;
|
||||
$obj->MaxHeight = $data->properties->max_dimensions->height;
|
||||
$obj->Unit = $data->properties->max_dimensions->unit;
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
namespace Xentral\Carrier\SendCloud\Data;
|
||||
|
||||
class ShippingProduct {
|
||||
public string $Name;
|
||||
public string $Carrier;
|
||||
public string $ServicePointsCarrier;
|
||||
public string $Code;
|
||||
public int $MinWeight;
|
||||
public int $MaxWeight;
|
||||
public array $ShippingMethods;
|
||||
|
||||
public static function fromApiResponse(object $data): ShippingProduct {
|
||||
$obj = new ShippingProduct();
|
||||
$obj->Name = $data->name;
|
||||
$obj->Carrier = $data->carrier;
|
||||
$obj->ServicePointsCarrier = $data->service_points_carrier;
|
||||
$obj->Code = $data->code;
|
||||
$obj->MinWeight = $data->weight_range->min_weight;
|
||||
$obj->MaxWeight = $data->weight_range->max_weight;
|
||||
foreach ($data->methods as $method) {
|
||||
$child = ShippingMethod::fromApiResponse($method);
|
||||
$child->Carrier = $obj->Carrier;
|
||||
$obj->ShippingMethods[] = $child;
|
||||
}
|
||||
return $obj;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user