diff --git a/rest/index.php b/rest/index.php index 58577f8a47ba3f51bb78b127ffa334aff9fd035e..c9273d695edcc9687883e411e4826fbe7fbbdf89 100755 --- a/rest/index.php +++ b/rest/index.php @@ -98,6 +98,7 @@ $app->get('/autocomplete/folders', \SrcCore\controllers\AutoCompleteController:: $app->get('/autocomplete/tags', \SrcCore\controllers\AutoCompleteController::class . ':getTags'); $app->get('/autocomplete/ouM2MAnnuary', \SrcCore\controllers\AutoCompleteController::class . ':getOuM2MAnnuary'); $app->get('/autocomplete/businessIdM2MAnnuary', \SrcCore\controllers\AutoCompleteController::class . ':getBusinessIdM2MAnnuary'); +$app->get('/autocomplete/contacts/m2m', \SrcCore\controllers\AutoCompleteController::class . ':getAvailableContactsForM2M'); //Baskets $app->get('/baskets', \Basket\controllers\BasketController::class . ':get'); diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php index 3182e6338d4120ea9a653f2a626fe816d3e0b8db..0511bdcbb20347a5271851910c59dde4bb26bc55 100755 --- a/src/core/controllers/AutoCompleteController.php +++ b/src/core/controllers/AutoCompleteController.php @@ -731,6 +731,58 @@ class AutoCompleteController return $response->withJson($unitOrganizations); } + public static function getAvailableContactsForM2M(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']); + } + + $autocompleteData = []; + $searchableParameters = ContactParameterModel::get(['select' => ['identifier'], 'where' => ['searchable = ?'], 'data' => [true]]); + + $fields = []; + foreach ($searchableParameters as $searchableParameter) { + if (strpos($searchableParameter['identifier'], 'contactCustomField_') !== false) { + $customFieldId = explode('_', $searchableParameter['identifier'])[1]; + $fields[] = "custom_fields->>'{$customFieldId}'"; + } else { + $fields[] = ContactController::MAPPING_FIELDS[$searchableParameter['identifier']]; + } + } + + $fieldsNumber = count($fields); + $fields = AutoCompleteController::getUnsensitiveFieldsForRequest(['fields' => $fields]); + + $requestData = AutoCompleteController::getDataForRequest([ + 'search' => $queryParams['search'], + 'fields' => $fields, + 'where' => ['enabled = ?', "external_id->>'m2m' is not null", "(communication_means->>'url' is not null OR communication_means->>'email' is not null)"], + 'data' => [true], + 'fieldsNumber' => $fieldsNumber + ]); + + $contacts = ContactModel::get([ + 'select' => ['id', 'communication_means', 'external_id'], + 'where' => $requestData['where'], + 'data' => $requestData['data'], + 'orderBy' => ['company', 'lastname NULLS FIRST'], + 'limit' => self::TINY_LIMIT + ]); + + foreach ($contacts as $contact) { + $autoContact = ContactController::getAutocompleteFormat(['id' => $contact['id']]); + + $externalId = json_decode($contact['external_id'], true); + $communicationMeans = json_decode($contact['communication_means'], true); + $autoContact['m2m'] = $externalId['m2m']; + $autoContact['communicationMeans'] = $communicationMeans['url'] ?? $communicationMeans['email']; + $autocompleteData[] = $autoContact; + } + + return $response->withJson($autocompleteData); + } + public static function getBusinessIdM2MAnnuary(Request $request, Response $response) { $data = $request->getQueryParams();