diff --git a/src/app/indexingModel/controllers/IndexingModelController.php b/src/app/indexingModel/controllers/IndexingModelController.php index 22f5905299ee3a259b0825880a2c31904596b674..b02573a3473f628fb7502d67690bf77dd2ec0317 100644 --- a/src/app/indexingModel/controllers/IndexingModelController.php +++ b/src/app/indexingModel/controllers/IndexingModelController.php @@ -42,11 +42,24 @@ class IndexingModelController if (!$showDisabled) { $where[] = 'enabled = TRUE'; - } else if (!ServiceModel::hasService(['id' => 'admin_indexing_models', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { + } elseif (!ServiceModel::hasService(['id' => 'admin_indexing_models', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { $where[] = 'enabled = TRUE'; } $models = IndexingModelModel::get(['where' => $where, 'data' => [$GLOBALS['id'], 'false']]); + + foreach ($models as $key => $value) { + $models[$key]['used'] = false; + $resources = ResModel::get([ + 'select' => [1], + 'where' => ['model_id = ?'], + 'data' => [$value['model_id']] + ]); + if (!empty($resources)) { + $models[$key]['used'] = true; + } + } + return $response->withJson(['indexingModels' => $models]); } @@ -142,7 +155,6 @@ class IndexingModelController } } $body['fields'] = $arrayTmp; - } if (ServiceModel::hasService(['id' => 'admin_indexing_models', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { @@ -253,7 +265,6 @@ class IndexingModelController if (!empty($childrenModels)) { // Update children models of master foreach ($childrenModels as $child) { - $childFields = IndexingModelFieldModel::get(['select' => ['identifier', 'mandatory', 'default_value', 'unit'], 'where' => ['model_id = ?'], 'data' => [$child['id']]]); foreach ($childFields as $key => $value) { $childFields[$key]['default_value'] = json_decode($value['default_value'], true); diff --git a/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts b/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts index dea00aa29c18600615659d5a20a57d862e32474a..067f7ffc83928ba939bbc150bcb5f54322ec0243 100644 --- a/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts +++ b/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts @@ -12,6 +12,7 @@ import { tap, finalize, catchError, filter, exhaustMap, map } from 'rxjs/operato import { of } from 'rxjs'; import { ConfirmComponent } from '../../../plugins/modal/confirm.component'; import { MatDialogRef, MatDialog } from '@angular/material/dialog'; +import { AlertComponent } from '../../../plugins/modal/alert.component'; declare function $j(selector: any): any; @@ -85,28 +86,31 @@ export class IndexingModelsAdministrationComponent implements OnInit { delete(indexingModel: any) { - this.dialogRef = this.dialog.open(ConfirmComponent, { autoFocus: false, disableClose: true, data: { title: this.lang.delete, msg: this.lang.confirmAction } }); - - this.dialogRef.afterClosed().pipe( - filter((data: string) => data === 'ok'), - exhaustMap(() => this.http.delete('../../rest/indexingModels/' + indexingModel.id)), - tap(() => { - for (let i in this.indexingModels) { - if (this.indexingModels[i].id == indexingModel.id) { - this.indexingModels.splice(Number(i), 1); + if (!indexingModel.used) { + this.dialogRef = this.dialog.open(ConfirmComponent, { autoFocus: false, disableClose: true, data: { title: this.lang.delete, msg: this.lang.confirmAction } }); + + this.dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + exhaustMap(() => this.http.delete('../../rest/indexingModels/' + indexingModel.id)), + tap(() => { + for (let i in this.indexingModels) { + if (this.indexingModels[i].id == indexingModel.id) { + this.indexingModels.splice(Number(i), 1); + } } - } - this.dataSource = new MatTableDataSource(this.indexingModels); - this.dataSource.paginator = this.paginator; - this.dataSource.sort = this.sort; - this.notify.success(this.lang.indexingModelDeleted); - }), - catchError((err: any) => { - this.notify.handleErrors(err); - return of(false); - }) - ).subscribe(); - + this.dataSource = new MatTableDataSource(this.indexingModels); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + this.notify.success(this.lang.indexingModelDeleted); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } else { + this.dialog.open(AlertComponent, { autoFocus: false, disableClose: true, data: { title: indexingModel.label, msg: this.lang.canNotDeleteIndexingModel } }); + } } disableIndexingModel(indexingModel: any) { diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 0728fea2292f2ac746113fe6e52f88f47afd83ca..4d2c0f739b7645089f8305454a7b935e0b998988 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1141,4 +1141,5 @@ export const LANG_EN = { "notInAuthorizedEntities" : "is not in one of the <b>authorized entities</b>.", "indexingModelDisabled" : "Indexing model disabled", "indexingModelEnabled" : "Indexing model enabled", + "canNotDeleteIndexingModel" : "This indexing model can not be deleted because at least one mail used it", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 70ec5e445599fc65118ca26de00848fc73e3f8b2..776ef1f59e2f1312542ad98913416b1b20fa8d19 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1178,4 +1178,5 @@ export const LANG_FR = { "notInAuthorizedEntities" : "ne fait pas parti des <b>entités traitantes autorisées</b>.", "indexingModelDisabled" : "Modèle d'enregistrement désactivé", "indexingModelEnabled" : "Modèle d'enregistrement activé", + "canNotDeleteIndexingModel" : "Ce modèle ne peut pas être supprimé car il a été utilisé pour enregistrer au moins un courrier", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index 1619d14ec510b3932e0f5db3a9b230a9a5ed0011..d27f2b96ac79fbdff2b12acf160ff83a36c432ae 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1167,4 +1167,5 @@ export const LANG_NL = { "notInAuthorizedEntities" : "is not in one of the <b>authorized entities</b>.", //_TO_TRANSLATE "indexingModelDisabled" : "Indexing model disabled", //_TO_TRANSLATE "indexingModelEnabled" : "Indexing model enabled", //_TO_TRANSLATE + "canNotDeleteIndexingModel" : "This indexing model can not be deleted because at least one mail used it", //_TO_TRANSLATE };