Completed
Pull Request — master (#106)
by
unknown
02:27
created

Lead   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 133
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 88.57%

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 5
dl 0
loc 133
ccs 31
cts 35
cp 0.8857
rs 10
c 0
b 0
f 0

4 Methods

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