diff --git a/composer.json b/composer.json index daa8fd0..ebd20f7 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "ext-curl": "*" }, "require-dev": { - "phpunit/phpunit": "3.7.*", + "phpunit/phpunit": "4.*", "squizlabs/php_codesniffer": "3.*" }, "support": { diff --git a/lib/RetailCrm/Methods/V5/Costs.php b/lib/RetailCrm/Methods/V5/Costs.php new file mode 100644 index 0000000..ca4cc1e --- /dev/null +++ b/lib/RetailCrm/Methods/V5/Costs.php @@ -0,0 +1,214 @@ + + * @license https://opensource.org/licenses/MIT MIT License + * @link http://www.retailcrm.ru/docs/Developers/ApiVersion5 + */ +namespace RetailCrm\Methods\V5; + +/** + * PHP version 5.4 + * + * CostsTrait class + * + * @category RetailCrm + * @package RetailCrm + * @author RetailCrm + * @license https://opensource.org/licenses/MIT MIT License + * @link http://www.retailcrm.ru/docs/Developers/ApiVersion5 + */ +trait Costs +{ + /** + * Returns filtered costs list + * + * @param array $filter (default: array()) + * @param int $page (default: null) + * @param int $limit (default: null) + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsList(array $filter = [], $limit = null, $page = null) + { + $parameters = []; + + if (count($filter)) { + $parameters['filter'] = $filter; + } + if (null !== $page) { + $parameters['page'] = (int) $page; + } + if (null !== $limit) { + $parameters['limit'] = (int) $limit; + } + + return $this->client->makeRequest( + '/costs', + "GET", + $parameters + ); + } + + /** + * Create a cost + * + * @param array $cost cost data + * @param string $site (default: null) + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsCreate(array $cost, $site = null) + { + if (!count($cost)) { + throw new \InvalidArgumentException( + 'Parameter `cost` must contains a data' + ); + } + + return $this->client->makeRequest( + '/costs/create', + "POST", + $this->fillSite($site, ['cost' => json_encode($cost)]) + ); + } + + /** + * Delete costs set + * + * @param array $ids costs identifiers + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsDelete(array $ids) + { + if (!count($ids)) { + throw new \InvalidArgumentException( + 'Parameter `ids` must contains a data' + ); + } + + return $this->client->makeRequest( + '/costs/delete', + "POST" + ); + } + + /** + * Upload costs + * + * @param array $costs costs array + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsUpload($costs) + { + if (!count($costs)) { + throw new \InvalidArgumentException( + 'Parameter `costs` must contains a data' + ); + } + + return $this->client->makeRequest( + '/costs/upload', + "POST", + ['costs' => json_encode($costs)] + ); + } + + /** + * Get cost by id + * + * @param string $id customer identificator + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsGet($id) + { + return $this->client->makeRequest( + "/costs/$id", + "GET" + ); + } + + /** + * Edit a cost + * + * @param array $cost cost data + * @param string $site (default: null) + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsEdit(array $cost, $site = null) + { + if (!count($cost)) { + throw new \InvalidArgumentException( + 'Parameter `cost` must contains a data' + ); + } + + return $this->client->makeRequest( + sprintf('/costs/%s/edit', $cost['id']), + "POST", + $this->fillSite( + $site, + ['cost' => json_encode($cost)] + ) + ); + } + + /** + * Delete cost by id + * + * @param string $id cost identifier + * + * @throws \InvalidArgumentException + * @throws \RetailCrm\Exception\CurlException + * @throws \RetailCrm\Exception\InvalidJsonException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function costsDeleteById($id) + { + if (!empty($id)) { + throw new \InvalidArgumentException( + 'Parameter `id` must contains a data' + ); + } + + return $this->client->makeRequest( + sprintf('/costs/%s/delete', $id), + "POST" + ); + } +}