From 25c44421cd8a575ad4068365e1925bd257c0f7e3 Mon Sep 17 00:00:00 2001
From: Baizet Tlyupov <baizet01@gmail.com>
Date: Fri, 6 Jul 2018 21:00:23 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?=
 =?UTF-8?q?=D1=82=D0=BE=20=D1=87=D0=B5=D0=B3=D0=BE=20=D0=BD=D0=B5=20=D0=B4?=
 =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=B0=D0=BB=D0=BE:?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- Добавил массовое обновление сделок, контактов и компаний
- Обновил примеры с учётом обновления
---
 src/Models/Company.php | 20 +++++----
 src/Models/Contact.php | 18 ++++----
 src/Models/Lead.php    | 94 ++++++++----------------------------------
 3 files changed, 39 insertions(+), 93 deletions(-)

diff --git a/src/Models/Company.php b/src/Models/Company.php
index 14229a1..65f67dc 100644
--- a/src/Models/Company.php
+++ b/src/Models/Company.php
@@ -21,6 +21,7 @@ class Company extends AbstractModel
      * @var array Список доступный полей для модели (исключая кастомные поля)
      */
     protected $fields = [
+        'id',
         'name',
         'request_id',
         'date_create',
@@ -30,6 +31,7 @@ class Company extends AbstractModel
         'linked_leads_id',
         'tags',
         'modified_user_id',
+        'updated_at',
     ];
 
     /**
@@ -154,14 +156,16 @@ public function apiAdd($companies = [])
      * Метод позволяет обновлять данные по уже существующим компаниям
      *
      * @link https://developers.amocrm.ru/rest_api/company_set.php
-     * @param int $id Уникальный идентификатор компании
+     * @param int $contacts Массив с данными для обновления
      * @param string $modified Дата последнего изменения данной сущности
      * @return bool Флаг успешности выполнения запроса
      * @throws \AmoCRM\Exception
      */
-    public function apiUpdate($id, $modified = 'now')
+    public function apiUpdate($contacts = [], $modified = 'now')
     {
-        $this->checkId($id);
+        if (empty($contacts)) {
+            $contacts = [$contacts];
+        }
 
         $parameters = [
             'contacts' => [
@@ -169,11 +173,11 @@ public function apiUpdate($id, $modified = 'now')
             ],
         ];
 
-        $company = $this->getValues();
-        $company['id'] = $id;
-        $company['last_modified'] = strtotime($modified);
-
-        $parameters['contacts']['update'][] = $company;
+        foreach ($contacts as $key => $contact) {
+            $parameters['contacts']['update'][$key] = $contact->getValues();
+            $parameters['contacts']['update'][$key]['last_modified'] = strtotime($modified);
+            $parameters['contacts']['update'][$key]['updated_at'] = strtotime($modified);
+        }
 
         $response = $this->postRequest('/private/api/v2/json/company/set', $parameters);
 
diff --git a/src/Models/Contact.php b/src/Models/Contact.php
index 9b12c5f..58b69bc 100644
--- a/src/Models/Contact.php
+++ b/src/Models/Contact.php
@@ -21,6 +21,7 @@ class Contact extends AbstractModel
      * @var array Список доступный полей для модели (исключая кастомные поля)
      */
     protected $fields = [
+		'id',
         'name',
         'request_id',
         'date_create',
@@ -183,14 +184,16 @@ public function apiAdd($contacts = [])
      * Метод позволяет обновлять данные по уже существующим контактам
      *
      * @link https://developers.amocrm.ru/rest_api/contacts_set.php
-     * @param int $id Уникальный идентификатор контакта
+     * @param int $contacts Массив с данными для обновления
      * @param string $modified Дата последнего изменения данной сущности
      * @return bool Флаг успешности выполнения запроса
      * @throws \AmoCRM\Exception
      */
-    public function apiUpdate($id, $modified = 'now')
+    public function apiUpdate($contacts = [], $modified = 'now')
     {
-        $this->checkId($id);
+        if (empty($contacts)) {
+            $contacts = [$contacts];
+        }
 
         $parameters = [
             'contacts' => [
@@ -198,11 +201,10 @@ public function apiUpdate($id, $modified = 'now')
             ],
         ];
 
-        $contact = $this->getValues();
-        $contact['id'] = $id;
-        $contact['last_modified'] = strtotime($modified);
-
-        $parameters['contacts']['update'][] = $contact;
+        foreach ($contacts as $key => $contact) {
+            $parameters['contacts']['update'][$key] = $contact->getValues();
+            $parameters['contacts']['update'][$key]['last_modified'] = strtotime($modified);
+        }
 
         $response = $this->postRequest('/private/api/v2/json/contacts/set', $parameters);
 
diff --git a/src/Models/Lead.php b/src/Models/Lead.php
index 927c1b5..aaa92d2 100644
--- a/src/Models/Lead.php
+++ b/src/Models/Lead.php
@@ -2,6 +2,11 @@
 
 namespace AmoCRM\Models;
 
+use AmoCRM\Models\Traits\SetNote;
+use AmoCRM\Models\Traits\SetTags;
+use AmoCRM\Models\Traits\SetDateCreate;
+use AmoCRM\Models\Traits\SetLastModified;
+
 /**
  * Class Lead
  *
@@ -17,10 +22,13 @@
  */
 class Lead extends AbstractModel
 {
+    use SetNote, SetTags, SetDateCreate, SetLastModified;
+
     /**
      * @var array Список доступный полей для модели (исключая кастомные поля)
      */
     protected $fields = [
+        'id',
         'name',
         'date_create',
         'last_modified',
@@ -37,75 +45,6 @@ class Lead extends AbstractModel
         'modified_user_id',
     ];
 
-    /**
-     * Сеттер для даты создания сделки
-     *
-     * @param string $date Дата в произвольном формате
-     * @return $this
-     */
-    public function setDateCreate($date)
-    {
-        $this->values['date_create'] = strtotime($date);
-
-        return $this;
-    }
-
-    /**
-     * Сеттер для даты последнего изменения сделки
-     *
-     * @param string $date Дата в произвольном формате
-     * @return $this
-     */
-    public function setLastModified($date)
-    {
-        $this->values['last_modified'] = strtotime($date);
-
-        return $this;
-    }
-
-    /**
-     * Сеттер для списка тегов сделки
-     *
-     * @param int|array $value Название тегов через запятую или массив тегов
-     * @return $this
-     */
-    public function setTags($value)
-    {
-        if (!is_array($value)) {
-            $value = [$value];
-        }
-
-        $this->values['tags'] = implode(',', $value);
-
-        return $this;
-    }
-
-    /**
-     * Сеттер для списка примечаний, которые появятся в сделке
-     * после принятия неразобранного
-     *
-     * @param array|Note $value Примечание или массив примечаний
-     * @return $this
-     */
-    public function setNotes($value)
-    {
-        $this->values['notes'] = [];
-
-        if ($value instanceof Note) {
-            $value = [$value];
-        }
-
-        foreach ($value as $note) {
-            if ($note instanceof Note) {
-                $note = $note->getValues();
-            }
-
-            $this->values['notes'][] = $note;
-        }
-
-        return $this;
-    }
-
     /**
      * Список сделок
      *
@@ -168,14 +107,16 @@ public function apiAdd($leads = [])
      * Метод позволяет обновлять данные по уже существующим сделкам
      *
      * @link https://developers.amocrm.ru/rest_api/leads_set.php
-     * @param int $id Уникальный идентификатор сделки
+     * @param int $leads Массив с данными для обновления
      * @param string $modified Дата последнего изменения данной сущности
      * @return bool Флаг успешности выполнения запроса
      * @throws \AmoCRM\Exception
      */
-    public function apiUpdate($id, $modified = 'now')
+    public function apiUpdate($leads = [], $modified = 'now')
     {
-        $this->checkId($id);
+        if (empty($leads)) {
+            $leads = [$this];
+        }
 
         $parameters = [
             'leads' => [
@@ -183,11 +124,10 @@ public function apiUpdate($id, $modified = 'now')
             ],
         ];
 
-        $lead = $this->getValues();
-        $lead['id'] = $id;
-        $lead['last_modified'] = strtotime($modified);
-
-        $parameters['leads']['update'][] = $lead;
+        foreach ($leads as $key => $lead) {
+            $parameters['leads']['update'][$key] = $lead->getValues();
+            $parameters['leads']['update'][$key]['last_modified'] = strtotime($modified);
+        }
 
         $response = $this->postRequest('/private/api/v2/json/leads/set', $parameters);