From 2aa5b102318287ffe98961690abfab5d95379d81 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Thu, 19 Dec 2019 15:44:19 +0100 Subject: [PATCH] FEAT #11695 TIME 1:00 List templates by resource --- rest/index.php | 3 +- .../contact/controllers/ContactController.php | 18 ---------- .../controllers/ListTemplateController.php | 36 +++++++++++++++++++ .../models/ListTemplateModelAbstract.php | 11 +++--- .../controllers/AutoCompleteController.php | 19 ++++++---- .../entities-administration.component.html | 2 +- 6 files changed, 57 insertions(+), 32 deletions(-) diff --git a/rest/index.php b/rest/index.php index 4b64ff4b637..2e5a34793e7 100755 --- a/rest/index.php +++ b/rest/index.php @@ -80,7 +80,7 @@ $app->get('/autocomplete/correspondents', \SrcCore\controllers\AutoCompleteContr $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/users/circuit', \SrcCore\controllers\AutoCompleteController::class . ':getUsersForCircuit'); $app->get('/autocomplete/entities', \SrcCore\controllers\AutoCompleteController::class . ':getEntities'); $app->get('/autocomplete/statuses', \SrcCore\controllers\AutoCompleteController::class . ':getStatuses'); $app->get('/autocomplete/banAddresses', \SrcCore\controllers\AutoCompleteController::class . ':getBanAddresses'); @@ -345,6 +345,7 @@ $app->get('/resources/{resId}/templates', \Template\controllers\TemplateControll $app->get('/resources/{resId}/listInstance', \Entity\controllers\ListInstanceController::class . ':getByResId'); $app->get('/resources/{resId}/visaCircuit', \Entity\controllers\ListInstanceController::class . ':getVisaCircuitByResId'); $app->get('/resources/{resId}/opinionCircuit', \Entity\controllers\ListInstanceController::class . ':getOpinionCircuitByResId'); +$app->get('/resources/{resId}/availableCircuits', \Entity\controllers\ListTemplateController::class . ':getAvailableCircuitsByResId'); $app->get('/res/{resId}/acknowledgementReceipt/{id}', \AcknowledgementReceipt\controllers\AcknowledgementReceiptController::class . ':getAcknowledgementReceipt'); $app->put('/res/resource/status', \Resource\controllers\ResController::class . ':updateStatus'); $app->post('/res/list', \Resource\controllers\ResController::class . ':getList'); diff --git a/src/app/contact/controllers/ContactController.php b/src/app/contact/controllers/ContactController.php index 308bef72ac0..170bfb81fa5 100755 --- a/src/app/contact/controllers/ContactController.php +++ b/src/app/contact/controllers/ContactController.php @@ -34,24 +34,6 @@ use User\models\UserModel; class ContactController { - const MAPPING_FIELDS2 = [ - 'civility' => 'civility', - 'firstname' => 'firstname', - 'lastname' => 'lastname', - 'company' => 'company', - 'department' => 'department', - 'function' => 'function', - 'address_number' => 'addressNumber', - 'address_street' => 'addressStreet', - 'address_additional1' => 'addressAdditional1', - 'address_additional2' => 'addressAdditional2', - 'address_postcode' => 'addressPostcode', - 'address_town' => 'addressTown', - 'address_country' => 'addressCountry', - 'email' => 'email', - 'phone' => 'phone', - 'notes' => 'notes' - ]; const MAPPING_FIELDS = [ 'civility' => 'civility', 'firstname' => 'firstname', diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php index 1a32cd81986..f99b2b7864d 100755 --- a/src/app/entity/controllers/ListTemplateController.php +++ b/src/app/entity/controllers/ListTemplateController.php @@ -18,6 +18,7 @@ use Entity\models\EntityModel; use Entity\models\ListTemplateModel; use Group\controllers\PrivilegeController; use History\controllers\HistoryController; +use Resource\models\ResModel; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; @@ -504,6 +505,41 @@ class ListTemplateController return $response->withJson(['roles' => array_values($roles)]); } + public function getAvailableCircuitsByResId(Request $request, Response $response, array $args) + { + $queryParams = $request->getQueryParams(); + + if (!Validator::stringType()->notEmpty()->validate($queryParams['circuit'])) { + return $response->withStatus(400)->withJson(['errors' => 'Query params circuit is empty']); + } + + $circuit = $queryParams['circuit'] == 'opinion' ? 'AVIS_CIRCUIT' : 'VISA_CIRCUIT'; + $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['destination']]); + + $where = ['object_type = ?']; + $data = [$circuit]; + if (!empty($resource['destination'])) { + $where[] = '(object_id = ? OR object_id like ?)'; + $data[] = $resource['destination']; + $data[] = "{$circuit}_%"; + $orderBy = ["object_id='{$resource['destination']}' DESC", 'title']; + } else { + $where[] = 'object_id like ?'; + $data[] = "{$circuit}_%"; + $orderBy = ['title']; + } + + $circuits = []; + $listTemplates = ListTemplateModel::get(['select' => ['*'], 'where' => $where, 'data' => $data, 'orderBy' => $orderBy]); + foreach ($listTemplates as $value) { + $circuits[$value['object_id']] = ['id' => $value['id'], 'title' => $value['title']]; + } + + $circuits = array_values($circuits); + + return $response->withJson(['circuits' => $circuits]); + } + private static function checkItems(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['items']); diff --git a/src/app/entity/models/ListTemplateModelAbstract.php b/src/app/entity/models/ListTemplateModelAbstract.php index 8e7a5dba1ca..17ea6fd0aa2 100755 --- a/src/app/entity/models/ListTemplateModelAbstract.php +++ b/src/app/entity/models/ListTemplateModelAbstract.php @@ -19,15 +19,16 @@ use SrcCore\models\DatabaseModel; abstract class ListTemplateModelAbstract { - public static function get(array $aArgs = []) + public static function get(array $args = []) { - ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']); + ValidatorModel::arrayType($args, ['select', 'where', 'data']); $aListTemplates = DatabaseModel::select([ - 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'select' => empty($args['select']) ? ['*'] : $args['select'], 'table' => ['listmodels'], - 'where' => $aArgs['where'], - 'data' => $aArgs['data'] + 'where' => $args['where'], + 'data' => $args['data'], + 'order_by' => empty($args['orderBy']) ? [] : $args['orderBy'] ]); return $aListTemplates; diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php index 77996c96c3d..6ff31de499d 100755 --- a/src/core/controllers/AutoCompleteController.php +++ b/src/core/controllers/AutoCompleteController.php @@ -392,12 +392,17 @@ class AutoCompleteController return $response->withJson($data); } - public static function getUsersForVisa(Request $request, Response $response) + public static function getUsersForCircuit(Request $request, Response $response) { - $data = $request->getQueryParams(); - $check = Validator::stringType()->notEmpty()->validate($data['search']); - if (!$check) { - return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); + $queryParams = $request->getQueryParams(); + + if (!Validator::stringType()->notEmpty()->validate($queryParams['search'])) { + return $response->withStatus(400)->withJson(['errors' => 'Query params search is empty']); + } + + $services = ['visa_documents', 'sign_document']; + if (!empty($queryParams['circuit']) && $queryParams['circuit'] == 'opinion') { + $services = ['avis_documents']; } $excludedUsers = ['superadmin']; @@ -406,7 +411,7 @@ class AutoCompleteController $fields = AutoCompleteController::getUnsensitiveFieldsForRequest(['fields' => $fields]); $requestData = AutoCompleteController::getDataForRequest([ - 'search' => $data['search'], + 'search' => $queryParams['search'], 'fields' => $fields, 'where' => [ 'usergroups.group_id = usergroups_services.group_id', @@ -416,7 +421,7 @@ class AutoCompleteController 'users.user_id not in (?)', 'users.status not in (?)' ], - 'data' => [['visa_documents', 'sign_document'], $excludedUsers, ['DEL', 'SPD']], + 'data' => [$services, $excludedUsers, ['DEL', 'SPD']], 'fieldsNumber' => 2, ]); diff --git a/src/frontend/app/administration/entity/entities-administration.component.html b/src/frontend/app/administration/entity/entities-administration.component.html index cda8cf59d25..b71154838d3 100755 --- a/src/frontend/app/administration/entity/entities-administration.component.html +++ b/src/frontend/app/administration/entity/entities-administration.component.html @@ -247,7 +247,7 @@ <mat-tab label="{{lang.visaWorkflow}}" *ngIf="!creationMode"> <div class="row" style="margin:0px;" id="visaCircuitContent"> <div class="col-md-12"> - <plugin-autocomplete [labelPlaceholder]="lang.addVisaSignUser" [labelList]="lang.availableUsers" [routeDatas]="['/rest/autocomplete/users/visa']" [targetSearchKey]="'idToDisplay'" [subInfoKey]="'descriptionToDisplay'" (triggerEvent)="addElemListModelVisa($event)"></plugin-autocomplete> + <plugin-autocomplete [labelPlaceholder]="lang.addVisaSignUser" [labelList]="lang.availableUsers" [routeDatas]="['/rest/autocomplete/users/circuit']" [targetSearchKey]="'idToDisplay'" [subInfoKey]="'descriptionToDisplay'" (triggerEvent)="addElemListModelVisa($event)"></plugin-autocomplete> <mat-list> <span dnd-sortable-container [dropZones]="['boxers-zone']" [sortableData]="currentEntity.visaTemplate"> <mat-list-item disableRipple="true" *ngFor="let template of currentEntity.visaTemplate; let i = index" title="{{lang.move}}" -- GitLab