Skip to content
This repository has been archived by the owner on May 21, 2021. It is now read-only.

Commit

Permalink
OrdersStatusRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
sanmai committed Oct 29, 2020
1 parent 5fbca84 commit 4dd2aa0
Show file tree
Hide file tree
Showing 10 changed files with 438 additions and 2 deletions.
72 changes: 72 additions & 0 deletions examples/150_OrdersStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php
/**
* This code is licensed under the MIT License.
*
* Copyright (c) 2018-2020 Alexey Kopytko <alexey@kopytko.com> and contributors
* Copyright (c) 2018 Appwilio (http://appwilio.com), greabock (https://github.com/greabock), JhaoDa (https://github.com/jhaoda)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

declare(strict_types=1);

use Tests\YDeliverySDK\Integration\DebuggingLogger;
use YDeliverySDK\Requests\OrdersStatusRequest;

include_once 'vendor/autoload.php';

$logger = new DebuggingLogger();

$builder = new \YDeliverySDK\ClientBuilder();
$builder->setToken($_SERVER['YANDEX_DELIVERY_TOKEN'] ?? '');
$builder->setLogger($logger);
/** @var \YDeliverySDK\Client $client */
$client = $builder->build();

$request = new OrdersStatusRequest((int) $_SERVER['YANDEX_SHOP_ID']);
$request->fromOrderId = (int) $argv[1] - 1;

$order = $request->addOrder();
$order->id = (int) $argv[1];

$order = $request->addOrder();
$order->externalId = '100';

$response = $client->sendOrdersStatusRequest($request);

if ($response->hasErrors()) {
// Обрабатываем ошибки
foreach ($response->getMessages() as $message) {
if ($message->getErrorCode() !== '') {
// Это ошибка
echo "{$message->getErrorCode()}: {$message->getMessage()}\n";
}
}

return;
}

foreach ($response as $order) {
echo \join("\t", [
$order->id ?? $order->externalId,
$order->status->code,
$order->status->description,
$order->status->timestamp->format('r'),
]), "\n";
}
87 changes: 87 additions & 0 deletions src/Requests/OrdersStatusRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?php
/**
* This code is licensed under the MIT License.
*
* Copyright (c) 2018-2020 Alexey Kopytko <alexey@kopytko.com> and contributors
* Copyright (c) 2018 Appwilio (http://appwilio.com), greabock (https://github.com/greabock), JhaoDa (https://github.com/jhaoda)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

declare(strict_types=1);

namespace YDeliverySDK\Requests;

use CommonSDK\Concerns\PropertyWrite;
use CommonSDK\Concerns\RequestCore;
use CommonSDK\Contracts\JsonRequest;
use JMS\Serializer\Annotation as JMS;
use YDeliverySDK\Responses\OrdersStatusResponse;

/**
* @property-write int $senderId Идентификатор магазина.
* @property-write int $fromOrderId Идентификатор заказа. Результаты будут выведены для заказов, идентификаторы которых строго больше указанного.
*
* @phan-file-suppress PhanAccessWriteOnlyMagicProperty
*/
final class OrdersStatusRequest implements JsonRequest
{
use RequestCore;
use PropertyWrite;

/**
* @JMS\Type("int")
*
* @var int
*/
private $senderId;

/**
* @JMS\Type("int")
*
* @var int
*/
private $fromOrderId;

/**
* @JMS\Type("array<YDeliverySDK\Requests\Types\OrderId>")
*
* @var Types\OrderId[]
*/
private $orders = [];

private const METHOD = 'PUT';
private const ADDRESS = '/orders/status';

private const RESPONSE = OrdersStatusResponse::class;

public function __construct(int $senderId)
{
$this->senderId = $senderId;
}

public function addOrder(): Types\OrderId
{
$order = new Types\OrderId();

$this->orders[] = $order;

return $order;
}
}
1 change: 1 addition & 0 deletions src/Requests/Shortcuts.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
* @method Responses\Types\Order sendGetOrderRequest(GetOrderRequest $request)
* @method FileResponse sendOrderLabelRequest(OrderLabelRequest $request)
* @method Responses\OrderStatusesResponse|Responses\Types\Status[] sendOrderStatusesRequest(OrderStatusesRequest $request)
* @method Responses\OrdersStatusResponse|Responses\Types\OrderStatus[] sendOrdersStatusRequest(OrdersStatusRequest $request)
*
* @phan-file-suppress PhanTypeMismatchArgument
*/
Expand Down
55 changes: 55 additions & 0 deletions src/Requests/Types/OrderId.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php
/**
* This code is licensed under the MIT License.
*
* Copyright (c) 2018-2020 Alexey Kopytko <alexey@kopytko.com> and contributors
* Copyright (c) 2018 Appwilio (http://appwilio.com), greabock (https://github.com/greabock), JhaoDa (https://github.com/jhaoda)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

declare(strict_types=1);

namespace YDeliverySDK\Requests\Types;

use CommonSDK\Concerns\PropertyWrite;
use JMS\Serializer\Annotation as JMS;

/**
* @property-write string $externalId
* @property-write int $id
*/
final class OrderId
{
use PropertyWrite;

/**
* @JMS\Type("string")
*
* @var string
*/
protected $externalId;

/**
* @JMS\Type("int")
*
* @var int
*/
protected $id;
}
44 changes: 44 additions & 0 deletions src/Responses/OrdersStatusResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php
/**
* This code is licensed under the MIT License.
*
* Copyright (c) 2018-2020 Alexey Kopytko <alexey@kopytko.com> and contributors
* Copyright (c) 2018 Appwilio (http://appwilio.com), greabock (https://github.com/greabock), JhaoDa (https://github.com/jhaoda)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

declare(strict_types=1);

namespace YDeliverySDK\Responses;

use CommonSDK\Concerns\ListContainer;
use CommonSDK\Contracts\ItemList;
use CommonSDK\Contracts\Response;
use YDeliverySDK\Responses\Types\OrderStatus;

/**
* @template-implements \IteratorAggregate<OrderStatus>
*/
final class OrdersStatusResponse implements Response, ItemList, \IteratorAggregate
{
use ListContainer;

private const LIST_TYPE = OrderStatus::class;
}
63 changes: 63 additions & 0 deletions src/Responses/Types/OrderStatus.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php
/**
* This code is licensed under the MIT License.
*
* Copyright (c) 2018-2020 Alexey Kopytko <alexey@kopytko.com> and contributors
* Copyright (c) 2018 Appwilio (http://appwilio.com), greabock (https://github.com/greabock), JhaoDa (https://github.com/jhaoda)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

declare(strict_types=1);

namespace YDeliverySDK\Responses\Types;

use CommonSDK\Concerns\PropertyRead;
use JMS\Serializer\Annotation as JMS;

/**
* @property-read int|null $id
* @property-read string|null $externalId
* @property-read Status $status
*/
final class OrderStatus
{
use PropertyRead;

/**
* @JMS\Type("int")
*
* @var int
*/
private $id;

/**
* @JMS\Type("string")
*
* @var string
*/
private $externalId;

/**
* @JMS\Type("YDeliverySDK\Responses\Types\Status")
*
* @var Status
*/
private $status;
}
14 changes: 12 additions & 2 deletions src/Responses/Types/Status.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
/**
* @property-read string $code Код статуса заказа.
* @property-read string $description Описание статуса.
* @property-read DateTimeImmutable $datetime Дата и время установки статуса.
* @property-read DateTimeImmutable|null $datetime Дата и время установки статуса.
* @property-read DateTimeImmutable $timestamp Дата и время установки статуса, или текущее время если статус неизвестен.
*/
final class Status
{
Expand All @@ -58,7 +59,16 @@ final class Status
/**
* @JMS\Type("DateTimeImmutable<'Y-m-d\TH:i:s.uO'>")
*
* @var DateTimeImmutable
* @var DateTimeImmutable|null
*/
private $datetime;

private function getTimestamp(): DateTimeImmutable
{
if ($this->datetime === null) {
return new DateTimeImmutable();
}

return $this->datetime;
}
}
Loading

0 comments on commit 4dd2aa0

Please sign in to comment.