Completed
Push — master ( ca14c6...a6e938 )
by dotzero
01:52
created

Pipelines::addStatusField()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 12
ccs 8
cts 8
cp 1
rs 9.4285
cc 2
eloc 8
nc 2
nop 2
crap 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Pipelines
7
 *
8
 * Класс модель для работы с списком воронок и этапов продаж
9
 *
10
 * @package AmoCRM\Models
11
 * @version 0.3.6
12
 * @author dotzero <[email protected]>
13
 * @link http://www.dotzero.ru/
14
 * @link https://github.com/dotzero/amocrm-php
15
 *
16
 * For the full copyright and license information, please view the LICENSE
17
 * file that was distributed with this source code.
18
 */
19
class Pipelines extends Base
20
{
21
    /**
22
     * @var array Список доступный полей для модели (исключая кастомные поля)
23
     */
24
    protected $fields = [
25
        'name',
26
        'sort',
27
        'is_main',
28
        'statuses',
29
    ];
30
31
    /**
32
     * Сеттер для поля - является ли воронка "главной"
33
     *
34
     * @param string $flag Флаг состояния
35
     * @return $this
36
     */
37 4
    public function setIsMain($flag)
38
    {
39 4
        if ($flag) {
40 4
            $this->values['is_main'] = 'on';
41 4
        } else {
42
            unset($this->values['is_main']);
43
        }
44
45 4
        return $this;
46
    }
47
48
    /**
49
     * Список воронок и этапов продаж
50
     *
51
     * Метод для получения списка воронок и этапов продаж.
52
     *
53
     * @link https://developers.amocrm.ru/rest_api/pipelines/list.php
54
     * @param null|int $id Уникальный идентификатор воронки
55
     * @return array Ответ amoCRM API
56
     * @throws \AmoCRM\Exception
57
     */
58 1
    public function apiList($id = null)
59
    {
60 1
        if ($id !== null) {
61 1
            $this->checkId($id);
62
63 1
            $response = $this->getRequest('/private/api/v2/json/pipelines/list', [
64
                'id' => $id
65 1
            ]);
66
67 1
            return isset($response['pipelines'][$id]) ? $response['pipelines'][$id] : [];
68
        }
69
70 1
        $response = $this->getRequest('/private/api/v2/json/pipelines/list');
71
72 1
        return isset($response['pipelines']) ? $response['pipelines'] : [];
73
    }
74
75
    /**
76
     * Добавление воронок и этапов продаж
77
     *
78
     * Метод позволяет добавлять воронки и этапов продаж по одной или пакетно
79
     *
80
     * @link https://developers.amocrm.ru/rest_api/pipelines/set.php
81
     * @param array $pipelines Массив воронок для пакетного добавления
82
     * @return int|array Уникальный идентификатор воронки или массив при пакетном добавлении
83
     */
84 1
    public function apiAdd($pipelines = [])
85
    {
86 1
        if (empty($pipelines)) {
87 1
            $pipelines = [$this];
88 1
        }
89
90
        $parameters = [
91
            'pipelines' => [
92 1
                'add' => [],
93 1
            ],
94 1
        ];
95
96 1
        foreach ($pipelines AS $pipeline) {
97 1
            $parameters['pipelines']['add'][] = $pipeline->getValues();
98 1
        }
99
100 1
        $response = $this->postRequest('/private/api/v2/json/pipelines/set', $parameters);
101
102 1
        if (isset($response['pipelines']['add']['pipelines'])) {
103
            $result = array_map(function ($item) {
104
                return $item['id'];
105
            }, $response['pipelines']['add']['pipelines']);
106
        } else {
107 1
            return [];
108
        }
109
110
        return count($pipelines) == 1 ? array_shift($result) : $result;
111
    }
112
113
    /**
114
     * Обновление воронок и этапов продаж
115
     *
116
     * Метод позволяет обновлять данные по уже существующим воронкам и этапам продаж
117
     *
118
     * @link https://developers.amocrm.ru/rest_api/pipelines/set.php
119
     * @param int $id Уникальный идентификатор воронки
120
     * @return bool Флаг успешности выполнения запроса
121
     * @throws \AmoCRM\Exception
122
     */
123 1
    public function apiUpdate($id)
124
    {
125 1
        $this->checkId($id);
126
127
        $parameters = [
128
            'pipelines' => [
129 1
                'update' => [],
130 1
            ],
131 1
        ];
132
133 1
        $pipeline = $this->getValues();
134 1
        $pipeline['id'] = $id;
135
136 1
        $parameters['pipelines']['update'][] = $pipeline;
137
138 1
        $response = $this->postRequest('/private/api/v2/json/pipelines/set', $parameters);
139
140 1
        return isset($response['pipelines']) ? true : false;
141
    }
142
143
    /**
144
     * Добавление этапов воронки, необходимо передать хотя бы один этап,
145
     * кроме успешно/неуспешно завершенного.
146
     *
147
     * В качестве ключа необходимо передать идентификатор этапа, если он существует.
148
     * Для этапов успешно/неуспешно завершенно (id 142/143 соответственно)
149
     * возможно передать только поле name
150
     *
151
     * @param mixed $parameters Значения заполняемого дополнительного поля типа мультиселект
152
     * @param int $id Уникальный идентификатор заполняемого дополнительного поля
153
     * @return $this
154
     */
155 1
    public function addStatusField($parameters, $id = null)
156
    {
157 1
        if ($id === null) {
158 1
            $this->values['statuses'][] = $parameters;
159 1
        } else {
160 1
            $this->checkId($id);
161 1
            $parameters['id'] = $id;
162 1
            $this->values['statuses'][$id] = $parameters;
163
        }
164
165 1
        return $this;
166
    }
167
}
168