Support for /api/v5/loyalty/loyalties/{id}
and `/api/v5/loyalty/account/{id}
closes #108
This commit is contained in:
parent
cfa975db17
commit
7d3ae80fe7
@ -33,6 +33,8 @@ use RetailCrm\Api\Model\Entity\Customers\CustomerTag;
|
|||||||
use RetailCrm\Api\Model\Entity\CustomersCorporate\CustomerCorporate;
|
use RetailCrm\Api\Model\Entity\CustomersCorporate\CustomerCorporate;
|
||||||
use RetailCrm\Api\Component\Serializer\Template\CustomSerialization;
|
use RetailCrm\Api\Component\Serializer\Template\CustomSerialization;
|
||||||
use RetailCrm\Api\Component\Serializer\Type\PropertyTypeMixed;
|
use RetailCrm\Api\Component\Serializer\Type\PropertyTypeMixed;
|
||||||
|
use RetailCrm\Api\Model\Entity\CustomersCorporate\SerializedRelationAbstractCustomer;
|
||||||
|
use RetailCrm\Api\Model\Entity\Orders\SerializedRelationCustomer;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
use Symfony\Component\Filesystem\Filesystem;
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
|
|
||||||
@ -267,6 +269,20 @@ class SerializerGenerator
|
|||||||
new PreferredReducer(),
|
new PreferredReducer(),
|
||||||
new TakeBestReducer(),
|
new TakeBestReducer(),
|
||||||
]);
|
]);
|
||||||
|
$serializedRelationAbstract = $this->metadataBuilder->build(
|
||||||
|
SerializedRelationAbstractCustomer::class,
|
||||||
|
[
|
||||||
|
new PreferredReducer(),
|
||||||
|
new TakeBestReducer(),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$serializedRelation = $this->metadataBuilder->build(
|
||||||
|
SerializedRelationCustomer::class,
|
||||||
|
[
|
||||||
|
new PreferredReducer(),
|
||||||
|
new TakeBestReducer(),
|
||||||
|
]
|
||||||
|
);
|
||||||
$customerCode = $this->generateCodeForClass(
|
$customerCode = $this->generateCodeForClass(
|
||||||
$customerMetadata,
|
$customerMetadata,
|
||||||
$apiVersion,
|
$apiVersion,
|
||||||
@ -281,8 +297,29 @@ class SerializerGenerator
|
|||||||
$arrayPath,
|
$arrayPath,
|
||||||
$modelPath
|
$modelPath
|
||||||
);
|
);
|
||||||
|
$serializedRelationAbstractCode = $this->generateCodeForClass(
|
||||||
|
$serializedRelationAbstract,
|
||||||
|
$apiVersion,
|
||||||
|
$serializerGroups,
|
||||||
|
$arrayPath,
|
||||||
|
$modelPath
|
||||||
|
);
|
||||||
|
$serializedRelationCode = $this->generateCodeForClass(
|
||||||
|
$serializedRelation,
|
||||||
|
$apiVersion,
|
||||||
|
$serializerGroups,
|
||||||
|
$arrayPath,
|
||||||
|
$modelPath
|
||||||
|
);
|
||||||
|
|
||||||
return $this->customTemplating->renderCustomerInterface($arrayPath, $modelPath, $customerCode, $corporateCode);
|
return $this->customTemplating->renderCustomerInterface(
|
||||||
|
$arrayPath,
|
||||||
|
$modelPath,
|
||||||
|
$customerCode,
|
||||||
|
$corporateCode,
|
||||||
|
$serializedRelationAbstractCode,
|
||||||
|
$serializedRelationCode
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,6 +28,10 @@ if ({{modelPath}} instanceof \RetailCrm\Api\Model\Entity\Customers\Customer) {
|
|||||||
{{customerCode}}
|
{{customerCode}}
|
||||||
} elseif ({{modelPath}} instanceof \RetailCrm\Api\Model\Entity\CustomersCorporate\CustomerCorporate) {
|
} elseif ({{modelPath}} instanceof \RetailCrm\Api\Model\Entity\CustomersCorporate\CustomerCorporate) {
|
||||||
{{corporateCode}}
|
{{corporateCode}}
|
||||||
|
} elseif ({{modelPath}} instanceof \RetailCrm\Api\Model\Entity\CustomersCorporate\SerializedRelationAbstractCustomer) {
|
||||||
|
{{serializedRelationAbstractCode}}
|
||||||
|
} elseif ({{modelPath}} instanceof \RetailCrm\Api\Model\Entity\Orders\SerializedRelationCustomer) {
|
||||||
|
{{serializedRelationCode}}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 === \count($jsonData{{jsonPath}})) {
|
if (0 === \count($jsonData{{jsonPath}})) {
|
||||||
@ -40,6 +44,8 @@ EOT;
|
|||||||
* @param string $modelPath
|
* @param string $modelPath
|
||||||
* @param string $customerCode
|
* @param string $customerCode
|
||||||
* @param string $corporateCode
|
* @param string $corporateCode
|
||||||
|
* @param string $relationAbstractCode
|
||||||
|
* @param string $relationCode
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
* @throws \Twig\Error\LoaderError
|
* @throws \Twig\Error\LoaderError
|
||||||
@ -49,13 +55,17 @@ EOT;
|
|||||||
string $jsonPath,
|
string $jsonPath,
|
||||||
string $modelPath,
|
string $modelPath,
|
||||||
string $customerCode,
|
string $customerCode,
|
||||||
string $corporateCode
|
string $corporateCode,
|
||||||
|
string $relationAbstractCode,
|
||||||
|
string $relationCode
|
||||||
): string {
|
): string {
|
||||||
return $this->render(self::TMPL_CUSTOMER_INTERFACE, [
|
return $this->render(self::TMPL_CUSTOMER_INTERFACE, [
|
||||||
'jsonPath' => $jsonPath,
|
'jsonPath' => $jsonPath,
|
||||||
'modelPath' => $modelPath,
|
'modelPath' => $modelPath,
|
||||||
'customerCode' => $customerCode,
|
'customerCode' => $customerCode,
|
||||||
'corporateCode' => $corporateCode,
|
'corporateCode' => $corporateCode,
|
||||||
|
'serializedRelationAbstractCode' => $relationAbstractCode,
|
||||||
|
'serializedRelationCode' => $relationCode,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,4 +74,12 @@ class SerializedEntityCustomer
|
|||||||
* @JMS\SerializedName("patronymic")
|
* @JMS\SerializedName("patronymic")
|
||||||
*/
|
*/
|
||||||
public $patronymic;
|
public $patronymic;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, mixed>
|
||||||
|
*
|
||||||
|
* @JMS\Type("array")
|
||||||
|
* @JMS\SerializedName("customFields")
|
||||||
|
*/
|
||||||
|
public $customFields;
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
namespace RetailCrm\Api\Model\Entity\CustomersCorporate;
|
namespace RetailCrm\Api\Model\Entity\CustomersCorporate;
|
||||||
|
|
||||||
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
||||||
|
use RetailCrm\Api\Interfaces\Orders\CustomerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class SerializedRelationAbstractCustomer
|
* Class SerializedRelationAbstractCustomer
|
||||||
@ -17,7 +18,7 @@ use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
|||||||
* @category SerializedRelationAbstractCustomer
|
* @category SerializedRelationAbstractCustomer
|
||||||
* @package RetailCrm\Api\Model\Entity\CustomersCorporate
|
* @package RetailCrm\Api\Model\Entity\CustomersCorporate
|
||||||
*/
|
*/
|
||||||
class SerializedRelationAbstractCustomer
|
class SerializedRelationAbstractCustomer implements CustomerInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var int
|
* @var int
|
||||||
@ -68,7 +69,7 @@ class SerializedRelationAbstractCustomer
|
|||||||
*/
|
*/
|
||||||
public static function withId(int $id): self
|
public static function withId(int $id): self
|
||||||
{
|
{
|
||||||
$customer = new self();
|
$customer = new self();
|
||||||
$customer->id = $id;
|
$customer->id = $id;
|
||||||
|
|
||||||
return $customer;
|
return $customer;
|
||||||
@ -84,9 +85,9 @@ class SerializedRelationAbstractCustomer
|
|||||||
*/
|
*/
|
||||||
public static function withExternalId(string $externalId, string $site): self
|
public static function withExternalId(string $externalId, string $site): self
|
||||||
{
|
{
|
||||||
$customer = new self();
|
$customer = new self();
|
||||||
$customer->externalId = $externalId;
|
$customer->externalId = $externalId;
|
||||||
$customer->site = $site;
|
$customer->site = $site;
|
||||||
|
|
||||||
return $customer;
|
return $customer;
|
||||||
}
|
}
|
||||||
|
@ -131,4 +131,20 @@ class LoyaltyAccount
|
|||||||
* @JMS\SerializedName("level")
|
* @JMS\SerializedName("level")
|
||||||
*/
|
*/
|
||||||
public $level;
|
public $level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @JMS\Type("string")
|
||||||
|
* @JMS\SerializedName("status")
|
||||||
|
*/
|
||||||
|
public $status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \RetailCrm\Api\Model\Entity\Loyalty\Loyalty
|
||||||
|
*
|
||||||
|
* @JMS\Type("RetailCrm\Api\Model\Entity\Loyalty\Loyalty")
|
||||||
|
* @JMS\SerializedName("loyalty")
|
||||||
|
*/
|
||||||
|
public $loyalty;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
namespace RetailCrm\Api\Model\Entity\Orders;
|
namespace RetailCrm\Api\Model\Entity\Orders;
|
||||||
|
|
||||||
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
||||||
use RetailCrm\Api\Interfaces\Orders\CustomerInterface;
|
|
||||||
use RetailCrm\Api\Model\Entity\CustomersCorporate\SerializedRelationAbstractCustomer;
|
use RetailCrm\Api\Model\Entity\CustomersCorporate\SerializedRelationAbstractCustomer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,7 +18,7 @@ use RetailCrm\Api\Model\Entity\CustomersCorporate\SerializedRelationAbstractCust
|
|||||||
* @category SerializedRelationCustomer
|
* @category SerializedRelationCustomer
|
||||||
* @package RetailCrm\Api\Model\Entity\Orders
|
* @package RetailCrm\Api\Model\Entity\Orders
|
||||||
*/
|
*/
|
||||||
class SerializedRelationCustomer extends SerializedRelationAbstractCustomer implements CustomerInterface
|
class SerializedRelationCustomer extends SerializedRelationAbstractCustomer
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
@ -47,8 +46,8 @@ class SerializedRelationCustomer extends SerializedRelationAbstractCustomer impl
|
|||||||
*/
|
*/
|
||||||
public static function withIdAndType(int $id, string $type): self
|
public static function withIdAndType(int $id, string $type): self
|
||||||
{
|
{
|
||||||
$customer = new self();
|
$customer = new self();
|
||||||
$customer->id = $id;
|
$customer->id = $id;
|
||||||
$customer->type = $type;
|
$customer->type = $type;
|
||||||
|
|
||||||
return $customer;
|
return $customer;
|
||||||
@ -65,10 +64,10 @@ class SerializedRelationCustomer extends SerializedRelationAbstractCustomer impl
|
|||||||
*/
|
*/
|
||||||
public static function withExternalIdAndType(string $externalId, string $type, string $site): self
|
public static function withExternalIdAndType(string $externalId, string $type, string $site): self
|
||||||
{
|
{
|
||||||
$customer = new self();
|
$customer = new self();
|
||||||
$customer->externalId = $externalId;
|
$customer->externalId = $externalId;
|
||||||
$customer->type = $type;
|
$customer->type = $type;
|
||||||
$customer->site = $site;
|
$customer->site = $site;
|
||||||
|
|
||||||
return $customer;
|
return $customer;
|
||||||
}
|
}
|
||||||
|
30
src/Model/Response/Loyalty/LoyaltyAccountResponse.php
Normal file
30
src/Model/Response/Loyalty/LoyaltyAccountResponse.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP version 7.3
|
||||||
|
*
|
||||||
|
* @category LoyaltyAccountResponse
|
||||||
|
* @package RetailCrm\Api\Model\Response\Loyalty
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace RetailCrm\Api\Model\Response\Loyalty;
|
||||||
|
|
||||||
|
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
||||||
|
use RetailCrm\Api\Model\Response\SuccessResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class LoyaltyAccountResponse
|
||||||
|
*
|
||||||
|
* @category LoyaltyAccountResponse
|
||||||
|
* @package RetailCrm\Api\Model\Response\Loyalty
|
||||||
|
*/
|
||||||
|
class LoyaltyAccountResponse extends SuccessResponse
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \RetailCrm\Api\Model\Entity\Loyalty\LoyaltyAccount
|
||||||
|
*
|
||||||
|
* @JMS\Type("RetailCrm\Api\Model\Entity\Loyalty\LoyaltyAccount")
|
||||||
|
* @JMS\SerializedName("loyaltyAccount")
|
||||||
|
*/
|
||||||
|
public $loyaltyAccount;
|
||||||
|
}
|
38
src/Model/Response/Loyalty/LoyaltyResponse.php
Normal file
38
src/Model/Response/Loyalty/LoyaltyResponse.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP 7.3
|
||||||
|
*
|
||||||
|
* @category LoyaltyResponse
|
||||||
|
* @package RetailCrm\Api\Model\Response\Loyalty
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace RetailCrm\Api\Model\Response\Loyalty;
|
||||||
|
|
||||||
|
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
||||||
|
use RetailCrm\Api\Model\Response\SuccessResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class LoyaltyResponse
|
||||||
|
*
|
||||||
|
* @category LoyaltyResponse
|
||||||
|
* @package RetailCrm\Api\Model\Response\Loyalty
|
||||||
|
*/
|
||||||
|
class LoyaltyResponse extends SuccessResponse
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \RetailCrm\Api\Model\Entity\Loyalty\Loyalty
|
||||||
|
*
|
||||||
|
* @JMS\Type("RetailCrm\Api\Model\Entity\Loyalty\Loyalty")
|
||||||
|
* @JMS\SerializedName("loyalty")
|
||||||
|
*/
|
||||||
|
public $loyalty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array<string, mixed>
|
||||||
|
*
|
||||||
|
* @JMS\Type("array")
|
||||||
|
* @JMS\SerializedName("requiredFields")
|
||||||
|
*/
|
||||||
|
public $requiredFields;
|
||||||
|
}
|
@ -20,10 +20,12 @@ use RetailCrm\Api\Model\Request\Loyalty\LoyaltyCalculateRequest;
|
|||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltiesResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltiesResponse;
|
||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountActivateResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountActivateResponse;
|
||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountCreateResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountCreateResponse;
|
||||||
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountResponse;
|
||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountsResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountsResponse;
|
||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyBonusCreditResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyBonusCreditResponse;
|
||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyBonusOperationsResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyBonusOperationsResponse;
|
||||||
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyCalculateResponse;
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyCalculateResponse;
|
||||||
|
use RetailCrm\Api\Model\Response\Loyalty\LoyaltyResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Loyalty
|
* Class Loyalty
|
||||||
@ -406,6 +408,60 @@ class Loyalty extends AbstractApiResourceGroup
|
|||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes GET "/api/v5/loyalty/account/{id}" request.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```php
|
||||||
|
* use RetailCrm\Api\Factory\SimpleClientFactory;
|
||||||
|
* use RetailCrm\Api\Interfaces\ApiExceptionInterface;
|
||||||
|
*
|
||||||
|
* $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey');
|
||||||
|
*
|
||||||
|
* try {
|
||||||
|
* $response = $client->loyalty->accountGet(1);
|
||||||
|
* } catch (ApiExceptionInterface $exception) {
|
||||||
|
* echo sprintf(
|
||||||
|
* 'Error from RetailCRM API (status code: %d): %s',
|
||||||
|
* $exception->getStatusCode(),
|
||||||
|
* $exception->getMessage()
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* if (count($exception->getErrorResponse()->errors) > 0) {
|
||||||
|
* echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* return;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* echo 'Current loyalty account balance: ' . $response->loyaltyAccount->amount . ' bonuses.';
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
*
|
||||||
|
* @return \RetailCrm\Api\Model\Response\Loyalty\LoyaltyAccountResponse
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\AccountDoesNotExistException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\ApiErrorException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\MissingCredentialsException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\MissingParameterException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\ValidationException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Client\HandlerException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Client\HttpClientException
|
||||||
|
* @throws \RetailCrm\Api\Interfaces\ApiExceptionInterface
|
||||||
|
* @throws \RetailCrm\Api\Interfaces\ClientExceptionInterface
|
||||||
|
*/
|
||||||
|
public function accountGet(int $id): LoyaltyAccountResponse
|
||||||
|
{
|
||||||
|
/** @var LoyaltyAccountResponse $response */
|
||||||
|
$response = $this->sendRequest(
|
||||||
|
RequestMethod::GET,
|
||||||
|
'loyalty/account/' . $id,
|
||||||
|
null,
|
||||||
|
LoyaltyAccountResponse::class
|
||||||
|
);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes POST "/api/v5/loyalty/calculate" request.
|
* Makes POST "/api/v5/loyalty/calculate" request.
|
||||||
*
|
*
|
||||||
@ -546,4 +602,58 @@ class Loyalty extends AbstractApiResourceGroup
|
|||||||
);
|
);
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes GET "/api/v5/loyalty/loyalties/{id}" request.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```php
|
||||||
|
* use RetailCrm\Api\Factory\SimpleClientFactory;
|
||||||
|
* use RetailCrm\Api\Interfaces\ApiExceptionInterface;
|
||||||
|
*
|
||||||
|
* $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey');
|
||||||
|
*
|
||||||
|
* try {
|
||||||
|
* $response = $client->loyalty->get(1);
|
||||||
|
* } catch (ApiExceptionInterface $exception) {
|
||||||
|
* echo sprintf(
|
||||||
|
* 'Error from RetailCRM API (status code: %d): %s',
|
||||||
|
* $exception->getStatusCode(),
|
||||||
|
* $exception->getMessage()
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* if (count($exception->getErrorResponse()->errors) > 0) {
|
||||||
|
* echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* return;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* echo 'Loyalty program name: ' . $response->loyalty->name;
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
*
|
||||||
|
* @return \RetailCrm\Api\Model\Response\Loyalty\LoyaltyResponse
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\AccountDoesNotExistException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\ApiErrorException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\MissingCredentialsException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\MissingParameterException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Api\ValidationException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Client\HandlerException
|
||||||
|
* @throws \RetailCrm\Api\Exception\Client\HttpClientException
|
||||||
|
* @throws \RetailCrm\Api\Interfaces\ApiExceptionInterface
|
||||||
|
* @throws \RetailCrm\Api\Interfaces\ClientExceptionInterface
|
||||||
|
*/
|
||||||
|
public function get(int $id): LoyaltyResponse
|
||||||
|
{
|
||||||
|
/** @var LoyaltyResponse $response */
|
||||||
|
$response = $this->sendRequest(
|
||||||
|
RequestMethod::GET,
|
||||||
|
'loyalty/loyalties/' . $id,
|
||||||
|
null,
|
||||||
|
LoyaltyResponse::class
|
||||||
|
);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -595,6 +595,55 @@ EOF;
|
|||||||
self::assertModelEqualsToResponse($json, $response);
|
self::assertModelEqualsToResponse($json, $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAccountGet(): void
|
||||||
|
{
|
||||||
|
$json = <<<'EOF'
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"loyaltyAccount": {
|
||||||
|
"active": false,
|
||||||
|
"id": 168,
|
||||||
|
"loyalty": {
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
"customer": {
|
||||||
|
"id": 5260,
|
||||||
|
"externalId": "5",
|
||||||
|
"site": "bitrix-test",
|
||||||
|
"customFields": {
|
||||||
|
"galkatrue": true
|
||||||
|
},
|
||||||
|
"firstName": "admincd"
|
||||||
|
},
|
||||||
|
"phoneNumber": "89226234577",
|
||||||
|
"amount": 0,
|
||||||
|
"ordersSum": 0,
|
||||||
|
"nextLevelSum": 10000,
|
||||||
|
"level": {
|
||||||
|
"type": "discount",
|
||||||
|
"id": 21,
|
||||||
|
"name": "Скидочный",
|
||||||
|
"privilegeSize": 20,
|
||||||
|
"privilegeSizePromo": 30
|
||||||
|
},
|
||||||
|
"createdAt": "2021-06-21 14:35:55",
|
||||||
|
"status": "not_confirmed",
|
||||||
|
"customFields": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
$mock = static::createApiMockBuilder('loyalty/account/168');
|
||||||
|
$mock->matchMethod(RequestMethod::GET)
|
||||||
|
->reply(200)
|
||||||
|
->withBody($json);
|
||||||
|
|
||||||
|
$client = TestClientFactory::createClient($mock->getClient());
|
||||||
|
$response = $client->loyalty->accountGet(168);
|
||||||
|
|
||||||
|
self::assertModelEqualsToResponse($json, $response);
|
||||||
|
}
|
||||||
|
|
||||||
public function testCalculate(): void
|
public function testCalculate(): void
|
||||||
{
|
{
|
||||||
$json = <<<'EOF'
|
$json = <<<'EOF'
|
||||||
@ -731,4 +780,34 @@ EOF;
|
|||||||
|
|
||||||
self::assertModelEqualsToResponse($json, $response);
|
self::assertModelEqualsToResponse($json, $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testLoyaltiesGet(): void
|
||||||
|
{
|
||||||
|
$json = <<<'EOF'
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"loyalty": {
|
||||||
|
"active": true,
|
||||||
|
"blocked": false,
|
||||||
|
"id": 4,
|
||||||
|
"name": "Битрикс новый",
|
||||||
|
"confirmSmsCharge": false,
|
||||||
|
"confirmSmsRegistration": false,
|
||||||
|
"createdAt": "2021-03-17 18:08:02",
|
||||||
|
"activatedAt": "2021-03-17 18:09:43"
|
||||||
|
},
|
||||||
|
"requiredFields": []
|
||||||
|
}
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
$mock = static::createApiMockBuilder('loyalty/loyalties/4');
|
||||||
|
$mock->matchMethod(RequestMethod::GET)
|
||||||
|
->reply(200)
|
||||||
|
->withBody($json);
|
||||||
|
|
||||||
|
$client = TestClientFactory::createClient($mock->getClient());
|
||||||
|
$response = $client->loyalty->get(4);
|
||||||
|
|
||||||
|
self::assertModelEqualsToResponse($json, $response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ namespace RetailCrm\Tests\ResourceGroup;
|
|||||||
|
|
||||||
use DateInterval;
|
use DateInterval;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use Psr\Http\Message\RequestInterface;
|
||||||
use RetailCrm\Api\Enum\ByIdentifier;
|
use RetailCrm\Api\Enum\ByIdentifier;
|
||||||
use RetailCrm\Api\Enum\CombineTechnique;
|
use RetailCrm\Api\Enum\CombineTechnique;
|
||||||
use RetailCrm\Api\Enum\CountryCodeIso3166;
|
use RetailCrm\Api\Enum\CountryCodeIso3166;
|
||||||
@ -958,6 +959,12 @@ EOF;
|
|||||||
$mock = static::createApiMockBuilder('orders/create');
|
$mock = static::createApiMockBuilder('orders/create');
|
||||||
$mock->matchMethod(RequestMethod::POST)
|
$mock->matchMethod(RequestMethod::POST)
|
||||||
->matchBody(static::encodeForm($request))
|
->matchBody(static::encodeForm($request))
|
||||||
|
->matchCallback(static function (RequestInterface $request) {
|
||||||
|
$data = [];
|
||||||
|
parse_str((string) $request->getBody(), $data);
|
||||||
|
|
||||||
|
return false !== strpos($data['order'] ?? '', '"customer":{"id":4924}');
|
||||||
|
})
|
||||||
->reply(200)
|
->reply(200)
|
||||||
->withBody($json);
|
->withBody($json);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user