Completed
Push — master ( cc63a4...469e52 )
by dotzero
33:15 queued 26:04
created

Lead   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 113
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 96.88%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 5
dl 0
loc 113
ccs 31
cts 32
cp 0.9688
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A apiList() 0 6 2
A apiAdd() 0 28 5
A apiUpdate() 0 20 1
1
<?php
2
3
namespace AmoCRM\Models;
4
5
use AmoCRM\Models\Traits\SetNote;
6
use AmoCRM\Models\Traits\SetTags;
7
use AmoCRM\Models\Traits\SetDateCreate;
8
use AmoCRM\Models\Traits\SetLastModified;
9
10
/**
11
 * Class Lead
12
 *
13
 * Класс модель для работы со Сделками
14
 *
15
 * @package AmoCRM\Models
16
 * @author dotzero <[email protected]>
17
 * @link http://www.dotzero.ru/
18
 * @link https://github.com/dotzero/amocrm-php
19
 *
20
 * For the full copyright and license information, please view the LICENSE
21
 * file that was distributed with this source code.
22
 */
23
class Lead extends AbstractModel
24
{
25
    use SetNote, SetTags, SetDateCreate, SetLastModified;
26
27
    /**
28
     * @var array Список доступный полей для модели (исключая кастомные поля)
29
     */
30
    protected $fields = [
31
        'name',
32
        'date_create',
33
        'last_modified',
34
        'status_id',
35
        'pipeline_id',
36
        'price',
37
        'responsible_user_id',
38
        'created_user_id',
39
        'request_id',
40
        'linked_company_id',
41
        'tags',
42
        'visitor_uid',
43
        'notes',
44
        'modified_user_id',
45
        'loss_reason_id',
46
    ];
47
48
    /**
49
     * Список сделок
50
     *
51
     * Метод для получения списка сделок с возможностью фильтрации и постраничной выборки.
52
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 сделок
53
     *
54
     * @link https://developers.amocrm.ru/rest_api/leads_list.php
55
     * @param array $parameters Массив параметров к amoCRM API
56
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
57
     * @return array Ответ amoCRM API
58
     */
59 1
    public function apiList($parameters, $modified = null)
60
    {
61 1
        $response = $this->getRequest('/private/api/v2/json/leads/list', $parameters, $modified);
62
63 1
        return isset($response['leads']) ? $response['leads'] : [];
64
    }
65
66
    /**
67
     * Добавление сделки
68
     *
69
     * Метод позволяет добавлять сделки по одной или пакетно
70
     *
71
     * @link https://developers.amocrm.ru/rest_api/leads_set.php
72
     * @param array $leads Массив сделок для пакетного добавления
73
     * @return int|array Уникальный идентификатор сделки или массив при пакетном добавлении
74
     */
75 1
    public function apiAdd($leads = [])
76
    {
77 1
        if (empty($leads)) {
78 1
            $leads = [$this];
79 1
        }
80
81
        $parameters = [
82
            'leads' => [
83 1
                'add' => [],
84 1
            ],
85 1
        ];
86
87 1
        foreach ($leads AS $lead) {
88 1
            $parameters['leads']['add'][] = $lead->getValues();
89 1
        }
90
91 1
        $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);
92
93 1
        if (isset($response['leads']['add'])) {
94 1
            $result = array_map(function($item) {
95 1
                return $item['id'];
96 1
            }, $response['leads']['add']);
97 1
        } else {
98
            return [];
99
        }
100
101 1
        return count($leads) == 1 ? array_shift($result) : $result;
102
    }
103
104
    /**
105
     * Обновление сделки
106
     *
107
     * Метод позволяет обновлять данные по уже существующим сделкам
108
     *
109
     * @link https://developers.amocrm.ru/rest_api/leads_set.php
110
     * @param int $id Уникальный идентификатор сделки
111
     * @param string $modified Дата последнего изменения данной сущности
112
     * @return bool Флаг успешности выполнения запроса
113
     * @throws \AmoCRM\Exception
114
     */
115 1
    public function apiUpdate($id, $modified = 'now')
116
    {
117 1
        $this->checkId($id);
118
119
        $parameters = [
120
            'leads' => [
121 1
                'update' => [],
122 1
            ],
123 1
        ];
124
125 1
        $lead = $this->getValues();
126 1
        $lead['id'] = $id;
127 1
        $lead['last_modified'] = strtotime($modified);
128
129 1
        $parameters['leads']['update'][] = $lead;
130
131 1
        $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);
132
133 1
        return empty($response['leads']['update']['errors']);
134
    }
135
}
136