Skip to content
This repository has been archived by the owner on Apr 25, 2023. It is now read-only.

Commit

Permalink
Merge 2130d19 into f2a835c
Browse files Browse the repository at this point in the history
  • Loading branch information
sanmai committed Aug 28, 2019
2 parents f2a835c + 2130d19 commit 0e2af5c
Show file tree
Hide file tree
Showing 9 changed files with 196 additions and 106 deletions.
16 changes: 4 additions & 12 deletions docs/index.md
Expand Up @@ -343,12 +343,8 @@ use CdekSDK\Requests;

$order = new Common\Order([
'Number' => 'TEST-123456',
'SendCity' => Common\City::create([
'Code' => 44, // Москва
]),
'RecCity' => Common\City::create([
'PostCode' => '630001', // Новосибирск
]),
'SendCityCode' => 44, // Москва
'RecCityPostCode' => '630001', // Новосибирск
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
Expand Down Expand Up @@ -418,12 +414,8 @@ use CdekSDK\Requests;
$order = new Common\Order([
'ClientSide' => Common\Order::CLIENT_SIDE_SENDER,
'Number' => 'TEST-123456',
'SendCity' => Common\City::create([
'Code' => 44, // Москва
]),
'RecCity' => Common\City::create([
'PostCode' => '630001', // Новосибирск
]),
'SendCityCode' => 44, // Москва
'RecCityPostCode' => '630001', // Новосибирск
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
Expand Down
18 changes: 7 additions & 11 deletions examples/070_DeliveryRequest.php
Expand Up @@ -31,17 +31,13 @@
$client = new \CdekSDK\CdekClient('account', 'password');

$order = new Common\Order([
'Number' => 'TEST-123456',
'SendCity' => Common\City::create([
'Code' => 44, // Москва
]),
'RecCity' => Common\City::create([
'PostCode' => '630001', // Новосибирск
]),
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
'TariffTypeCode' => 139, // Посылка дверь-дверь от ИМ
'Number' => 'TEST-123456',
'SendCityCode' => 44, // Москва
'RecCityPostCode' => '630001', // Новосибирск
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
'TariffTypeCode' => 139, // Посылка дверь-дверь от ИМ
]);

$order->setAddress(Common\Address::create([
Expand Down
12 changes: 4 additions & 8 deletions examples/080_AddDeliveryRequest.php
Expand Up @@ -31,14 +31,10 @@
$client = new \CdekSDK\CdekClient('account', 'password');

$order = new Common\Order([
'ClientSide' => Common\Order::CLIENT_SIDE_SENDER,
'Number' => 'TEST-123456',
'SendCity' => Common\City::create([
'Code' => 44, // Москва
]),
'RecCity' => Common\City::create([
'PostCode' => '630001', // Новосибирск
]),
'ClientSide' => Common\Order::CLIENT_SIDE_SENDER,
'Number' => 'TEST-123456',
'SendCityCode' => 44, // Москва
'RecCityPostCode' => '630001', // Новосибирск
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
Expand Down
1 change: 1 addition & 0 deletions phpunit.xml.dist
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
executionOrder="random" resolveDependencies="true"
bootstrap="vendor/autoload.php" colors="true">
<testsuites>
<testsuite name="Test Suite">
Expand Down
3 changes: 3 additions & 0 deletions src/Common/City.php
Expand Up @@ -32,6 +32,9 @@

final class City
{
/**
* @deprecated
*/
use Fillable;

/**
Expand Down
130 changes: 102 additions & 28 deletions src/Common/Order.php
Expand Up @@ -60,6 +60,66 @@ public static function withNumberAndDate(string $Number, \DateTimeInterface $Dat
]);
}

/**
* Код города отправителя из базы СДЭК (см. файл «City_XXX_YYYYMMDD.xls»).
*
* @JMS\XmlAttribute
* @JMS\Type("integer")
*
* @var int|null
*/
protected $SendCityCode;

/**
* Код города получателя из базы СДЭК (см. файл «City_XXX_YYYYMMDD.xls»).
*
* @JMS\XmlAttribute
* @JMS\Type("integer")
*
* @var int|null
*/
protected $RecCityCode;

/**
* Почтовый индекс города отправителя.
*
* @JMS\XmlAttribute
* @JMS\Type("string")
*
* @var string
*/
protected $SendCityPostCode;

/**
* Почтовый индекс города получателя.
*
* @JMS\XmlAttribute
* @JMS\Type("string")
*
* @var string
*/
protected $RecCityPostCode;

/**
* Код страны отправителя для идентификации страны в формате ISO_3166-1_alpha-2 (см. “Общероссийский классификатор стран мира”). По умолчанию - RU.
*
* @JMS\XmlAttribute
* @JMS\Type("string")
*
* @var string
*/
protected $SendCountryCode;

/**
* Код страны получателя для идентификации страны в формате ISO_3166-1_alpha-2 (см. “Общероссийский классификатор стран мира”). По умолчанию - RU.
*
* @JMS\XmlAttribute
* @JMS\Type("string")
*
* @var string
*/
protected $RecCountryCode;

/**
* @JMS\XmlAttribute
* @JMS\Type("string")
Expand Down Expand Up @@ -348,11 +408,13 @@ public static function withNumberAndDate(string $Number, \DateTimeInterface $Dat
/**
* @JMS\Type("CdekSDK\Common\City")
*
* @var City
* @var City|null
*/
protected $SendCity;

/**
* Наименование города отправителя.
*
* @JMS\XmlAttribute
* @JMS\Type("string")
*
Expand All @@ -363,11 +425,13 @@ public static function withNumberAndDate(string $Number, \DateTimeInterface $Dat
/**
* @JMS\Type("CdekSDK\Common\City")
*
* @var City
* @var City|null
*/
protected $RecCity;

/**
* Наименование города получателя.
*
* @JMS\XmlAttribute
* @JMS\Type("string")
*
Expand Down Expand Up @@ -626,55 +690,35 @@ public function __toString()
}

/**
* @JMS\VirtualProperty
* @JMS\XmlAttribute
* @JMS\SerializedName("SendCityCode")
* @JMS\Type("integer")
*
* @return int|null
*/
public function getSendCityCode()
{
return $this->SendCity ? $this->SendCity->getCode() : null;
return $this->SendCity ? $this->SendCity->getCode() : $this->SendCityCode;
}

/**
* @JMS\VirtualProperty
* @JMS\XmlAttribute
* @JMS\SerializedName("SendCityPostCode")
* @JMS\Type("string")
*
* @return string|null
*/
public function getSendCityPostCode()
{
return $this->SendCity ? $this->SendCity->getPostCode() : null;
return $this->SendCity ? $this->SendCity->getPostCode() : $this->SendCityPostCode;
}

/**
* @JMS\VirtualProperty
* @JMS\XmlAttribute
* @JMS\SerializedName("RecCityCode")
* @JMS\Type("integer")
*
* @return int|null
*/
public function getRecCityCode()
{
return $this->RecCity ? $this->RecCity->getCode() : null;
return $this->RecCity ? $this->RecCity->getCode() : $this->RecCityCode;
}

/**
* @JMS\VirtualProperty
* @JMS\XmlAttribute
* @JMS\SerializedName("RecCityPostCode")
* @JMS\Type("string")
*
* @return string|null
*/
public function getRecCityPostCode()
{
return $this->RecCity ? $this->RecCity->getPostCode() : null;
return $this->RecCity ? $this->RecCity->getPostCode() : $this->RecCityPostCode;
}

public function getRecipientName(): string
Expand Down Expand Up @@ -847,15 +891,22 @@ public function getDeliveryVariant(): string
}

/**
* @throws \TypeError
* @psalm-suppress InvalidNullableReturnType
* @psalm-suppress NullableReturnStatement
*
* @return City
* @throws \TypeError
*/
public function getSenderCity(): City
{
return $this->SendCity;
}

/**
* @psalm-suppress InvalidNullableReturnType
* @psalm-suppress NullableReturnStatement
*
* @throws \TypeError
*/
public function getRecipientCity(): City
{
return $this->RecCity;
Expand Down Expand Up @@ -910,4 +961,27 @@ public function getReturnDispatchNumber(): int
{
return $this->ReturnDispatchNumber;
}

/**
* @JMS\PreSerialize
*/
private function preSerialize()
{
/*
* Эти поля есть в ответах, но в запросах их использовать недопустимо. Убрать их просил СДЭК.
* Тем не менее, в примерах эти поля (SendCity и RecCity) использовались, потому, для обратной
* совместимости, переносим из них значения в действительно используемые поля.
*/
if ($this->SendCity) {
$this->SendCityCode = $this->SendCity->getCode();
$this->SendCityPostCode = $this->SendCity->getPostCode();
$this->SendCity = null;
}

if ($this->RecCity) {
$this->RecCityCode = $this->RecCity->getCode();
$this->RecCityPostCode = $this->RecCity->getPostCode();
$this->RecCity = null;
}
}
}
34 changes: 13 additions & 21 deletions tests/Integration/DeliveryRequestTest.php
Expand Up @@ -32,7 +32,6 @@
use CdekSDK\Common\Address;
use CdekSDK\Common\CallCourier;
use CdekSDK\Common\ChangePeriod;
use CdekSDK\Common\City;
use CdekSDK\Common\Item;
use CdekSDK\Common\Order;
use CdekSDK\Common\Package;
Expand Down Expand Up @@ -107,17 +106,13 @@ public function test_delete_success()
public function test_successful_request_for_shop(): string
{
$order = new Order([
'Number' => self::formatTestNumber('TEST-%s'),
'SendCity' => City::create([
'Code' => 44, // Москва
]),
'RecCity' => City::create([
'PostCode' => '630001', // Новосибирск
]),
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
'TariffTypeCode' => 139, // Посылка дверь-дверь
'Number' => self::formatTestNumber('TEST-%s'),
'SendCityCode' => 44, // Москва
'RecCityPostCode' => '630001', // Новосибирск
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
'TariffTypeCode' => 139, // Посылка дверь-дверь
]);

$order->setAddress(Address::create([
Expand Down Expand Up @@ -197,14 +192,10 @@ public function test_successful_request_for_delivery(string $dispatchNumber): st
// Попробуем создать заказ на доставку

$order = new Order([
'ClientSide' => Order::CLIENT_SIDE_SENDER,
'Number' => self::formatTestNumber('TEST-%s'),
'SendCity' => City::create([
'Code' => 44, // Москва
]),
'RecCity' => City::create([
'PostCode' => '630001', // Новосибирск
]),
'ClientSide' => Order::CLIENT_SIDE_SENDER,
'Number' => self::formatTestNumber('TEST-%s'),
'SendCityCode' => 44, // Москва
'RecCityPostCode' => '630001', // Новосибирск
'RecipientName' => 'Иван Петров',
'RecipientEmail' => 'petrov@test.ru',
'Phone' => '+7 (383) 202-22-50',
Expand Down Expand Up @@ -267,8 +258,9 @@ public function test_successful_request_for_delivery(string $dispatchNumber): st
$this->assertFalse($response->hasErrors());

foreach ($response->getOrders() as $order) {
$this->assertSame(self::formatTestNumber('TEST-%s'), $order->getNumber());
$this->assertNotEmpty($order->getDispatchNumber());
// Номер заказа не передаётся для заказов доставки
//$this->assertSame(self::formatTestNumber('TEST-%s'), $order->getNumber());
}

return $order->getDispatchNumber();
Expand Down

0 comments on commit 0e2af5c

Please sign in to comment.