From 290faaef1d774c235d6df266842e8c73253f77ac Mon Sep 17 00:00:00 2001
From: Homada Boumedane <homada.boumedane@unige.ch>
Date: Thu, 16 Apr 2020 10:45:25 +0200
Subject: [PATCH] fix(portal): deposit

Reserving a DOI on a deposit containing archive collections will make
the submit button disappear

Closes DLCM-1188
---
 .../deposit-detail-edit.routable.ts           | 21 +++++++++++++------
 src/app/shared/services/security.service.ts   | 11 +++-------
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts b/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts
index ff1fdab46..f0a47da16 100644
--- a/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts
+++ b/src/app/features/deposit/components/routables/deposit-detail-edit/deposit-detail-edit.routable.ts
@@ -99,7 +99,6 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable<
   @Select(AppState.currentOrgUnitPersonRoleResId) currentPersonRoleObs: Observable<string[]>;
   @Select(AppState.currentOrgUnitPerson) currentPersonObs: Observable<PersonRole>;
   @Select(AppState.currentUserApplicationRolesResId) currentUserApplicationRoleObs: Observable<string[]>;
-  formPresentationalObs: Observable<DepositFormPresentational | undefined> = MemoizedUtil.select(this._store, DepositState, state => state.formPresentational);
 
   @ViewChild("matTabGroup")
   readonly matTabGroup: MatTabGroup;
@@ -204,7 +203,7 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable<
     {
       color: "primary",
       icon: "edit",
-      displayCondition: current => !this.isEdit && /*(this.canDoAlterationActions || this.canDoValidatorActions) && */ !isNullOrUndefined(current) && (current.status === Deposit.StatusEnum.INVALIDATION || current.status === Deposit.StatusEnum.REJECTED || current.status === Deposit.StatusEnum.INERROR),
+      displayCondition: current => !this.isEdit && !isNullOrUndefined(current) && (current.status === Deposit.StatusEnum.INVALIDATION || current.status === Deposit.StatusEnum.REJECTED || current.status === Deposit.StatusEnum.INERROR),
       callback: () => this.backToRevision(),
       disableCondition: current => isNullOrUndefined(current),
       labelToTranslate: TRANSLATE("deposit.backToEdit"),
@@ -213,7 +212,7 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable<
     {
       color: "primary",
       icon: "library_books",
-      displayCondition: current => !this.isEdit && this.canDoAlterationActions && this.canReserveDoiAction,
+      displayCondition: current => this.displayReserveDOIButton(),
       callback: () => this.reserveDOI(),
       disableCondition: current => isNullOrUndefined(current),
       labelToTranslate: TRANSLATE("deposit.reserveDOI"),
@@ -223,7 +222,7 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable<
     {
       color: "primary",
       icon: "done_all",
-      displayCondition: current => !this.isEdit && this.canDoAlterationActions && isFalse(MemoizedUtil.isLoadingSnapshot(this._store, DepositState)) && this.canSubmitAction,
+      displayCondition: current => this.displaySubmitButton(),
       callback: () => this.submit(),
       disableCondition: current => isNullOrUndefined(current),
       labelToTranslate: TRANSLATE("deposit.submit"),
@@ -347,10 +346,12 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable<
               && MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesExcluded === 0)
               && MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesNotReady > 0),
           })).add(() => {
-            this.canSubmitAction = MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesInError === 0)
+            this.canSubmitAction =
+              (MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesInError === 0)
               && MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFiles > 0)
               && MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesExcluded === 0)
-              && MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesIgnored === 0);
+              && MemoizedUtil.selectSnapshot(this._store, DepositDataFileState, state => state.numberFilesIgnored === 0))
+              || MemoizedUtil.selectSnapshot(this._store, DepositCollectionState, state => state.numberCollections > 0);
             this.afterChangeInFiles = false;
           });
         }
@@ -408,6 +409,14 @@ export class DepositDetailEditRoutable extends SharedAbstractDetailEditRoutable<
     return !isNullOrUndefined(personRole) && !isNullOrUndefined(deposit) && personRole.orgUnitId === deposit.organizationalUnitId;
   }
 
+  private displaySubmitButton(): boolean {
+    return !this.isEdit && this.canDoAlterationActions && isFalse(MemoizedUtil.isLoadingSnapshot(this._store, DepositState)) && this.canSubmitAction;
+  }
+
+  private displayReserveDOIButton(): boolean {
+    return !this.isEdit && this.canDoAlterationActions && this.canReserveDoiAction;
+  }
+
   @Override()
   edit(): void {
     this._store.dispatch(new Navigate([RoutesEnum.deposit, this._orgUnitResId, DepositRoutesEnum.detail, this._resId, DepositRoutesEnum.metadata, DepositRoutesEnum.edit]));
diff --git a/src/app/shared/services/security.service.ts b/src/app/shared/services/security.service.ts
index 7095293ea..8421ee8ad 100644
--- a/src/app/shared/services/security.service.ts
+++ b/src/app/shared/services/security.service.ts
@@ -167,17 +167,12 @@ export class SecurityService {
     if (isNullOrUndefined(applicationRoles)) {
       return false;
     }
-    if (applicationRoles.includes(UserApplicationRoleEnum.admin) || applicationRoles.includes(UserApplicationRoleEnum.root)) {
-      return true;
-    }
-    return false;
+    return applicationRoles.includes(UserApplicationRoleEnum.admin) || applicationRoles.includes(UserApplicationRoleEnum.root);
+
   }
 
   public isMemberOfOrgUnit(orgUnitId: string): boolean {
     const listAuthorizedOrgUnitId = this._store.selectSnapshot(AppState.listAuthorizedOrganizationalUnitId);
-    if (listAuthorizedOrgUnitId.includes(orgUnitId)) {
-      return true;
-    }
-    return false;
+    return listAuthorizedOrgUnitId.includes(orgUnitId);
   }
 }
-- 
GitLab