Add support for GET /api/v5/properties/values method
This commit is contained in:
parent
5b04bd9d8a
commit
dc9e0a5b39
45
src/Model/Entity/Store/ProductPropertyValue.php
Normal file
45
src/Model/Entity/Store/ProductPropertyValue.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP version 7.3
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValue
|
||||||
|
* @package RetailCrm\Api\Model\Entity\Store
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace RetailCrm\Api\Model\Entity\Store;
|
||||||
|
|
||||||
|
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ProductPropertyValue
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValue
|
||||||
|
* @package RetailCrm\Api\Model\Entity\Store
|
||||||
|
*/
|
||||||
|
class ProductPropertyValue
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \RetailCrm\Api\Model\Entity\Store\ProductProperty
|
||||||
|
*
|
||||||
|
* @JMS\Type("RetailCrm\Api\Model\Entity\Store\ProductProperty")
|
||||||
|
* @JMS\SerializedName("property")
|
||||||
|
*/
|
||||||
|
public $property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @JMS\Type("string")
|
||||||
|
* @JMS\SerializedName("value")
|
||||||
|
*/
|
||||||
|
public $value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*
|
||||||
|
* @JMS\Type("int")
|
||||||
|
* @JMS\SerializedName("offersCount")
|
||||||
|
*/
|
||||||
|
public $offersCount;
|
||||||
|
}
|
45
src/Model/Filter/Store/ProductPropertyValuesFilterType.php
Normal file
45
src/Model/Filter/Store/ProductPropertyValuesFilterType.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP version 7.3
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValuesFilterType
|
||||||
|
* @package RetailCrm\Api\Model\Filter\Store
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace RetailCrm\Api\Model\Filter\Store;
|
||||||
|
|
||||||
|
use RetailCrm\Api\Component\FormData\Mapping as Form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ProductPropertyValuesFilterType
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValuesFilterType
|
||||||
|
* @package RetailCrm\Api\Model\Filter\Store
|
||||||
|
*/
|
||||||
|
class ProductPropertyValuesFilterType
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @Form\Type("string")
|
||||||
|
* @Form\SerializedName("propertyName")
|
||||||
|
*/
|
||||||
|
public $propertyName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @Form\Type("string")
|
||||||
|
* @Form\SerializedName("propertyCode")
|
||||||
|
*/
|
||||||
|
public $propertyCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int[]
|
||||||
|
*
|
||||||
|
* @Form\Type("int[]")
|
||||||
|
* @Form\SerializedName("groups")
|
||||||
|
*/
|
||||||
|
public $groups;
|
||||||
|
}
|
33
src/Model/Request/Store/ProductPropertyValuesRequest.php
Normal file
33
src/Model/Request/Store/ProductPropertyValuesRequest.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP version 7.3
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValuesRequest
|
||||||
|
* @package RetailCrm\Api\Model\Request\Store
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace RetailCrm\Api\Model\Request\Store;
|
||||||
|
|
||||||
|
use RetailCrm\Api\Component\FormData\Mapping as Form;
|
||||||
|
use RetailCrm\Api\Interfaces\RequestInterface;
|
||||||
|
use RetailCrm\Api\Model\Request\Traits\PageLimitTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ProductPropertyValuesRequest
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValuesRequest
|
||||||
|
* @package RetailCrm\Api\Model\Request\Store
|
||||||
|
*/
|
||||||
|
class ProductPropertyValuesRequest implements RequestInterface
|
||||||
|
{
|
||||||
|
use PageLimitTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \RetailCrm\Api\Model\Filter\Store\ProductPropertyValuesFilterType
|
||||||
|
*
|
||||||
|
* @Form\Type("RetailCrm\Api\Model\Filter\Store\ProductPropertyValuesFilterType")
|
||||||
|
* @Form\SerializedName("filter")
|
||||||
|
*/
|
||||||
|
public $filter;
|
||||||
|
}
|
31
src/Model/Response/Store/ProductPropertyValuesResponse.php
Normal file
31
src/Model/Response/Store/ProductPropertyValuesResponse.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP version 7.3
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValuesResponse
|
||||||
|
* @package RetailCrm\Api\Model\Response\Store
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace RetailCrm\Api\Model\Response\Store;
|
||||||
|
|
||||||
|
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
|
||||||
|
use RetailCrm\Api\Model\Response\AbstractPaginatedResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ProductPropertyValuesResponse
|
||||||
|
*
|
||||||
|
* @category ProductPropertyValuesResponse
|
||||||
|
* @package RetailCrm\Api\Model\Response\Store
|
||||||
|
* @SuppressWarnings(PHPMD.LongVariable)
|
||||||
|
*/
|
||||||
|
class ProductPropertyValuesResponse extends AbstractPaginatedResponse
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \RetailCrm\Api\Model\Entity\Store\ProductPropertyValue[]
|
||||||
|
*
|
||||||
|
* @JMS\Type("array<RetailCrm\Api\Model\Entity\Store\ProductPropertyValue>")
|
||||||
|
* @JMS\SerializedName("productPropertyValues")
|
||||||
|
*/
|
||||||
|
public $productPropertyValues;
|
||||||
|
}
|
@ -18,6 +18,7 @@ use RetailCrm\Api\Model\Request\Store\ProductGroupsCreateRequest;
|
|||||||
use RetailCrm\Api\Model\Request\Store\ProductGroupsEditRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductGroupsEditRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductGroupsRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductGroupsRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
|
||||||
|
use RetailCrm\Api\Model\Request\Store\ProductPropertyValuesRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductsBatchCreateRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductsBatchCreateRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductsRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductsRequest;
|
||||||
use RetailCrm\Api\Model\Response\IdResponse;
|
use RetailCrm\Api\Model\Response\IdResponse;
|
||||||
@ -27,6 +28,7 @@ use RetailCrm\Api\Model\Response\Store\PricesUploadResponse;
|
|||||||
use RetailCrm\Api\Model\Response\Store\ProductBatchEditResponse;
|
use RetailCrm\Api\Model\Response\Store\ProductBatchEditResponse;
|
||||||
use RetailCrm\Api\Model\Response\Store\ProductGroupsResponse;
|
use RetailCrm\Api\Model\Response\Store\ProductGroupsResponse;
|
||||||
use RetailCrm\Api\Model\Response\Store\ProductPropertiesResponse;
|
use RetailCrm\Api\Model\Response\Store\ProductPropertiesResponse;
|
||||||
|
use RetailCrm\Api\Model\Response\Store\ProductPropertyValuesResponse;
|
||||||
use RetailCrm\Api\Model\Response\Store\ProductsBatchCreateResponse;
|
use RetailCrm\Api\Model\Response\Store\ProductsBatchCreateResponse;
|
||||||
use RetailCrm\Api\Model\Response\Store\ProductsResponse;
|
use RetailCrm\Api\Model\Response\Store\ProductsResponse;
|
||||||
|
|
||||||
@ -690,4 +692,64 @@ class Store extends AbstractApiResourceGroup
|
|||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes GET "/api/v5/store/products/properties/values" request.
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* ```php
|
||||||
|
* use RetailCrm\Api\Factory\SimpleClientFactory;
|
||||||
|
* use RetailCrm\Api\Interfaces\ApiExceptionInterface;
|
||||||
|
* use RetailCrm\Api\Model\Filter\Store\ProductPropertiesFilterType;
|
||||||
|
* use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
|
||||||
|
*
|
||||||
|
* $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey');
|
||||||
|
*
|
||||||
|
* $request = new ProductPropertyValuesRequest();
|
||||||
|
* $request->filter = new ProductPropertyValuesFilterType();
|
||||||
|
* $request->filter->propertyCode = 'property_code';
|
||||||
|
*
|
||||||
|
* try {
|
||||||
|
* $response = $client->store->productsPropertyValues($request);
|
||||||
|
* } 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 'Product property values: ' . print_r($response->productPropertyValues, true);
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @param \RetailCrm\Api\Model\Request\Store\ProductPropertyValuesRequest|null $request
|
||||||
|
*
|
||||||
|
* @return \RetailCrm\Api\Model\Response\Store\ProductPropertyValuesResponse
|
||||||
|
* @throws \RetailCrm\Api\Interfaces\ApiExceptionInterface
|
||||||
|
* @throws \RetailCrm\Api\Interfaces\ClientExceptionInterface
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
public function productsPropertyValues(?ProductPropertyValuesRequest $request = null): ProductPropertyValuesResponse
|
||||||
|
{
|
||||||
|
/** @var ProductPropertyValuesResponse $response */
|
||||||
|
$response = $this->sendRequest(
|
||||||
|
RequestMethod::GET,
|
||||||
|
'store/products/properties/values',
|
||||||
|
$request,
|
||||||
|
ProductPropertyValuesResponse::class
|
||||||
|
);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ use RetailCrm\Api\Model\Filter\Store\InventoryFilterType;
|
|||||||
use RetailCrm\Api\Model\Filter\Store\ProductFilterType;
|
use RetailCrm\Api\Model\Filter\Store\ProductFilterType;
|
||||||
use RetailCrm\Api\Model\Filter\Store\ProductGroupFilterType;
|
use RetailCrm\Api\Model\Filter\Store\ProductGroupFilterType;
|
||||||
use RetailCrm\Api\Model\Filter\Store\ProductPropertiesFilterType;
|
use RetailCrm\Api\Model\Filter\Store\ProductPropertiesFilterType;
|
||||||
|
use RetailCrm\Api\Model\Filter\Store\ProductPropertyValuesFilterType;
|
||||||
use RetailCrm\Api\Model\Request\Store\InventoriesRequest;
|
use RetailCrm\Api\Model\Request\Store\InventoriesRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\InventoriesUploadRequest;
|
use RetailCrm\Api\Model\Request\Store\InventoriesUploadRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\PricesUploadRequest;
|
use RetailCrm\Api\Model\Request\Store\PricesUploadRequest;
|
||||||
@ -34,6 +35,7 @@ use RetailCrm\Api\Model\Request\Store\ProductGroupsEditRequest;
|
|||||||
use RetailCrm\Api\Model\Request\Store\ProductGroupsRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductGroupsRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductPropertiesSort;
|
use RetailCrm\Api\Model\Request\Store\ProductPropertiesSort;
|
||||||
|
use RetailCrm\Api\Model\Request\Store\ProductPropertyValuesRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductsBatchCreateRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductsBatchCreateRequest;
|
||||||
use RetailCrm\Api\Model\Request\Store\ProductsRequest;
|
use RetailCrm\Api\Model\Request\Store\ProductsRequest;
|
||||||
use RetailCrm\TestUtils\Factory\TestClientFactory;
|
use RetailCrm\TestUtils\Factory\TestClientFactory;
|
||||||
@ -783,4 +785,76 @@ EOF;
|
|||||||
|
|
||||||
self::assertModelEqualsToResponse($json, $response);
|
self::assertModelEqualsToResponse($json, $response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testProductPropertyValues(): void
|
||||||
|
{
|
||||||
|
$json = <<<'EOF'
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"pagination": {
|
||||||
|
"limit": 20,
|
||||||
|
"totalCount": 1,
|
||||||
|
"currentPage": 1,
|
||||||
|
"totalPageCount": 1
|
||||||
|
},
|
||||||
|
"productPropertyValues": [
|
||||||
|
{
|
||||||
|
"property": {
|
||||||
|
"sites": [
|
||||||
|
"e-mapper",
|
||||||
|
"sendpulse",
|
||||||
|
"glavpunkt",
|
||||||
|
"retailcrm-services-peshkariki",
|
||||||
|
"vk-com",
|
||||||
|
"moysklad",
|
||||||
|
"eftestshop-ru"
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"id": 3676,
|
||||||
|
"name": "warehouseRoot"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3679,
|
||||||
|
"name": "Входящая в группу"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3680,
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3724,
|
||||||
|
"name": "Услуги"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"code": "code",
|
||||||
|
"name": "Код",
|
||||||
|
"isNumeric": false,
|
||||||
|
"visible": true,
|
||||||
|
"variative": true
|
||||||
|
},
|
||||||
|
"value": "testValue",
|
||||||
|
"offersCount": 10
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
$request = new ProductPropertyValuesRequest();
|
||||||
|
$request->filter = new ProductPropertyValuesFilterType();
|
||||||
|
$request->filter->propertyName = "testName";
|
||||||
|
$request->filter->propertyCode = "testCode";
|
||||||
|
$request->filter->groups = [1, 2, 3];
|
||||||
|
|
||||||
|
$mock = static::createApiMockBuilder('store/products/properties/values');
|
||||||
|
$mock->matchMethod(RequestMethod::GET)
|
||||||
|
->matchQuery(self::encodeFormArray($request))
|
||||||
|
->reply(200)
|
||||||
|
->withBody($json);
|
||||||
|
|
||||||
|
$client = TestClientFactory::createClient($mock->getClient());
|
||||||
|
$response = $client->store->productsPropertyValues($request);
|
||||||
|
|
||||||
|
self::assertModelEqualsToResponse($json, $response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user