diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index ab5113f52..10f149a5f 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -32,7 +32,7 @@ jobs: target_directory: 'src' phpstan: name: PHPStan - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest steps: - name: Check out code into the workspace uses: actions/checkout@v2 diff --git a/src/Model/Entity/Loyalty/SerializedLoyaltyOrder.php b/src/Model/Entity/Loyalty/SerializedLoyaltyOrder.php index 53ea74e13..966efdadf 100644 --- a/src/Model/Entity/Loyalty/SerializedLoyaltyOrder.php +++ b/src/Model/Entity/Loyalty/SerializedLoyaltyOrder.php @@ -116,4 +116,12 @@ class SerializedLoyaltyOrder * @JMS\SerializedName("items") */ public $items; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("currency") + */ + public $currency; } diff --git a/src/Model/Entity/Orders/LinkedOrder.php b/src/Model/Entity/Orders/LinkedOrder.php new file mode 100644 index 000000000..4747ab28c --- /dev/null +++ b/src/Model/Entity/Orders/LinkedOrder.php @@ -0,0 +1,45 @@ +") + * @JMS\SerializedName("links") + */ + public $links; + /** * @var bool * diff --git a/src/Model/Entity/Orders/OrderLink.php b/src/Model/Entity/Orders/OrderLink.php new file mode 100644 index 000000000..de909c20c --- /dev/null +++ b/src/Model/Entity/Orders/OrderLink.php @@ -0,0 +1,46 @@ +") + * @JMS\SerializedName("order") + */ + public $order; + + /** + * @var DateTime + * + * @JMS\Type("DateTime<'Y-m-d H:i:s'>") + * @JMS\SerializedName("createdAt") + */ + public $createdAt; +} diff --git a/src/Model/Entity/References/PriceType.php b/src/Model/Entity/References/PriceType.php index da5c28294..1e4ac6c3d 100644 --- a/src/Model/Entity/References/PriceType.php +++ b/src/Model/Entity/References/PriceType.php @@ -75,6 +75,14 @@ class PriceType */ public $filterExpression; + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("currency") + */ + public $currency; + /** * @var \RetailCrm\Api\Model\Entity\References\GeoHierarchyRow[] * diff --git a/src/Model/Entity/Store/OfferPrice.php b/src/Model/Entity/Store/OfferPrice.php index c03f8297e..32072c771 100644 --- a/src/Model/Entity/Store/OfferPrice.php +++ b/src/Model/Entity/Store/OfferPrice.php @@ -42,4 +42,12 @@ class OfferPrice * @JMS\SerializedName("ordering") */ public $ordering; + + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("currency") + */ + public $currency; } diff --git a/src/Model/Entity/Users/User.php b/src/Model/Entity/Users/User.php index 2ce95d118..320e78a23 100644 --- a/src/Model/Entity/Users/User.php +++ b/src/Model/Entity/Users/User.php @@ -76,6 +76,14 @@ class User */ public $patronymic; + /** + * @var string + * + * @JMS\Type("string") + * @JMS\SerializedName("position") + */ + public $position; + /** * @var string * diff --git a/src/Model/Filter/Orders/OrderFilter.php b/src/Model/Filter/Orders/OrderFilter.php index e55153713..481a7a3a4 100644 --- a/src/Model/Filter/Orders/OrderFilter.php +++ b/src/Model/Filter/Orders/OrderFilter.php @@ -512,6 +512,14 @@ class OrderFilter */ public $deliveryTypes; + /** + * @var string[] + * + * @Form\Type("string[]") + * @Form\SerializedName("deliveryServices") + */ + public $deliveryServices; + /** * @var string[] * diff --git a/src/Model/Request/References/CurrenciesCreateRequest.php b/src/Model/Request/References/CurrenciesCreateRequest.php index d3cd46d12..edc4e7f79 100644 --- a/src/Model/Request/References/CurrenciesCreateRequest.php +++ b/src/Model/Request/References/CurrenciesCreateRequest.php @@ -22,7 +22,7 @@ class CurrenciesCreateRequest implements RequestInterface { /** - * @var \RetailCrm\Api\Model\Entity\References\Currency + * @var \RetailCrm\Api\Model\Entity\References\Currency|null * * @Form\Type("RetailCrm\Api\Model\Entity\References\Currency") * @Form\SerializedName("currency") diff --git a/src/ResourceGroup/WebAnalytics.php b/src/ResourceGroup/WebAnalytics.php index cf85087bc..b15356f73 100644 --- a/src/ResourceGroup/WebAnalytics.php +++ b/src/ResourceGroup/WebAnalytics.php @@ -26,6 +26,56 @@ class WebAnalytics extends AbstractApiResourceGroup { /** + * + * Makes POST "/api/v5/web-analytics/client-ids/upload" request. + * + * Example: + * ```php + * use RetailCrm\Api\Factory\SimpleClientFactory; + * use RetailCrm\Api\Interfaces\ApiExceptionInterface; + * use RetailCrm\Api\Model\Entity\WebAnalytics\Customer; + * use RetailCrm\Api\Model\Entity\WebAnalytics\Order; + * use RetailCrm\Api\Model\Entity\WebAnalytics\Source; + * use RetailCrm\Api\Model\Request\WebAnalytics\SourcesUploadRequest; + * + * $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); + * + * $entity = new Source(); + * $entity->source = "sourse"; + * $entity->medium = "medium"; + * $entity->campaign = "campaign"; + * $entity->keyword = "keyword"; + * $entity->content = "content"; + * $entity->clientId = "10"; + * $entity->order = new Order(); + * $entity->order->id = 10; + * $entity->order->externalId = "externalId"; + * $entity->order->number = "number"; + * $entity->customer = new Customer(); + * $entity->customer->id = 10; + * $entity->customer->externalId = 'externalId'; + * + * $request = new SourcesUploadRequest([$entity]); + * + * try { + * $response = $client->webAnalytics->sourcesUpload($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 'Upload is successful'; + * ``` + * * @param \RetailCrm\Api\Model\Request\WebAnalytics\SourcesUploadRequest $request * * @return \RetailCrm\Api\Model\Response\WebAnalytics\SourcesUploadResponse @@ -53,6 +103,51 @@ public function sourcesUpload(SourcesUploadRequest $request): SourcesUploadRespo } /** + * + * Makes POST "/api/v5/web-analytics/client-ids/upload" request. + * + * Example: + * ```php + * use RetailCrm\Api\Factory\SimpleClientFactory; + * use RetailCrm\Api\Interfaces\ApiExceptionInterface; + * use RetailCrm\Api\Model\Entity\WebAnalytics\ClientId; + * use RetailCrm\Api\Model\Entity\WebAnalytics\Customer; + * use RetailCrm\Api\Model\Entity\WebAnalytics\Order; + * use RetailCrm\Api\Model\Request\WebAnalytics\ClientIdUploadRequest; + * + * $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey'); + * + * $entity = new ClientId(); + * $entity->value = 'value'; + * $entity->order = new Order(); + * $entity->order->id = 10; + * $entity->order->externalId = 'externalId'; + * $entity->order->number = 'number'; + * $entity->customer = new Customer(); + * $entity->customer->id = 10; + * $entity->customer->externalId = 'externalId'; + * + * $request = new ClientIdUploadRequest([$entity]); + * + * try { + * $response = $client->webAnalytics->clientIdsUpload($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 'Upload is successful'; + * ``` + * * @param \RetailCrm\Api\Model\Request\WebAnalytics\ClientIdUploadRequest $request * * @return \RetailCrm\Api\Model\Response\WebAnalytics\ClientIdUploadResponse diff --git a/tests/src/ResourceGroup/WebAnalyticsTest.php b/tests/src/ResourceGroup/WebAnalyticsTest.php new file mode 100644 index 000000000..dd08fa079 --- /dev/null +++ b/tests/src/ResourceGroup/WebAnalyticsTest.php @@ -0,0 +1,100 @@ +value = 'value'; + $entity->order = new Order(); + $entity->order->id = 10; + $entity->order->externalId = 'externalId'; + $entity->order->number = 'number'; + $entity->customer = new Customer(); + $entity->customer->id = 10; + $entity->customer->externalId = 'externalId'; + + $request = new ClientIdUploadRequest([$entity]); + + $mock = static::createApiMockBuilder('web-analytics/client-ids/upload'); + $mock->matchMethod(RequestMethod::POST) + ->matchBody(self::encodeForm($request)) + ->reply(201) + ->withBody($json); + + $client = TestClientFactory::createClient($mock->getClient()); + $response = $client->webAnalytics->clientIdsUpload($request); + + self::assertModelEqualsToResponse($json, $response); + } + + public function testSourcesUpload(): void + { + $json = <<<'EOF' +{ + "success": true +} +EOF; + + $entity = new Source(); + $entity->source = "sourse"; + $entity->medium = "medium"; + $entity->campaign = "campaign"; + $entity->keyword = "keyword"; + $entity->content = "content"; + $entity->clientId = "10"; + $entity->order = new Order(); + $entity->order->id = 10; + $entity->order->externalId = "externalId"; + $entity->order->number = "number"; + $entity->customer = new Customer(); + $entity->customer->id = 10; + $entity->customer->externalId = 'externalId'; + + $request = new SourcesUploadRequest([$entity]); + + $mock = static::createApiMockBuilder('web-analytics/sources/upload'); + $mock->matchMethod(RequestMethod::POST) + ->matchBody(self::encodeForm($request)) + ->reply(201) + ->withBody($json); + + $client = TestClientFactory::createClient($mock->getClient()); + $response = $client->webAnalytics->sourcesUpload($request); + + self::assertModelEqualsToResponse($json, $response); + } +}