Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .php-cs-fixer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

$finder = Finder::create()
->in(__DIR__ . '/src/Infrastructure/Console/Commands/')
->in(__DIR__ . '/src/Services/CRM/Lead/Service')
->in(__DIR__ . '/src/Services/CRM/Item/Service/')
->in(__DIR__ . '/src/Services/CRM/Contact/')
->in(__DIR__ . '/src/Services/CRM/Quote/')
->in(__DIR__ . '/src/Services/CRM/Lead/')
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@

### Added

- Added service `CRM\Item\Service\ItemDetailsConfiguration` with support methods,
see [add crm.item.details.* methods](https://github.com/bitrix24/b24phpsdk/issues/168):
- `getPersonal` method retrieves the settings of item cards for personal user
- `getGeneral` method retrieves the settings of item cards for all users
- `resetPersonal` method reset for item user settings
- `resetGeneral` method reset all card settings for all users
- `setPersonal` method set card configuration
- `setGeneral` method set card configuration for all users
- `setForceCommonConfigForAll` method set common detail form for All Users
- Added service `CRM\Deal\Service\DealDetailsConfiguration` with support methods,
see [add crm.deal.details.* methods](https://github.com/bitrix24/b24phpsdk/issues/158):
- `getPersonal` method retrieves the settings of deal cards for personal user
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,10 @@ integration_tests_lead_details:
integration_tests_scope_automation:
docker-compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_scope_automation

.PHONY: integration_tests_item_details
integration_tests_item_details:
docker-compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_item_details

.PHONY: integration_tests_lead_productrows
integration_tests_lead_productrows:
docker-compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_lead_productrows
Expand Down
1 change: 1 addition & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ parameters:
- tests/Integration/Services/IMOpenLines
- tests/Integration/Services/Main
- tests/Integration/Services/Placement
- tests/Integration/Services/CRM/Item/Service/ItemDetailsConfigurationTest.php
- tests/Integration/Services/CRM/Deal/Service/DealDetailsConfigurationTest.php
- tests/Integration/Services/CRM/Lead/Service/LeadDetailsConfigurationTest.php
- tests/Integration/Services/CRM/Contact/Service/ContactDetailsConfigurationTest.php
Expand Down
6 changes: 6 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@
<testsuite name="integration_tests_deal_recurring">
<file>./tests/Integration/Services/CRM/Deal/Service/DealRecurringTest.php</file>
</testsuite>
<testsuite name="integration_tests_item_details">
<file>./tests/Integration/Services/CRM/Item/Service/ItemDetailsConfigurationTest.php</file>
</testsuite>
<testsuite name="integration_tests_scope_automation">
<directory>./tests/Integration/Services/CRM/Automation/</directory>
</testsuite>
<testsuite name="integration_tests_lead_details">
<file>./tests/Integration/Services/CRM/Lead/Service/LeadDetailsConfigurationTest.php</file>
</testsuite>
Expand Down
4 changes: 4 additions & 0 deletions rector.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@
__DIR__ . '/tests/Integration/Services/Main',
__DIR__ . '/src/Services/Placement',
__DIR__ . '/tests/Integration/Services/Placement',
__DIR__ . '/src/Services/CRM/Deal',
__DIR__ . '/tests/Integration/Services/CRM/Deal/Service',
__DIR__ . '/src/Services/CRM/Item/Service',
__DIR__ . '/tests/Integration/Services/CRM/Item/Service',
__DIR__ . '/src/Services/CRM/Deal/Service/DealDetailsConfiguration.php',
__DIR__ . '/tests/Integration/Services/CRM/Deal/Service/DealDetailsConfigurationTest.php',
__DIR__ . '/src/Services/CRM/Contact/Service/ContactDetailsConfiguration.php',
Expand Down
12 changes: 12 additions & 0 deletions src/Services/CRM/CRMServiceBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,18 @@ public function companyDetailsConfiguration(): Company\Service\CompanyDetailsCon
return $this->serviceCache[__METHOD__];
}

public function itemDetailsConfiguration(): Item\Service\ItemDetailsConfiguration
{
if (!isset($this->serviceCache[__METHOD__])) {
$this->serviceCache[__METHOD__] = new Item\Service\ItemDetailsConfiguration(
$this->core,
$this->log
);
}

return $this->serviceCache[__METHOD__];
}

public function dealDetailsConfiguration(): Deal\Service\DealDetailsConfiguration
{
if (!isset($this->serviceCache[__METHOD__])) {
Expand Down
10 changes: 3 additions & 7 deletions src/Services/CRM/Item/Service/Batch.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,8 @@
#[ApiBatchServiceMetadata(new Scope(['crm']))]
class Batch
{
protected BatchOperationsInterface $batch;
protected LoggerInterface $log;

public function __construct(BatchOperationsInterface $batch, LoggerInterface $log)
public function __construct(protected BatchOperationsInterface $batch, protected LoggerInterface $log)
{
$this->batch = $batch;
$this->log = $log;
}

/**
Expand Down Expand Up @@ -83,8 +78,9 @@ public function add(int $entityTypeId, array $items): Generator
'fields' => $item,
];
}

foreach ($this->batch->addEntityItems('crm.item.add', $rawItems) as $key => $item) {
yield $key => new ItemItemResult($item->getResult()['item']);
}
}
}
}
20 changes: 5 additions & 15 deletions src/Services/CRM/Item/Service/Item.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,9 @@
#[ApiServiceMetadata(new Scope(['crm']))]
class Item extends AbstractService
{
public Batch $batch;

public function __construct(Batch $batch, CoreInterface $core, LoggerInterface $log)
public function __construct(public Batch $batch, CoreInterface $core, LoggerInterface $logger)
{
parent::__construct($core, $log);
$this->batch = $batch;
parent::__construct($core, $logger);
}

/**
Expand All @@ -44,9 +41,6 @@ public function __construct(Batch $batch, CoreInterface $core, LoggerInterface $
* @link https://training.bitrix24.com/rest_help/crm/dynamic/methodscrmitem/crm_item_add.php
*
*
* @param int $entityTypeId
* @param array $fields
* @return ItemResult
* @throws BaseException
* @throws TransportException
*/
Expand All @@ -73,10 +67,7 @@ public function add(int $entityTypeId, array $fields): ItemResult
*
* @link https://training.bitrix24.com/rest_help/crm/dynamic/methodscrmitem/crm_item_delete.php
*
* @param int $entityTypeId
* @param int $id
*
* @return DeletedItemResult
* @throws BaseException
* @throws TransportException
*/
Expand All @@ -89,7 +80,8 @@ public function delete(int $entityTypeId, int $id): DeletedItemResult
{
return new DeletedItemResult(
$this->core->call(
'crm.item.delete', ['entityTypeId' => $entityTypeId, 'id' => $id]
'crm.item.delete',
['entityTypeId' => $entityTypeId, 'id' => $id]
)
);
}
Expand All @@ -99,8 +91,6 @@ public function delete(int $entityTypeId, int $id): DeletedItemResult
*
* @link https://training.bitrix24.com/rest_help/crm/dynamic/methodscrmitem/crm_item_fields.php
*
* @param int $entityTypeId
* @return FieldsResult
* @throws BaseException
* @throws TransportException
*/
Expand Down Expand Up @@ -198,4 +188,4 @@ public function countByFilter(int $entityTypeId, array $filter = []): int
{
return $this->list($entityTypeId, [], $filter, ['id'], 1)->getCoreResponse()->getResponseData()->getPagination()->getTotal();
}
}
}
210 changes: 210 additions & 0 deletions src/Services/CRM/Item/Service/ItemDetailsConfiguration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
<?php

/**
* This file is part of the bitrix24-php-sdk package.
*
* © Vadim Soluyanov <vadimsallee@gmail.com>
*
* For the full copyright and license information, please view the MIT-LICENSE.txt
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Bitrix24\SDK\Services\CRM\Item\Service;

use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
use Bitrix24\SDK\Attributes\ApiServiceMetadata;
use Bitrix24\SDK\Core\Credentials\Scope;
use Bitrix24\SDK\Core\Exceptions\InvalidArgumentException;
use Bitrix24\SDK\Core\Result\UpdatedItemResult;
use Bitrix24\SDK\Services\AbstractService;
use Bitrix24\SDK\Services\CRM\Common\CardFieldConfiguration;
use Bitrix24\SDK\Services\CRM\Common\CardSectionConfiguration;
use Bitrix24\SDK\Services\CRM\Common\Result\ElementCardConfiguration\CardConfigurationsResult;

#[ApiServiceMetadata(new Scope(['crm']))]
class ItemDetailsConfiguration extends AbstractService
{
/**
* Get Parameters of CRM Item Detail Configuration for personal user.
*
* @param non-negative-int $entityTypeId
* @param non-negative-int $userId
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.get',
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html',
'Get Parameters of CRM Item Detail Configuration for personal user'
)]
public function getPersonal(int $entityTypeId, int $userId, array $extras = []): CardConfigurationsResult
{
return new CardConfigurationsResult($this->core->call('crm.item.details.configuration.get', [
'scope' => 'P',
'userId' => $userId,
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}

/**
* Get Parameters of CRM Item Detail Configuration for all users.
*
* @param non-negative-int $entityTypeId
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.get',
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html',
'Get Parameters of CRM Item Detail Configuration for all users'
)]
public function getGeneral(int $entityTypeId, array $extras = []): CardConfigurationsResult
{
return new CardConfigurationsResult($this->core->call('crm.item.details.configuration.get', [
'scope' => 'C',
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}

/**
* Reset Item Card Parameters for personal user.
*
* @param non-negative-int $entityTypeId
* @param non-negative-int $userId
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.reset',
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html',
'Reset Item Card Parameters for personal user'
)]
public function resetPersonal(int $entityTypeId, int $userId, array $extras = []): UpdatedItemResult
{
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.reset', [
'scope' => 'P',
'userId' => $userId,
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}

/**
* Reset Item Card Parameters for all users.
*
* @param non-negative-int $entityTypeId
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.reset',
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html',
'Reset Item Card Parameters for all users'
)]
public function resetGeneral(int $entityTypeId, array $extras = []): UpdatedItemResult
{
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.reset', [
'scope' => 'C',
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}

/**
* Set Parameters for Individual CRM Item Detail Card Configuration
*
* @param CardSectionConfiguration[] $cardConfiguration
* @param non-negative-int $entityTypeId
* @param non-negative-int $userId
* @throws InvalidArgumentException
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.set',
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html',
'Set Parameters for Individual CRM Item Detail Card Configuration'
)]
public function setPersonal(array $cardConfiguration, int $entityTypeId, int $userId, array $extras = []): UpdatedItemResult
{
$rawData = [];
foreach ($cardConfiguration as $sectionItem) {
if (!$sectionItem instanceof CardSectionConfiguration) {
throw new InvalidArgumentException(
sprintf(
'card configuration section mus be «%s» type, current type «%s»',
CardFieldConfiguration::class,
gettype($sectionItem)
)
);
}

$rawData[] = $sectionItem->toArray();
}

return new UpdatedItemResult($this->core->call('crm.item.details.configuration.set', [
'scope' => 'P',
'userId' => $userId,
'data' => $rawData,
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}

/**
* Set CRM Item Detail Card Configuration for all users.
*
* @param CardSectionConfiguration[] $cardConfiguration
* @param non-negative-int $entityTypeId
* @throws InvalidArgumentException
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.set',
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html',
'Set CRM Item Detail Card Configuration for all users'
)]
public function setGeneral(array $cardConfiguration, int $entityTypeId, array $extras = []): UpdatedItemResult
{
$rawData = [];
foreach ($cardConfiguration as $sectionItem) {
if (!$sectionItem instanceof CardSectionConfiguration) {
throw new InvalidArgumentException(
sprintf(
'card configuration section mus be «%s» type, current type «%s»',
CardFieldConfiguration::class,
gettype($sectionItem)
)
);
}

$rawData[] = $sectionItem->toArray();
}

return new UpdatedItemResult($this->core->call('crm.item.details.configuration.set', [
'scope' => 'C',
'data' => $rawData,
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}

/**
* Set Common Detail Form for All Users
*
* @param non-negative-int $entityTypeId
* @throws InvalidArgumentException
* @link https://apidocs.bitrix24.com/api-reference/crm/deals/custom-form/crm-deal-details-configuration-force-common-scope-for-all.html
*/
#[ApiEndpointMetadata(
'crm.item.details.configuration.forceCommonScopeForAll',
'https://apidocs.bitrix24.com/api-reference/crm/deals/custom-form/crm-deal-details-configuration-force-common-scope-for-all.html',
'Set Common Detail Form for All Users '
)]
public function setForceCommonConfigForAll(int $entityTypeId, array $extras = []): UpdatedItemResult
{
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.forceCommonScopeForAll', [
'entityTypeId' => $entityTypeId,
'extras' => $extras
]));
}
}
Loading