diff --git a/CHANGELOG.md b/CHANGELOG.md index b1a88b7..482b753 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## v1.12.1 - 2020-08-04 +### Fixes + - Fix missing payment_voucher param and retro compatibility problem on TL01 + +## v1.12.0 - 2020-07-28 +### Features + - Add requirement level for attributes (PM11) + - Add KYC information for A01, S06, S07 & S20 API clients + - Add M10, M11, M12, M13 AN OR43 in SDK + ## v1.11.1 - 2020-01-16 ### Fixes - Fix XML responses that may not be parsed correctly diff --git a/composer.json b/composer.json index 77d8ede..4ac18f7 100755 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "mirakl/sdk-php-shop", "description": "Mirakl provides a PHP SDK that wraps the Mirakl REST APIs in a lightweight library. This enables you to develop a fast, flexible and custom integration for your existing e-commerce solution.", "type": "library", - "version": "1.11.1", + "version": "1.12.1", "license": "proprietary", "authors": [ { diff --git a/src/Mirakl/Core/Domain/DateFieldsTrait.php b/src/Mirakl/Core/Domain/DateFieldsTrait.php index eb4fe52..04df3f0 100755 --- a/src/Mirakl/Core/Domain/DateFieldsTrait.php +++ b/src/Mirakl/Core/Domain/DateFieldsTrait.php @@ -15,6 +15,6 @@ trait DateFieldsTrait 'created_date', 'debited_date', 'received_date', 'shipped_date', 'date_uploaded', 'date_deleted', 'start_update_date', 'end_update_date', 'accounting_document_creation_date', 'customer_debited_date', 'expiration_date', 'date_created_from', 'date_created_to', 'discount_start_date', 'discount_end_date', - 'updated_since', 'last_updated', 'creation_date', 'update_date', 'shipping_deadline' + 'updated_since', 'last_updated', 'creation_date', 'update_date', 'shipping_deadline', 'date_updated' ]; } \ No newline at end of file diff --git a/src/Mirakl/Core/Request/AbstractRequest.php b/src/Mirakl/Core/Request/AbstractRequest.php index 4d819a7..b0bf500 100755 --- a/src/Mirakl/Core/Request/AbstractRequest.php +++ b/src/Mirakl/Core/Request/AbstractRequest.php @@ -14,6 +14,7 @@ * @method int getMax() * @method int getOffset() * @method string getPageToken() + * @method int getLimit() * @method bool getPaginate() * @method array getProductReferences() * @method \DateTime getStartDate() @@ -188,6 +189,10 @@ public function getQueryParams() $params['page_token'] = $this->getPageToken(); } + if ($this->getLimit()) { + $params['limit'] = $this->getLimit(); + } + /** @see SortableTrait */ if ($this->getSortBy()) { $params['sort'] = $this->getSortBy(); diff --git a/src/Mirakl/Core/Request/SeekableTrait.php b/src/Mirakl/Core/Request/SeekableTrait.php index a7f0c54..38ff5d0 100644 --- a/src/Mirakl/Core/Request/SeekableTrait.php +++ b/src/Mirakl/Core/Request/SeekableTrait.php @@ -8,7 +8,7 @@ trait SeekableTrait * * @var int */ - protected $limit = 10; + protected $limit; /** * Indicate whether or not this API should return the page associated to this token. diff --git a/src/Mirakl/MCI/Common/Domain/Attribute.php b/src/Mirakl/MCI/Common/Domain/Attribute.php index 69ba213..7c150c3 100755 --- a/src/Mirakl/MCI/Common/Domain/Attribute.php +++ b/src/Mirakl/MCI/Common/Domain/Attribute.php @@ -22,6 +22,8 @@ * @method ValueTranslationCollection getLabelTranslations() * @method bool getRequired() * @method $this setRequired(bool $required) + * @method string getRequirementLevel() + * @method $this setRequirementLevel(bool $requirementLevel) * @method bool isRequired() * @method AttributeRoleCollection getRoles() * @method $this setRoles(AttributeRoleCollection $roles) diff --git a/src/Mirakl/MCI/Common/Domain/AttributeRequirementLevel.php b/src/Mirakl/MCI/Common/Domain/AttributeRequirementLevel.php new file mode 100644 index 0000000..5760ace --- /dev/null +++ b/src/Mirakl/MCI/Common/Domain/AttributeRequirementLevel.php @@ -0,0 +1,10 @@ + 'import_id', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Domain/Hierarchy/HierarchyImportResult.php b/src/Mirakl/MCI/Front/Domain/Hierarchy/HierarchyImportResult.php new file mode 100644 index 0000000..ea204a6 --- /dev/null +++ b/src/Mirakl/MCI/Front/Domain/Hierarchy/HierarchyImportResult.php @@ -0,0 +1,7 @@ + 'import_id', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Domain/ValueList/ValueListImportResult.php b/src/Mirakl/MCI/Front/Domain/ValueList/ValueListImportResult.php new file mode 100644 index 0000000..8480696 --- /dev/null +++ b/src/Mirakl/MCI/Front/Domain/ValueList/ValueListImportResult.php @@ -0,0 +1,7 @@ + 'import_id', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportErrorReportRequest.php b/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportErrorReportRequest.php new file mode 100644 index 0000000..c89c55d --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportErrorReportRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Attribute\AttributeImportErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new AttributeImportErrorReportRequest('IMPORT_ID'); + * $result = $api->getAttributeImportErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class AttributeImportErrorReportRequest extends AbstractImportRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/products/attributes/imports/{import}/error_report'; +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportRequest.php b/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportRequest.php new file mode 100644 index 0000000..3d71340 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportRequest.php @@ -0,0 +1,37 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Attribute\AttributeImportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new AttributeImportRequest(new \SplFileObject('/path/to/file.csv')); + * $result = $api->importAttributes($request); + * // $result => @see \Mirakl\MCI\Front\Domain\Attribute\AttributeImportTracking + * + */ +class AttributeImportRequest extends AbstractFileRequest +{ + /** + * @var string + */ + protected $endpoint = '/products/attributes/imports'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return AttributeImportTracking::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportStatusRequest.php b/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportStatusRequest.php new file mode 100644 index 0000000..1a94d0e --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Attribute/AttributeImportStatusRequest.php @@ -0,0 +1,36 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Attribute\AttributeImportStatusRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new AttributeImportStatusRequest('IMPORT_ID'); + * $result = $api->getAttributeImportResult($request); + * // $result => @see \Mirakl\MCI\Front\Domain\Attribute\AttributeImportResult + * + */ +class AttributeImportStatusRequest extends AbstractImportRequest +{ + /** + * @var string + */ + protected $endpoint = '/products/attributes/imports/{import}'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return AttributeImportResult::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Attribute/GetAttributesRequest.php b/src/Mirakl/MCI/Front/Request/Attribute/GetAttributesRequest.php new file mode 100644 index 0000000..c47a933 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Attribute/GetAttributesRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Attribute\GetAttributesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetAttributesRequest(); + * $request->setHierarchyCode('HIERARCHY_CODE'); // Optional + * $request->setMaxLevel(2); // Optional (all children by default) + * $result = $api->getAttributes($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Collection\AttributeCollection + * + */ +class GetAttributesRequest extends AbstractGetAttributesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Hierarchy/GetHierarchiesRequest.php b/src/Mirakl/MCI/Front/Request/Hierarchy/GetHierarchiesRequest.php new file mode 100644 index 0000000..6bd03e5 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Hierarchy/GetHierarchiesRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Hierarchy\GetHierarchiesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetHierarchiesRequest(); + * $request->setHierarchyCode('HIERARCHY_CODE'); // Optional + * $request->setMaxLevel(2); // Optional (all children by default) + * $result = $api->getHierarchies($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Collection\HierarchyCollection + * + */ +class GetHierarchiesRequest extends AbstractGetHierarchiesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportErrorReportRequest.php b/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportErrorReportRequest.php new file mode 100644 index 0000000..15a9d8f --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportErrorReportRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Hierarchy\HierarchyImportErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new HierarchyImportErrorReportRequest('IMPORT_ID'); + * $result = $api->getHierarchyImportErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class HierarchyImportErrorReportRequest extends AbstractImportRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/hierarchies/imports/{import}/error_report'; +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportRequest.php b/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportRequest.php new file mode 100644 index 0000000..b288f8b --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportRequest.php @@ -0,0 +1,41 @@ + + * "hierarchy-code";"hierarchy-label";"hierarchy-parent-code";"update-delete" + * + * + * Example: + * + * + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Hierarchy\HierarchyImportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new HierarchyImportRequest(new \SplFileObject('/path/to/file.csv')); + * $result = $api->importHierarchies($request); + * // $result => @see \Mirakl\MCI\Front\Domain\Hierarchy\HierarchyImportTracking + * + */ +class HierarchyImportRequest extends AbstractFileRequest +{ + /** + * @var string + */ + protected $endpoint = '/hierarchies/imports'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return HierarchyImportTracking::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportStatusRequest.php b/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportStatusRequest.php new file mode 100644 index 0000000..9da0f96 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Hierarchy/HierarchyImportStatusRequest.php @@ -0,0 +1,36 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Hierarchy\HierarchyImportStatusRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new HierarchyImportStatusRequest('IMPORT_ID'); + * $result = $api->getHierarchyImportResult($request); + * // $result => @see \Mirakl\MCI\Front\Domain\Hierarchy\HierarchyImportResult + * + */ +class HierarchyImportStatusRequest extends AbstractImportRequest +{ + /** + * @var string + */ + protected $endpoint = '/hierarchies/imports/{import}'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return HierarchyImportResult::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportErrorReportRequest.php b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportErrorReportRequest.php new file mode 100644 index 0000000..784f17f --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportErrorReportRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\DownloadProductImportErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportErrorReportRequest('IMPORT_ID'); + * $result = $api->downloadProductImportErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportErrorReportRequest extends AbstractDownloadProductImportErrorReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportNewProductsReportRequest.php b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportNewProductsReportRequest.php new file mode 100644 index 0000000..7f3504b --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportNewProductsReportRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\DownloadProductImportNewProductsReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportNewProductsReportRequest('IMPORT_ID'); + * $result = $api->downloadProductImportNewProductsReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportNewProductsReportRequest extends AbstractDownloadProductImportNewProductsReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportTransformationErrorReportRequest.php b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportTransformationErrorReportRequest.php new file mode 100644 index 0000000..dcdaac9 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportTransformationErrorReportRequest.php @@ -0,0 +1,25 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\DownloadProductImportTransformationErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportTransformationErrorReportRequest('IMPORT_ID'); + * $result = $api->downloadProductImportTransformationErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportTransformationErrorReportRequest + extends AbstractDownloadProductImportTransformationErrorReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportTransformedFileRequest.php b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportTransformedFileRequest.php new file mode 100644 index 0000000..ff70920 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/DownloadProductImportTransformedFileRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\DownloadProductImportTransformedFileRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportTransformedFileRequest('IMPORT_ID'); + * $result = $api->downloadProductImportTransformedFile($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportTransformedFileRequest extends AbstractDownloadProductImportTransformedFileRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/ProductImportRequest.php b/src/Mirakl/MCI/Front/Request/Product/ProductImportRequest.php new file mode 100644 index 0000000..f011975 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/ProductImportRequest.php @@ -0,0 +1,41 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\ProductImportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ProductImportRequest(new \SplFileObject('/path/to/file.csv'), 'SHOP_ID'); + * + * $result = $api->importProducts($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Product\ProductImportTracking + * + */ +class ProductImportRequest extends AbstractProductImportRequest +{ + /** + * @var array + */ + public $bodyParams = ['shop']; + + /** + * @param string|array|\SplFileObject $file + * @param int $shopId + */ + public function __construct($file, $shopId) + { + parent::__construct($file); + $this->setShop($shopId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/ProductImportStatusRequest.php b/src/Mirakl/MCI/Front/Request/Product/ProductImportStatusRequest.php new file mode 100644 index 0000000..916df22 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/ProductImportStatusRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\ProductImportStatusRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ProductImportStatusRequest('IMPORT_ID'); + * $result = $api->getProductImportStatus($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Product\ProductImportResult + * + */ +class ProductImportStatusRequest extends AbstractProductImportStatusRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/ProductImportStatusesRequest.php b/src/Mirakl/MCI/Front/Request/Product/ProductImportStatusesRequest.php new file mode 100644 index 0000000..0fdf01f --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/ProductImportStatusesRequest.php @@ -0,0 +1,23 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\ProductImportStatusesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ProductImportStatusesRequest(); + * + * $result = $api->getProductImportStatuses($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Collection\Product\ProductImportResultCollection + * + */ +class ProductImportStatusesRequest extends AbstractProductImportStatusesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/Product/UpdateProductImportStatusRequest.php b/src/Mirakl/MCI/Front/Request/Product/UpdateProductImportStatusRequest.php new file mode 100644 index 0000000..ec8b30a --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/Product/UpdateProductImportStatusRequest.php @@ -0,0 +1,27 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\Product\UpdateProductImportStatusRequest; + * use Mirakl\Core\Domain\FileWrapper; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new UpdateProductImportStatusRequest('IMPORT_ID'); + * $errorsFile = new \SplFileObject('/path/to/errors_file.csv'); + * $request->setErrorsFile(new FileWrapper($errorsFile)); // Optional + * $productsFile = new \SplFileObject('/path/to/products_file.csv'); + * $request->setProductsFile(new FileWrapper($productsFile)); // Optional + * $api->updateProductImportStatus($request); + * + */ +class UpdateProductImportStatusRequest extends AbstractUpdateProductImportStatusRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/ValueList/GetValueListItemsRequest.php b/src/Mirakl/MCI/Front/Request/ValueList/GetValueListItemsRequest.php new file mode 100644 index 0000000..404cc6d --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/ValueList/GetValueListItemsRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\ValueList\GetValueListItemsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetValueListItemsRequest('COLOR'); + * $result = $api->getValueListItems($request); + * // $result => @see \Mirakl\MCI\Common\Domain\ValueList + * + */ +class GetValueListItemsRequest extends AbstractGetValueListItemsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/ValueList/GetValueListsItemsRequest.php b/src/Mirakl/MCI/Front/Request/ValueList/GetValueListsItemsRequest.php new file mode 100644 index 0000000..cae6fb7 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/ValueList/GetValueListsItemsRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\ValueList\GetValueListsItemsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetValueListsItemsRequest(); + * $result = $api->getValueListsItems($request); + * // $result => @see \Mirakl\MCI\Common\Domain\ValueLists + * + */ +class GetValueListsItemsRequest extends AbstractGetValueListsItemsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportErrorReportRequest.php b/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportErrorReportRequest.php new file mode 100644 index 0000000..8e1e842 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportErrorReportRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\ValueList\ValueListImportErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ValueListImportErrorReportRequest('IMPORT_ID'); + * $result = $api->getValueListImportErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class ValueListImportErrorReportRequest extends AbstractImportRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/values_lists/imports/{import}/error_report'; +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportRequest.php b/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportRequest.php new file mode 100644 index 0000000..a104aec --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportRequest.php @@ -0,0 +1,41 @@ + + * "list-code";"list-label";"value-code";"value-label";"update-delete" + * + * + * Example: + * + * + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\ValueList\ValueListImportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ValueListImportRequest(new \SplFileObject('/path/to/file.csv')); + * $result = $api->importValueLists($request); + * // $result => @see \Mirakl\MCI\Front\Domain\ValueList\ValueListImportTracking + * + */ +class ValueListImportRequest extends AbstractFileRequest +{ + /** + * @var string + */ + protected $endpoint = '/values_lists/imports'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ValueListImportTracking::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportStatusRequest.php b/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportStatusRequest.php new file mode 100644 index 0000000..acc9835 --- /dev/null +++ b/src/Mirakl/MCI/Front/Request/ValueList/ValueListImportStatusRequest.php @@ -0,0 +1,36 @@ + + * use Mirakl\MCI\Front\Client\FrontApiClient; + * use Mirakl\MCI\Front\Request\ValueList\ValueListImportStatusRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ValueListImportStatusRequest('IMPORT_ID'); + * $result = $api->getValueListImportResult($request); + * // $result => @see \Mirakl\MCI\Front\Domain\ValueList\ValueListImportResult + * + */ +class ValueListImportStatusRequest extends AbstractImportRequest +{ + /** + * @var string + */ + protected $endpoint = '/values_lists/imports/{import}'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ValueListImportResult::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Client/OperatorApiClient.php b/src/Mirakl/MCI/Operator/Client/OperatorApiClient.php new file mode 100644 index 0000000..9504111 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Client/OperatorApiClient.php @@ -0,0 +1,41 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Attribute\GetAttributesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetAttributesRequest(); + * $request->setHierarchyCode('HIERARCHY_CODE'); // Optional + * $request->setMaxLevel(2); // Optional (all children by default) + * $result = $api->getAttributes($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Collection\AttributeCollection + * + */ +class GetAttributesRequest extends AbstractGetAttributesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Hierarchy/GetHierarchiesRequest.php b/src/Mirakl/MCI/Operator/Request/Hierarchy/GetHierarchiesRequest.php new file mode 100644 index 0000000..0495f8d --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Hierarchy/GetHierarchiesRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Hierarchy\GetHierarchiesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetHierarchiesRequest(); + * $request->setHierarchyCode('HIERARCHY_CODE'); // Optional + * $request->setMaxLevel(2); // Optional (all children by default) + * $result = $api->getHierarchies($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Collection\HierarchyCollection + * + */ +class GetHierarchiesRequest extends AbstractGetHierarchiesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportErrorReportRequest.php b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportErrorReportRequest.php new file mode 100644 index 0000000..495b7f9 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportErrorReportRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\DownloadProductImportErrorReportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportErrorReportRequest('IMPORT_ID'); + * $result = $api->downloadProductImportErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportErrorReportRequest extends AbstractDownloadProductImportErrorReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportNewProductsReportRequest.php b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportNewProductsReportRequest.php new file mode 100644 index 0000000..d0de7c5 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportNewProductsReportRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\DownloadProductImportNewProductsReportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportNewProductsReportRequest('IMPORT_ID'); + * $result = $api->downloadProductImportNewProductsReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportNewProductsReportRequest extends AbstractDownloadProductImportNewProductsReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportTransformationErrorReportRequest.php b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportTransformationErrorReportRequest.php new file mode 100644 index 0000000..c03cae8 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportTransformationErrorReportRequest.php @@ -0,0 +1,25 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\DownloadProductImportTransformationErrorReportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportTransformationErrorReportRequest('IMPORT_ID'); + * $result = $api->downloadProductImportTransformationErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportTransformationErrorReportRequest + extends AbstractDownloadProductImportTransformationErrorReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportTransformedFileRequest.php b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportTransformedFileRequest.php new file mode 100644 index 0000000..41bf894 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/DownloadProductImportTransformedFileRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\DownloadProductImportTransformedFileRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new DownloadProductImportTransformedFileRequest('IMPORT_ID'); + * $result = $api->downloadProductImportTransformedFile($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadProductImportTransformedFileRequest extends AbstractDownloadProductImportTransformedFileRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/ProductImportRequest.php b/src/Mirakl/MCI/Operator/Request/Product/ProductImportRequest.php new file mode 100644 index 0000000..55855f7 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/ProductImportRequest.php @@ -0,0 +1,41 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\ProductImportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new ProductImportRequest(new \SplFileObject('/path/to/file.csv'), 'SHOP_ID'); + * + * $result = $api->importProducts($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Product\ProductImportTracking + * + */ +class ProductImportRequest extends AbstractProductImportRequest +{ + /** + * @var array + */ + public $bodyParams = ['shop']; + + /** + * @param mixed $file + * @param int $shopId + */ + public function __construct($file, $shopId) + { + parent::__construct($file); + $this->setShop($shopId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/ProductImportStatusRequest.php b/src/Mirakl/MCI/Operator/Request/Product/ProductImportStatusRequest.php new file mode 100644 index 0000000..e633bd2 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/ProductImportStatusRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\ProductImportStatusRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new ProductImportStatusRequest('IMPORT_ID'); + * $result = $api->getProductImportStatus($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Product\ProductImportResult + * + */ +class ProductImportStatusRequest extends AbstractProductImportStatusRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/ProductImportStatusesRequest.php b/src/Mirakl/MCI/Operator/Request/Product/ProductImportStatusesRequest.php new file mode 100644 index 0000000..cfe5e3e --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/ProductImportStatusesRequest.php @@ -0,0 +1,23 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\ProductImportStatusesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new ProductImportStatusesRequest(); + * + * $result = $api->getProductImportStatuses($request); + * // $result => @see \Mirakl\MCI\Common\Domain\Collection\Product\ProductImportResultCollection + * + */ +class ProductImportStatusesRequest extends AbstractProductImportStatusesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/Product/UpdateProductImportStatusRequest.php b/src/Mirakl/MCI/Operator/Request/Product/UpdateProductImportStatusRequest.php new file mode 100644 index 0000000..4ddd998 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/Product/UpdateProductImportStatusRequest.php @@ -0,0 +1,27 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\Product\UpdateProductImportStatusRequest; + * use Mirakl\Core\Domain\FileWrapper; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new UpdateProductImportStatusRequest('IMPORT_ID'); + * $errorsFile = new \SplFileObject('/path/to/errors_file.csv'); + * $request->setErrorsFile(new FileWrapper($errorsFile)); // Optional + * $productsFile = new \SplFileObject('/path/to/products_file.csv'); + * $request->setProductsFile(new FileWrapper($productsFile)); // Optional + * $api->updateProductImportStatus($request); + * + */ +class UpdateProductImportStatusRequest extends AbstractUpdateProductImportStatusRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/ValueList/GetValueListItemsRequest.php b/src/Mirakl/MCI/Operator/Request/ValueList/GetValueListItemsRequest.php new file mode 100644 index 0000000..6cdd410 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/ValueList/GetValueListItemsRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\ValueList\GetValueListItemsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetValueListItemsRequest('COLOR'); + * $result = $api->getValueListItems($request); + * // $result => @see \Mirakl\MCI\Common\Domain\ValueList + * + */ +class GetValueListItemsRequest extends AbstractGetValueListItemsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCI/Operator/Request/ValueList/GetValueListsItemsRequest.php b/src/Mirakl/MCI/Operator/Request/ValueList/GetValueListsItemsRequest.php new file mode 100644 index 0000000..d732859 --- /dev/null +++ b/src/Mirakl/MCI/Operator/Request/ValueList/GetValueListsItemsRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MCI\Operator\Client\OperatorApiClient; + * use Mirakl\MCI\Operator\Request\ValueList\GetValueListsItemsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetValueListsItemsRequest(); + * $result = $api->getValueListsItems($request); + * // $result => @see \Mirakl\MCI\Common\Domain\ValueLists + * + */ +class GetValueListsItemsRequest extends AbstractGetValueListsItemsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MCM/Common/Domain/AbstractError.php b/src/Mirakl/MCM/Common/Domain/AbstractError.php new file mode 100644 index 0000000..9dc384a --- /dev/null +++ b/src/Mirakl/MCM/Common/Domain/AbstractError.php @@ -0,0 +1,13 @@ + 'data_product', + 'mirakl_variant_group_id' => 'variant_group_id', /** @deprecated */ + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'sources' => [ProductSourceCollection::class, 'create'], + 'acceptance' => [ProductAcceptance::class, 'create'], + 'validation' => [ProductValidation::class, 'create'], + 'synchronization' => [ProductSynchronization::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Domain/Product/Export/ProductSource.php b/src/Mirakl/MCM/Front/Domain/Product/Export/ProductSource.php new file mode 100644 index 0000000..03077b7 --- /dev/null +++ b/src/Mirakl/MCM/Front/Domain/Product/Export/ProductSource.php @@ -0,0 +1,13 @@ + [ProductIntegrationErrorCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Domain/Product/Export/ProductSynchronizationStatus.php b/src/Mirakl/MCM/Front/Domain/Product/Export/ProductSynchronizationStatus.php new file mode 100644 index 0000000..ac73f7e --- /dev/null +++ b/src/Mirakl/MCM/Front/Domain/Product/Export/ProductSynchronizationStatus.php @@ -0,0 +1,9 @@ + 'data_product', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'acceptance' => [ProductAcceptance::class, 'create'], + 'integration_errors' => [ProductIntegrationErrorCollection::class, 'create'], + 'synchronization_errors' => [ProductSynchronizationErrorCollection::class, 'create'] + ]; + + /** + * Confirm product + * + * @param string $miraklProductId + * @param string $sku + */ + public function confirmProduct($miraklProductId, $sku) + { + $this->unsetData(); + $this->setMiraklProductId($miraklProductId); + $this->setProductSku($sku); + } + + /** + * Report integration errors for a $miraklProductId product + * + * @param string $miraklProductId + * @param ProductIntegrationErrorCollection $integrationErrorCollection + */ + public function reportIntegrationErrorProduct($miraklProductId, ProductIntegrationErrorCollection $integrationErrorCollection) + { + $this->unsetData(); + $this->setMiraklProductId($miraklProductId); + $this->setIntegrationErrors($integrationErrorCollection); + } + + /** + * Create a new product + * + * @param string $sku + * @param array $dataProduct + */ + public function createProduct($sku, array $dataProduct) + { + $this->unsetData(); + $this->setProductSku($sku); + $this->setDataProduct($dataProduct); + } + + /** + * Accept a product + */ + public function acceptProduct() + { + $this->setAcceptance(new ProductAcceptance(['status' => ProductAcceptanceStatus::STATUS_ACCEPTED])); + } + + /** + * Reject a product with an optional reason code and messsage + * + * @param string|null $reasonCode + * @param string|null $message + */ + public function rejectProduct($reasonCode = null, $message = null) + { + $rejectedProduct = new ProductAcceptance(['status' => ProductAcceptanceStatus::STATUS_REJECTED]); + if (!empty($reasonCode)) { + $rejectedProduct->setReasonCode($reasonCode); + } + if (!empty($message)) { + $rejectedProduct->setMessage($message); + } + $this->setAcceptance($rejectedProduct); + } + + /** + * Update a product + * + * @param string $miraklProductId + * @param string $sku + * @param array $dataProduct + */ + public function updateProduct($miraklProductId, $sku, array $dataProduct) + { + $this->unsetData(); + $this->setMiraklProductId($miraklProductId); + $this->setProductSku($sku); + $this->setDataProduct($dataProduct); + } + + /** + * @param array $dataProduct + */ + public function setDataProduct($dataProduct) + { + $this->setData('data', $dataProduct); + } + + /** + * @return array + */ + public function getDataProduct() + { + return $this->getData('data'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Domain/Product/Synchronization/ProductSynchronizationAcceptanceStatus.php b/src/Mirakl/MCM/Front/Domain/Product/Synchronization/ProductSynchronizationAcceptanceStatus.php new file mode 100644 index 0000000..3dd97af --- /dev/null +++ b/src/Mirakl/MCM/Front/Domain/Product/Synchronization/ProductSynchronizationAcceptanceStatus.php @@ -0,0 +1,8 @@ + [ProcessedCollection::class, 'create'], + 'global_errors' => [GlobalErrorCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Domain/Product/Synchronization/ProductSynchronizationStatus.php b/src/Mirakl/MCM/Front/Domain/Product/Synchronization/ProductSynchronizationStatus.php new file mode 100644 index 0000000..818b10f --- /dev/null +++ b/src/Mirakl/MCM/Front/Domain/Product/Synchronization/ProductSynchronizationStatus.php @@ -0,0 +1,21 @@ + 'tracking_id' + ]; + + /** + * @param string $trackingId + */ + public function __construct($trackingId) + { + parent::__construct(); + $this->setTrackingId($trackingId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductExportCsvRequest.php b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductExportCsvRequest.php new file mode 100644 index 0000000..596f5b1 --- /dev/null +++ b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductExportCsvRequest.php @@ -0,0 +1,63 @@ + + * require 'vendor/autoload.php'; + * + * use Mirakl\MCM\Front\Client\FrontApiClient as MiraklApiClient; + * use Mirakl\MCM\Front\Request\Catalog\Product\ProductExportCsvRequest; + * + * // Environment parameters + * $url = 'https://your.env/api'; + * $apiKey = '40956c2a-6b1ab-4e0a-97c8-97ebf78630c0'; + * + * try { + * // Building request + * $request = new ProductExportCsvRequest(); + * + * // Instantiating the Mirakl API Client + * $api = new MiraklApiClient($url, $apiKey); + * + * // Set updated since parameter date + * $request->setUpdatedSince(new \DateTime('2017-11-08T14:07:00+0000')); + * + * // Calling the API + * $result = $api->exportCsvProducts($request); + * + * // Mirakl\Core\Domain\FileWrapper + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->exportCsvProducts($request) + * var_dump($result); // returns \Psr\Http\Message\ResponseInterface + + * // Get the stream file + * $streamFile = $result->getFile(); + * var_dump($streamFile); // returns \SplTempFileObject + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e); + * } + * + */ +class ProductExportCsvRequest extends AbstractProductExportRequest +{ + use CsvResponseDecorator; + + /** + * @inheritdoc + */ + public function __construct() + { + parent::__construct(); + $this->setOptions(['headers' => ['Accept' => 'text/csv']]); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductExportRequest.php b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductExportRequest.php new file mode 100644 index 0000000..5b7ed1a --- /dev/null +++ b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductExportRequest.php @@ -0,0 +1,58 @@ + + * setUpdatedSince(new \DateTime('2017-11-08T14:07:00+0000')); + * + * // Calling the API + * $result = $api->exportProducts($request); + * + * // \Mirakl\MCM\Front\Domain\Collection\Product\ProductExportCollection + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->exportProducts($request) + * //var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e->getTraceAsString()); + * } + * + */ +class ProductExportRequest extends AbstractProductExportRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductExportCollection::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationReportRequest.php b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationReportRequest.php new file mode 100644 index 0000000..43f22f3 --- /dev/null +++ b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationReportRequest.php @@ -0,0 +1,64 @@ + + * getProductSynchronizationReport($request); + * + * // \Mirakl\MCM\Front\Domain\Product\Synchronization\ProductSynchronizationReport + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->getProductSynchronizationStatus($request) + * //var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e->getTraceAsString()); + * } + * + */ +class ProductSynchronizationReportRequest extends AbstractProductSynchronizationRequest +{ + /** + * @var string + */ + protected $endpoint = '/mcm/products/synchronization/{tracking_id}/report'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductSynchronizationReport::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationRequest.php b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationRequest.php new file mode 100644 index 0000000..242674d --- /dev/null +++ b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationRequest.php @@ -0,0 +1,122 @@ + Confirm integration of products previously exported: in this case just send the mirakl_product_id and your own product_sku + * -> Report integration errors of products previously exported: in this case send the mirakl_product_id and the integration_errors values + * -> Create new products: in this case send your own sku and complete product data + * -> Accept or reject products: in this case add an acceptance entry with the status ACCEPTED or REJECTED. If the status is REJECTED, define the reason_code and an optional message + * -> Update products: in this case send your own sku, the mirakl_product_id, additional product data and acceptance status + * + * @see \Mirakl\MCM\Front\Domain\Product\Synchronization\ProductSynchronization + * @see \Mirakl\MCM\Front\Domain\Product\Synchronization\ProductSynchronizeTracking + * + * @method ProductSynchronizeCollection getProducts() + * @method $this setProducts(array|ProductSynchronizeCollection $synchronizeProduct) + * + * Example: + * + * + * confirmProduct('abc5-4cf1-acdb-56152a77bc56', 'SH0001'); + * $productCollection->add($product); + * + * // Building request + * $request = new ProductSynchronizationRequest($productCollection); + * + * // Instantiating the Mirakl API Client + * $api = new MiraklApiClient($url, $apiKey); + * + * // Calling the API + * $result = $api->synchronizeProduct($request); + * + * // \Mirakl\MCM\Front\Domain\Product\Synchronization\ProductSynchronizeTracking + * var_dump($result); // decorated response + * + * // Get the tracking Id + * $trackingId = $result->getTrackingId(); + * var_dump($trackingId); + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->synchronizeProduct($request) + * //var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e->getTraceAsString()); + * } + * + */ +class ProductSynchronizationRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/mcm/products/synchronization'; + + /** + * @var array + */ + public $bodyParams = ['products']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'products' => [ProductSynchronizeCollection::class, 'create'], + ]; + + /** + * @param ProductSynchronizeCollection $productSynchronizeCollection + */ + public function __construct(ProductSynchronizeCollection $productSynchronizeCollection) + { + parent::__construct(); + $this->setProducts($productSynchronizeCollection); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + return $this->getProducts()->toArray(); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductSynchronizeTracking::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationStatusRequest.php b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationStatusRequest.php new file mode 100644 index 0000000..5956dd0 --- /dev/null +++ b/src/Mirakl/MCM/Front/Request/Catalog/Product/ProductSynchronizationStatusRequest.php @@ -0,0 +1,62 @@ + + * getProductSynchronizationStatus($request); + * + * // \Mirakl\MMP\FrontOperator\Domain\Product\Synchro\ProductSynchroResult + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->getProductSynchronizationStatus($request) + * //var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e->getTraceAsString()); + * } + * + */ +class ProductSynchronizationStatusRequest extends AbstractProductSynchronizationRequest +{ + /** + * @var string + */ + protected $endpoint = '/mcm/products/synchronization/{tracking_id}'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductSynchroResult::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Domain/Collection/Message/Thread/ThreadAttachmentCollection.php b/src/Mirakl/MMP/Common/Domain/Collection/Message/Thread/ThreadAttachmentCollection.php new file mode 100644 index 0000000..14bd19f --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Collection/Message/Thread/ThreadAttachmentCollection.php @@ -0,0 +1,20 @@ + [ThreadTopic::class, 'create'], + 'authorized_participants' => [ThreadParticipantCollection::class, 'create'], + 'current_participants' => [ThreadParticipantCollection::class, 'create'], + 'entities' => [ThreadEntityCollection::class, 'create'], + 'metadata' => [ThreadMetadata::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadAttachment.php b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadAttachment.php new file mode 100644 index 0000000..9ad06d1 --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadAttachment.php @@ -0,0 +1,15 @@ + [ThreadTopic::class, 'create'], + 'authorized_participants' => [ThreadParticipantCollection::class, 'create'], + 'current_participants' => [ThreadParticipantCollection::class, 'create'], + 'entities' => [ThreadEntityCollection::class, 'create'], + 'metadata' => [ThreadMetadata::class, 'create'], + 'messages' => [ThreadMessageCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadEntity.php b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadEntity.php new file mode 100644 index 0000000..40fe7d2 --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadEntity.php @@ -0,0 +1,15 @@ + [ThreadSender::class, 'create'], + 'to' => [ThreadParticipantCollection::class, 'create'], + 'attachments' => [ThreadAttachmentCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadMetadata.php b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadMetadata.php new file mode 100644 index 0000000..2e2e333 --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadMetadata.php @@ -0,0 +1,13 @@ + [ThreadRecipientCollection::class, 'create'], + 'topic' => [ThreadTopic::class, 'create'], + ]; +} diff --git a/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadSender.php b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadSender.php new file mode 100644 index 0000000..12ad61e --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadSender.php @@ -0,0 +1,22 @@ + [ThreadOrganization::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadTopic.php b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadTopic.php new file mode 100644 index 0000000..ce6661a --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Message/Thread/ThreadTopic.php @@ -0,0 +1,13 @@ + [PaymentInfo::class, 'factory'], 'professional_info' => [ProfessionalInfo::class, 'create'], 'shipping_info' => [ShippingInfo::class, 'create'], + 'kyc' => [ShopKyc::class, 'create'], 'shop_stats' => [ShopStats::class, 'create'], ]; } \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Domain/Shop/ShopKyc.php b/src/Mirakl/MMP/Common/Domain/Shop/ShopKyc.php new file mode 100644 index 0000000..25f5f1e --- /dev/null +++ b/src/Mirakl/MMP/Common/Domain/Shop/ShopKyc.php @@ -0,0 +1,13 @@ + 'thread_id', + ]; + + /** + * @param string $threadId + */ + public function __construct($threadId) + { + parent::__construct(); + $this->setThreadId($threadId); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ThreadDetails::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Request/Message/AbstractGetThreadsRequest.php b/src/Mirakl/MMP/Common/Request/Message/AbstractGetThreadsRequest.php new file mode 100644 index 0000000..0cd844c --- /dev/null +++ b/src/Mirakl/MMP/Common/Request/Message/AbstractGetThreadsRequest.php @@ -0,0 +1,43 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Common\Request\Message\DownloadThreadMessageAttachmentRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadThreadMessageAttachmentRequest('ATTACHMENT_ID'); + * $result = $api->downloadThreadMessageAttachment($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadThreadMessageAttachmentRequest extends AbstractRequest +{ + use FileResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/inbox/threads/{attachment_id}/download'; + + /** + * @var array + */ + protected $uriVars = [ + '{attachment_id}' => 'attachment_id', + ]; + + /** + * @param string $attachmentId + */ + public function __construct($attachmentId) + { + parent::__construct(); + $this->setAttachmentId($attachmentId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Request/Message/ThreadReplyRequest.php b/src/Mirakl/MMP/Common/Request/Message/ThreadReplyRequest.php new file mode 100644 index 0000000..00007f0 --- /dev/null +++ b/src/Mirakl/MMP/Common/Request/Message/ThreadReplyRequest.php @@ -0,0 +1,92 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\Core\Domain\FileWrapper; + * use Mirakl\MMP\Common\Domain\Collection\Message\Thread\ThreadRecipientCollection; + * use Mirakl\MMP\Common\Domain\Message\Thread\ThreadRecipient; + * use Mirakl\MMP\Common\Domain\Message\Thread\ThreadReplyMessageInput; + * use Mirakl\MMP\Common\Request\Message\ThreadReplyRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $recipient1 = new ThreadRecipient(); + * $recipient1->setType('OPERATOR'); + * $recipient2 = new ThreadRecipient(); + * $recipient2->setId('116'); + * $recipient2->setType('SHOP'); + * + * $recipients = new ThreadRecipientCollection(); + * $recipients->add($recipient1); + * $recipients->add($recipient2); + * + * $input = new ThreadReplyMessageInput(); + * $input->setBody('this is the body of my reply'); + * $input->setTo($recipients); + * + * $request = new ThreadReplyRequest('THREAD_ID', $input); + * + * // Add a file + * $file = new FileWrapper(new \SplFileObject('foobar.txt')); + * $file->setFileName('test1.txt'); // Optional, only needed if file name different than 'foobar.txt' + * $request->addFile($file); + * + * $result = $api->replyToThread($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\Thread\ThreadReplyCreated + * + */ +class ThreadReplyRequest extends AbstractFilesUploadRequest +{ + /** + * @var string + */ + protected $endpoint = '/inbox/threads/{thread}/message'; + + /** + * @var array + */ + protected $uriVars = [ + '{thread}' => 'thread_id', + ]; + + /** + * @var array + */ + public $bodyParams = [ + 'message_input', + ]; + + /** + * @param string $threadId + * @param ThreadReplyMessageInput|array $messageInput + */ + public function __construct($threadId, $messageInput) + { + parent::__construct(); + $this->setThreadId($threadId); + $this->setMessageInput($messageInput); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ThreadReplyCreated::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Common/Request/Order/Message/CreateOrderThreadRequest.php b/src/Mirakl/MMP/Common/Request/Order/Message/CreateOrderThreadRequest.php new file mode 100644 index 0000000..48d70a4 --- /dev/null +++ b/src/Mirakl/MMP/Common/Request/Order/Message/CreateOrderThreadRequest.php @@ -0,0 +1,85 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Common\Domain\Message\Thread\ThreadTopic; + * use Mirakl\MMP\Common\Domain\Order\Message\CreateOrderThread; + * use Mirakl\MMP\Common\Request\Order\Message\CreateOrderThreadRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $thread = new CreateOrderThread(); + * $thread->setBody('This is an example body'); + * $thread->setTo(['SHOP', 'OPERATOR']); + * + * $topic = new ThreadTopic(); + * $topic->setType('FREE_TEXT'); + * $topic->setValue('This is an example'); + * $thread->setTopic($topic); + * + * $request = new CreateOrderThreadRequest('ORDER_ID', $thread); + * + * // Add a file + * $file = new FileWrapper(new \SplFileObject('foobar.txt')); + * $file->setFileName('test1.txt'); // Optional, only needed if file name different than 'foobar.txt' + * $request->addFile($file); + * + * $result = $api->createOrderThread($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\Thread\ThreadCreated + * + */ +class CreateOrderThreadRequest extends AbstractFilesUploadRequest +{ + /** + * @var string + */ + protected $endpoint = '/orders/{orderId}/threads'; + + /** + * @var array + */ + protected $uriVars = [ + '{orderId}' => 'order_id', + ]; + + /** + * @var array + */ + public $bodyParams = [ + 'thread' => 'thread_input', + ]; + + /** + * @param string $orderId + * @param CreateOrderThread|array $thread + */ + public function __construct($orderId, $thread) + { + parent::__construct(); + $this->setOrderId($orderId); + $this->setThread($thread); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ThreadCreated::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Client/FrontApiClient.php b/src/Mirakl/MMP/Front/Client/FrontApiClient.php new file mode 100644 index 0000000..7ad97a1 --- /dev/null +++ b/src/Mirakl/MMP/Front/Client/FrontApiClient.php @@ -0,0 +1,164 @@ +run($this); + } + + /** + * (SH31) List all logistic classes + * + * @param null|string $locale + * @return LogisticClassCollection + */ + public function getLogisticClasses($locale = null) + { + $request = new GetLogisticClassRequest(); + + if (null !== $locale) { + $request->setLocale((string) $locale); + } + + return $request->run($this); + } + + /** + * (SH21) List all carriers (sorted by sortIndex, defined in the BO) + * + * @return CarrierCollection + */ + public function getShippingCarriers() + { + return (new GetShippingCarriersRequest())->run($this); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/BI/DataType.php b/src/Mirakl/MMP/Front/Domain/BI/DataType.php new file mode 100644 index 0000000..291071f --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/BI/DataType.php @@ -0,0 +1,7 @@ +errors; + } + + /** + * @param array $errors + * @return $this + */ + public function setErrors(array $errors) + { + $this->errors = new ShippingFeeErrorCollection($errors); + + return $this; + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Collection/Shipping/ShippingFeeErrorCollection.php b/src/Mirakl/MMP/Front/Domain/Collection/Shipping/ShippingFeeErrorCollection.php new file mode 100644 index 0000000..f22bab3 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Collection/Shipping/ShippingFeeErrorCollection.php @@ -0,0 +1,20 @@ +offersNotFound; + } + + /** + * @param array $offersNotFound + * @return $this + */ + public function setOffersNotFound(array $offersNotFound) + { + $this->offersNotFound = $offersNotFound; + + return $this; + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Collection/Shop/Create/CreateShopCollection.php b/src/Mirakl/MMP/Front/Domain/Collection/Shop/Create/CreateShopCollection.php new file mode 100644 index 0000000..a3376f2 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Collection/Shop/Create/CreateShopCollection.php @@ -0,0 +1,20 @@ + 'customer/customer_id', + 'customer_civility' => 'customer/civility', + 'customer_firstname' => 'customer/firstname', + 'customer_lastname' => 'customer/lastname', + 'customer_email' => 'customer/email', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'customer' => [MessageCustomer::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Offer/State/OfferState.php b/src/Mirakl/MMP/Front/Domain/Offer/State/OfferState.php new file mode 100644 index 0000000..69a47c1 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Offer/State/OfferState.php @@ -0,0 +1,15 @@ + [OrderCustomer::class, 'create'], + 'offers' => [CreateOrderOfferCollection::class, 'create'], + 'order_additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + 'payment_info' => [CreateOrderPaymentInfo::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Order/Create/CreateOrderOffer.php b/src/Mirakl/MMP/Front/Domain/Order/Create/CreateOrderOffer.php new file mode 100644 index 0000000..2e81ad0 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Order/Create/CreateOrderOffer.php @@ -0,0 +1,95 @@ + 'offer_id', + 'price_unit' => 'offer_price', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'order_line_additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + 'shipping_taxes' => [OrderTaxAmountCollection::class, 'create'], + 'taxes' => [OrderTaxAmountCollection::class, 'create'], + 'price_amount_breakdown' => [AmountBreakdown::class, 'create'], + 'shipping_price_amount_breakdown' => [AmountBreakdown::class, 'create'], + ]; + + /** + * @return string + */ + public function getId() + { + return $this->getOfferId(); + } + + /** + * @param string $id + * @return $this + */ + public function setId($id) + { + return $this->setOfferId($id); + } + + /** + * @return float + */ + public function getPriceUnit() + { + return $this->getOfferPrice(); + } + + /** + * @param float $priceUnit + * @return $this + */ + public function setPriceUnit($priceUnit) + { + return $this->setOfferPrice($priceUnit); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Order/Create/CreateOrderPaymentInfo.php b/src/Mirakl/MMP/Front/Domain/Order/Create/CreateOrderPaymentInfo.php new file mode 100644 index 0000000..2d52a06 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Order/Create/CreateOrderPaymentInfo.php @@ -0,0 +1,15 @@ + [OfferNotShippableCollection::class, 'create'], + 'orders' => [OrderCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Order/Create/OfferNotShippable.php b/src/Mirakl/MMP/Front/Domain/Order/Create/OfferNotShippable.php new file mode 100644 index 0000000..75f9a2f --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Order/Create/OfferNotShippable.php @@ -0,0 +1,22 @@ + 'id', + 'error_code' => 'reason', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Order/Create/OfferNotShippableReason.php b/src/Mirakl/MMP/Front/Domain/Order/Create/OfferNotShippableReason.php new file mode 100644 index 0000000..832b718 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Order/Create/OfferNotShippableReason.php @@ -0,0 +1,8 @@ + [AssessmentCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Order/Evaluation/CreateOrderEvaluationAssessment.php b/src/Mirakl/MMP/Front/Domain/Order/Evaluation/CreateOrderEvaluationAssessment.php new file mode 100644 index 0000000..f51b2e0 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Order/Evaluation/CreateOrderEvaluationAssessment.php @@ -0,0 +1,32 @@ +setCode($code); + $this->setResponse($response); + } + + /** + * @inheritdoc + */ + public static function create(array $data = []) + { + return new static($data['code'], $data['response']); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Order/Tax/OrderTax.php b/src/Mirakl/MMP/Front/Domain/Order/Tax/OrderTax.php new file mode 100644 index 0000000..54d1426 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Order/Tax/OrderTax.php @@ -0,0 +1,12 @@ +setAmount($amount); + $this->setType($type); + $this->setName($name); + } + + /** + * @inheritdoc + */ + public static function create(array $data = []) + { + return new static($data['amount'], $data['type'], $data['name']); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Payment/AbstractCreatePaymentInfo.php b/src/Mirakl/MMP/Front/Domain/Payment/AbstractCreatePaymentInfo.php new file mode 100644 index 0000000..9a2acd5 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Payment/AbstractCreatePaymentInfo.php @@ -0,0 +1,20 @@ + 'payment_id', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Payment/TransactionLog.php b/src/Mirakl/MMP/Front/Domain/Payment/TransactionLog.php new file mode 100644 index 0000000..15692c6 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Payment/TransactionLog.php @@ -0,0 +1,9 @@ + [QuoteRequestCustomer::class, 'create'], + 'documents' => [ShopQuoteRequestCreateDocumentCollection::class, 'create'], + 'offers' => [QuoteOfferCollection::class, 'create'], + 'payment_info' => [CreateQuotePaymentInfo::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Create/QuoteOffer.php b/src/Mirakl/MMP/Front/Domain/Quote/Create/QuoteOffer.php new file mode 100644 index 0000000..01ecd32 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Create/QuoteOffer.php @@ -0,0 +1,17 @@ + 'quote_request', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'quote_request' => [QuoteRequest::class, 'create'], + 'quote_request_error' => [QuoteRequestError::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Create/ShopQuoteRequestCreateDocument.php b/src/Mirakl/MMP/Front/Domain/Quote/Create/ShopQuoteRequestCreateDocument.php new file mode 100644 index 0000000..13239e2 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Create/ShopQuoteRequestCreateDocument.php @@ -0,0 +1,11 @@ + 'price_summary/price', + 'shipping_price' => 'price_summary/shipping_price', + 'total_commission' => 'price_summary/total_commission', + 'total_price' => 'price_summary/total_price', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'lines' => [QuoteLineCollection::class, 'create'], + 'orders' => [QuoteOrderInformationCollection::class, 'create'], + 'price_summary' => [QuotePriceSummary::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteInitialRequest.php b/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteInitialRequest.php new file mode 100644 index 0000000..00b9277 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteInitialRequest.php @@ -0,0 +1,29 @@ + [QuoteRequestDocumentCollection::class, 'create'], + 'lines' => [QuoteLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteLine.php b/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteLine.php new file mode 100644 index 0000000..a2cb083 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteLine.php @@ -0,0 +1,53 @@ + 'price_summary/price', + 'total_commission' => 'price_summary/total_commission', + 'total_price' => 'price_summary/total_price', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'price_summary' => [QuoteLinePriceSummary::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteLinePriceSummary.php b/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteLinePriceSummary.php new file mode 100644 index 0000000..565d086 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Get/QuoteLinePriceSummary.php @@ -0,0 +1,15 @@ + [QuoteRequestCustomer::class, 'create'], + 'initial_request' => [QuoteInitialRequest::class, 'create'], + 'payment_info' => [CreateQuotePaymentInfo::class, 'create'], + 'shop_quote_requests' => [ShopQuoteRequestCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Get/ShopQuoteRequest.php b/src/Mirakl/MMP/Front/Domain/Quote/Get/ShopQuoteRequest.php new file mode 100644 index 0000000..6eef950 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Get/ShopQuoteRequest.php @@ -0,0 +1,68 @@ + [QuoteRequestMessageCollection::class, 'create'], + 'quotes' => [QuoteCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Message/CreatedQuoteRequestMessage.php b/src/Mirakl/MMP/Front/Domain/Quote/Message/CreatedQuoteRequestMessage.php new file mode 100644 index 0000000..23e3254 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Message/CreatedQuoteRequestMessage.php @@ -0,0 +1,21 @@ + [QuoteRequestDocumentCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Message/QuoteRequestDocument.php b/src/Mirakl/MMP/Front/Domain/Quote/Message/QuoteRequestDocument.php new file mode 100644 index 0000000..09f807b --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Message/QuoteRequestDocument.php @@ -0,0 +1,13 @@ + [QuoteRequestDocumentCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Order/OrderFromQuote.php b/src/Mirakl/MMP/Front/Domain/Quote/Order/OrderFromQuote.php new file mode 100644 index 0000000..67a9883 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Order/OrderFromQuote.php @@ -0,0 +1,38 @@ + [QuoteOrderLineCollection::class, 'create'], + 'order_additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + 'payment_info' => [CreateOrderPaymentInfo::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Quote/Order/QuoteOrderLine.php b/src/Mirakl/MMP/Front/Domain/Quote/Order/QuoteOrderLine.php new file mode 100644 index 0000000..d71dffc --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Quote/Order/QuoteOrderLine.php @@ -0,0 +1,27 @@ + [AdditionalFieldValueCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/AbstractShippingOffer.php b/src/Mirakl/MMP/Front/Domain/Shipping/AbstractShippingOffer.php new file mode 100644 index 0000000..7a76297 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/AbstractShippingOffer.php @@ -0,0 +1,61 @@ + [Discount::class, 'create'], + 'offer_additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + 'promotions' => [AppliedPromotionCollection::class, 'create'], + 'shipping_type_details' => [ShippingTypeDetailCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/AbstractShopShipping.php b/src/Mirakl/MMP/Front/Domain/Shipping/AbstractShopShipping.php new file mode 100644 index 0000000..24a33bb --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/AbstractShopShipping.php @@ -0,0 +1,27 @@ + [OrderPromotionsSummary::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/OfferQuantityShippingTypeTuple.php b/src/Mirakl/MMP/Front/Domain/Shipping/OfferQuantityShippingTypeTuple.php new file mode 100644 index 0000000..dfe6165 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/OfferQuantityShippingTypeTuple.php @@ -0,0 +1,32 @@ + $this->getOfferId(), + 'quantity' => $this->getQuantity(), + 'shipping_type_code' => $this->getShippingTypeCode(), + 'leadtime_to_ship' => $this->getLeadtimeToShip(), + ]; + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/OrderShippingFee.php b/src/Mirakl/MMP/Front/Domain/Shipping/OrderShippingFee.php new file mode 100644 index 0000000..af236f9 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/OrderShippingFee.php @@ -0,0 +1,36 @@ + 'shipping_type/code', + 'shipping_type_label' => 'shipping_type/label', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'shipping_types' => [ShippingFeeTypeCollection::class, 'create'], + 'offers' => [ShippingRateOfferCollection::class, 'create'], + 'selected_shipping_type' => [ShippingTypeWithConfiguration::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/ShippingFeeError.php b/src/Mirakl/MMP/Front/Domain/Shipping/ShippingFeeError.php new file mode 100644 index 0000000..02cf0e9 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/ShippingFeeError.php @@ -0,0 +1,15 @@ + 'discount', + 'offer_id' => 'id', + 'offer_price' => 'price', + 'offer_quantity' => 'quantity', + 'selected_shipping_type' => 'shipping_type', + 'shipping_types' => 'shipping_type_details' + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'shipping_type' => [ShippingTypeWithConfiguration::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/ShippingFeeType.php b/src/Mirakl/MMP/Front/Domain/Shipping/ShippingFeeType.php new file mode 100644 index 0000000..dde1e64 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/ShippingFeeType.php @@ -0,0 +1,11 @@ + 'discount', + 'offer_id' => 'id', + 'offer_price' => 'price', + 'offer_quantity' => 'quantity', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'discount' => [Discount::class, 'create'], + 'order_additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + 'promotions' => [AppliedPromotionCollection::class, 'create'], + 'shipping_type_details' => [ShippingTypeDetailCollection::class, 'create'], + 'allowed_shipping_types' => [ShippingTypeCollection::class, 'create'], + 'shipping_taxes' => [OrderTaxEstimationCollection::class, 'create'], + 'taxes' => [OrderTaxEstimationCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/ShopShippingFee.php b/src/Mirakl/MMP/Front/Domain/Shipping/ShopShippingFee.php new file mode 100644 index 0000000..8028e6d --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/ShopShippingFee.php @@ -0,0 +1,39 @@ + 'available_shipping_types', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'available_shipping_types' => [ShippingFeeTypeCollection::class, 'create'], + 'offers' => [ShippingFeeOfferCollection::class, 'create'], + 'selected_shipping_type' => [ShippingTypeWithConfiguration::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shipping/ShopShippingFeeErrorEnum.php b/src/Mirakl/MMP/Front/Domain/Shipping/ShopShippingFeeErrorEnum.php new file mode 100644 index 0000000..cc5b44c --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shipping/ShopShippingFeeErrorEnum.php @@ -0,0 +1,11 @@ + [CreateShopExistingUser::class, 'create'], + 'new_user' => [CreateShopNewUser::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shop/Create/CreateShopExistingUser.php b/src/Mirakl/MMP/Front/Domain/Shop/Create/CreateShopExistingUser.php new file mode 100644 index 0000000..94fc50c --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shop/Create/CreateShopExistingUser.php @@ -0,0 +1,32 @@ +setEmail($email); + $this->setPassword($password); + } + + /** + * @inheritdoc + */ + public static function create(array $data = []) + { + return new static($data['email'], $data['password']); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Domain/Shop/Create/CreateShopNewUser.php b/src/Mirakl/MMP/Front/Domain/Shop/Create/CreateShopNewUser.php new file mode 100644 index 0000000..34fa512 --- /dev/null +++ b/src/Mirakl/MMP/Front/Domain/Shop/Create/CreateShopNewUser.php @@ -0,0 +1,35 @@ +setEmail($email); + $this->setPassword($password); + } + + /** + * @inheritdoc + */ + public static function create(array $data = []) + { + return new static($data['email'], $data['password']); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/AdditionalField/GetAdditionalFieldRequest.php b/src/Mirakl/MMP/Front/Request/AdditionalField/GetAdditionalFieldRequest.php new file mode 100644 index 0000000..36420e9 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/AdditionalField/GetAdditionalFieldRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\AdditionalField\GetAdditionalFieldRequest; + * use Mirakl\MMP\Common\Domain\AdditionalField\AdditionalFieldLinkedEntity; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetAdditionalFieldRequest(); + * $request->setEntities([AdditionalFieldLinkedEntity::OFFER, AdditionalFieldLinkedEntity::SHOP]); // Optional + * $result = $api->getAdditionalFields($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\AdditionalFieldCollection + * + */ +class GetAdditionalFieldRequest extends AbstractGetAdditionalFieldRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/BI/ExportBusinessIntelligenceRequest.php b/src/Mirakl/MMP/Front/Request/BI/ExportBusinessIntelligenceRequest.php new file mode 100644 index 0000000..bd9df5f --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/BI/ExportBusinessIntelligenceRequest.php @@ -0,0 +1,62 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\BI\ExportBusinessIntelligenceRequest; + * use Mirakl\MMP\Front\Domain\BI\ExportFileType; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ExportBusinessIntelligenceRequest(); + * $request->setFileType(ExportFileType::XML); // Optional, default is CSV + * $result = $api->exportDataForBI($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class ExportBusinessIntelligenceRequest extends AbstractRequest +{ + use ZipResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/bi'; + + /** + * @var array + */ + public $queryParams = ['data_type', 'file_type']; + + /** + * @var bool + */ + protected $json = false; + + /** + * @param string $dataType + * @param string $fileType + */ + public function __construct($dataType = DataType::ORDER_LINE, $fileType = ExportFileType::CSV) + { + parent::__construct(); + $this->setDataType($dataType); + $this->setFileType($fileType); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Document/GetDocumentsConfigurationRequest.php b/src/Mirakl/MMP/Front/Request/Document/GetDocumentsConfigurationRequest.php new file mode 100644 index 0000000..dee0f13 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Document/GetDocumentsConfigurationRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Document\GetDocumentsConfigurationRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetDocumentsConfigurationRequest(); + * $request->setEntities(['ORDER', 'SHOP']); + * + * $result = $api->getDocumentsConfiguration($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Document\DocumentsConfigurationCollection + * + */ +class GetDocumentsConfigurationRequest extends AbstractGetDocumentsConfigurationRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Message/AbstractFrontGetMessagesRequest.php b/src/Mirakl/MMP/Front/Request/Message/AbstractFrontGetMessagesRequest.php new file mode 100644 index 0000000..6e9ce8d --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Message/AbstractFrontGetMessagesRequest.php @@ -0,0 +1,14 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Message\GetThreadDetailsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetThreadDetailsRequest('THREAD_ID'); + * $request->setCustomerId('CUSTOMER_ID'); + * $result = $api->getThreadDetails($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\Thread\ThreadDetails + * + */ +class GetThreadDetailsRequest extends AbstractGetThreadDetailsRequest +{ + /** + * @var array + */ + public $queryParams = [ + 'customer_id' => 'customer_id', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Message/GetThreadsRequest.php b/src/Mirakl/MMP/Front/Request/Message/GetThreadsRequest.php new file mode 100644 index 0000000..27e3a9e --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Message/GetThreadsRequest.php @@ -0,0 +1,37 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Message\GetThreadsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetThreadsRequest(); + * $request->setCustomerId('CUSTOMER_ID'); + * $request->setEntityType('MMP_ORDER'); + * $request->setEntityId('ORDER_ID'); + * $result = $api->getThreads($request); + * // $result => @see \Mirakl\Core\Response\Decorator\SeekableCollection + * + */ +class GetThreadsRequest extends AbstractGetThreadsRequest +{ + /** + * @var array + */ + public $queryParams = [ + 'entity_type', + 'entity_id', + 'customer_id', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Offer/GetOfferRequest.php b/src/Mirakl/MMP/Front/Request/Offer/GetOfferRequest.php new file mode 100644 index 0000000..ea3b883 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Offer/GetOfferRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Offer\GetOfferRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOfferRequest('OFFER_ID'); + * $result = $api->getOffer($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Offer + * + */ +class GetOfferRequest extends AbstractGetOfferRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return Offer::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Offer/Message/CreateOfferMessageRequest.php b/src/Mirakl/MMP/Front/Request/Offer/Message/CreateOfferMessageRequest.php new file mode 100644 index 0000000..feabb78 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Offer/Message/CreateOfferMessageRequest.php @@ -0,0 +1,88 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Offer\Message\CreateOfferMessageRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new CreateOfferMessageRequest('OFFER_ID'); + * $request->setMessage([ + * 'subject' => 'Color question', + * 'body' => 'What is the color of the product?', + * 'visible' => true, + * 'customer' => [ + * 'id' => '304024KD', + * 'civility' => 'Mr', + * 'firstname' => 'Nelson', + * 'lastname' => 'Deauberd', + * ], + * ]); + * $result = $api->createOfferMessage($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\MessageCreated + * + */ +class CreateOfferMessageRequest extends AbstractOfferRequest +{ + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/offers/{offer}/messages'; + + /** + * @var array + */ + public $bodyParams = ['message']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'message' => [CreateOfferMessage::class, 'create'], + ]; + + /** + * @param string $offerId + * @param array|CreateOfferMessage $message + */ + public function __construct($offerId, $message) + { + parent::__construct($offerId); + $this->setMessage($message); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return MessageCreated::decorator(); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + return $this->getMessage()->unwrap(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Offer/Message/GetOfferMessagesRequest.php b/src/Mirakl/MMP/Front/Request/Offer/Message/GetOfferMessagesRequest.php new file mode 100644 index 0000000..f83c8b5 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Offer/Message/GetOfferMessagesRequest.php @@ -0,0 +1,44 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Offer\Message\GetOfferMessagesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOfferMessagesRequest('OFFER_ID'); + * $result = $api->getOfferMessages($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Message\OfferMessageCollection + * + */ +class GetOfferMessagesRequest extends AbstractFrontGetMessagesRequest +{ + /** + * @param string $offerId + */ + public function __construct($offerId) + { + parent::__construct(); + $this->setOfferId($offerId); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OfferMessageCollection::decorator('messages'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Offer/State/GetOfferStateListRequest.php b/src/Mirakl/MMP/Front/Request/Offer/State/GetOfferStateListRequest.php new file mode 100644 index 0000000..b8add38 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Offer/State/GetOfferStateListRequest.php @@ -0,0 +1,51 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Offer\State\GetOfferStateListRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOfferStateListRequest(); + * $request->setActive(true); + * $result = $api->getOfferStateList($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Offer\State\OfferStateCollection + * + */ +class GetOfferStateListRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/offers/states'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OfferStateCollection::decorator('offer_states'); + } + + /** + * @var array + */ + public $queryParams = ['active']; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Offer/State/GetOfferStatesRequest.php b/src/Mirakl/MMP/Front/Request/Offer/State/GetOfferStatesRequest.php new file mode 100644 index 0000000..c879db3 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Offer/State/GetOfferStatesRequest.php @@ -0,0 +1,25 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $result = $api->getOfferStates(); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Offer\State\OfferStateCollection + * + * + * @deprecated Class deprecated since 1.6.0 + * @see \Mirakl\MMP\Front\Request\Offer\State\GetOfferStateListRequest + */ +class GetOfferStatesRequest extends AbstractGetOfferStatesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Accept/AcceptOrderRequest.php b/src/Mirakl/MMP/Front/Request/Order/Accept/AcceptOrderRequest.php new file mode 100644 index 0000000..fa93403 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Accept/AcceptOrderRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Accept\AcceptOrderRequest; + * use Mirakl\MMP\Common\Domain\Order\Accept\AcceptOrderLine; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new AcceptOrderRequest('ORDER_ID', [ + * new AcceptOrderLine(['id' => 'ORDER_LINE_ID', 'accepted' => true]) + * ]); + * $api->acceptOrder($request); + * + */ +class AcceptOrderRequest extends AbstractAcceptOrderRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Document/DownloadOrdersDocumentsRequest.php b/src/Mirakl/MMP/Front/Request/Order/Document/DownloadOrdersDocumentsRequest.php new file mode 100644 index 0000000..70411ae --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Document/DownloadOrdersDocumentsRequest.php @@ -0,0 +1,54 @@ + + * + *

+ *

When documents are retrieved, they're wrapped into a ZIP archive except + * when only one document id is specified. The tree structure of this archive is as follow: + *

+ * documents-timestamp.zip
+ * |
+ * |__ order_id_x/
+ * |   |__ foo.txt
+ * |   |__ bar.txt
+ * |   |__ baz.pdf
+ * |
+ * |__ order_id_y/
+ * |   |__ image.png
+ * |   |__ image(1).png
+ * 
+ *

+ * + * Example: + * + * + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Document\DownloadOrdersDocumentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadOrdersDocumentsRequest(); + * $request->setOrderIds(['ORDER_ID_1', 'ORDER_ID_2']); + * $result = $api->downloadOrdersDocuments($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadOrdersDocumentsRequest extends AbstractDownloadOrdersDocumentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Document/GetOrderDocumentsRequest.php b/src/Mirakl/MMP/Front/Request/Order/Document/GetOrderDocumentsRequest.php new file mode 100644 index 0000000..4546894 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Document/GetOrderDocumentsRequest.php @@ -0,0 +1,23 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Document\GetOrderDocumentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderDocumentsRequest(); + * $request->setOrderIds(['ORDER_ID_1', 'ORDER_ID_2']); + * $result = $api->getOrderDocuments($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Order\Document\OrderDocumentCollection + * + */ +class GetOrderDocumentsRequest extends AbstractGetOrderDocumentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Document/UploadOrdersDocumentsRequest.php b/src/Mirakl/MMP/Front/Request/Order/Document/UploadOrdersDocumentsRequest.php new file mode 100644 index 0000000..6f67431 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Document/UploadOrdersDocumentsRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\Core\Domain\Collection\DocumentCollection; + * use Mirakl\Core\Domain\Document; + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Document\UploadOrdersDocumentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $file = new \SplFileObject('/path/to/invoice.pdf'); + * $docs = new DocumentCollection(); + * $docs->add(new Document($file, 'invoice.pdf', 'CUSTOMER_INVOICE')); + * $request = new UploadOrdersDocumentsRequest($docs, 'ORDER_ID'); + * $result = $api->uploadOrderDocuments($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Order\Document\OrderDocumentsUploadResult + * + */ +class UploadOrdersDocumentsRequest extends AbstractUploadOrdersDocumentsRequest +{} diff --git a/src/Mirakl/MMP/Front/Request/Order/Evaluation/CreateOrderEvaluationRequest.php b/src/Mirakl/MMP/Front/Request/Order/Evaluation/CreateOrderEvaluationRequest.php new file mode 100644 index 0000000..603729f --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Evaluation/CreateOrderEvaluationRequest.php @@ -0,0 +1,73 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Evaluation\CreateOrderEvaluationRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new CreateOrderEvaluationRequest('ORDER_ID', [ + * 'comment' => 'Great service', + * 'grade' => 4, + * 'visible' => true, + * 'assessments' => [ + * 'code' => '999', + * 'response' => 4, + * ], + * ]); + * $api->createOrderEvaluation($request); + * + */ +class CreateOrderEvaluationRequest extends AbstractOrderRequest +{ + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/evaluation'; + + /** + * @var array + */ + public $bodyParams = ['evaluation']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'evaluation' => [CreateOrderEvaluation::class, 'create'], + ]; + + /** + * @param string $orderId + * @param array|CreateOrderEvaluation $evaluation + */ + public function __construct($orderId, $evaluation) + { + parent::__construct($orderId); + $this->setEvaluation($evaluation); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + return $this->getEvaluation()->toArray(); + } +} diff --git a/src/Mirakl/MMP/Front/Request/Order/Evaluation/GetOrderEvaluationRequest.php b/src/Mirakl/MMP/Front/Request/Order/Evaluation/GetOrderEvaluationRequest.php new file mode 100644 index 0000000..2170dc1 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Evaluation/GetOrderEvaluationRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Evaluation\GetOrderEvaluationRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderEvaluationRequest('ORDER_ID'); + * $result = $api->getOrderEvaluation($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Evaluation + * + */ +class GetOrderEvaluationRequest extends AbstractGetOrderEvaluationRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Message/CreateOrderMessageRequest.php b/src/Mirakl/MMP/Front/Request/Order/Message/CreateOrderMessageRequest.php new file mode 100644 index 0000000..8997adc --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Message/CreateOrderMessageRequest.php @@ -0,0 +1,33 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Message\CreateOrderMessageRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new CreateOrderMessageRequest('ORDER_ID', [ + * 'subject' => 'Hey!', + * 'body' => 'I'm happy with the delivery!', + * 'customer_id' => 'DSIFEZK', + * 'customer_email' => 'foo@bar.com', + * 'customer_firstname' => 'Hap', + * 'customer_lastname' => 'Py', + * 'customer_locale' => 'fr_FR', + * 'to_shop' => true, + * 'to_customer' => false, + * 'to_operator' => true, + * ]); + * $result = $api->createOrderMessage($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\MessageCreated + * + */ +class CreateOrderMessageRequest extends AbstractCreateOrderMessageRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Message/GetOrderMessagesRequest.php b/src/Mirakl/MMP/Front/Request/Order/Message/GetOrderMessagesRequest.php new file mode 100644 index 0000000..8ff65ea --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Message/GetOrderMessagesRequest.php @@ -0,0 +1,25 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Message\GetOrderMessagesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new CreateOrderMessageRequest('ORDER_ID'); + * $request->setReceived(false); // Optional (true: received by customer, false: sent to customer, null (default): both) + * $result = $api->getOrderMessages($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Message\OrderMessageCollection + * + */ +class GetOrderMessagesRequest extends AbstractGetOrderMessagesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Ship/ShipOrderRequest.php b/src/Mirakl/MMP/Front/Request/Order/Ship/ShipOrderRequest.php new file mode 100644 index 0000000..871a4f7 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Ship/ShipOrderRequest.php @@ -0,0 +1,21 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Ship\ShipOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ShipOrderRequest('ORDER_ID'); + * $api->shipOrder($request); + * + */ +class ShipOrderRequest extends AbstractShipOrderRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Tax/GetOrderTaxesRequest.php b/src/Mirakl/MMP/Front/Request/Order/Tax/GetOrderTaxesRequest.php new file mode 100644 index 0000000..ce65d44 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Tax/GetOrderTaxesRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Tax\GetOrderTaxesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderTaxesRequest(); + * $result = $api->getOrderTaxes($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Order\Tax\OrderTaxCollection + * + */ +class GetOrderTaxesRequest extends AbstractGetOrderTaxesRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OrderTaxCollection::decorator('taxes'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Tracking/UpdateOrderTrackingInfoRequest.php b/src/Mirakl/MMP/Front/Request/Order/Tracking/UpdateOrderTrackingInfoRequest.php new file mode 100644 index 0000000..0241a73 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Tracking/UpdateOrderTrackingInfoRequest.php @@ -0,0 +1,26 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Tax\UpdateOrderTrackingInfoRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new UpdateOrderTrackingInfoRequest('ORDER_ID', [ + * 'carrier_code' => 'FEDEX', + * 'carrier_name' => 'FedEx', + * 'carrier_url' => 'https://fex.ex?n=JFSKFJSDKF0923949', + * 'tracking_number' => 'JFSKFJSDKF0923949', + * ]); + * $api->updateOrderTrackingInfo($request); + * + */ +class UpdateOrderTrackingInfoRequest extends AbstractUpdateOrderTrackingInfoRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Workflow/CreateOrderRequest.php b/src/Mirakl/MMP/Front/Request/Order/Workflow/CreateOrderRequest.php new file mode 100644 index 0000000..52efdf5 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Workflow/CreateOrderRequest.php @@ -0,0 +1,137 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Workflow\CreateOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new CreateOrderRequest('ORDER_ID', [ + * 'commercial_id' => 'MMP-O-3366329727', + * 'customer' => [ + * 'civility' => 'Dr.', + * 'firstname' => 'Dionisi', + * 'lastname' => 'Nelson', + * 'billing_address' => [ + * 'civility' => 'Dr.', + * 'firstname' => 'Nelson', + * 'lastname' => 'Dionisi', + * 'zip_code' => '75116', + * 'city' => 'Paris', + * 'country' => 'France', + * 'country_iso_code' => 'USA', + * 'company' => 'Mirakl', + * 'state' => 'IDF', + * 'phone' => '0619874662', + * 'phone_secondary' => '0123456789', + * 'street_1' => '10-12 rue de l\'Amiral Hamelin', + * 'street_2' => 'Escalier A', + * ], + * 'email' => 'change-me+ndionisi@mirakl.com', + * 'shipping_address' => [ + * 'civility' => 'Dr.', + * 'firstname' => 'Nelson', + * 'lastname' => 'Dionisi', + * 'zip_code' => '75116', + * 'city' => 'Paris', + * 'country' => 'France', + * 'country_iso_code' => 'ITA', + * 'company' => 'Mirakl', + * 'state' => 'IDF', + * 'phone' => '0619874662', + * 'phone_secondary' => '0123456789', + * 'additional_info' => 'Code : 38JD31', + * 'internal_additional_info' => '1ier étage', + * 'street_1' => '10-12 rue de l\'Amiral Hamelin', + * 'street_2' => 'Escalier A', + * ], + * 'customer_id' => '34053485', + * ], + * 'offers' => [ + * [ + * 'quantity' => 2, + * 'price' => 240.00, + * 'shipping_price' => 15.00, + * 'shipping_type_code' => 'STD', + * 'order_line_id' => 'MMP-OL-3366329727', + * 'order_line_additional_fields' => ['code' => 'custom-message', 'value' => 'For Mommy']], + * 'offer_id' => '2000', + * 'offer_price' => 120.00, + * 'taxes' => [['amount' => 5.00, 'code' => 'TAX1']], + * 'shipping_taxes' => [['amount' => 1.00, 'code' => 'TAX2']], + * ] + * ], + * 'payment_info' => { + * 'payment_type' => 'Credit Card', + * 'imprint_number' => 'xxxxx-xxx-x-x-xxxxx' + * }, + * 'scored' => true, + * 'shipping_zone_code' => 'FR', + * ]); + * $result = $api->createOrder($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Order\Create\CreatedOrders + * + */ +class CreateOrderRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/orders'; + + /** + * @var array + */ + public $bodyParams = ['create_order']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'create_order' => [CreateOrder::class, 'create'], + ]; + + /** + * @param mixed $order + */ + public function __construct($order) + { + parent::__construct(); + $this->setCreateOrder($order); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CreatedOrders::decorator(); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + return $this->getCreateOrder()->toArray(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Workflow/InvalidateOrderRequest.php b/src/Mirakl/MMP/Front/Request/Order/Workflow/InvalidateOrderRequest.php new file mode 100644 index 0000000..906923b --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Workflow/InvalidateOrderRequest.php @@ -0,0 +1,52 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Workflow\InvalidateOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new InvalidateOrderRequest('COMMERCIAL_ID'); + * $api->invalidateOrder($request); + * + */ +class InvalidateOrderRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/invalid/{commercial_id}'; + + /** + * @var array + */ + protected $uriVars = [ + '{commercial_id}' => 'commercial_id' + ]; + + /** + * @param string $commercialId + */ + public function __construct($commercialId) + { + parent::__construct(); + $this->setCommercialId($commercialId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Order/Workflow/ValidateOrderRequest.php b/src/Mirakl/MMP/Front/Request/Order/Workflow/ValidateOrderRequest.php new file mode 100644 index 0000000..0001fd7 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Order/Workflow/ValidateOrderRequest.php @@ -0,0 +1,52 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Order\Workflow\ValidateOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ValidateOrderRequest('COMMERCIAL_ID'); + * $api->validateOrder($request); + * + */ +class ValidateOrderRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/valid/{commercial_id}'; + + /** + * @var array + */ + protected $uriVars = [ + '{commercial_id}' => 'commercial_id' + ]; + + /** + * @param string $commercialId + */ + public function __construct($commercialId) + { + parent::__construct(); + $this->setCommercialId($commercialId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Payment/GetTransactionLogsRequest.php b/src/Mirakl/MMP/Front/Request/Payment/GetTransactionLogsRequest.php new file mode 100644 index 0000000..5eb056d --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Payment/GetTransactionLogsRequest.php @@ -0,0 +1,9 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Product\GetProductsRequest; + * use Mirakl\MMP\Common\Domain\Product\Offer\ProductReference; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetProductsRequest([new ProductReference('EAN', '0882780560413')]); + * $result = $api->getProducts($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Product\ProductCollection + * + */ +class GetProductsRequest extends AbstractGetProductsRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductCollection::decorator('products'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/CreateQuoteRequestsRequest.php b/src/Mirakl/MMP/Front/Request/Quote/CreateQuoteRequestsRequest.php new file mode 100644 index 0000000..046d538 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/CreateQuoteRequestsRequest.php @@ -0,0 +1,94 @@ + + * use Mirakl\Core\Domain\FileWrapper; + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Domain\Quote\Create\CreateQuoteRequest; + * use Mirakl\MMP\Front\Request\Quote\CreateQuoteRequestsRequest; + * + * // Initialize API client + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * // Create a quote request according to class: + * @see \Mirakl\MMP\Front\Domain\Quote\Create\CreateQuoteRequest + * $quoteRequest1 = new CreateQuoteRequest(); + * $quoteRequest1->setData(...); // Custom quote request data + * + * $quoteRequests = [$quoteRequest1]; + * + * // Create API request + * $request = new CreateQuoteRequestsRequest($quoteRequests); + * + * // Add file of quote request #1 + * $file = new FileWrapper(new \SplFileObject('foobar.txt')); + * $file->setFileName('test1.txt'); // Optional, only needed if file name in $quoteRequest1 is different than 'foobar.txt' + * $request->addFile($file); + * + * $result = $api->createQuoteRequests($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Quote\Create\QuoteRequestReturnCollection + * + * + * @method CreateQuoteRequestCollection getCreateQuoteRequests() + * @method $this setCreateQuoteRequests(array|CreateQuoteRequestCollection $quoteRequests) + */ +class CreateQuoteRequestsRequest extends AbstractFilesUploadRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/quote_request'; + + /** + * @var array + */ + public $bodyParams = ['create_quote_requests' => 'quote_requests']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'create_quote_requests' => [CreateQuoteRequestCollection::class, 'create'], + ]; + + /** + * @param CreateQuoteRequestCollection|array $createQuoteRequests + */ + public function __construct($createQuoteRequests) + { + parent::__construct(); + $this->setCreateQuoteRequests($createQuoteRequests); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + $params = parent::getBodyParams(); + + $params['quote_requests'] = ['quote_requests' => $this->getCreateQuoteRequests()->toArray()]; + + return $params; + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return QuoteRequestReturnCollection::decorator('quote_request_returns'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/GetQuoteRequestsRequest.php b/src/Mirakl/MMP/Front/Request/Quote/GetQuoteRequestsRequest.php new file mode 100644 index 0000000..66dbc6e --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/GetQuoteRequestsRequest.php @@ -0,0 +1,61 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Quote\GetQuoteRequestsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetQuoteRequestsRequest(); + * + * $result = $api->getQuoteRequests($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Quote\Get\QuoteRequestCollection + * + * + */ +class GetQuoteRequestsRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/quote_request'; + + /** + * @var array + */ + public $queryParams = [ + 'customer_ids', + 'shop_ids', + 'shop_quote_request_id', + 'states' + ]; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return QuoteRequestCollection::decorator('quote_requests'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/Message/QuoteRequestMessageDocumentsRequest.php b/src/Mirakl/MMP/Front/Request/Quote/Message/QuoteRequestMessageDocumentsRequest.php new file mode 100644 index 0000000..dfe05f7 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/Message/QuoteRequestMessageDocumentsRequest.php @@ -0,0 +1,59 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Quote\Message\QuoteRequestMessageDocumentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new QuoteRequestMessageDocumentsRequest('QuoteRequestMessageId', 'DocumentId'); + * + * $result = $api->downloadQuoteRequestMessageDocuments($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * + */ +class QuoteRequestMessageDocumentsRequest extends AbstractDocumentsDownloadRequest +{ + /** + * @var string + */ + protected $endpoint = 'quote_request/message/{quote_request_message_id}/documents'; + + /** + * @var array + */ + protected $uriVars = [ + '{quote_request_message_id}' => 'quote_request_message_id', + ]; + + /** + * @var array + */ + public $queryParams = ['document_id']; + + /** + * @param string $quoteRequestMessageId + * @param string|null $documentId + */ + public function __construct($quoteRequestMessageId, $documentId = null) + { + parent::__construct(); + $this->setQuoteRequestMessageId($quoteRequestMessageId); + + if (null !== $documentId) { + $this->setDocumentId($documentId); + } + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/Message/ShopQuoteRequestMessageRequest.php b/src/Mirakl/MMP/Front/Request/Quote/Message/ShopQuoteRequestMessageRequest.php new file mode 100644 index 0000000..c6d0c6a --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/Message/ShopQuoteRequestMessageRequest.php @@ -0,0 +1,68 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Quote\Message\ShopQuoteRequestMessageRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new QuoteRequestMessageDocumentsRequest('ShopQuoteRequestId', 'MessageBody', 'toType'); + * + * $docs = new DocumentCollection(); + * $docs->add(new Document('fake body', 'test1.txt', 'FILE_TYPE_1')); + * $docs->add(new Document('fake body', 'test2.txt', 'FILE_TYPE_2')); + * + * $request->setDocuments($docs); + * + * $result = $api->addMessageToQuoteRequest($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Quote\Message\CreatedQuoteRequestMessage + * + */ +class ShopQuoteRequestMessageRequest extends AbstractDocumentsUploadRequest +{ + /** + * @var string + */ + protected $endpoint = '/quote_request/message'; + + /** + * @var array + */ + public $bodyParams = ['shop_quote_request_id', 'message_body', 'to_type']; + + /** + * @param string $shopQuoteRequestId + * @param string $messageBody + * @param string $toType + */ + public function __construct($shopQuoteRequestId, $messageBody, $toType) + { + parent::__construct(); + $this->setShopQuoteRequestId($shopQuoteRequestId); + $this->setMessageBody($messageBody); + $this->setToType($toType); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CreatedQuoteRequestMessage::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/Order/PlaceOrderFromQuoteRequest.php b/src/Mirakl/MMP/Front/Request/Quote/Order/PlaceOrderFromQuoteRequest.php new file mode 100644 index 0000000..d5ba3ef --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/Order/PlaceOrderFromQuoteRequest.php @@ -0,0 +1,114 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Quote\Message\ShopQuoteRequestMessageRequest; + * use Mirakl\MMP\Front\Domain\Quote\Order\OrderFromQuote; + * use Mirakl\MMP\Front\Domain\Quote\Order\QuoteOrderLine; + * use Mirakl\MMP\Front\Request\Quote\Order\PlaceOrderFromQuoteRequest; + * use Mirakl\MMP\Common\Domain\AdditionalFieldValue; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $orderLine = new QuoteOrderLine(); + * $orderLine->setLeadtimeToShip(2); + * $orderLine->setOrderLineId('order-54612-1'); + * $orderLine->setQuoteLineId('quote-1313-1'); + * $orderLine->setOrderLineAdditionalFields([new AdditionalFieldValue('message', 'my message','LIST')]); + * + * $paymentInfo = new CreateOrderPaymentInfo(); + * $paymentInfo->setImprintNumber('1561354561'); + * $paymentInfo->setPaymentType('CREDIT_CARD'); + * + * $createOrderFromQuote = new OrderFromQuote(); + * $createOrderFromQuote->setChannelCode('WEB'); + * $createOrderFromQuote->setCommercialId('order-54612'); + * $createOrderFromQuote->setLines([$orderLine]); + * $createOrderFromQuote->setOrderAdditionalFields([new AdditionalFieldValue('wrapAsGift', 'true','BOOLEAN')]); + * $createOrderFromQuote->setPaymentDuration(66); + * $createOrderFromQuote->setPaymentInfo($paymentInfo); + * $createOrderFromQuote->setPaymentWorkflow('PAY_ON_ACCEPTANCE'); + * $createOrderFromQuote->setScored(true); + * + * $request = new PlaceOrderFromQuoteRequest('quoteID', $createOrderFromQuote); + * + * $result = $api->placeOrderFromQuote($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Order\OrderCollection + * + */ +class PlaceOrderFromQuoteRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/quote_request/{quote_id}/place'; + + /** + * @var array + */ + protected $uriVars = [ + '{quote_id}' => 'quote_id', + ]; + + /** + * @var array + */ + public $bodyParams = ['order']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'order' => [OrderFromQuote::class, 'create'], + ]; + + /** + * @param string $quoteId + * @param OrderFromQuote|array $order + */ + public function __construct($quoteId, $order) + { + parent::__construct(); + $this->setQuoteId($quoteId); + $this->setOrder($order); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OrderCollection::decorator('orders'); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + return $this->getOrder()->toArray(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/Scoring/InvalidateQuoteRequest.php b/src/Mirakl/MMP/Front/Request/Quote/Scoring/InvalidateQuoteRequest.php new file mode 100644 index 0000000..3e5eb53 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/Scoring/InvalidateQuoteRequest.php @@ -0,0 +1,50 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Quote\Scoring\InvalidateQuoteRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new InvalidateQuoteRequest('QuoteRequestID'); + * $api->invalidateQuoteRequest($request); + * + */ +class InvalidateQuoteRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/quote_request/{quote_request_id}/invalid'; + + /** + * @var array + */ + protected $uriVars = [ + '{quote_request_id}' => 'quote_request_id' + ]; + + /** + * @param string $quoteRequestId + */ + public function __construct($quoteRequestId) + { + parent::__construct(); + $this->setQuoteRequestId($quoteRequestId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Quote/Scoring/ValidateQuoteRequest.php b/src/Mirakl/MMP/Front/Request/Quote/Scoring/ValidateQuoteRequest.php new file mode 100644 index 0000000..bb6bbab --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Quote/Scoring/ValidateQuoteRequest.php @@ -0,0 +1,50 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Quote\Scoring\ValidateQuoteRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new ValidateQuoteRequest('QuoteRequestID'); + * $api->validateQuoteRequest($request); + * + */ +class ValidateQuoteRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/quote_request/{quote_request_id}/valid'; + + /** + * @var array + */ + protected $uriVars = [ + '{quote_request_id}' => 'quote_request_id' + ]; + + /** + * @param string $quoteRequestId + */ + public function __construct($quoteRequestId) + { + parent::__construct(); + $this->setQuoteRequestId($quoteRequestId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Shipping/GetLogisticClassRequest.php b/src/Mirakl/MMP/Front/Request/Shipping/GetLogisticClassRequest.php new file mode 100644 index 0000000..ddadfb2 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Shipping/GetLogisticClassRequest.php @@ -0,0 +1,20 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $result = $api->getLogisticClasses(); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shipping\LogisticClassCollection + * + */ +class GetLogisticClassRequest extends AbstractGetLogisticClassRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Shipping/GetShippingCarriersRequest.php b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingCarriersRequest.php new file mode 100644 index 0000000..b004d9a --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingCarriersRequest.php @@ -0,0 +1,20 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $result = $api->getShippingCarriers(); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shipping\CarrierCollection + * + */ +class GetShippingCarriersRequest extends AbstractGetShippingCarriersRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Shipping/GetShippingFeesRequest.php b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingFeesRequest.php new file mode 100644 index 0000000..6445459 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingFeesRequest.php @@ -0,0 +1,88 @@ + + * This method returns the orderer quantity and available quantity of each offer.
+ * The client should check if asked quantity is available and if not, handle it like they want.
+ * The offer available quantity is: + * + *

+ * + * @method string getChannelCode() + * @method $this setChannelCode(string $channelCode) + * @method array getOffersWithQuantity() + * @method $this setOffersWithQuantity(array $offers) + * @method string getShippingZoneCode() + * @method $this setShippingZoneCode(string $shippingZoneCode) + * @method array getShopsWithShippingType() + * @method $this setShopsWithShippingType(array $shopsWithShippingType) + * + * Example: + * + * + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Shipping\GetShippingFeesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetShippingFeesRequest('FR', ['2003' => 5, '2002' => 1]); + * $result = $api->getShippingFees($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Shipping\ShopShippingFeeCollection + * + */ +class GetShippingFeesRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/shipping/fees'; + + /** + * @var array + */ + public $queryParams = [ + 'pricing_channel_code', + 'shipping_zone_code', + 'offers_with_quantity' => 'offers', + 'shops_with_shipping_type' => 'shops', + ]; + + /** + * @param string $shippingZoneCode + * @param array $offersWithQuantity + */ + public function __construct($shippingZoneCode, array $offersWithQuantity) + { + parent::__construct(); + $this->setShippingZoneCode($shippingZoneCode); + $this->setOffersWithQuantity($offersWithQuantity); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\Closure(function (ResponseInterface $response) { + $data = \Mirakl\parse_json_response($response); + $collection = new ShopShippingFeeCollection($data['shops'], $data['total_count']); + if (isset($data['offers_not_found'])) { + $collection->setOffersNotFound($data['offers_not_found']); + } + + return $collection; + }); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Shipping/GetShippingRatesRequest.php b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingRatesRequest.php new file mode 100644 index 0000000..78228a0 --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingRatesRequest.php @@ -0,0 +1,136 @@ + + * This method returns the orderer quantity and available quantity of each offer.
+ * The client should check if asked quantity is available and if not, handle it like they want.
+ * The offer available quantity is: + * + *

+ * + * @method bool isComputeOrderTaxes() + * @method $this setComputeOrderTaxes(bool $computeOrderTaxes) + * @method CustomerShippingToAddress getCustomerShippingToAddress() + * @method $this setCustomerShippingToAddress(CustomerShippingToAddress $customerShippingToAddress) + * @method string getPricingChannelCode() + * @method $this setPricingChannelCode(string $channelCode) + * @method OffersWithQtyCollection getOffers() + * @method $this setOffers(array|OffersWithQtyCollection $offers) + * @method string getShippingZoneCode() + * @method $this setShippingZoneCode(string $shippingZoneCode) + * + * Example: + * + * + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Shipping\GetShippingRatesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetShippingRatesRequest('FR', [ + * ['offer_id' => 2003, 'quantity' => 5, 'shipping_type_code' => 'STD', 'leadtime_to_ship' => 2], + * ['offer_id' => 2004, 'quantity' => 2, 'leadtime_to_ship' => 5], + * ['offer_id' => 2005, 'quantity' => 10], + * ]); + * $result = $api->getShippingRates($request); + * // $result => @see \Mirakl\MMP\Front\Domain\Collection\Shipping\OrderShippingFeeCollection + * + * + */ +class GetShippingRatesRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/shipping/rates'; + + /** + * @var array + */ + public $queryParams = [ + 'pricing_channel_code', + 'shipping_zone_code', + 'compute_order_taxes', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'offers' => [OffersWithQtyCollection::class, 'create'], + ]; + + /** + * @param string $shippingZoneCode + * @param array|OffersWithQtyCollection $offers + */ + public function __construct($shippingZoneCode, $offers) + { + parent::__construct(); + $this->setShippingZoneCode($shippingZoneCode); + $this->setOffers($offers); + } + + /** + * @inheritdoc + */ + public function getQueryParams() + { + $params = parent::getQueryParams(); + $params['offers'] = \Mirakl\tuples_to_query_param($this->getOffers()->toArray()); + + if ($customerShipppingAddress = $this->getCustomerShippingToAddress()) { + if (!empty($customerShipppingAddress->getStreet1())) { + $params['customer_shipping_address_street_1'] = $customerShipppingAddress->getStreet1(); + } + if (!empty($customerShipppingAddress->getStreet2())) { + $params['customer_shipping_address_street_2'] = $customerShipppingAddress->getStreet2(); + } + if (!empty($customerShipppingAddress->getCity())) { + $params['customer_shipping_address_city'] = $customerShipppingAddress->getCity(); + } + if (!empty($customerShipppingAddress->getZipCode())) { + $params['customer_shipping_address_zipcode'] = $customerShipppingAddress->getZipCode(); + } + if (!empty($customerShipppingAddress->getState())) { + $params['customer_shipping_address_state'] = $customerShipppingAddress->getState(); + } + if (!empty($customerShipppingAddress->getCountryCode())) { + $params['customer_shipping_address_country_iso_code'] = $customerShipppingAddress->getCountryCode(); + } + } + + return $params; + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\Closure(function (ResponseInterface $response) { + $data = \Mirakl\parse_json_response($response); + $collection = new OrderShippingFeeCollection($data['orders'], $data['total_count']); + if (isset($data['errors'])) { + $collection->setErrors($data['errors']); + } + + return $collection; + }); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Shipping/GetShippingZonesRequest.php b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingZonesRequest.php new file mode 100644 index 0000000..5e188fb --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Shipping/GetShippingZonesRequest.php @@ -0,0 +1,26 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Shipping\GetShippingZonesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetShippingZonesRequest(); + * $request->setLocale('fr_FR'); + * + * $result = $api->getShippingZones($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shipping\ShippingZoneDetailCollection + * + * + */ +class GetShippingZonesRequest extends AbstractGetShippingZonesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Front/Request/Shop/CreateShopsRequest.php b/src/Mirakl/MMP/Front/Request/Shop/CreateShopsRequest.php new file mode 100644 index 0000000..241a2ef --- /dev/null +++ b/src/Mirakl/MMP/Front/Request/Shop/CreateShopsRequest.php @@ -0,0 +1,93 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Shop\CreateShopsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new CreateShopsRequest([ + * [ + * 'address' => [ + * 'civility' => 'Mr', + * 'firstname' => 'Bob', + * 'lastname' => 'Smith', + * 'street1' => '10 E 40th St', + * 'street2' => '8th floor', + * 'zip_code' => '10016', + * 'state' => 'New York', + * 'city' => 'New York City', + * 'country' => 'USA', + * 'phone' => '(646) 320-3881', + * 'phone_secondary' => '(212) 204-1126' + * ], + * 'email' => 'sps@sps.com', + * 'fax' => 'none', + * 'web_site' => 'http://swisspostsolutions.com', + * 'operator_internal_id' => '94R9U3DI', + * 'shipping_country' => 'USA', + * 'description' => 'Sells letters, stamps...', + * 'return_policy' => 'All returns are free', + * 'pro_details' => [ + * 'corporate_name' => 'Swiss Post Solutions', + * 'identification_number' => 'US-329JD93KKL', + * 'tax_identification_number' => 'USNY9403999' + * ], + * 'shop_name' => 'Swiss Post Store', + * 'is_professional' => true, + * 'closed_from_date' => '2014-12-12T12:12:00.000+0000', + * 'closed_to_date' => '2014-12-20T12:12:00.000+0000', + * 'immunity_date' => '2015-01-01T00:00:00.000+0000', + * 'shop_additional_fields' => [ + * [ + * 'code' => 'erp-reference-key', + * 'value' => '9ZE8DOIIII' + * ] + * ], + * 'payment_info' => [ + * '@type' => 'ABA', + * 'owner' => 'Matt Marteens', + * 'bank_name' => 'Chase', + * 'bank_account_number' => '839383939', + * 'routing_number' => '121000248', + * 'bic' => 'BOAUSIIE999' + * ], + * 'new_user' => [ + * 'email' => 'user@email.com', + * 'password' => 'password1234' + * ] + * ] + * ]); + * $result = $api->createShops($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Shop\Create\CreatedShops + * + */ +class CreateShopsRequest extends AbstractCreateShopsRequest +{ + /** + * @var array + */ + protected static $dataTypes = [ + 'shops' => [CreateShopCollection::class, 'create'], + ]; + + /** + * @param mixed $shops + */ + public function __construct($shops) + { + parent::__construct(); + $this->setShops($shops); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Client/FrontOperatorApiClient.php b/src/Mirakl/MMP/FrontOperator/Client/FrontOperatorApiClient.php new file mode 100644 index 0000000..edc1265 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Client/FrontOperatorApiClient.php @@ -0,0 +1,145 @@ +run($this); + } + + /** + * (P13) Export all products in csv file + * + * @return File + */ + public function getExportProductsCsv() + { + return (new ExportProductsFileRequest())->run($this); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Category.php b/src/Mirakl/MMP/FrontOperator/Domain/Category.php new file mode 100644 index 0000000..f26ebe0 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Category.php @@ -0,0 +1,42 @@ + [CategoryMediaCollection::class, 'create'], + ]; + + /** + * @var array + */ + protected static $mapping = [ + 'category_code' => 'code', + 'category_description' => 'description', + 'category_label' => 'label', + 'category_type' => 'type', + 'category_medias' => 'media', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Category/CategoryMedia.php b/src/Mirakl/MMP/FrontOperator/Domain/Category/CategoryMedia.php new file mode 100644 index 0000000..7445f98 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Category/CategoryMedia.php @@ -0,0 +1,15 @@ + 'offer_id', + 'product-sku' => 'product/sku', + 'min-shipping-price' => 'min_shipping/price', + 'min-shipping-price-additional' => 'min_shipping/price_additional', + 'min-shipping-zone' => 'min_shipping/zone_code', + 'min-shipping-type' => 'min_shipping/type_code', + 'total-price' => 'total_price', + 'price-additional-info' => 'price_additional_info', + 'state-code' => 'state_code', + 'shop-id' => 'shop_id', + 'shop-name' => 'shop_name', + 'logistic-class' => 'logistic_class_code', + 'favorite-rank' => 'favorite_rank', + 'origin-price' => 'discount/origin_price', + 'discount-start-date' => 'discount/start_date', + 'discount-end-date' => 'discount/end_date', + 'available-start-date' => 'availability/start_date', + 'available-end-date' => 'availability/end_date', + 'allow-quote-requests' => 'allow_quote_requests', + 'discount-price' => 'discount/discount_price', + 'discount-ranges' => 'discount/ranges', + 'price-ranges' => 'price_ranges', + 'currency-iso-code' => 'currency_iso_code', + 'leadtime-to-ship' => 'leadtime_to_ship', + 'eco-tax' => 'eco_tax', + 'product-tax-code' => 'product_tax_code', + 'min-order-quantity' => 'min_order_quantity', + 'max-order-quantity' => 'max_order_quantity', + 'package-quantity' => 'package_quantity', + ]; + + /** + * @var array + */ + protected static $offerPricingFields = [ + 'price' => 'price', + 'origin-price' => 'unit_origin_price', + 'price-ranges' => 'price_ranges', + 'discount-price' => 'unit_discount_price', + 'discount-start-date' => 'discount_start_date', + 'discount-end-date' => 'discount_end_date', + 'discount-ranges' => 'discount_ranges', + ]; + + /** + * Return origin price directly from offer to keep backwards compatibility + * + * @deprecated use getDiscount()->getOriginPrice() + * @return float + */ + public function getOriginPrice() + { + if ($discount = $this->getDiscount()) { + return $discount->getOriginPrice(); + } + + return $this->getPrice(); + } + + /** + * @param array $data + * @param string|null $channelCode + * @return array|null + */ + protected function getOfferPricingData($data, $channelCode = null) + { + // Collect original / channel data + $offerPricing = []; + foreach (self::$offerPricingFields as $column => $field) { + if ($channelCode) { + $column = sprintf('%s[channel=%s]', $column, $channelCode); + } + if (!empty($data[$column])) { + $offerPricing[$field] = $data[$column]; + } + } + + if (!count($offerPricing)) { + return null; + } + + $offerPricing['channel_code'] = $channelCode; + + // Merge price-ranges & discount-ranges for having volume pricing + $volumePrices = []; + $addPriceRange = function ($type, $field) use (&$offerPricing, &$volumePrices) { + if (isset($offerPricing[$field]) && $offerPricing[$field]) { + foreach (explode(',', $offerPricing[$field]) as $range) { + list ($qty, $price) = explode('|', $range); + if (!isset($volumePrices[$qty])) { + $volumePrices[$qty] = ['quantity_threshold' => $qty]; + } + $volumePrices[$qty][$type] = $price; + } + } + unset($offerPricing[$field]); + }; + + $addPriceRange('unit_origin_price', 'price_ranges'); + $addPriceRange('unit_discount_price', 'discount_ranges'); + + $offerPricing['volume_prices'] = array_values($volumePrices); + + return $offerPricing; + } + + /** + * @inheritdoc + */ + public function setData($key, $value = null) + { + parent::setData($key, $value); + + if (!is_array($key)) { + return $this; + } + + $allPrices = new OfferPricesCollection(); + + $channels = array_merge([null], $this->getChannels()); + foreach ($channels as $channel) { + if ($offerPricing = $this->getOfferPricingData($key, $channel)) { + $allPrices->add($offerPricing); + } + } + $this->setAllPrices($allPrices); + + return $this; + } +} diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Order.php b/src/Mirakl/MMP/FrontOperator/Domain/Order.php new file mode 100644 index 0000000..751bbb5 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Order.php @@ -0,0 +1,37 @@ + [OrderCustomer::class, 'create'], + 'order_lines' => [OrderLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFields.php b/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFields.php new file mode 100644 index 0000000..a88a02b --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFields.php @@ -0,0 +1,51 @@ + 'additional_fields', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'order_lines' => [OrderLineWithAdditionalFieldsCollection::class, 'create'], + 'additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + ]; + + /** + * @return AdditionalFieldValueCollection + * + * @deprecated use getOrderAdditionalFields() + */ + public function getAdditionalFields() + { + return $this->getOrderAdditionalFields(); + } + + /** + * @param array|AdditionalFieldValueCollection $additionalFields + * @return $this + * + * @deprecated use setOrderAdditionalFields($additionalFields) + */ + public function setAdditionalFields($additionalFields) + { + return $this->setOrderAdditionalFields($additionalFields); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFieldsResult.php b/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFieldsResult.php new file mode 100644 index 0000000..9248a84 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFieldsResult.php @@ -0,0 +1,21 @@ + [UpdateAdditionalFields::class, 'create'], + 'order_update_errors' => [UpdateAdditionalFieldsWithErrors::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFieldsWithErrors.php b/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFieldsWithErrors.php new file mode 100644 index 0000000..df7701b --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Order/AdditionalField/UpdateAdditionalFieldsWithErrors.php @@ -0,0 +1,14 @@ + [UpdateAdditionalFields::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Order/Cancelation/CancelationCreated.php b/src/Mirakl/MMP/FrontOperator/Domain/Order/Cancelation/CancelationCreated.php new file mode 100644 index 0000000..1c214e6 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Order/Cancelation/CancelationCreated.php @@ -0,0 +1,7 @@ + [CustomerShippingAddress::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Order/OrderLine.php b/src/Mirakl/MMP/FrontOperator/Domain/Order/OrderLine.php new file mode 100644 index 0000000..e4af9eb --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Order/OrderLine.php @@ -0,0 +1,11 @@ + [DebitOrderLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Payment/Debit/DebitOrderLine.php b/src/Mirakl/MMP/FrontOperator/Domain/Payment/Debit/DebitOrderLine.php new file mode 100644 index 0000000..4bf5d0f --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Payment/Debit/DebitOrderLine.php @@ -0,0 +1,17 @@ + [RefundedOrderLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Payment/Refund/RefundOrderLine.php b/src/Mirakl/MMP/FrontOperator/Domain/Payment/Refund/RefundOrderLine.php new file mode 100644 index 0000000..f0392bb --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Payment/Refund/RefundOrderLine.php @@ -0,0 +1,13 @@ + [RefundOrderLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Product.php b/src/Mirakl/MMP/FrontOperator/Domain/Product.php new file mode 100644 index 0000000..ee3dc9c --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Product.php @@ -0,0 +1,11 @@ + 'offer_id', + 'product_sku' => 'product/sku', + 'product_title' => 'product/title', + 'product_references' => 'product/references', + 'category_code' => 'product/category/code', + 'category_label' => 'product/category/label', + 'category_type' => 'product/category/type', + 'min_shipping_price' => 'min_shipping/price', + 'min_shipping_price_additional' => 'min_shipping/price_additional', + 'min_shipping_type' => 'min_shipping/type_code', + 'min_shipping_zone' => 'min_shipping/zone_code', + 'available_start_date' => 'availability/start_date', + 'available_end_date' => 'availability/end_date', + 'offer_additional_fields' => 'additional_fields', + 'is_professional' => 'professional', + 'is_premium' => 'premium', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'additional_fields' => [AdditionalFieldValueCollection::class, 'create'], + 'availability' => [OfferAvailability::class, 'create'], + 'discount' => [Discount::class, 'create'], + 'logistic_class' => [LogisticClass::class, 'create'], + 'min_shipping' => [OfferMinimumShipping::class, 'create'], + 'product' => [ProductInfoWithRefs::class, 'create'], + 'all_prices' => [OfferPricesCollection::class, 'create'], + 'applicable_pricing' => [OfferPricing::class, 'create'], + ]; + + /** + * @return string + */ + public function getId() + { + return $this->getOfferId(); + } + + /** + * @param mixed $product + * @return $this + */ + public function setProductReferences($product) + { + if (is_array($product)) { + $product = ProductInfoWithRefs::create(['references' => $product]); + } + + return $this->setProduct($product); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Product/Offer/ProductWithOffers.php b/src/Mirakl/MMP/FrontOperator/Domain/Product/Offer/ProductWithOffers.php new file mode 100644 index 0000000..6d96a73 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Product/Offer/ProductWithOffers.php @@ -0,0 +1,37 @@ + 'product/sku', + 'product_title' => 'product/title', + 'product_references' => 'product/references', + 'category_code' => 'product/category/code', + 'category_label' => 'product/category/label', + 'category_type' => 'product/category/type', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'product' => [ProductInfoWithRefs::class, 'create'], + 'offers' => [OfferOnProductCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Product/Synchro/ProductSynchroResult.php b/src/Mirakl/MMP/FrontOperator/Domain/Product/Synchro/ProductSynchroResult.php new file mode 100644 index 0000000..03dfe30 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Product/Synchro/ProductSynchroResult.php @@ -0,0 +1,15 @@ +setShopId($shopId); + $this->setPromotionId($promotionId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Promotion/PromotionOffersMapping.php b/src/Mirakl/MMP/FrontOperator/Domain/Promotion/PromotionOffersMapping.php new file mode 100644 index 0000000..3a3cdc4 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Promotion/PromotionOffersMapping.php @@ -0,0 +1,51 @@ + 'offer_id', + 'shop-id' => 'shop_id', + 'trigger-promotion-ids' => 'trigger_promotion_ids', + 'reward-promotion-ids' => 'reward_promotion_ids' + ]; + + /** + * @param array|string $triggerPromotionIds + * @return $this + */ + function setTriggerPromotionIds($triggerPromotionIds) { + if (!is_array($triggerPromotionIds)) + $this->setData('trigger_promotion_ids',explode(',',$triggerPromotionIds)); + else + $this->setData('trigger_promotion_ids',$triggerPromotionIds); + + return $this; + } + + /** + * @param array|string $rewardPromotionIds + * @return $this + */ + function setRewardPromotionIds($rewardPromotionIds) { + if (!is_array($rewardPromotionIds)) + $this->setData('reward_promotion_ids',explode(',',$rewardPromotionIds)); + else + $this->setData('reward_promotion_ids',$rewardPromotionIds); + + return $this; + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Promotion/PromotionWithOffers.php b/src/Mirakl/MMP/FrontOperator/Domain/Promotion/PromotionWithOffers.php new file mode 100644 index 0000000..7334813 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Promotion/PromotionWithOffers.php @@ -0,0 +1,7 @@ + [CustomerBillingAddress::class, 'create'], + 'shipping_address' => [CustomerShippingAddress::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Reason.php b/src/Mirakl/MMP/FrontOperator/Domain/Reason.php new file mode 100644 index 0000000..cb1fd91 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Reason.php @@ -0,0 +1,33 @@ + 'customer_right', + 'is_operator_right' => 'operator_right', + 'is_shop_right' => 'shop_right', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop.php new file mode 100644 index 0000000..8835976 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop.php @@ -0,0 +1,25 @@ + [PaymentDetails::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/AbstractCommonShop.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/AbstractCommonShop.php new file mode 100644 index 0000000..df4b5db --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/AbstractCommonShop.php @@ -0,0 +1,69 @@ + 'closed_from', + 'closed_to_date' => 'closed_to', + 'shop_name' => 'name', + 'shop_additional_fields' => 'additional_field_values', + 'is_professional' => 'professional', + 'pro_details' => 'professional_info', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'additional_field_values' => [AdditionalFieldValueCollection::class, 'create'], + 'payment_info' => [PaymentInfo::class, 'factory'], + 'professional_info' => [ProfessionalInfo::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/AbstractCreateShop.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/AbstractCreateShop.php new file mode 100644 index 0000000..22592e1 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/AbstractCreateShop.php @@ -0,0 +1,61 @@ + [CreateShopAddress::class, 'create'], + 'additional_field_values' => [AdditionalFieldValueCollection::class, 'create'], + 'payment_info' => [PaymentInfo::class, 'factory'], + 'professional_info' => [ProfessionalInfo::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/CreateShopAddress.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/CreateShopAddress.php new file mode 100644 index 0000000..44efba0 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/CreateShopAddress.php @@ -0,0 +1,12 @@ + [Shop::class, 'create'], + 'shop_error' => [ShopWithErrors::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/CreatedShops.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/CreatedShops.php new file mode 100644 index 0000000..6a8f0b4 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Create/CreatedShops.php @@ -0,0 +1,19 @@ + [CreatedShopReturnCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/Location/ShopTaxLocation.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Location/ShopTaxLocation.php new file mode 100644 index 0000000..7e657ec --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Location/ShopTaxLocation.php @@ -0,0 +1,37 @@ + 'street_1', + 'street2' => 'street_2', + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/ShopWithErrors.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/ShopWithErrors.php new file mode 100644 index 0000000..7fdbdae --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/ShopWithErrors.php @@ -0,0 +1,7 @@ + [Shop::class, 'create'], + 'shop_error' => [ShopWithErrors::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Shop/Update/UpdatedShops.php b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Update/UpdatedShops.php new file mode 100644 index 0000000..de8705a --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Shop/Update/UpdatedShops.php @@ -0,0 +1,19 @@ + [UpdatedShopReturnCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Synchro/AbstractSynchroResult.php b/src/Mirakl/MMP/FrontOperator/Domain/Synchro/AbstractSynchroResult.php new file mode 100644 index 0000000..f29d3b7 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Synchro/AbstractSynchroResult.php @@ -0,0 +1,38 @@ + 'error_report', + ]; + + /** + * @return bool + */ + public function hasErrorReport() + { + return (bool) $this->getErrorReport(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Domain/Synchro/AbstractSynchroTracking.php b/src/Mirakl/MMP/FrontOperator/Domain/Synchro/AbstractSynchroTracking.php new file mode 100644 index 0000000..c91ff0b --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Domain/Synchro/AbstractSynchroTracking.php @@ -0,0 +1,11 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Catalog\Category\CategorySynchroErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new CategorySynchroErrorReportRequest('SYNCHRO_ID'); + * + * $result = $api->getCategorySynchroErrorReport($request)->getFile(); + * // $result => @see \Mirakl\Core\Domain\FileWrapper; + * + * + */ +class CategorySynchroErrorReportRequest extends AbstractSynchroErrorReportRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/categories/synchros/{synchro}/error_report'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Catalog/Category/CategorySynchroRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Category/CategorySynchroRequest.php new file mode 100644 index 0000000..89b0dbf --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Category/CategorySynchroRequest.php @@ -0,0 +1,42 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Catalog\Category\CategorySynchroRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new CategorySynchroRequest('PATH_FILE'); + * + * $result = $this->api->synchronizeCategories($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Category\Synchro\CategorySynchroTracking;; + * + * + */ +class CategorySynchroRequest extends AbstractFileRequest +{ + /** + * @var string + */ + protected $endpoint = '/categories/synchros'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CategorySynchroTracking::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Catalog/Category/CategorySynchroStatusRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Category/CategorySynchroStatusRequest.php new file mode 100644 index 0000000..8f2864a --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Category/CategorySynchroStatusRequest.php @@ -0,0 +1,39 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Catalog\Category\CategorySynchroStatusRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new CategorySynchroStatusRequest('SYNCHRO_ID'); + * + * $result = $this->api->getCategorySynchroResult($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Category\Synchro\CategorySynchroResult; + * + * + */ +class CategorySynchroStatusRequest extends AbstractSynchroStatusRequest +{ + /** + * @var string + */ + protected $endpoint = '/categories/synchros/{synchro}'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CategorySynchroResult::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroErrorReportRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroErrorReportRequest.php new file mode 100644 index 0000000..ec5b955 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroErrorReportRequest.php @@ -0,0 +1,33 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Catalog\Product\ProductSynchroErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new ProductSynchroErrorReportRequest('SYNCHRO_ID'); + * + * $result = $api->getProductSynchroErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper; + * + * + */ +class ProductSynchroErrorReportRequest extends AbstractSynchroErrorReportRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/products/synchros/{synchro}/error_report'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroRequest.php new file mode 100644 index 0000000..0bb7e1a --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroRequest.php @@ -0,0 +1,47 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Catalog\Product\ProductSynchroRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $csv = <<synchronizeProducts($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Product\Synchro\ProductSynchroTracking; + * + * + */ +class ProductSynchroRequest extends AbstractFileRequest +{ + /** + * @var string + */ + protected $endpoint = '/products/synchros'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductSynchroTracking::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroStatusRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroStatusRequest.php new file mode 100644 index 0000000..21a35b0 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Catalog/Product/ProductSynchroStatusRequest.php @@ -0,0 +1,39 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Catalog\Product\ProductSynchroErrorReportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new ProductSynchroStatusRequest($synchroId); + * + * $result = $this->api->getProductSynchroResult($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Product\Synchro\ProductSynchroResult; + * + * + */ +class ProductSynchroStatusRequest extends AbstractSynchroStatusRequest +{ + /** + * @var string + */ + protected $endpoint = '/products/synchros/{synchro}'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductSynchroResult::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Category/GetCategoriesRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Category/GetCategoriesRequest.php new file mode 100644 index 0000000..113b1ed --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Category/GetCategoriesRequest.php @@ -0,0 +1,42 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Category\GetCategoriesRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetCategoriesRequest(); + * + * $categories = $this->api->getCategories($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Category\CategoryCollection; + * + * + */ +class GetCategoriesRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/categories'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CategoryCollection::decorator('categories'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Offer/GetOffersRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Offer/GetOffersRequest.php new file mode 100644 index 0000000..809daf3 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Offer/GetOffersRequest.php @@ -0,0 +1,71 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\FrontOperator\Request\Offer\GetOffersRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOffersRequest('SHOP_ID'); + * $request->setProductSkus(['PRODUCT_SKU']); // Optional + * $request->setAllOffers(true); // Optional + * $request->setOfferStateCodes(['OFFER_STATE']); // Optional + * $request->setFavorite(true); // Optional + * $result = $api->getOffers($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Offer\OfferCollection + * + + */ +class GetOffersRequest extends AbstractGetOffersRequest +{ + /** + * @var string + */ + protected $endpoint = '/shops/{shop}/offers'; + + /** + * @var array + */ + protected $uriVars = [ + '{shop}' => 'shop_id' + ]; + + /** + * @var array + */ + public $queryParams = ['shop_id', 'product_skus', 'all_offers', 'offer_state_codes', 'favorite', 'pricing_channel_code']; + + /** + * @param string $shopId + */ + public function __construct($shopId) + { + parent::__construct(); + $this->setShopId($shopId); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OfferCollection::decorator('offers'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Offer/OffersExportFileRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Offer/OffersExportFileRequest.php new file mode 100644 index 0000000..ed0a215 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Offer/OffersExportFileRequest.php @@ -0,0 +1,80 @@ + + * If offers have additional fields, a column is added at the end of csv for each existing + * additional field with as header the code of the additional field. + *

+ *

+ * Returns CSV diff file with: + * offer-id;product-sku;min-shipping-price;min-shipping-price-additional; + * min-shipping-zone;min-shipping-type;price;total-price;price-additional-info;quantity;description; + * state-code;shop-id;shop-name;professional;premium;logistic-class;active;favorite-rank;channels; + * deleted;origin-price;discount-start-date;discount-end-date;available-start-date;available-end-date;currency-iso-code + *

+ * + * @method array getChannelCodes() + * @method $this setChannelCodes(array $channelCodes) + * @method bool isIncludeInactiveOffers() + * @method $this setIncludeInactiveOffers(bool $includeInactiveOffers) + * + * setIncludeInactiveOffers method can be used only if last_request_date is not specified. + * If true, active offers as well as inactive offers are returned. + * If false or not specified, only active offers are returned. + * If false or not specified, only active offers are returned. + * + * @method \DateTime getLastRequestDate() + * + * If the lastRequestDate param is not set the API returns all the active offers. + * If this params is set the export returns the active and inactive offers since the last API call. + * For inactive offers, the "active" field is set to "false" and only the "offer-id" and "product-sku" + * fields are specified. + * @method $this setLastRequestDate(\DateTime $lastRequestDate) + * + * Example: + * + * + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Offer\OffersExportFileRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new OffersExportFileRequest(); + * $request->setIncludeInactiveOffers(true); + * + * $result = $this->api->exportOffersToFile($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper; + * + * + */ +class OffersExportFileRequest extends AbstractRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/offers/export'; + + /** + * @var array + */ + public $queryParams = ['last_request_date', 'channel_codes', 'include_inactive_offers']; + + /** + * @param string|\Datetime $lastRequestDate + */ + public function __construct($lastRequestDate = null) + { + parent::__construct(); + if (null !== $lastRequestDate) { + $this->setLastRequestDate($lastRequestDate); + } + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Offer/OffersExportRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Offer/OffersExportRequest.php new file mode 100644 index 0000000..1fda724 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Offer/OffersExportRequest.php @@ -0,0 +1,39 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Offer\OffersExportRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new OffersExportRequest(); + * $request->setIncludeInactiveOffers(true); + * + * $result = $this->api->exportOffers($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Offer\ExportOfferCollection; + * + * + */ +class OffersExportRequest extends OffersExportFileRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\CsvCollection(ExportOfferCollection::class); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/AdditionalField/UpdateAdditionalFieldsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/AdditionalField/UpdateAdditionalFieldsRequest.php new file mode 100644 index 0000000..5c70df4 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/AdditionalField/UpdateAdditionalFieldsRequest.php @@ -0,0 +1,135 @@ + + * [ + * [ + * 'type' => 'NUMERIC', + * 'code' => 'ecotax', + * 'value' => '42' + * ] + * ], + * 'order_lines' => [ + * [ + * 'order_line_id' => '1000', + * 'order_line_additional_fields' => [ + * [ + * 'type' => 'BOOLEAN', + * 'code' => 'gift-wrap', + * 'value' => 'true' + * ] + * ] + * ] + * ] + * ]; + * + * $update = new UpdateAdditionalFields(); + * $update->setOrderAdditionalFields($input['order_additional_fields']); + * $update->setOrderLines($input['order_lines']); + * + * // Building request with your order id + * $request = new UpdateAdditionalFieldsRequest('M2-QA-411-WHOLESALE000000020'); + * $request->setOrderAdditionalFields($update); + * + * // Mirakl\MMP\FrontOperator\Domain\Order\AdditionalField\UpdateAdditionalFieldsResult + * $result = $client->updateOrderAdditionalFields($request); + * + * // Get Result + * // Mirakl\MMP\FrontOperator\Domain\Order\AdditionalField\UpdateAdditionalFieldsWithErrors + * var_dump($result->getOrderUpdateErrors()); + * + * // Get updated additional fields + * // Mirakl\MMP\FrontOperator\Domain\Order\AdditionalField\UpdateAdditionalFields + * var_dump($result->getOrderUpdateResult()); + * + * } catch (\Exception $e) { + * // An exception is thrown if the requested object is not found or if an error occurs + * var_dump($e->getMessage()); + * } + * + */ +class UpdateAdditionalFieldsRequest extends AbstractOrderRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/additional_fields'; + + /** + * @var array + */ + public $bodyParams = ['order_additional_fields']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'order_additional_fields' => [UpdateAdditionalFields::class, 'create'], + ]; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\Closure(function(ResponseInterface $response) { + $data = (new Decorator\AssocArray())->decorate($response); + + $result = new UpdateAdditionalFieldsResult(); + + if (isset($data['order_update_result'])) { + $result->setOrderUpdateResult($data['order_update_result']); + } + if (isset($data['order_update_errors'])) { + $result->setOrderUpdateErrors($data['order_update_errors']); + } + + return $result; + }); + } + + /** + * @inheritdoc + */ + public function getBodyParams() + { + return $this->getOrderAdditionalFields()->toArray(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Cancelation/CreateCancelationsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Cancelation/CreateCancelationsRequest.php new file mode 100644 index 0000000..4121693 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Cancelation/CreateCancelationsRequest.php @@ -0,0 +1,45 @@ + + * use Mirakl\MMP\Common\Domain\Order\Tax\OrderTaxAmount; + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Domain\Order\Cancelation\CreateCancelation; + * use Mirakl\MMP\FrontOperator\Request\Order\Cancelation\CreateCancelationsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $createCancelation = new CreateCancelation(); + * $createCancelation->setAmount(10.00); + * $createCancelation->setReasonCode('18'); + * $createCancelation->setOrderLineId('OR01-A-1'); + * $createCancelation->setQuantity(1); + * $createCancelation->setShippingAmount(1.00); + * $createCancelation->setCurrencyIsoCode('EUR'); + * $createCancelation->setShippingTaxes([new OrderTaxAmount(1.53, 'VAT')]); + * $createCancelation->setTaxes([new OrderTaxAmount(0.98, 'GST')]); + * + * $request = new CreateCancelationsRequest([$createCancelation]); + * + * $result = $api->cancelOrderLines($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Order\CancelationCreatedCollection + * + */ +class CreateCancelationsRequest extends AbstractCreateCancelationsRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CancelationCreatedCollection::decorator('cancelations'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Document/DeleteOrderDocumentRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Document/DeleteOrderDocumentRequest.php new file mode 100644 index 0000000..b9fe191 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Document/DeleteOrderDocumentRequest.php @@ -0,0 +1,46 @@ + + * + * deleteOrderDocument($request); + * + * var_dump(get_class($result)); + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->deleteOrderDocument($request) + * //var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e->getTraceAsString()); + * } + * + */ +class DeleteOrderDocumentRequest extends AbstractDeleteOrderDocumentsRequest +{} + diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Evaluation/GetAssessmentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Evaluation/GetAssessmentsRequest.php new file mode 100644 index 0000000..7c076c8 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Evaluation/GetAssessmentsRequest.php @@ -0,0 +1,44 @@ + + * use Mirakl\MMP\Common\Domain\Evaluation\AssessmentType; + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\Evaluation\GetAssessmentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetAssessmentsRequest(); + * $request->setLocale('en_US'); + * + * $result = $api->getAssessments($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Evaluation\AssessmentCollection + * + */ +class GetAssessmentsRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/evaluations/assessments'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return AssessmentCollection::decorator('assessments'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/GetOrdersRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/GetOrdersRequest.php new file mode 100644 index 0000000..4bc1299 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/GetOrdersRequest.php @@ -0,0 +1,72 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\GetOrdersRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetOrdersRequest(); + * // Optional parameters + * $request->setOrderIds(['ORDER_ID_1', 'ORDER_ID_2']) + * ->setOffset(10) + * ->setMax(25) + * ->setPaginate(false) + * ->setStartDate('2015-06-09') + * ->setEndDate('2015-06-30'); + * $result = $api->getOrders($request); + * // $result => @see \Mirakl\MMP\Shop\Domain\Collection\Order\ShopOrderCollection + * + */ +class GetOrdersRequest extends AbstractGetOrdersRequest +{ + /** + * @var array + */ + public $queryParams = [ + 'order_ids', + 'order_states' => 'order_state_codes', + 'commercial_ids', + 'customer_ids', + 'offer_ids', + 'product_skus', + 'shop_ids', + 'start_update_date', + 'end_update_date', + 'channel_codes', + 'customer_debited', + 'payment_workflow', + 'only_null_channel', + 'has_incident', + ]; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OrderCollection::decorator('orders'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/AbstractIncidentRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/AbstractIncidentRequest.php new file mode 100644 index 0000000..ae1d72e --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/AbstractIncidentRequest.php @@ -0,0 +1,38 @@ + 'order_id', + '{line}' => 'order_line_id', + ]; + + /** + * @param string $orderId + * @param string $orderLineId + * @param string $reasonCode + */ + public function __construct($orderId, $orderLineId, $reasonCode) + { + parent::__construct($orderId); + $this->setOrderLineId($orderLineId); + $this->setReasonCode($reasonCode); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/CloseIncidentRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/CloseIncidentRequest.php new file mode 100644 index 0000000..45476b4 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/CloseIncidentRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\Incident\CloseIncidentRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new CloseIncidentRequest('ORDER_ID', 'ORDER_LINE_ID', 'REASON_CODE'); + * $api->closeIncident($request); + * + * + */ +class CloseIncidentRequest extends AbstractIncidentRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/lines/{line}/close_incident'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/OpenIncidentRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/OpenIncidentRequest.php new file mode 100644 index 0000000..ae48cc7 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Incident/OpenIncidentRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\Incident\CloseIncidentRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new CloseIncidentRequest('394IDJE-A', '394IDJE-A-1', '5'); + * + * $api->closeIncident($request); + * + * + */ +class OpenIncidentRequest extends AbstractIncidentRequest +{ + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/lines/{line}/open_incident'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/CancelOrderRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/CancelOrderRequest.php new file mode 100644 index 0000000..8377c76 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/CancelOrderRequest.php @@ -0,0 +1,34 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\Workflow\CancelOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new CancelOrderRequest('ORDER_ID'); + * + * $api->cancelOrder($request); + * + * + */ +class CancelOrderRequest extends AbstractOrderRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/cancel'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/ReceiveOrderRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/ReceiveOrderRequest.php new file mode 100644 index 0000000..c64aa9a --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/ReceiveOrderRequest.php @@ -0,0 +1,34 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\Workflow\ReceiveOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new ReceiveOrderRequest('DKFSLFKZ-SDF993-A'); + * + * $api->receiveOrder($request); + * + * + */ +class ReceiveOrderRequest extends AbstractOrderRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/receive'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/ToCollectOrderRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/ToCollectOrderRequest.php new file mode 100644 index 0000000..9a0cc11 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Order/Workflow/ToCollectOrderRequest.php @@ -0,0 +1,34 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Order\Workflow\ToCollectOrderRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new ToCollectOrderRequest('DKFSLFKZ-SDF993-A'); + * + * $api->collectOrder($request); + * + * + */ +class ToCollectOrderRequest extends AbstractOrderRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/orders/{order}/to_collect'; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Payment/Debit/ConfirmOrderDebitRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Payment/Debit/ConfirmOrderDebitRequest.php new file mode 100644 index 0000000..7f7f369 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Payment/Debit/ConfirmOrderDebitRequest.php @@ -0,0 +1,67 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Payment\Debit\ConfirmOrderDebitRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $input = ['orders'][ + * 'amount' => 10, + * 'customer_id' => 'DFKFSOFK', + * 'order_id' => 'EOFKSEF', + * 'payment_status' => 'OK', + * 'transaction_date' => '2013-12-12T12:12:00.000+0000', + * 'transaction_number' => '57574ZEDZER42-QSDQF' + * ] + * + * $request = new ConfirmOrderDebitRequest($input['orders']); + * $api->confirmOrderDebit($request); + * + */ +class ConfirmOrderDebitRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/payment/debit'; + + /** + * @var array + */ + public $bodyParams = ['order_payments' => 'orders']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'order_payments' => [OrderPaymentCollection::class, 'create'], + ]; + + /** + * @param array|OrderPaymentCollection $orderPayments + */ + public function __construct($orderPayments) + { + parent::__construct(); + $this->setOrderPayments($orderPayments); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Payment/Debit/GetOrderDebitsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Payment/Debit/GetOrderDebitsRequest.php new file mode 100644 index 0000000..c732b6c --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Payment/Debit/GetOrderDebitsRequest.php @@ -0,0 +1,50 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Payment\Debit\GetOrderDebitsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetOrderDebitsRequest(); + * + * $request->setOffset(1) + * ->setMax(5); + * + * $api->getOrderDebits($request); + * + */ +class GetOrderDebitsRequest extends AbstractRequest +{ + use PageableTrait; + + /** + * @var string + */ + protected $endpoint = '/payment/debit'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\Closure(function (ResponseInterface $response) { + $data = \Mirakl\parse_json_response($response); + $collection = new DebitOrderCollection($data['orders']['order'], $data['total_count']); + + return $collection; + }); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Payment/GetTransactionLogsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Payment/GetTransactionLogsRequest.php new file mode 100644 index 0000000..b579b4e --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Payment/GetTransactionLogsRequest.php @@ -0,0 +1,102 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Commun\Domain\Payment\TransactionType; + * use Mirakl\MMP\Commun\Domain\Payment\TransactionLogState; + * use Mirakl\MMP\FrontOperator\Request\Payment\GetTransactionLogsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetTransactionLogsRequest(); + * $request->setMax(10) + * ->setOffset(0) + * ->setShopId('3249') + * ->setStartDate('2014-12-12') + * ->setEndDate('2014-12-12') + * ->setStartTransactionDate('2014-12-12') + * ->setEndTransactionDate('2014-12-12') + * ->setUpdatedSince('2014-12-12') + * ->setTransactionTypes([TransactionType::COMMISSION_FEE]) + * ->setAccountingDocumentNumber('43902IRDJ') + * ->setPaymentVoucherNumber('3R93DJ') + * ->setPaymentStates([TransactionLogState::PAYABLE]) + * ->setOrderIds(['349R34']) + * ->setOrderLineIds(['349R34-A']) + * ->setPaginate(true); + * $result = $api->getTransactionLogs($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Payment\TransactionLogCollection + * + */ +class GetTransactionLogsRequest extends AbstractRequest +{ + use PageableTrait; + use DateRangeTrait; + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/transactions_logs'; + + /** + * @var array + */ + public $queryParams = [ + 'shop_id' => 'shop_id', + 'start_transaction_date' => 'start_transaction_date', + 'end_transaction_date' => 'end_transaction_date', + 'updated_since' => 'updated_since', + 'payment_voucher_number' => 'payment_voucher', + 'payment_states' => 'payment_states', + 'transaction_types' => 'transaction_types', + 'accounting_document_number' => 'accounting_document_number', + 'order_ids' => 'order_ids', + 'order_line_ids' => 'order_line_ids', + ]; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return TransactionLogCollection::decorator('lines'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Payment/Invoice/ConfirmAccountingDocumentPaymentRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Payment/Invoice/ConfirmAccountingDocumentPaymentRequest.php new file mode 100644 index 0000000..d447e62 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Payment/Invoice/ConfirmAccountingDocumentPaymentRequest.php @@ -0,0 +1,72 @@ + + * use Mirakl\MMP\FrontOperator\Client\FrontOperatorApiClient; + * use Mirakl\MMP\FrontOperator\Domain\Collection\Invoice\AccountingDocumentPaymentConfirmationCollection; + * use Mirakl\MMP\FrontOperator\Domain\Invoice\AccountingDocumentPaymentConfirmation; + * use Mirakl\MMP\FrontOperator\Request\Payment\Invoice\ConfirmAccountingDocumentPaymentRequest; + * + * $api = new FrontOperatorApiClient('API_URL', 'API_KEY'); + * + * $document = new AccountingDocumentPaymentConfirmation(); + * $document->setInvoiceId('2003'); + * $document->setAmount(10.00); + * $document->setCurrencyIsoCode('EUR'); + * $document->setReference('REF_007'); + * $document->setTransactionDate(new \DateTime('2018-10-12 12:12:00')); + * + * $documents = new AccountingDocumentPaymentConfirmationCollection(); + * $documents->add($document); + * + * $request = new ConfirmAccountingDocumentPaymentRequest($documents); + * + * $api->confirmAccountingDocumentPayment($request); + * => no response output, should give 204 response status (success) + * + */ +class ConfirmAccountingDocumentPaymentRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/invoices/confirm'; + + /** + * @var array + */ + public $bodyParams = ['accounting_documents']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'accounting_documents' => [DocumentCollection::class, 'create'], + ]; + + /** + * @param array|DocumentCollection $accountingDocuments + */ + public function __construct($accountingDocuments) + { + parent::__construct(); + $this->setAccountingDocuments($accountingDocuments); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Payment/Refund/ConfirmOrderRefundRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Payment/Refund/ConfirmOrderRefundRequest.php new file mode 100644 index 0000000..f07c49f --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Payment/Refund/ConfirmOrderRefundRequest.php @@ -0,0 +1,67 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Payment\Refund\ConfirmOrderRefundRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $input = ['refunds' => [ + * 'amount' => 255.00, + * 'refund_id' => '1101', + * 'payment_status' => 'OK', + * 'transaction_date' => '2013-12-12T12:12:00.000+0000', + * 'transaction_number' => '49R349IUR34' + * ] + * ] + * + * $request = new ConfirmOrderRefundRequest($input['refunds']); + * + * $api->confirmOrderRefund($request); + * + */ +class ConfirmOrderRefundRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/payment/refund'; + + /** + * @var array + */ + public $bodyParams = ['refunds']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'refunds' => [OrderLineRefundCollection::class, 'create'], + ]; + + /** + * @param array|OrderLineRefundCollection $refunds + */ + public function __construct($refunds) + { + parent::__construct(); + $this->setRefunds($refunds); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Payment/Refund/GetOrderRefundsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Payment/Refund/GetOrderRefundsRequest.php new file mode 100644 index 0000000..8c1f4e0 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Payment/Refund/GetOrderRefundsRequest.php @@ -0,0 +1,57 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Payment\Refund\GetOrderRefundsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetOrderRefundsRequest(); + * + * $request->setOffset(1) + * ->setMax(5); + * + * $api->getOrderRefunds($request); + * + */ +class GetOrderRefundsRequest extends AbstractRequest +{ + use PageableTrait; + + /** + * @var string + */ + protected $endpoint = '/payment/refund'; + + /** + * @var array + */ + protected static $dataTypes = [ + 'refunds' => [RefundOrderCollection::class, 'create'], + ]; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\Closure(function (ResponseInterface $response) { + $data = \Mirakl\parse_json_response($response); + $collection = new RefundOrderCollection($data['orders']['order'], $data['total_count']); + + return $collection; + }); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Product/Offer/GetOffersOnProductsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Product/Offer/GetOffersOnProductsRequest.php new file mode 100644 index 0000000..870d0e6 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Product/Offer/GetOffersOnProductsRequest.php @@ -0,0 +1,59 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Product\Offer\GetOffersOnProductsRequest; + * use Mirakl\MMP\FrontOperator\Domain\Product\Offer\OfferOnProduct; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetOffersOnProductsRequest(['PRODUCT_ID_1', 'PRODUCT_ID_2'], ['OFFER_STATE_CODE_1']); + * $request->setPricingChannelCode('CHANNEL_1'); + * $request->setShopIds(['SHOP_1', 'SHOP_2']); + * + * $result = $api->getOffersOnProducts($request); + * // $result => @see \Mirakl\MMP\Shop\Domain\Collection\Product\Offer\ProductWithOffersCollection + * + */ +class GetOffersOnProductsRequest extends AbstractGetOffersOnProductsRequest +{ + /** + * @var array + */ + public $queryParams = [ + 'product_ids', + 'offer_state_codes', + 'premium', + 'all_offers', + 'channel_codes', + 'all_channels', + 'product_references', + 'pricing_channel_code', + 'shop_ids' + ]; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductWithOffersCollection::decorator('products'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Promotion/GetPromotionWithOffersRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Promotion/GetPromotionWithOffersRequest.php new file mode 100644 index 0000000..8439afd --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Promotion/GetPromotionWithOffersRequest.php @@ -0,0 +1,101 @@ + + * use Mirakl\MMP\Common\Domain\AdditionalFieldValue; + * use Mirakl\MMP\Common\Domain\Product\Offer\ProductReference; + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Domain\Offer; + * use Mirakl\MMP\FrontOperator\Request\Promotion\GetPromotionWithOffersRequest; + * + * $request = new GetPromotionWithOffersRequest('123L','GOOD_SUMMER_BARGAIN_2017'); + * + * $request->setOfferType(GetPromotionWithOffersRequest::OFFER_TYPE_REWARD) + * ->setLocale('fr_FR') + * ->setOffset(1) + * ->setMax(5) + * ->setPricingChannelCode('WEB') + * ->setSortBy('productTitle') + * ->sortDesc(); + * $result = $api->getPromotionWithOffers($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Promotion\PromotionWithOffers; + * + */ +class GetPromotionWithOffersRequest extends AbstractRequest +{ + use LocalizableTrait; + use PageableTrait; + use SortableTrait; + + /** + * (DEFAULT) Wanted offer promotion type ALL + */ + const OFFER_TYPE_ALL = 'ALL'; + + /** + * Wanted offer promotion type REWARD + */ + const OFFER_TYPE_REWARD = 'REWARD'; + + /** + * Wanted offer promotion type TRIGGER + */ + const OFFER_TYPE_TRIGGER = 'TRIGGER'; + + /** + * @var string + */ + protected $endpoint = '/promotions/{shop_id}/{promotion_internal_id}'; + + /** + * @var array + */ + protected $uriVars = [ + '{shop_id}' => 'shop_id', + '{promotion_internal_id}' => 'promotion_internal_id' + ]; + + /** + * @var array + */ + public $queryParams = ['offer_type', 'pricing_channel_code', 'locale']; + + /** + * @param string $shopId + * @param int $promotionInternalId + */ + public function __construct($shopId, $promotionInternalId) + { + parent::__construct(); + $this->setShopId($shopId); + $this->setPromotionInternalId($promotionInternalId); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return PromotionWithOffers::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Promotion/GetPromotionsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Promotion/GetPromotionsRequest.php new file mode 100644 index 0000000..cca4113 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Promotion/GetPromotionsRequest.php @@ -0,0 +1,78 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Domain\Collection\Promotion\PromotionCollection; + * use Mirakl\MMP\FrontOperator\Domain\Promotion\Promotion; + * use Mirakl\MMP\FrontOperator\Domain\Promotion\PromotionIdentifier; + * use Mirakl\MMP\FrontOperator\Request\Promotion\GetPromotionsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetPromotionsRequest(); + * $request->setIds([new PromotionIdentifier('1', '2'), new PromotionIdentifier('3', '4')]) + * ->setShopIds(['5', '6']) + * ->setStates([Promotion::STATE_ACTIVE, Promotion::STATE_PENDING]) + * ->setTypes([Promotion::TYPE_AMOUNT_OFF, Promotion::TYPE_FREE_ITEMS]) + * ->setDateCreatedFrom($this->createDateTime('2016-10-12 15:45:12')) + * ->setDateCreatedTo($this->createDateTime('2017-10-12 15:45:12')) + * ->setEndingAfter($this->createDateTime('2018-10-12 15:45:12')) + * ->setStartingBefore($this->createDateTime('2019-10-12 15:45:12')) + * ->setLocale('en_US') + * ->setTriggerOfferIds(['1100', '1101']) + * ->setRewardOfferIds(['2200', '2201']) + * ->setChannelCodes(['CA', 'FR']) + * ->setMax(5) + * ->setOffset(1) + * ->setSortBy('dateCreated') + * ->sortAsc(); + * + * $result = $api->getPromotions($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Promotion\PromotionCollection + * + */ +class GetPromotionsRequest extends AbstractGetPromotionsRequest +{ + /** + * @var array + */ + protected static $dataTypes = [ + 'ids' => [PromotionIdentifierCollection::class, 'create'], + ]; + + /** + * @inheritdoc + */ + public function getQueryParams() + { + $params = parent::getQueryParams(); + if (isset($params['ids'])) { + $params['ids'] = \Mirakl\tuples_to_query_param($this->getIds()->toArray()); + } + + return $params; + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return PromotionCollection::decorator('promotions'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Promotion/PromotionOffersMappingFileRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Promotion/PromotionOffersMappingFileRequest.php new file mode 100644 index 0000000..47ba418 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Promotion/PromotionOffersMappingFileRequest.php @@ -0,0 +1,54 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Promotion\PromotionOffersMappingFileRequest; + * + * $request = new PromotionOffersMappingFileRequest($this->createDateTime('2017-10-15 10:15:12')); + * $result = $api->exportPromotionOffersMapping($request); + * // $result => @see \Mirakl\Core\FileWrapper + * + */ +class PromotionOffersMappingFileRequest extends AbstractRequest +{ + use CsvResponseDecorator; + + /** + * @var string + */ + protected $endpoint = '/promotions/offers'; + + /** + * @var array + */ + public $queryParams = ['last_request_date']; + + /** + * @param string|\Datetime $lastRequestDate + */ + public function __construct($lastRequestDate = null) + { + parent::__construct(); + if (null !== $lastRequestDate) { + $this->setLastRequestDate($lastRequestDate); + } + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Promotion/PromotionOffersMappingRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Promotion/PromotionOffersMappingRequest.php new file mode 100644 index 0000000..2f7c78a --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Promotion/PromotionOffersMappingRequest.php @@ -0,0 +1,34 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Promotion\PromotionOffersMappingFileRequest; + * + * $request = new PromotionOffersMappingFileRequest($this->createDateTime('2017-10-15 10:15:12')); + * $result = $api->exportPromotionOffersMapping($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Promotion\PromotionOffersMappingCollection + * + */ +class PromotionOffersMappingRequest extends PromotionOffersMappingFileRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return new Decorator\CsvCollection(PromotionOffersMappingCollection::class); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Reason/GetReasonsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Reason/GetReasonsRequest.php new file mode 100644 index 0000000..0ab5b58 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Reason/GetReasonsRequest.php @@ -0,0 +1,41 @@ + + * use Mirakl\MMP\Common\Domain\Reason\ReasonType; + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Reason\GetReasonsRequest; + * + * $request = new GetReasonsRequest(); + * $result = $api->getReasons($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Reason\ReasonCollection + * + */ +class GetReasonsRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/reasons'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ReasonCollection::decorator('reasons'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Reason/GetTypeReasonsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Reason/GetTypeReasonsRequest.php new file mode 100644 index 0000000..bbc64ff --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Reason/GetTypeReasonsRequest.php @@ -0,0 +1,49 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Reason\GetTypeReasonsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new GetTypeReasonsRequest(); + * + * $result = $api->getTypeReasons($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Reason\ReasonCollection + * + */ +class GetTypeReasonsRequest extends GetReasonsRequest +{ + /** + * @var string + */ + protected $endpoint = '/reasons/{reason_type}'; + + /** + * @var array + */ + protected $uriVars = [ + '{reason_type}' => 'reason_type', + ]; + + /** + * @param string $reasonType + */ + public function __construct($reasonType = ReasonType::INCIDENT_OPEN) + { + parent::__construct(); + $this->setReasonType($reasonType); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shipment/CreateShipmentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shipment/CreateShipmentsRequest.php new file mode 100644 index 0000000..e51d150 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shipment/CreateShipmentsRequest.php @@ -0,0 +1,46 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $shipmentsLine1 = new \Mirakl\MMP\Common\Domain\Shipment\ShipmentLine(); + * $shipmentsLine1->setOfferSku('22265148670033'); + * $shipmentsLine1->setQuantity(1); + * $shipmentsLine2 = new \Mirakl\MMP\Common\Domain\Shipment\ShipmentLine(); + * $shipmentsLine2->setOfferSku('22265145819217'); + * $shipmentsLine2->setQuantity(1); + * $shipmentsLines = new \Mirakl\MMP\Common\Domain\Collection\Shipment\ShipmentLineCollection(); + * $shipmentsLines->add($shipmentsLine1); + * $shipmentsLines->add($shipmentsLine2); + * + * $tracking = new \Mirakl\MMP\Common\Domain\Shipment\ShipmentTracking(); + * $tracking->setCarrierCode('UPS'); + * $tracking->setCarrierName('UPS'); + * $tracking->setTrackingNumber('123456798'); + * + * $shipment = new \Mirakl\MMP\Common\Domain\Shipment\CreateShipment(); + * $shipment->setOrderId('MIR_000000023-A'); + * $shipment->setShipmentLines($shipmentsLines); + * $shipment->setTracking($tracking); + * + * $shipments = new \Mirakl\MMP\Common\Domain\Collection\Shipment\CreateShipmentCollection(); + * $shipments->add($shipment); + * + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\CreateShipmentsRequest($shipments); + * $result = $api->createShipments($request); + * + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Shipment\CreatedShipments + * + */ +class CreateShipmentsRequest extends AbstractCreateShipmentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shipment/GetShipmentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shipment/GetShipmentsRequest.php new file mode 100644 index 0000000..bd53879 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shipment/GetShipmentsRequest.php @@ -0,0 +1,36 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\GetShipmentsRequest(); + * $request->addOrderId('ORD-123'); + * $request->addShipmentStateCode(\Mirakl\MMP\Common\Domain\Shipment\ShipmentStatus::SHIPPED); + * + * $result = $api->getShipments($request); + * + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Collection\SeekableCollection + * + * // Loop on collection with $result->getCollection() + * + * // Get next results with token from response: + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\GetShipmentsRequest(); + * $request->setPageToken($result->getNextPageToken()); + * $result = $api->getShipments($request); + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Collection\SeekableCollection + * + * // See also previous token: @see \Mirakl\MMP\Common\Domain\Collection\SeekableCollection::getPreviousPageToken() + * + */ +class GetShipmentsRequest extends AbstractGetShipmentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shipment/ReceiveShipmentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shipment/ReceiveShipmentsRequest.php new file mode 100644 index 0000000..a8e1f1f --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shipment/ReceiveShipmentsRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $shipments = [ + * ['id' => '9d6290c3-8b25-43c0-b448-914d0aab38c0'], + * ['id' => 'c8a18e47-9542-4c86-a770-50caa744abb6'], + * ['id' => '319d9463-e7b2-40a2-849c-32ebd8619398'], + * ]; + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\ReceiveShipmentsRequest($shipments); + * + * $result = $api->receiveShipments($request); + * + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Shipment\Workflow\ShipmentWorkflowResponse + * + * // $result->getShipmentErrors() + * // $result->getShipmentSuccess() + * + */ +class ReceiveShipmentsRequest extends AbstractReceiveShipmentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shipment/ShipShipmentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shipment/ShipShipmentsRequest.php new file mode 100644 index 0000000..9ee8230 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shipment/ShipShipmentsRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $shipments = [ + * ['id' => '9d6290c3-8b25-43c0-b448-914d0aab38c0'], + * ['id' => 'c8a18e47-9542-4c86-a770-50caa744abb6'], + * ['id' => '319d9463-e7b2-40a2-849c-32ebd8619398'], + * ]; + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\ShipShipmentsRequest($shipments); + * + * $result = $api->shipShipments($request); + * + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Shipment\Workflow\ShipmentWorkflowResponse + * + * // $result->getShipmentErrors() + * // $result->getShipmentSuccess() + * + */ +class ShipShipmentsRequest extends AbstractShipShipmentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shipment/ToCollectShipmentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shipment/ToCollectShipmentsRequest.php new file mode 100644 index 0000000..f2d29bc --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shipment/ToCollectShipmentsRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $shipments = [ + * ['id' => '9d6290c3-8b25-43c0-b448-914d0aab38c0'], + * ['id' => 'c8a18e47-9542-4c86-a770-50caa744abb6'], + * ['id' => '319d9463-e7b2-40a2-849c-32ebd8619398'], + * ]; + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\ToCollectShipmentsRequest($shipments); + * + * $result = $api->toCollectShipments($request); + * + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Shipment\Workflow\ShipmentWorkflowResponse + * + * // $result->getShipmentErrors() + * // $result->getShipmentSuccess() + * + */ +class ToCollectShipmentsRequest extends AbstractToCollectShipmentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shipment/UpdateShipmentTrackingsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shipment/UpdateShipmentTrackingsRequest.php new file mode 100644 index 0000000..7e7c175 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shipment/UpdateShipmentTrackingsRequest.php @@ -0,0 +1,35 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $shipments = [ + * ['id' => '9d6290c3-8b25-43c0-b448-914d0aab38c0'], + * ['id' => 'c8a18e47-9542-4c86-a770-50caa744abb6'], + * ['id' => '319d9463-e7b2-40a2-849c-32ebd8619398'], + * ]; + * $request = new \Mirakl\MMP\FrontOperator\Request\Shipment\UpdateShipmentTrackingsRequest($shipments); + * + * $result = $api->updateShipmentTrackings($request); + * + * var_dump($result); // @see \Mirakl\MMP\Common\Domain\Shipment\Workflow\ShipmentWorkflowResponse + * + * // $result->getShipmentErrors() + * // $result->getShipmentSuccess() + * + */ +class UpdateShipmentTrackingsRequest extends AbstractUpdateShipmentTrackingsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/AbstractCreateShopsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/AbstractCreateShopsRequest.php new file mode 100644 index 0000000..c75fe47 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/AbstractCreateShopsRequest.php @@ -0,0 +1,34 @@ + + * + * deleteShopDocument($request); + * + * var_dump(get_class($result)); + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->deleteShopDocument($request) + * //var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e->getTraceAsString()); + * } + * + */ +class DeleteShopDocumentRequest extends AbstractDeleteShopDocumentRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/DownloadShopsDocumentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/DownloadShopsDocumentsRequest.php new file mode 100644 index 0000000..8648450 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/DownloadShopsDocumentsRequest.php @@ -0,0 +1,50 @@ + + *
  • If a list of document identifiers is specified only these documents are downloaded. + * + *
  • + *
  • + * If no document identifiers is specified, all the shop documents will be downloaded.
    + * Use a list of shop document type codes to retrieve specific types from your shop.
    + * In this case, the output of the API will always be a ZIP archive even if there is only one document to retrieve. + *
  • + * + *

    When documents are retrieved, they're wrapped into a ZIP archive except + * when only one document id is specified. The tree structure of this archive is as follow: + *

    + * documents-timestamp.zip
    + * |__ shop_id/
    + * |   |__ image.png
    + * |   |__ image(1).png
    + * |   |__ foo.txt
    + * 
    + *

    + * + * Example: + * + * + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\Front\Request\Shop\Document\DownloadShopDocumentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new DownloadShopDocumentsRequest(); + * $request->setDocumentIds(['DOCUMENT_ID_1', 'DOCUMENT_ID_2']); + * $request->setShopIds(['SHOP_ID_1', 'SHOP_ID_2']) + * $result = $api->downloadShopDocuments($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadShopsDocumentsRequest extends AbstractDownloadShopsDocumentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/GetShopDocumentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/GetShopDocumentsRequest.php new file mode 100644 index 0000000..afe2245 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/GetShopDocumentsRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Shop\Document\GetShopDocumentsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetShopDocumentsRequest(['SHOP_ID_1', 'SHOP_ID_2']); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shop\Document\ShopDocumentCollection + * + */ +class GetShopDocumentsRequest extends AbstractGetShopDocumentsRequest +{ + /** + * @var array + */ + public $queryParams = ['shop_ids', 'updated_since', 'include_deleted']; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/UploadShopDocumentsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/UploadShopDocumentsRequest.php new file mode 100644 index 0000000..04bce78 --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/Document/UploadShopDocumentsRequest.php @@ -0,0 +1,31 @@ + + * The following extensions are supported: csv, doc, xls, ppt, pdf, odt, ods, odp, txt, rtf, png, jpg, gif, zip. + * NB. A shop can have a maximum of 50 documents. + * + * Example: + * + * + * use Mirakl\Core\Domain\Collection\DocumentCollection; + * use Mirakl\Core\Domain\Document; + * use Mirakl\MMP\FrontOperator\Client\FrontOperatorApiClient; + * use Mirakl\MMP\FrontOperator\Request\Shop\Document\UploadShopDocumentsRequest; + * + * $api = new FrontOperatorApiClient('API_URL', 'API_KEY'); + * $file = new \SplFileObject('/path/to/file.pdf'); + * $docs = new DocumentCollection(); + * $docs->add(new Document($file, 'this is the document contents', 'ANOTHER_SPECIAL_FILE')); + * $request = new UploadShopDocumentsRequest($docs, 'SHOP_ID'); + * $result = $api->uploadShopDocuments($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Document\DocumentsUploadResult + * + */ +class UploadShopDocumentsRequest extends AbstractUploadShopDocumentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/GetShopEvaluationsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/GetShopEvaluationsRequest.php new file mode 100644 index 0000000..27cd8bf --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/GetShopEvaluationsRequest.php @@ -0,0 +1,56 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Request\Shop\GetShopEvaluationsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetShopEvaluationsRequest('2008'); + * + * $result = $api->getShopEvaluations($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Evaluation\EvaluationCollection + * + */ +class GetShopEvaluationsRequest extends AbstractShopRequest +{ + use LocalizableTrait; + use PageableTrait; + use SortableTrait; + + // (DEFAULT) Sort by creation date + const SORT_BY_DATE = 'date'; + + // Sort by grade + const SORT_BY_GRADE = 'grade'; + + /** + * @var string + */ + protected $endpoint = '/shops/{shop}/evaluations'; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return EvaluationCollection::decorator('evaluations'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/GetShopsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/GetShopsRequest.php new file mode 100644 index 0000000..c13ce6f --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/GetShopsRequest.php @@ -0,0 +1,63 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Domain\Collection\Shop\ShopCollection; + * use Mirakl\MMP\FrontOperator\Request\Shop\GetShopsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * $request = new GetShopsRequest(); + * + * $result = $this->api->getShops($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Collection\Shop\ShopCollection + * + */ +class GetShopsRequest extends AbstractRequest +{ + use PageableTrait; + + /** + * @var string + */ + protected $endpoint = '/shops'; + + /** + * @var array + */ + public $queryParams = ['state', 'shop_ids', 'premium', 'updated_since', 'paginate', 'domains']; + + /** + * @var array + */ + public $boolOrAllParams = ['premium']; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ShopCollection::decorator('shops'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/FrontOperator/Request/Shop/Location/GetShopTaxLocationsRequest.php b/src/Mirakl/MMP/FrontOperator/Request/Shop/Location/GetShopTaxLocationsRequest.php new file mode 100644 index 0000000..ef9f59c --- /dev/null +++ b/src/Mirakl/MMP/FrontOperator/Request/Shop/Location/GetShopTaxLocationsRequest.php @@ -0,0 +1,83 @@ + + * getShopTaxLocations($request); + * // \Mirakl\MMP\FrontOperator\Domain\Collection\Shop\Location\ShopTaxLocationCollection + * var_dump($result); // decorated response + * + * // You can also retrieve raw response by using run() method of API client: + * $result = $api->run($request); // or $api->raw()->getShopTaxLocations($request) + * var_dump($result); // returns \Psr\Http\Message\ResponseInterface + * } catch (\Exception $e) { + * // An exception is thrown if object requested is not found or if an error occurs + * var_dump($e); + * } + * + * + * @method bool getIncludeDeleted() + * @method $this setIncludeDeleted(bool $includeDeleted) + * @method bool isIncludeDeleted() + * @method array getLocationTypes() + * @method $this setLocationTypes(array $locationTypes) + * @method array getShopIds() + * @method $this setShopIds(array $shopId) + * @method \DateTime getUpdatedSince() + * @method $this setUpdatedSince(\DateTime $updatedSince) + */ +class GetShopTaxLocationsRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $endpoint = '/shops/tax/locations'; + + /** + * @var array + */ + public $queryParams = ['location_types', 'shop_ids', 'updated_since', 'include_deleted']; + + /** + * @param array $shopIds + */ + public function __construct(array $shopIds) + { + parent::__construct(); + $this->setShopIds($shopIds); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ShopTaxLocationCollection::decorator('tax_locations'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Client/OperatorApiClient.php b/src/Mirakl/MMP/Operator/Client/OperatorApiClient.php new file mode 100644 index 0000000..c26d19b --- /dev/null +++ b/src/Mirakl/MMP/Operator/Client/OperatorApiClient.php @@ -0,0 +1,163 @@ +run($this); + } + + /** + * (SH31) List all logistic classes + * + * @param null|string $locale + * @return LogisticClassCollection + */ + public function getLogisticClasses($locale = null) + { + $request = new GetLogisticClassRequest(); + + if (null !== $locale) { + $request->setLocale((string) $locale); + } + + return $request->run($this); + } + + /** + * (SH21) List all carriers (sorted by sortIndex, defined in the BO) + * + * @return CarrierCollection + */ + public function getShippingCarriers() + { + return (new GetShippingCarriersRequest())->run($this); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Collection/Invoice/CreateManualAccountingDocumentCollection.php b/src/Mirakl/MMP/Operator/Domain/Collection/Invoice/CreateManualAccountingDocumentCollection.php new file mode 100644 index 0000000..d1bb288 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Collection/Invoice/CreateManualAccountingDocumentCollection.php @@ -0,0 +1,20 @@ + [ManualAccountingDocumentLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Invoice/CreatedManualAccountingDocumentReturn.php b/src/Mirakl/MMP/Operator/Domain/Invoice/CreatedManualAccountingDocumentReturn.php new file mode 100644 index 0000000..85c77d3 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Invoice/CreatedManualAccountingDocumentReturn.php @@ -0,0 +1,23 @@ + [Invoice::class, 'create'], + 'manual_accounting_document_error' => [InputWithErrors::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Invoice/CreatedManualAccountingDocuments.php b/src/Mirakl/MMP/Operator/Domain/Invoice/CreatedManualAccountingDocuments.php new file mode 100644 index 0000000..007b37c --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Invoice/CreatedManualAccountingDocuments.php @@ -0,0 +1,20 @@ + [DocumentReturnCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Invoice/EditManualAccountingDocument.php b/src/Mirakl/MMP/Operator/Domain/Invoice/EditManualAccountingDocument.php new file mode 100644 index 0000000..9d18e22 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Invoice/EditManualAccountingDocument.php @@ -0,0 +1,33 @@ + [ManualAccountingDocumentLineCollection::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Invoice/ManualAccountingDocumentLine.php b/src/Mirakl/MMP/Operator/Domain/Invoice/ManualAccountingDocumentLine.php new file mode 100644 index 0000000..b3502ee --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Invoice/ManualAccountingDocumentLine.php @@ -0,0 +1,17 @@ + [CreateShopExistingUser::class, 'create'], + 'new_user' => [CreateShopNewUser::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Shop/Create/CreateShopExistingUser.php b/src/Mirakl/MMP/Operator/Domain/Shop/Create/CreateShopExistingUser.php new file mode 100644 index 0000000..7286ea4 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Shop/Create/CreateShopExistingUser.php @@ -0,0 +1,28 @@ +setEmail($email); + } + + /** + * @inheritdoc + */ + public static function create(array $data = []) + { + return new static($data['email']); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Shop/Create/CreateShopNewUser.php b/src/Mirakl/MMP/Operator/Domain/Shop/Create/CreateShopNewUser.php new file mode 100644 index 0000000..7dd467c --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Shop/Create/CreateShopNewUser.php @@ -0,0 +1,31 @@ +setEmail($email); + } + + /** + * @inheritdoc + */ + public static function create(array $data = []) + { + return new static($data['email']); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Domain/Shop/Update/UpdateShop.php b/src/Mirakl/MMP/Operator/Domain/Shop/Update/UpdateShop.php new file mode 100644 index 0000000..8c00c31 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Domain/Shop/Update/UpdateShop.php @@ -0,0 +1,34 @@ + 'channels', + ]; + + /** + * @var array + */ + protected static $dataTypes = [ + 'address' => [ShopAddress::class, 'create'], + ]; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/AdditionalField/GetAdditionalFieldRequest.php b/src/Mirakl/MMP/Operator/Request/AdditionalField/GetAdditionalFieldRequest.php new file mode 100644 index 0000000..4f67231 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/AdditionalField/GetAdditionalFieldRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\AdditionalField\GetAdditionalFieldRequest; + * use Mirakl\MMP\Common\Domain\AdditionalField\AdditionalFieldLinkedEntity; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetAdditionalFieldRequest(); + * $request->setEntities([AdditionalFieldLinkedEntity::OFFER, AdditionalFieldLinkedEntity::SHOP]); // Optional + * $result = $api->getAdditionalFields($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\AdditionalFieldCollection + * + */ +class GetAdditionalFieldRequest extends AbstractGetAdditionalFieldRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Document/GetDocumentsConfigurationRequest.php b/src/Mirakl/MMP/Operator/Request/Document/GetDocumentsConfigurationRequest.php new file mode 100644 index 0000000..6d1b292 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Document/GetDocumentsConfigurationRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Document\GetDocumentsConfigurationRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetDocumentsConfigurationRequest(); + * $request->setEntities(['ORDER', 'SHOP']); + * + * $result = $api->getDocumentsConfiguration($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Document\DocumentsConfigurationCollection + * + */ +class GetDocumentsConfigurationRequest extends AbstractGetDocumentsConfigurationRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/GetOfferRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/GetOfferRequest.php new file mode 100644 index 0000000..64a38b3 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/GetOfferRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\GetOfferRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOfferRequest('OFFER_ID'); + * $result = $api->getOffer($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Offer + * + */ +class GetOfferRequest extends AbstractGetOfferRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return Offer::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportErrorReportRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportErrorReportRequest.php new file mode 100644 index 0000000..6590139 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportErrorReportRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\Importer\OfferImportErrorReportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new OfferImportErrorReportRequest('IMPORT_ID'); + * $result = $api->getOffersImportErrorReport($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * + */ +class OfferImportErrorReportRequest extends AbstractOfferImportErrorReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportReportRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportReportRequest.php new file mode 100644 index 0000000..5581d20 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportReportRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\Importer\OfferImportReportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new OfferImportReportRequest('IMPORT_ID'); + * $result = $api->getOffersImportResult($request); + * // $result => @see \Mirakl\MMP\OperatorShop\Domain\Offer\Importer\OfferImportResult + * + */ +class OfferImportReportRequest extends AbstractOfferImportReportRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportRequest.php new file mode 100644 index 0000000..082e6b8 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/Importer/OfferImportRequest.php @@ -0,0 +1,49 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\Importer\OfferImportRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $file = new \SplFileObject('/path/to/file.csv'); + * $request = new OfferImportRequest($file, 'SHOP_ID'); + * $request->setImportMode(\Mirakl\MMP\OperatorShop\Domain\Offer\Importer\ImportMode::PARTIAL_UPDATE); // Optional + * $request->setWithProducts(true); // Optional + * $result = $api->importOffers($request); + * // $result => @see \Mirakl\MMP\OperatorShop\Domain\Offer\Importer\OfferProductImportTracking + * + */ +class OfferImportRequest extends AbstractOfferImportRequest +{ + /** + * @var array + */ + public $bodyParams = [ + 'shop_id' => 'shop', + 'file', + 'import_mode', + 'with_products' + ]; + + /** + * @param mixed $file + * @param string $shopId + */ + public function __construct($file, $shopId) + { + parent::__construct($file); + $this->setShopId($shopId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/Message/GetOfferMessagesRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/Message/GetOfferMessagesRequest.php new file mode 100644 index 0000000..f0d735c --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/Message/GetOfferMessagesRequest.php @@ -0,0 +1,23 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\Message\GetOfferMessagesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOfferMessagesRequest('OFFER_ID'); + * $result = $api->getOfferMessages($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Message\OfferMessageCollection + * + */ +class GetOfferMessagesRequest extends AbstractGetOfferMessagesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/State/GetOfferStateListRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/State/GetOfferStateListRequest.php new file mode 100644 index 0000000..fe17bdc --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/State/GetOfferStateListRequest.php @@ -0,0 +1,51 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\State\GetOfferStateListRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOfferStateListRequest(); + * $request->setActive(true); + * $result = $api->getOfferStateList($request); + * // $result => @see \Mirakl\MMP\Operator\Domain\Collection\Offer\State\OfferStateCollection + * + */ +class GetOfferStateListRequest extends AbstractRequest +{ + use LocalizableTrait; + + /** + * @var string + */ + protected $endpoint = '/offers/states'; + + /** + * @var array + */ + public $queryParams = ['active']; + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OfferStateCollection::decorator('offer_states'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/State/GetOfferStatesRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/State/GetOfferStatesRequest.php new file mode 100644 index 0000000..c345e87 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/State/GetOfferStatesRequest.php @@ -0,0 +1,25 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $result = $api->getOfferStates(); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Offer\State\OfferStateCollection + * + * + * @deprecated Class deprecated since 1.6.0 + * @see \Mirakl\MMP\Operator\Request\Offer\State\GetOfferStateListRequest + */ +class GetOfferStatesRequest extends AbstractGetOfferStatesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Offer/UpdateOffersRequest.php b/src/Mirakl/MMP/Operator/Request/Offer/UpdateOffersRequest.php new file mode 100644 index 0000000..01e5ee2 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Offer/UpdateOffersRequest.php @@ -0,0 +1,43 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Offer\UpdateOffersRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new UpdateOffersRequest('SHOP_ID'); + * $request->setOffers([ + * 'shop_sku' => 'AAPL-CHASAW7852', + * 'description' => 'never used', + * ]); + * $result = $api->updateOffers($request); + * // $result => @see \Mirakl\MMP\OperatorShop\Domain\Offer\Importer\OfferImportTracking + * + */ +class UpdateOffersRequest extends AbstractUpdateOffersRequest +{ + /** + * @var array + */ + public $queryParams = ['shop_id' => 'shop']; + + /** + * @param string $shopId + */ + public function __construct($shopId) + { + parent::__construct(); + $this->setShopId($shopId); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Accept/AcceptOrderRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Accept/AcceptOrderRequest.php new file mode 100644 index 0000000..48fedad --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Accept/AcceptOrderRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Accept\AcceptOrderRequest; + * use Mirakl\MMP\Common\Domain\Order\Accept\AcceptOrderLine; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new AcceptOrderRequest('ORDER_ID', [ + * new AcceptOrderLine(['id' => 'ORDER_LINE_ID', 'accepted' => true]) + * ]); + * $api->acceptOrder($request); + * + */ +class AcceptOrderRequest extends AbstractAcceptOrderRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Document/DownloadOrdersDocumentsRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Document/DownloadOrdersDocumentsRequest.php new file mode 100644 index 0000000..db6d521 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Document/DownloadOrdersDocumentsRequest.php @@ -0,0 +1,54 @@ + + * + *

    + *

    When documents are retrieved, they're wrapped into a ZIP archive except + * when only one document id is specified. The tree structure of this archive is as follow: + *

    + * documents-timestamp.zip
    + * |
    + * |__ order_id_x/
    + * |   |__ foo.txt
    + * |   |__ bar.txt
    + * |   |__ baz.pdf
    + * |
    + * |__ order_id_y/
    + * |   |__ image.png
    + * |   |__ image(1).png
    + * 
    + *

    + * + * Example: + * + * + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Document\DownloadOrdersDocumentsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new DownloadOrdersDocumentsRequest(); + * $request->setOrderIds(['ORDER_ID_1', 'ORDER_ID_2']); + * $result = $api->downloadOrdersDocuments($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadOrdersDocumentsRequest extends AbstractDownloadOrdersDocumentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Document/GetOrderDocumentsRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Document/GetOrderDocumentsRequest.php new file mode 100644 index 0000000..3b5eb82 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Document/GetOrderDocumentsRequest.php @@ -0,0 +1,23 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Document\GetOrderDocumentsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderDocumentsRequest(); + * $request->setOrderIds(['ORDER_ID_1', 'ORDER_ID_2']); + * $result = $api->getOrderDocuments($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Order\Document\OrderDocumentCollection + * + */ +class GetOrderDocumentsRequest extends AbstractGetOrderDocumentsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Document/UploadOrdersDocumentsRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Document/UploadOrdersDocumentsRequest.php new file mode 100644 index 0000000..e3f1e0c --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Document/UploadOrdersDocumentsRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\Core\Domain\Collection\DocumentCollection; + * use Mirakl\Core\Domain\Document; + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Document\UploadOrdersDocumentsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $file = new \SplFileObject('/path/to/invoice.pdf'); + * $docs = new DocumentCollection(); + * $docs->add(new Document($file, 'invoice.pdf', 'CUSTOMER_INVOICE')); + * $request = new UploadOrdersDocumentsRequest($docs, 'ORDER_ID'); + * $result = $api->uploadOrderDocuments($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Order\Document\OrderDocumentsUploadResult + * + */ +class UploadOrdersDocumentsRequest extends AbstractUploadOrdersDocumentsRequest +{} diff --git a/src/Mirakl/MMP/Operator/Request/Order/Evaluation/GetOrderEvaluationRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Evaluation/GetOrderEvaluationRequest.php new file mode 100644 index 0000000..6dc7e81 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Evaluation/GetOrderEvaluationRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Evaluation\GetOrderEvaluationRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderEvaluationRequest('ORDER_ID'); + * $result = $api->getOrderEvaluation($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Evaluation + * + */ +class GetOrderEvaluationRequest extends AbstractGetOrderEvaluationRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Message/CreateOrderMessageRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Message/CreateOrderMessageRequest.php new file mode 100644 index 0000000..d85bd38 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Message/CreateOrderMessageRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Message\CreateOrderMessageRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new CreateOrderMessageRequest('ORDER_ID', [ + * 'subject' => 'Hey!', + * 'body' => 'I'm happy with the delivery!', + * 'customer_id' => 'DSIFEZK', + * 'customer_email' => 'foo@bar.com', + * 'customer_firstname' => 'Hap', + * 'customer_lastname' => 'Py', + * 'to_shop' => true, + * 'to_customer' => false, + * 'to_operator' => true, + * ]); + * $result = $api->createOrderMessage($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\MessageCreated + * + */ +class CreateOrderMessageRequest extends AbstractCreateOrderMessageRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Message/GetOrderMessagesRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Message/GetOrderMessagesRequest.php new file mode 100644 index 0000000..d74b301 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Message/GetOrderMessagesRequest.php @@ -0,0 +1,25 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Message\GetOrderMessagesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderMessagesRequest('ORDER_ID'); + * $request->setReceived(false); // Optional (true: received by customer, false: sent to customer, null (default): both) + * $result = $api->getOrderMessages($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Message\OrderMessageCollection + * + */ +class GetOrderMessagesRequest extends AbstractGetOrderMessagesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Refund/CreateRefundRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Refund/CreateRefundRequest.php new file mode 100644 index 0000000..2e755d3 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Refund/CreateRefundRequest.php @@ -0,0 +1,43 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Refund\CreateRefundRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new CreateRefundRequest([ + * 'amount' => 10, + * 'reason_code' => '18', + * 'order_line_id' => 'MMP-OL-3305999877', + * 'quantity' => 1, + * 'shipping_amount' => 1, + * 'taxes' => [ + * ['code' => 'TAX_A', 'amount' => 0.12] + * ], + * 'shipping_taxes' => [ + * ['code' => 'TAX_B', 'amount' => 0.07] + * ], + * ]); + * $result = $api->refundOrder($request); + * // $result => @see \Mirakl\MMP\OperatorShop\Domain\Collection\Order\Refund\RefundCreatedCollection + * + */ +class CreateRefundRequest extends AbstractCreateRefundRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return RefundCreatedCollection::decorator('refunds'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Ship/ShipOrderRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Ship/ShipOrderRequest.php new file mode 100644 index 0000000..2e9727a --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Ship/ShipOrderRequest.php @@ -0,0 +1,21 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Ship\ShipOrderRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new ShipOrderRequest('ORDER_ID'); + * $api->shipOrder($request); + * + */ +class ShipOrderRequest extends AbstractShipOrderRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Tax/GetOrderTaxesRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Tax/GetOrderTaxesRequest.php new file mode 100644 index 0000000..7923665 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Tax/GetOrderTaxesRequest.php @@ -0,0 +1,31 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Tax\GetOrderTaxesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetOrderTaxesRequest(); + * $result = $api->getOrderTaxes($request); + * // $result => @see \Mirakl\MMP\Operator\Domain\Collection\Order\Tax\OrderTaxCollection + * + */ +class GetOrderTaxesRequest extends AbstractGetOrderTaxesRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return OrderTaxCollection::decorator('taxes'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Order/Tracking/UpdateOrderTrackingInfoRequest.php b/src/Mirakl/MMP/Operator/Request/Order/Tracking/UpdateOrderTrackingInfoRequest.php new file mode 100644 index 0000000..46fa8cd --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Order/Tracking/UpdateOrderTrackingInfoRequest.php @@ -0,0 +1,26 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Order\Tax\UpdateOrderTrackingInfoRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new UpdateOrderTrackingInfoRequest('ORDER_ID', [ + * 'carrier_code' => 'FEDEX', + * 'carrier_name' => 'FedEx', + * 'carrier_url' => 'https://fex.ex?n=JFSKFJSDKF0923949', + * 'tracking_number' => 'JFSKFJSDKF0923949', + * ]); + * $api->updateOrderTrackingInfo($request); + * + */ +class UpdateOrderTrackingInfoRequest extends AbstractUpdateOrderTrackingInfoRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Payment/Invoice/CreateManualAccountingDocumentRequest.php b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/CreateManualAccountingDocumentRequest.php new file mode 100644 index 0000000..ef7ea66 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/CreateManualAccountingDocumentRequest.php @@ -0,0 +1,87 @@ + + * use Mirakl\MMP\Front\Client\FrontApiClient; + * use Mirakl\MMP\FrontOperator\Domain\Collection\Shop\ShopCollection; + * use Mirakl\MMP\FrontOperator\Request\Shop\GetShopsRequest; + * + * $api = new FrontApiClient('API_URL', 'API_KEY'); + * + * $input = [ 'manual_accounting_documents' => [ + * 'shop_id' => 122, + * 'type' => 'INVOICE', + * 'emission_date' => '2014-12-12T12:12:00.000+0000', + * 'issued' => false, + * 'lines' => [ + * [ + * 'description' => 'Subscription', + * 'quantity' => '2', + * 'amount' => 34.54, + * 'tax_codes' => [ + * 'TVA' + * ] + * ] + * ] + * ] + * + * $request = new CreateManualAccountingDocumentRequest($input['manual_accounting_documents']); + * + * $result = $api->createManualAccountingDocument($request); + * // $result => @see \Mirakl\MMP\Operator\Domain\Invoice\CreatedManualAccountingDocuments + * + */ +class CreateManualAccountingDocumentRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'POST'; + + /** + * @var string + */ + protected $endpoint = '/invoices'; + + /** + * @var array + */ + public $bodyParams = ['manual_accounting_documents']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'manual_accounting_documents' => [DocumentCollection::class, 'create'], + ]; + + /** + * @param array|DocumentCollection $manualAccountingDocuments + */ + public function __construct($manualAccountingDocuments) + { + parent::__construct(); + $this->setManualAccountingDocuments($manualAccountingDocuments); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CreatedManualAccountingDocuments::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Payment/Invoice/DeleteDraftAccountingDocumentRequest.php b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/DeleteDraftAccountingDocumentRequest.php new file mode 100644 index 0000000..e581a4e --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/DeleteDraftAccountingDocumentRequest.php @@ -0,0 +1,52 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Payment\Invoice\DeleteDraftAccountingDocumentRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * + * $draftDocumentUuid = 'c8e75c4f-598f-42b5-91e6-b76001218781'; + * $request = new DeleteDraftAccountingDocumentRequest($draftDocumentUuid); + * $api->deleteDraftAccountingDocument($request); + * + */ +class DeleteDraftAccountingDocumentRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'DELETE'; + + /** + * @var string + */ + protected $endpoint = '/invoices/{invoice}'; + + /** + * @var array + */ + protected $uriVars = [ + '{invoice}' => 'accounting_document_id' + ]; + + /** + * @param string $id + */ + public function __construct($id) + { + parent::__construct(); + $this->setAccountingDocumentId($id); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Payment/Invoice/DownloadInvoiceRequest.php b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/DownloadInvoiceRequest.php new file mode 100644 index 0000000..373aea8 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/DownloadInvoiceRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Payment\Invoice\DownloadInvoiceRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new DownloadInvoiceRequest('INVOICE_ID'); + * $result = $api->downloadInvoice($request); + * // $result => @see \Mirakl\Core\Domain\FileWrapper + * // Download file: + * $result->download(); + * + */ +class DownloadInvoiceRequest extends AbstractDownloadInvoiceRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Payment/Invoice/GetInvoicesRequest.php b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/GetInvoicesRequest.php new file mode 100644 index 0000000..47a99e6 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/GetInvoicesRequest.php @@ -0,0 +1,32 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Payment\Invoice\GetInvoicesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetInvoicesRequest(); + * $request->setShopId('1234'); // Optional + * $result = $api->getInvoices($request); + * // $result => @see \Mirakl\MMP\OperatorShop\Domain\Collection\Invoice\InvoiceCollection + * + */ +class GetInvoicesRequest extends AbstractGetInvoicesRequest +{ + /** + * @var array + */ + public $queryParams = ['shop_id' => 'shop', 'type', 'currency']; +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Payment/Invoice/IssueManualAccountingDocumentRequest.php b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/IssueManualAccountingDocumentRequest.php new file mode 100644 index 0000000..268a38b --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/IssueManualAccountingDocumentRequest.php @@ -0,0 +1,51 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Payment\Invoice\IssueManualAccountingDocumentRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * + * $request = new IssueManualAccountingDocumentRequest('ID'); + * $api->issueManualAccountingDocument($request); + * + */ +class IssueManualAccountingDocumentRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/invoices/{manual_accounting_document_id}/issue'; + + /** + * @var array + */ + protected $uriVars = [ + '{manual_accounting_document_id}' => 'manual_accounting_document_id' + ]; + + /** + * @param string $id + */ + public function __construct($id) + { + parent::__construct(); + $this->setManualAccountingDocumentId($id); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Payment/Invoice/UpdateManualAccountingDocumentRequest.php b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/UpdateManualAccountingDocumentRequest.php new file mode 100644 index 0000000..2265259 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Payment/Invoice/UpdateManualAccountingDocumentRequest.php @@ -0,0 +1,87 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Domain\Invoice\CreatedManualAccountingDocumentReturn; + * use Mirakl\MMP\Operator\Domain\Invoice\CreatedManualAccountingDocuments; + * use Mirakl\MMP\Operator\Request\Payment\Invoice\UpdateManualAccountingDocumentRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * + * + * $input = 'manual_accounting_documents' => [ + * 'id' => '5455011d-cf4a-4ddf-b76b-16d888fc11cf', + * 'shop_id' => 122, + * 'type' => 'INVOICE', + * 'emission_date' => '2014-12-12T12:12:00.000+0000', + * 'issued' => false, + * 'lines' => [ + * 'description' => 'Subscription', + * 'quantity' => 2, + * 'amount' => 34.54, + * 'tax_codes' => [ + * 'TVA' + * ] + * ]; + * + * $request = new UpdateManualAccountingDocumentRequest($input['manual_accounting_documents']); + * + * $result = $api->updateManualAccountingDocument($request); + * * // $result => @see \Mirakl\MMP\Operator\Domain\Invoice\CreatedManualAccountingDocuments + * + */ +class UpdateManualAccountingDocumentRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/invoices'; + + /** + * @var array + */ + public $bodyParams = ['manual_accounting_documents']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'manual_accounting_documents' => [DocumentCollection::class, 'create'], + ]; + + /** + * @param array|DocumentCollection $documents + */ + public function __construct($documents) + { + parent::__construct(); + $this->setManualAccountingDocuments($documents); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return CreatedManualAccountingDocuments::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Product/GetProductsRequest.php b/src/Mirakl/MMP/Operator/Request/Product/GetProductsRequest.php new file mode 100644 index 0000000..24a4961 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Product/GetProductsRequest.php @@ -0,0 +1,35 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Product\GetProductsRequest; + * use Mirakl\MMP\Common\Domain\Product\Offer\ProductReference; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new GetProductsRequest([new ProductReference('EAN', '0882780560413')]); + * $result = $api->getProducts($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Product\ProductCollection + * + */ +class GetProductsRequest extends AbstractGetProductsRequest +{ + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return ProductCollection::decorator('products'); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Shipping/GetLogisticClassRequest.php b/src/Mirakl/MMP/Operator/Request/Shipping/GetLogisticClassRequest.php new file mode 100644 index 0000000..8f526ae --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Shipping/GetLogisticClassRequest.php @@ -0,0 +1,20 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $result = $api->getLogisticClasses(); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shipping\LogisticClassCollection + * + */ +class GetLogisticClassRequest extends AbstractGetLogisticClassRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Shipping/GetShippingCarriersRequest.php b/src/Mirakl/MMP/Operator/Request/Shipping/GetShippingCarriersRequest.php new file mode 100644 index 0000000..6ac2fcd --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Shipping/GetShippingCarriersRequest.php @@ -0,0 +1,20 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $result = $api->getShippingCarriers(); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shipping\CarrierCollection + * + */ +class GetShippingCarriersRequest extends AbstractGetShippingCarriersRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Shipping/GetShippingZonesRequest.php b/src/Mirakl/MMP/Operator/Request/Shipping/GetShippingZonesRequest.php new file mode 100644 index 0000000..a7b3091 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Shipping/GetShippingZonesRequest.php @@ -0,0 +1,26 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Shipping\GetShippingZonesRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * + * $request = new GetShippingZonesRequest(); + * $request->setLocale('fr_FR'); + * + * $result = $api->getShippingZones($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Collection\Shipping\ShippingZoneDetailCollection + * + * + */ +class GetShippingZonesRequest extends AbstractGetShippingZonesRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Shop/CreateShopsRequest.php b/src/Mirakl/MMP/Operator/Request/Shop/CreateShopsRequest.php new file mode 100644 index 0000000..741bef4 --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Shop/CreateShopsRequest.php @@ -0,0 +1,93 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Request\Shop\CreateShopsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * $request = new CreateShopsRequest([ + * [ + * 'address' => [ + * 'civility' => 'Mr', + * 'firstname' => 'Bob', + * 'lastname' => 'Smith', + * 'street1' => '10 E 40th St', + * 'street2' => '8th floor', + * 'zip_code' => '10016', + * 'state' => 'New York', + * 'city' => 'New York City', + * 'country' => 'USA', + * 'phone' => '(646) 320-3881', + * 'phone_secondary' => '(212) 204-1126' + * ], + * 'email' => 'sps@sps.com', + * 'fax' => 'none', + * 'web_site' => 'http://swisspostsolutions.com', + * 'operator_internal_id' => '94R9U3DI', + * 'shipping_country' => 'USA', + * 'description' => 'Sells letters, stamps...', + * 'return_policy' => 'All returns are free', + * 'pro_details' => [ + * 'corporate_name' => 'Swiss Post Solutions', + * 'identification_number' => 'US-329JD93KKL', + * 'tax_identification_number' => 'USNY9403999' + * ], + * 'shop_name' => 'Swiss Post Store', + * 'is_professional' => true, + * 'closed_from_date' => '2014-12-12T12:12:00.000+0000', + * 'closed_to_date' => '2014-12-20T12:12:00.000+0000', + * 'immunity_date' => '2015-01-01T00:00:00.000+0000', + * 'shop_additional_fields' => [ + * [ + * 'code' => 'erp-reference-key', + * 'value' => '9ZE8DOIIII' + * ] + * ], + * 'payment_info' => [ + * '@type' => 'ABA', + * 'owner' => 'Matt Marteens', + * 'bank_name' => 'Chase', + * 'bank_account_number' => '839383939', + * 'routing_number' => '121000248', + * 'bic' => 'BOAUSIIE999' + * ], + * 'new_user' => [ + * 'email' => 'user@email.com', + * 'password' => 'password1234' + * ] + * ] + * ]); + * $result = $api->createShops($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Shop\Create\CreatedShops + * + */ +class CreateShopsRequest extends AbstractCreateShopsRequest +{ + /** + * @var array + */ + protected static $dataTypes = [ + 'shops' => [CreateShopCollection::class, 'create'], + ]; + + /** + * @param mixed $shops + */ + public function __construct($shops) + { + parent::__construct(); + $this->setShops($shops); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/Operator/Request/Shop/UpdateShopsRequest.php b/src/Mirakl/MMP/Operator/Request/Shop/UpdateShopsRequest.php new file mode 100644 index 0000000..f1d1fce --- /dev/null +++ b/src/Mirakl/MMP/Operator/Request/Shop/UpdateShopsRequest.php @@ -0,0 +1,75 @@ + + * use Mirakl\MMP\Operator\Client\OperatorApiClient; + * use Mirakl\MMP\Operator\Domain\Shop\Update\UpdateShop; + * use Mirakl\MMP\Operator\Request\Shop\UpdateShopsRequest; + * + * $api = new OperatorApiClient('API_URL', 'API_KEY'); + * + * $input = ['shops' => [ + * 'shop_id' => '124', + * 'suspend' => true + * ]]; + * + * $updateShop = new UpdateShop($input['shops'][0]); + * + * $request = new UpdateShopsRequest([$updateShop]); + * $result = $api->updateShops($request); + * // $result => @see \Mirakl\MMP\FrontOperator\Domain\Shop\Update\UpdatedShops + * + */ +class UpdateShopsRequest extends AbstractRequest +{ + /** + * @var string + */ + protected $method = 'PUT'; + + /** + * @var string + */ + protected $endpoint = '/shops'; + + /** + * @var array + */ + public $bodyParams = ['shops']; + + /** + * @var array + */ + protected static $dataTypes = [ + 'shops' => [UpdateShopCollection::class, 'create'], + ]; + + /** + * @param mixed $shops + */ + public function __construct($shops) + { + parent::__construct(); + $this->setShops($shops); + } + + /** + * @inheritdoc + */ + public function getResponseDecorator() + { + return UpdatedShops::decorator(); + } +} \ No newline at end of file diff --git a/src/Mirakl/MMP/OperatorShop/Request/Message/GetThreadDetailsRequest.php b/src/Mirakl/MMP/OperatorShop/Request/Message/GetThreadDetailsRequest.php new file mode 100644 index 0000000..bb803ab --- /dev/null +++ b/src/Mirakl/MMP/OperatorShop/Request/Message/GetThreadDetailsRequest.php @@ -0,0 +1,22 @@ + + * use Mirakl\MMP\Shop\Client\ShopApiClient; + * use Mirakl\MMP\OperatorShop\Request\Message\GetThreadDetailsRequest; + * + * $api = new ShopApiClient('API_URL', 'API_KEY', 'SHOP_ID'); + * $request = new GetThreadDetailsRequest('THREAD_ID'); + * $result = $api->getThreadDetails($request); + * // $result => @see \Mirakl\MMP\Common\Domain\Message\Thread\ThreadDetails + * + */ +class GetThreadDetailsRequest extends AbstractGetThreadDetailsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/OperatorShop/Request/Message/GetThreadsRequest.php b/src/Mirakl/MMP/OperatorShop/Request/Message/GetThreadsRequest.php new file mode 100644 index 0000000..3011a9a --- /dev/null +++ b/src/Mirakl/MMP/OperatorShop/Request/Message/GetThreadsRequest.php @@ -0,0 +1,24 @@ + + * use Mirakl\MMP\Shop\Client\ShopApiClient; + * use Mirakl\MMP\OperatorShop\Request\Message\GetThreadsRequest; + * + * $api = new ShopApiClient('API_URL', 'API_KEY', 'SHOP_ID'); + * $request = new GetThreadsRequest('THREAD_ID'); + * $request->setEntityType('MMP_ORDER'); + * $request->setEntityId('ORDER_ID'); + * $result = $api->getThreads($request); + * // $result => @see \Mirakl\Core\Response\Decorator\SeekableCollection + * + */ +class GetThreadsRequest extends AbstractGetThreadsRequest +{} \ No newline at end of file diff --git a/src/Mirakl/MMP/Shop/Client/ShopApiClient.php b/src/Mirakl/MMP/Shop/Client/ShopApiClient.php index 26bb8a8..590a76d 100755 --- a/src/Mirakl/MMP/Shop/Client/ShopApiClient.php +++ b/src/Mirakl/MMP/Shop/Client/ShopApiClient.php @@ -18,15 +18,23 @@ use Mirakl\MMP\Common\Domain\Document\DocumentsUploadResult; use Mirakl\MMP\Common\Domain\Evaluation; use Mirakl\MMP\Common\Domain\Message\MessageCreated; +use Mirakl\MMP\Common\Domain\Message\Thread\ThreadCreated; +use Mirakl\MMP\Common\Domain\Message\Thread\ThreadDetails; +use Mirakl\MMP\Common\Domain\Message\Thread\ThreadReplyCreated; use Mirakl\MMP\Common\Domain\Order\Document\OrderDocumentsUploadResult; use Mirakl\MMP\Common\Domain\Shipment\CreatedShipments; use Mirakl\MMP\Common\Domain\Shipment\UpdatedShipmentTrackings; use Mirakl\MMP\Common\Domain\Shipment\Workflow\ShipmentWorkflowResponse; +use Mirakl\MMP\Common\Request\Message\DownloadThreadMessageAttachmentRequest; +use Mirakl\MMP\Common\Request\Message\ThreadReplyRequest; +use Mirakl\MMP\Common\Request\Order\Message\CreateOrderThreadRequest; use Mirakl\MMP\OperatorShop\Domain\Collection\Invoice\InvoiceCollection; use Mirakl\MMP\OperatorShop\Domain\Collection\Order\Refund\RefundCreatedCollection; use Mirakl\MMP\OperatorShop\Domain\Offer\Importer\OfferImportResult; use Mirakl\MMP\OperatorShop\Domain\Offer\Importer\OfferImportTracking; use Mirakl\MMP\OperatorShop\Domain\Offer\Importer\OfferProductImportTracking; +use Mirakl\MMP\OperatorShop\Request\Message\GetThreadDetailsRequest; +use Mirakl\MMP\OperatorShop\Request\Message\GetThreadsRequest; use Mirakl\MMP\Shop\Domain\Collection\Offer\ShopOfferCollection; use Mirakl\MMP\Shop\Domain\Collection\Offer\State\OfferStateCollection; use Mirakl\MMP\Shop\Domain\Collection\Order\ShopOrderCollection; @@ -90,11 +98,13 @@ * @method void cancelOrder(CancelOrderRequest $request) * @method MessageCreated createOrderMessage(CreateOrderMessageRequest $request) * @method CreatedShipments createShipments(CreateShipmentsRequest $request) + * @method ThreadCreated createOrderThread(CreateOrderThreadRequest $request) * @method void deleteOrderDocument(DeleteOrderDocumentRequest $request) * @method void deleteShopDocument(DeleteShopDocumentRequest $request) * @method FileWrapper downloadInvoice(DownloadInvoiceRequest $request) * @method FileWrapper downloadOrdersDocuments(DownloadOrdersDocumentsRequest $request) * @method FileWrapper downloadShopDocuments(DownloadShopDocumentsRequest $request) + * @method FileWrapper downloadThreadMessageAttachment(DownloadThreadMessageAttachmentRequest $request) * @method AdditionalFieldCollection getAdditionalFields(GetAdditionalFieldRequest $request) * @method DocumentsConfigurationCollection getDocumentsConfiguration(GetDocumentsConfigurationRequest $request) * @method InvoiceCollection getInvoices(GetInvoicesRequest $request) @@ -114,11 +124,14 @@ * @method ProductCollection getProducts(GetProductsRequest $request) * @method PromotionCollection getPromotions(GetPromotionsRequest $request) * @method SeekableCollection getShipments(GetShipmentsRequest $request) + * @method ThreadDetails getThreadDetails(GetThreadDetailsRequest $request) + * @method SeekableCollection getThreads(GetThreadsRequest $request) * @method ReasonCollection getTypeReasons(GetTypeReasonsRequest $request) * @method ShippingZoneDetailCollection getShippingZones(GetShippingZonesRequest $request) * @method ShopDocumentCollection getShopDocuments(GetShopDocumentsRequest $request) * @method OfferProductImportTracking importOffers(OfferImportRequest $request) * @method RefundCreatedCollection refundOrder(CreateRefundRequest $request) + * @method ThreadReplyCreated replyToThread(ThreadReplyRequest $request) * @method void shipOrder(ShipOrderRequest $request) * @method ShipmentWorkflowResponse shipShipments(ShipShipmentsRequest $request) * @method OfferImportTracking updateOffers(UpdateOffersRequest $request) diff --git a/src/Mirakl/MMP/Shop/Request/Order/Accept/AcceptOrderRequest.php b/src/Mirakl/MMP/Shop/Request/Order/Accept/AcceptOrderRequest.php index 9045580..e1b5aa1 100755 --- a/src/Mirakl/MMP/Shop/Request/Order/Accept/AcceptOrderRequest.php +++ b/src/Mirakl/MMP/Shop/Request/Order/Accept/AcceptOrderRequest.php @@ -15,7 +15,7 @@ * * $api = new ShopApiClient('API_URL', 'API_KEY', 'SHOP_ID'); * $request = new AcceptOrderRequest('ORDER_ID', [ - * new AcceptOrderLine(['id' => 'ORDER_ID', 'accepted' => true]) + * new AcceptOrderLine(['id' => 'ORDER_LINE_ID', 'accepted' => true]) * ]); * $api->acceptOrder($request); *