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

Commit

Permalink
Update DeliveryRequest to a correct output with CallCourier set
Browse files Browse the repository at this point in the history
  • Loading branch information
sanmai committed Oct 31, 2018
1 parent b96001b commit 5632189
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 21 deletions.
14 changes: 14 additions & 0 deletions src/Common/CallCourier.php
Expand Up @@ -210,6 +210,20 @@ public function setAddress(Address $address): self
return $this;
}

/**
* Устанавливает адрес в заявке на вызов курьера при регистрации заказа.
*
* @param Address $address
*
* @return self
*/
public function setSendAddress(Address $address): self
{
$this->SendAddress = $address;

return $this;
}

public function getNumber(): string
{
return (string) $this->Number;
Expand Down
23 changes: 21 additions & 2 deletions src/Requests/DeliveryRequest.php
Expand Up @@ -28,6 +28,7 @@

namespace CdekSDK\Requests;

use CdekSDK\Common\Address;
use CdekSDK\Common\CallCourier;
use CdekSDK\Common\Fillable;
use CdekSDK\Common\Order;
Expand Down Expand Up @@ -81,9 +82,9 @@ class DeliveryRequest implements XmlRequest, ShouldAuthorize
protected $Currency;

/**
* @JMS\Type("CdekSDK\Common\CallCourier")
* @JMS\Type("CdekSDK\Requests\CallCourierRequest")
*
* @var CallCourier
* @var CallCourierRequest
*/
protected $CallCourier;

Expand All @@ -106,4 +107,22 @@ public function addOrder(Order $order)

return $this;
}

public function setCallCourier(CallCourier $call, Address $address)
{
/*
* СДЭК требует чтобы при оформлении заказа адрес был в поле SendAddress,
* а не в поле Address как при оформлении заявки на вызов курьера. При этом
* сам адрес является обязательным.
*
* Спрячем эти неочевидные детали от пользователя, указав адрес сами.
*/

$call->setSendAddress($address);

$this->CallCourier = new CallCourierRequest();
$this->CallCourier->addCall($call);

return $this;
}
}
39 changes: 20 additions & 19 deletions tests/Serialization/DeliveryRequestTest.php
Expand Up @@ -269,28 +269,29 @@ public function test_with_call_courier()
{
$request = DeliveryRequest::create([
'Number' => 'foo',
'CallCourier' => CallCourier::create([
'Comment' => 'foo',
'Date' => new \DateTime('2017-05-06T11:20:45.680+07:00'),
'LunchBeg' => new \DateTime('14:00'),
'LunchEnd' => new \DateTime('14:30'),
'SendCityCode' => 44,
'SenderName' => 'Testing',
'SendPhone' => '+79138739944',
'TimeBeg' => new \DateTime('10:00'),
'TimeEnd' => new \DateTime('17:00'),
'Weight' => '20',
])->setAddress(Address::create([
'Street' => 'Тестовая',
'House' => '8',
'Flat' => '32',
])),
]);
])->setCallCourier(CallCourier::create([
'Comment' => 'foo',
'Date' => new \DateTime('2017-05-06T11:20:45.680+07:00'),
'LunchBeg' => new \DateTime('14:00'),
'LunchEnd' => new \DateTime('14:30'),
'SendCityCode' => 44,
'SenderName' => 'Testing',
'SendPhone' => '+79138739944',
'TimeBeg' => new \DateTime('10:00'),
'TimeEnd' => new \DateTime('17:00'),
'Weight' => '20',
]), Address::create([
'Street' => 'Тестовая',
'House' => '8',
'Flat' => '32',
]));

$this->assertSameAsXML('<?xml version="1.0" encoding="UTF-8"?>
<DeliveryRequest OrderCount="0" Number="foo">
<CallCourier Date="2017-05-06" TimeBeg="10:00" TimeEnd="17:00" LunchBeg="14:00" LunchEnd="14:30" SendCityCode="44" SendPhone="+79138739944" SenderName="Testing" Weight="20" Comment="foo">
<Address Street="Тестовая" House="8" Flat="32"/>
<CallCourier CallCount="1">
<Call Date="2017-05-06" TimeBeg="10:00" TimeEnd="17:00" LunchBeg="14:00" LunchEnd="14:30" SendCityCode="44" SendPhone="+79138739944" SenderName="Testing" Weight="20" Comment="foo">
<SendAddress Street="Тестовая" House="8" Flat="32"/>
</Call>
</CallCourier>
</DeliveryRequest>
', $request);
Expand Down

0 comments on commit 5632189

Please sign in to comment.