From 224d872f2b46ce6290398089c8dbc417d710d62e Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 19 Dec 2019 11:27:19 +0100
Subject: [PATCH] FEAT #12635 TIME 0:35 Autocomplete company

---
 rest/index.php                                |  1 +
 .../contact/controllers/ContactController.php |  4 +---
 .../controllers/AutoCompleteController.php    | 24 +++++++++++++++++++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 92e997d1a40..4b64ff4b637 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -78,6 +78,7 @@ $app->get('/autocomplete/users', \SrcCore\controllers\AutoCompleteController::cl
 $app->get('/autocomplete/maarchParapheurUsers', \SrcCore\controllers\AutoCompleteController::class . ':getMaarchParapheurUsers');
 $app->get('/autocomplete/correspondents', \SrcCore\controllers\AutoCompleteController::class . ':getCorrespondents');
 $app->get('/autocomplete/contacts/groups', \SrcCore\controllers\AutoCompleteController::class . ':getContactsForGroups');
+$app->get('/autocomplete/contacts/company', \SrcCore\controllers\AutoCompleteController::class . ':getContactsCompany');
 $app->get('/autocomplete/users/administration', \SrcCore\controllers\AutoCompleteController::class . ':getUsersForAdministration');
 $app->get('/autocomplete/users/visa', \SrcCore\controllers\AutoCompleteController::class . ':getUsersForVisa');
 $app->get('/autocomplete/entities', \SrcCore\controllers\AutoCompleteController::class . ':getEntities');
diff --git a/src/app/contact/controllers/ContactController.php b/src/app/contact/controllers/ContactController.php
index 49c5ed3b2c9..f398b524058 100755
--- a/src/app/contact/controllers/ContactController.php
+++ b/src/app/contact/controllers/ContactController.php
@@ -812,8 +812,6 @@ class ContactController
         $mappingFields = [
             'civility'              => 'civility',
             'firstname'             => 'firstname',
-            'lastname'              => 'lastname',
-            'company'               => 'company',
             'department'            => 'department',
             'function'              => 'function',
             'address_number'        => 'addressNumber',
@@ -827,7 +825,7 @@ class ContactController
             'phone'                 => 'phone',
             'notes'                 => 'notes'
         ];
-        $mandatoryParameters = ContactParameterModel::get(['select' => ['identifier'], 'where' => ['mandatory = ?'], 'data' => [true]]);
+        $mandatoryParameters = ContactParameterModel::get(['select' => ['identifier'], 'where' => ['mandatory = ?', 'identifier not in (?)'], 'data' => [true, ['lastname', 'company']]]);
         foreach ($mandatoryParameters as $mandatoryParameter) {
             if (strpos($mandatoryParameter['identifier'], 'contactCustomField_') !== false) {
                 $customId = explode('_', $mandatoryParameter['identifier'])[1];
diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php
index d7e002116f7..4cbf8930788 100755
--- a/src/core/controllers/AutoCompleteController.php
+++ b/src/core/controllers/AutoCompleteController.php
@@ -544,6 +544,30 @@ class AutoCompleteController
         return $response->withJson($data);
     }
 
+    public static function getContactsCompany(Request $request, Response $response)
+    {
+        $queryParams = $request->getQueryParams();
+
+        if (!Validator::stringType()->notEmpty()->validate($queryParams['search'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Query params search is empty']);
+        }
+
+        $fields = AutoCompleteController::getUnsensitiveFieldsForRequest(['fields' => ['company']]);
+        $contacts = ContactModel::get([
+            'select'    => [
+                'id', 'company', 'address_number as "addressNumber"', 'address_street as "addressStreet"',
+                'address_additional1 as "addressAdditional1"', 'address_additional2 as "addressAdditional2"', 'address_postcode as "addressPostcode"',
+                'address_town as "addressTown"', 'address_country as "addressCountry"'
+            ],
+            'where'     => ['enabled = ?', $fields],
+            'data'      => [true, $queryParams['search'] . '%'],
+            'orderBy'   => ['company', 'lastname'],
+            'limit'     => 1
+        ]);
+
+        return $response->withJson($contacts);
+    }
+
     public static function getBanAddresses(Request $request, Response $response)
     {
         $data = $request->getQueryParams();
-- 
GitLab