Completed
Push — master ( 072c02...52e687 )
by dotzero
02:31
created

Lead::setLastModified()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

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