Completed
Push — master ( dc5034...dd736e )
by dotzero
02:29
created

Company::apiList()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 6
ccs 3
cts 3
cp 1
rs 9.4285
cc 2
eloc 3
nc 2
nop 2
crap 2
1
<?php
2
3
namespace AmoCRM\Models;
4
5
/**
6
 * Class Company
7
 *
8
 * Класс модель для работы с Компаниями
9
 *
10
 * @package AmoCRM\Models
11
 * @version 0.1.0
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 Company extends Base
20
{
21
    /**
22
     * @var array Список доступный полей для модели (исключая кастомные поля)
23
     */
24
    protected $fields = [
25
        'name',
26
        'request_id',
27
        'date_create',
28
        'last_modified',
29
        'responsible_user_id',
30
        'linked_leads_id',
31
        'tags',
32
    ];
33
34
    /**
35
     * Сеттер для даты создания компании
36
     *
37
     * @param string $date Дата в произвольном формате
38
     * @return $this
39
     */
40 1
    public function setDateCreate($date)
41
    {
42 1
        $this->values['date_create'] = strtotime($date);
43
44 1
        return $this;
45
    }
46
47
    /**
48
     * Сеттер для даты последнего изменения компании
49
     *
50
     * @param string $date Дата в произвольном формате
51
     * @return $this
52
     */
53 1
    public function setLastModified($date)
54
    {
55 1
        $this->values['last_modified'] = strtotime($date);
56
57 1
        return $this;
58
    }
59
60
    /**
61
     * Сеттер для списка связанных сделок компании
62
     *
63
     * @param int|array $value Номер связанной сделки или список сделок
64
     * @return $this
65
     */
66 2
    public function setLinkedLeadsId($value)
67
    {
68 2
        if (!is_array($value)) {
69 1
            $value = [$value];
70 1
        }
71
72 2
        $this->values['linked_leads_id'] = $value;
73
74 2
        return $this;
75
    }
76
77
    /**
78
     * Сеттер для списка тегов компании
79
     *
80
     * @param int|array $value Название тегов через запятую или массив тегов
81
     * @return $this
82
     */
83 2
    public function setTags($value)
84
    {
85 2
        if (!is_array($value)) {
86 1
            $value = [$value];
87 1
        }
88
89 2
        $this->values['tags'] = implode(',', $value);
90
91 2
        return $this;
92
    }
93
94
    /**
95
     * Список компаний
96
     *
97
     * Метод для получения списка компаний с возможностью фильтрации и постраничной выборки.
98
     * Ограничение по возвращаемым на одной странице (offset) данным - 500 компаний.
99
     *
100
     * @link https://developers.amocrm.ru/rest_api/company_list.php
101
     * @param array $parameters Массив параметров к amoCRM API
102
     * @param null|string $modified Дополнительная фильтрация по (изменено с)
103
     * @return array Ответ amoCRM API
104
     */
105 1
    public function apiList($parameters, $modified = null)
106
    {
107 1
        $response = $this->getRequest('/private/api/v2/json/company/list', $parameters, $modified);
108
109 1
        return isset($response['contacts']) ? $response['contacts'] : [];
110
    }
111
112
    /**
113
     * Добавление компаний
114
     *
115
     * Метод позволяет добавлять компании по одной или пакетно
116
     *
117
     * @link https://developers.amocrm.ru/rest_api/company_set.php
118
     * @param array $companies Массив компаний для пакетного добавления
119
     * @return int|array Уникальный идентификатор компании или массив при пакетном добавлении
120
     */
121 1
    public function apiAdd($companies = [])
122
    {
123 1
        if (empty($companies)) {
124 1
            $companies = [$this];
125 1
        }
126
127
        $parameters = [
128
            'contacts' => [
129 1
                'add' => [],
130 1
            ],
131 1
        ];
132
133 1
        foreach ($companies AS $company) {
134 1
            $parameters['contacts']['add'][] = $company->getValues();
135 1
        }
136
137 1
        $response = $this->postRequest('/private/api/v2/json/company/set', $parameters);
138
139 1
        if (isset($response['contacts']['add'])) {
140 1
            $result = array_map(function ($item) {
141 1
                return $item['id'];
142 1
            }, $response['contacts']['add']);
143 1
        } else {
144
            return [];
145
        }
146
147 1
        return count($companies) == 1 ? array_shift($result) : $result;
148
    }
149
150
    /**
151
     * Обновление компаний
152
     *
153
     * Метод позволяет обновлять данные по уже существующим компаниям
154
     *
155
     * @link https://developers.amocrm.ru/rest_api/company_set.php
156
     * @param int $id Уникальный идентификатор компании
157
     * @param string $modified Дата последнего изменения данной сущности
158
     * @return bool Флаг успешности выполнения запроса
159
     * @throws \AmoCRM\Exception
160
     */
161 2
    public function apiUpdate($id, $modified = 'now')
162
    {
163 2
        $this->checkId($id);
164
165
        $parameters = [
166
            'contacts' => [
167 1
                'update' => [],
168 1
            ],
169 1
        ];
170
171 1
        $company = $this->getValues();
172 1
        $company['id'] = $id;
173 1
        $company['last_modified'] = strtotime($modified);
174
175 1
        $parameters['contacts']['update'][] = $company;
176
177 1
        $response = $this->postRequest('/private/api/v2/json/company/set', $parameters);
178
179 1
        return isset($response['contacts']) ? true : false;
180
    }
181
}
182