Skip to content

Commit ae7b36b

Browse files
authored
Merge pull request #169 from Info-Expert-B24/feature/168-add-item-details
Feature/168 Add item details
2 parents 277304c + a1f7e73 commit ae7b36b

File tree

11 files changed

+423
-23
lines changed

11 files changed

+423
-23
lines changed

.php-cs-fixer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
$finder = Finder::create()
88
->in(__DIR__ . '/src/Infrastructure/Console/Commands/')
9-
->in(__DIR__ . '/src/Services/CRM/Lead/Service')
9+
->in(__DIR__ . '/src/Services/CRM/Item/Service/')
1010
->in(__DIR__ . '/src/Services/CRM/Contact/')
1111
->in(__DIR__ . '/src/Services/CRM/Quote/')
1212
->in(__DIR__ . '/src/Services/CRM/Lead/')

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@
44

55
### Added
66

7+
- Added service `CRM\Item\Service\ItemDetailsConfiguration` with support methods,
8+
see [add crm.item.details.* methods](https://github.com/bitrix24/b24phpsdk/issues/168):
9+
- `getPersonal` method retrieves the settings of item cards for personal user
10+
- `getGeneral` method retrieves the settings of item cards for all users
11+
- `resetPersonal` method reset for item user settings
12+
- `resetGeneral` method reset all card settings for all users
13+
- `setPersonal` method set card configuration
14+
- `setGeneral` method set card configuration for all users
15+
- `setForceCommonConfigForAll` method set common detail form for All Users
716
- Added service `CRM\Deal\Service\DealDetailsConfiguration` with support methods,
817
see [add crm.deal.details.* methods](https://github.com/bitrix24/b24phpsdk/issues/158):
918
- `getPersonal` method retrieves the settings of deal cards for personal user

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ integration_tests_lead_details:
215215
integration_tests_scope_automation:
216216
docker-compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_scope_automation
217217

218+
.PHONY: integration_tests_item_details
219+
integration_tests_item_details:
220+
docker-compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_item_details
221+
218222
.PHONY: integration_tests_lead_productrows
219223
integration_tests_lead_productrows:
220224
docker-compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_lead_productrows

phpstan.neon.dist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ parameters:
1111
- tests/Integration/Services/IMOpenLines
1212
- tests/Integration/Services/Main
1313
- tests/Integration/Services/Placement
14+
- tests/Integration/Services/CRM/Item/Service/ItemDetailsConfigurationTest.php
1415
- tests/Integration/Services/CRM/Deal/Service/DealDetailsConfigurationTest.php
1516
- tests/Integration/Services/CRM/Lead/Service/LeadDetailsConfigurationTest.php
1617
- tests/Integration/Services/CRM/Contact/Service/ContactDetailsConfigurationTest.php

phpunit.xml.dist

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@
6464
<testsuite name="integration_tests_deal_recurring">
6565
<file>./tests/Integration/Services/CRM/Deal/Service/DealRecurringTest.php</file>
6666
</testsuite>
67+
<testsuite name="integration_tests_item_details">
68+
<file>./tests/Integration/Services/CRM/Item/Service/ItemDetailsConfigurationTest.php</file>
69+
</testsuite>
70+
<testsuite name="integration_tests_scope_automation">
71+
<directory>./tests/Integration/Services/CRM/Automation/</directory>
72+
</testsuite>
6773
<testsuite name="integration_tests_lead_details">
6874
<file>./tests/Integration/Services/CRM/Lead/Service/LeadDetailsConfigurationTest.php</file>
6975
</testsuite>

rector.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
__DIR__ . '/tests/Integration/Services/Main',
3737
__DIR__ . '/src/Services/Placement',
3838
__DIR__ . '/tests/Integration/Services/Placement',
39+
__DIR__ . '/src/Services/CRM/Deal',
40+
__DIR__ . '/tests/Integration/Services/CRM/Deal/Service',
41+
__DIR__ . '/src/Services/CRM/Item/Service',
42+
__DIR__ . '/tests/Integration/Services/CRM/Item/Service',
3943
__DIR__ . '/src/Services/CRM/Deal/Service/DealDetailsConfiguration.php',
4044
__DIR__ . '/tests/Integration/Services/CRM/Deal/Service/DealDetailsConfigurationTest.php',
4145
__DIR__ . '/src/Services/CRM/Contact/Service/ContactDetailsConfiguration.php',

src/Services/CRM/CRMServiceBuilder.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@ public function companyDetailsConfiguration(): Company\Service\CompanyDetailsCon
7272
return $this->serviceCache[__METHOD__];
7373
}
7474

75+
public function itemDetailsConfiguration(): Item\Service\ItemDetailsConfiguration
76+
{
77+
if (!isset($this->serviceCache[__METHOD__])) {
78+
$this->serviceCache[__METHOD__] = new Item\Service\ItemDetailsConfiguration(
79+
$this->core,
80+
$this->log
81+
);
82+
}
83+
84+
return $this->serviceCache[__METHOD__];
85+
}
86+
7587
public function dealDetailsConfiguration(): Deal\Service\DealDetailsConfiguration
7688
{
7789
if (!isset($this->serviceCache[__METHOD__])) {

src/Services/CRM/Item/Service/Batch.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,8 @@
2626
#[ApiBatchServiceMetadata(new Scope(['crm']))]
2727
class Batch
2828
{
29-
protected BatchOperationsInterface $batch;
30-
protected LoggerInterface $log;
31-
32-
public function __construct(BatchOperationsInterface $batch, LoggerInterface $log)
29+
public function __construct(protected BatchOperationsInterface $batch, protected LoggerInterface $log)
3330
{
34-
$this->batch = $batch;
35-
$this->log = $log;
3631
}
3732

3833
/**
@@ -83,8 +78,9 @@ public function add(int $entityTypeId, array $items): Generator
8378
'fields' => $item,
8479
];
8580
}
81+
8682
foreach ($this->batch->addEntityItems('crm.item.add', $rawItems) as $key => $item) {
8783
yield $key => new ItemItemResult($item->getResult()['item']);
8884
}
8985
}
90-
}
86+
}

src/Services/CRM/Item/Service/Item.php

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,9 @@
3030
#[ApiServiceMetadata(new Scope(['crm']))]
3131
class Item extends AbstractService
3232
{
33-
public Batch $batch;
34-
35-
public function __construct(Batch $batch, CoreInterface $core, LoggerInterface $log)
33+
public function __construct(public Batch $batch, CoreInterface $core, LoggerInterface $logger)
3634
{
37-
parent::__construct($core, $log);
38-
$this->batch = $batch;
35+
parent::__construct($core, $logger);
3936
}
4037

4138
/**
@@ -44,9 +41,6 @@ public function __construct(Batch $batch, CoreInterface $core, LoggerInterface $
4441
* @link https://training.bitrix24.com/rest_help/crm/dynamic/methodscrmitem/crm_item_add.php
4542
*
4643
*
47-
* @param int $entityTypeId
48-
* @param array $fields
49-
* @return ItemResult
5044
* @throws BaseException
5145
* @throws TransportException
5246
*/
@@ -73,10 +67,7 @@ public function add(int $entityTypeId, array $fields): ItemResult
7367
*
7468
* @link https://training.bitrix24.com/rest_help/crm/dynamic/methodscrmitem/crm_item_delete.php
7569
*
76-
* @param int $entityTypeId
77-
* @param int $id
7870
*
79-
* @return DeletedItemResult
8071
* @throws BaseException
8172
* @throws TransportException
8273
*/
@@ -89,7 +80,8 @@ public function delete(int $entityTypeId, int $id): DeletedItemResult
8980
{
9081
return new DeletedItemResult(
9182
$this->core->call(
92-
'crm.item.delete', ['entityTypeId' => $entityTypeId, 'id' => $id]
83+
'crm.item.delete',
84+
['entityTypeId' => $entityTypeId, 'id' => $id]
9385
)
9486
);
9587
}
@@ -99,8 +91,6 @@ public function delete(int $entityTypeId, int $id): DeletedItemResult
9991
*
10092
* @link https://training.bitrix24.com/rest_help/crm/dynamic/methodscrmitem/crm_item_fields.php
10193
*
102-
* @param int $entityTypeId
103-
* @return FieldsResult
10494
* @throws BaseException
10595
* @throws TransportException
10696
*/
@@ -198,4 +188,4 @@ public function countByFilter(int $entityTypeId, array $filter = []): int
198188
{
199189
return $this->list($entityTypeId, [], $filter, ['id'], 1)->getCoreResponse()->getResponseData()->getPagination()->getTotal();
200190
}
201-
}
191+
}
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the bitrix24-php-sdk package.
5+
*
6+
* © Vadim Soluyanov <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the MIT-LICENSE.txt
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Bitrix24\SDK\Services\CRM\Item\Service;
15+
16+
use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
17+
use Bitrix24\SDK\Attributes\ApiServiceMetadata;
18+
use Bitrix24\SDK\Core\Credentials\Scope;
19+
use Bitrix24\SDK\Core\Exceptions\InvalidArgumentException;
20+
use Bitrix24\SDK\Core\Result\UpdatedItemResult;
21+
use Bitrix24\SDK\Services\AbstractService;
22+
use Bitrix24\SDK\Services\CRM\Common\CardFieldConfiguration;
23+
use Bitrix24\SDK\Services\CRM\Common\CardSectionConfiguration;
24+
use Bitrix24\SDK\Services\CRM\Common\Result\ElementCardConfiguration\CardConfigurationsResult;
25+
26+
#[ApiServiceMetadata(new Scope(['crm']))]
27+
class ItemDetailsConfiguration extends AbstractService
28+
{
29+
/**
30+
* Get Parameters of CRM Item Detail Configuration for personal user.
31+
*
32+
* @param non-negative-int $entityTypeId
33+
* @param non-negative-int $userId
34+
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html
35+
*/
36+
#[ApiEndpointMetadata(
37+
'crm.item.details.configuration.get',
38+
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html',
39+
'Get Parameters of CRM Item Detail Configuration for personal user'
40+
)]
41+
public function getPersonal(int $entityTypeId, int $userId, array $extras = []): CardConfigurationsResult
42+
{
43+
return new CardConfigurationsResult($this->core->call('crm.item.details.configuration.get', [
44+
'scope' => 'P',
45+
'userId' => $userId,
46+
'entityTypeId' => $entityTypeId,
47+
'extras' => $extras
48+
]));
49+
}
50+
51+
/**
52+
* Get Parameters of CRM Item Detail Configuration for all users.
53+
*
54+
* @param non-negative-int $entityTypeId
55+
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html
56+
*/
57+
#[ApiEndpointMetadata(
58+
'crm.item.details.configuration.get',
59+
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/index.html',
60+
'Get Parameters of CRM Item Detail Configuration for all users'
61+
)]
62+
public function getGeneral(int $entityTypeId, array $extras = []): CardConfigurationsResult
63+
{
64+
return new CardConfigurationsResult($this->core->call('crm.item.details.configuration.get', [
65+
'scope' => 'C',
66+
'entityTypeId' => $entityTypeId,
67+
'extras' => $extras
68+
]));
69+
}
70+
71+
/**
72+
* Reset Item Card Parameters for personal user.
73+
*
74+
* @param non-negative-int $entityTypeId
75+
* @param non-negative-int $userId
76+
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html
77+
*/
78+
#[ApiEndpointMetadata(
79+
'crm.item.details.configuration.reset',
80+
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html',
81+
'Reset Item Card Parameters for personal user'
82+
)]
83+
public function resetPersonal(int $entityTypeId, int $userId, array $extras = []): UpdatedItemResult
84+
{
85+
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.reset', [
86+
'scope' => 'P',
87+
'userId' => $userId,
88+
'entityTypeId' => $entityTypeId,
89+
'extras' => $extras
90+
]));
91+
}
92+
93+
/**
94+
* Reset Item Card Parameters for all users.
95+
*
96+
* @param non-negative-int $entityTypeId
97+
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html
98+
*/
99+
#[ApiEndpointMetadata(
100+
'crm.item.details.configuration.reset',
101+
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-reset.html',
102+
'Reset Item Card Parameters for all users'
103+
)]
104+
public function resetGeneral(int $entityTypeId, array $extras = []): UpdatedItemResult
105+
{
106+
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.reset', [
107+
'scope' => 'C',
108+
'entityTypeId' => $entityTypeId,
109+
'extras' => $extras
110+
]));
111+
}
112+
113+
/**
114+
* Set Parameters for Individual CRM Item Detail Card Configuration
115+
*
116+
* @param CardSectionConfiguration[] $cardConfiguration
117+
* @param non-negative-int $entityTypeId
118+
* @param non-negative-int $userId
119+
* @throws InvalidArgumentException
120+
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html
121+
*/
122+
#[ApiEndpointMetadata(
123+
'crm.item.details.configuration.set',
124+
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html',
125+
'Set Parameters for Individual CRM Item Detail Card Configuration'
126+
)]
127+
public function setPersonal(array $cardConfiguration, int $entityTypeId, int $userId, array $extras = []): UpdatedItemResult
128+
{
129+
$rawData = [];
130+
foreach ($cardConfiguration as $sectionItem) {
131+
if (!$sectionItem instanceof CardSectionConfiguration) {
132+
throw new InvalidArgumentException(
133+
sprintf(
134+
'card configuration section mus be «%s» type, current type «%s»',
135+
CardFieldConfiguration::class,
136+
gettype($sectionItem)
137+
)
138+
);
139+
}
140+
141+
$rawData[] = $sectionItem->toArray();
142+
}
143+
144+
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.set', [
145+
'scope' => 'P',
146+
'userId' => $userId,
147+
'data' => $rawData,
148+
'entityTypeId' => $entityTypeId,
149+
'extras' => $extras
150+
]));
151+
}
152+
153+
/**
154+
* Set CRM Item Detail Card Configuration for all users.
155+
*
156+
* @param CardSectionConfiguration[] $cardConfiguration
157+
* @param non-negative-int $entityTypeId
158+
* @throws InvalidArgumentException
159+
* @link https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html
160+
*/
161+
#[ApiEndpointMetadata(
162+
'crm.item.details.configuration.set',
163+
'https://apidocs.bitrix24.com/api-reference/crm/universal/item-details-configuration/crm-item-details-configuration-set.html',
164+
'Set CRM Item Detail Card Configuration for all users'
165+
)]
166+
public function setGeneral(array $cardConfiguration, int $entityTypeId, array $extras = []): UpdatedItemResult
167+
{
168+
$rawData = [];
169+
foreach ($cardConfiguration as $sectionItem) {
170+
if (!$sectionItem instanceof CardSectionConfiguration) {
171+
throw new InvalidArgumentException(
172+
sprintf(
173+
'card configuration section mus be «%s» type, current type «%s»',
174+
CardFieldConfiguration::class,
175+
gettype($sectionItem)
176+
)
177+
);
178+
}
179+
180+
$rawData[] = $sectionItem->toArray();
181+
}
182+
183+
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.set', [
184+
'scope' => 'C',
185+
'data' => $rawData,
186+
'entityTypeId' => $entityTypeId,
187+
'extras' => $extras
188+
]));
189+
}
190+
191+
/**
192+
* Set Common Detail Form for All Users
193+
*
194+
* @param non-negative-int $entityTypeId
195+
* @throws InvalidArgumentException
196+
* @link https://apidocs.bitrix24.com/api-reference/crm/deals/custom-form/crm-deal-details-configuration-force-common-scope-for-all.html
197+
*/
198+
#[ApiEndpointMetadata(
199+
'crm.item.details.configuration.forceCommonScopeForAll',
200+
'https://apidocs.bitrix24.com/api-reference/crm/deals/custom-form/crm-deal-details-configuration-force-common-scope-for-all.html',
201+
'Set Common Detail Form for All Users '
202+
)]
203+
public function setForceCommonConfigForAll(int $entityTypeId, array $extras = []): UpdatedItemResult
204+
{
205+
return new UpdatedItemResult($this->core->call('crm.item.details.configuration.forceCommonScopeForAll', [
206+
'entityTypeId' => $entityTypeId,
207+
'extras' => $extras
208+
]));
209+
}
210+
}

0 commit comments

Comments
 (0)