From 1f609bc1e0e60a8cb5937c0624df8c28ffd4e08a Mon Sep 17 00:00:00 2001
From: Alicia de Dios Fuente <Alicia.DeDiosFuente@unige.ch>
Date: Thu, 26 Mar 2020 22:20:00 +0100
Subject: [PATCH 1/3] chore: add default licence for org unit

---
 .../admin-orgunit-form.presentational.html    | 18 +++++++++++++++++
 .../admin-orgunit-form.presentational.ts      | 20 +++++++++++++++++++
 .../stores/admin-organizational-unit.state.ts |  1 +
 src/assets/i18n/de.json                       |  5 +++++
 src/assets/i18n/en.json                       |  5 +++++
 src/assets/i18n/fr.json                       |  5 +++++
 6 files changed, 54 insertions(+)

diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html
index 620cca1c1..2a7456d09 100644
--- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html
+++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html
@@ -175,6 +175,24 @@
       >
       </dlcm-shared-searchable-multi-select>
 
+      <dlcm-shared-searchable-single-select *ngIf="getFormControl(formDefinition.defaultLicense) as fd"
+                                            solidifyValidation
+                                            aria-label="license"
+                                            [resourceNameSpace]="sharedLicenseActionNameSpace"
+                                            [state]="sharedLicenseState"
+                                            [formControl]="fd"
+                                            [required]="formValidationHelper.hasRequiredField(fd)"
+                                            [labelKey]="'title'"
+                                            [valueKey]="'resId'"
+                                            [urlKey]="'url'"
+                                            [labelCallback]="licenceCallback"
+                                            [placeholder]="'admin.organizationalUnit.form.license.title' | translate"
+                                            [isWithLink]="true"
+                                            [tooltipNavigateToTranslate]="'admin.organizationalUnit.form.license.navigateLinkPlaceholder' | translate"
+                                            (navigate)="navigateToLicense($event)"
+      >
+      </dlcm-shared-searchable-single-select>
+
       <dlcm-shared-searchable-multi-select *ngIf="getFormControl(formDefinition.researchDomains) as fd"
                                            solidifyValidation
                                            aria-label="research domain"
diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
index b0546c18d..dc27ff9e2 100644
--- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
+++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
@@ -20,6 +20,7 @@ import {
   ResearchDomain,
   Role,
   SubmissionPolicy,
+  License
 } from "@models";
 import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
 import {PersonOrgUnitRoleMode} from "@shared/components/presentationals/shared-person-orgunit-role/shared-person-orgunit-role.presentational";
@@ -35,6 +36,7 @@ import {SharedFundingAgencyState} from "@shared/stores/funding-agency/shared-fun
 import {sharedInstitutionActionNameSpace} from "@shared/stores/institution/shared-institution.action";
 import {SharedInstitutionState} from "@shared/stores/institution/shared-institution.state";
 import {SharedResearchDomainState} from "@shared/stores/research-domain/shared-research-domain.state";
+import {sharedLicenseActionNameSpace} from "@shared/stores/license/shared-license.action";
 import {RegexpUtil} from "@shared/utils/regexp.util";
 import _ from "lodash";
 import {
@@ -44,6 +46,7 @@ import {
   SolidifyValidator,
   urlSeparator,
 } from "solidify-frontend";
+import {SharedLicenseState} from "@shared/stores/license/shared-license.state";
 
 @Component({
   selector: "dlcm-admin-orgunit-form",
@@ -93,8 +96,13 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
   sharedResearchDomainActionNameSpace: ResourceNameSpace = sharedResearchDomainActionNameSpace;
   sharedResearchDomainState: typeof SharedResearchDomainState = SharedResearchDomainState;
 
+  sharedLicenseActionNameSpace: ResourceNameSpace = sharedLicenseActionNameSpace;
+  sharedLicenseState: typeof SharedLicenseState = SharedLicenseState;
+
   readonly TIME_BEFORE_DISPLAY_TOOLTIP: number = environment.timeBeforeDisplayTooltipOnInput;
 
+  licenceCallback: (value: License) => string = (value: License) => value.openLicenseId + " (" + value.title + ")";
+
   get personOrgUnitRoleMode(): typeof PersonOrgUnitRoleMode {
     return PersonOrgUnitRoleMode;
   }
@@ -123,6 +131,7 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
       [this.formDefinition.institutions]: ["", [SolidifyValidator]],
       [this.formDefinition.researchDomains]: ["", [SolidifyValidator]],
       [this.formDefinition.keywords]: [[], [SolidifyValidator]],
+      [this.formDefinition.defaultLicense]: ["", [SolidifyValidator]],
     });
   }
 
@@ -144,6 +153,7 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
       [this.formDefinition.institutions]: [_.map(this.selectedInstitutions, LocalModelAttributeEnum.resId), [SolidifyValidator]],
       [this.formDefinition.researchDomains]: [_.map(organizationalUnit.researchDomains, LocalModelAttributeEnum.resId), [SolidifyValidator]],
       [this.formDefinition.keywords]: [[...organizationalUnit.keywords], [SolidifyValidator]],
+      [this.formDefinition.defaultLicense]: [(organizationalUnit.defaultLicense as License).resId, [SolidifyValidator]],
     });
   }
 
@@ -183,6 +193,11 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
         organizationalUnit.researchDomains.push({resId: resId});
       });
     }
+    if (this.form.get(this.formDefinition.defaultLicense).value === "") {
+      organizationalUnit.defaultLicense = null;
+    } else if (this.form.get(this.formDefinition.defaultLicense).value !== "") {
+      organizationalUnit.defaultLicense = {resId: organizationalUnit[this.formDefinition.defaultLicense]};
+    }
     return organizationalUnit;
   }
 
@@ -217,6 +232,10 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
   navigateToResearchDomain(researchDomain: ResearchDomain): void {
     this.navigate([RoutesEnum.adminResearchDomain]);
   }
+
+  navigateToLicense(licenseId: string): void {
+    this.navigate([RoutesEnum.adminLicenseDetail, licenseId]);
+  }
 }
 
 class FormComponentFormDefinition extends BaseFormDefinition {
@@ -236,4 +255,5 @@ class FormComponentFormDefinition extends BaseFormDefinition {
   @PropertyName() institutions: string;
   @PropertyName() researchDomains: string;
   @PropertyName() keywords: string;
+  @PropertyName() defaultLicense: string;
 }
diff --git a/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts b/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts
index f67e3b4c2..575812b28 100644
--- a/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts
+++ b/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts
@@ -72,6 +72,7 @@ import {
   TRANSLATE,
   urlSeparator,
 } from "solidify-frontend";
+import {SharedLicenseAction} from "@shared/stores/license/shared-license.action";
 
 export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<OrganizationalUnit> {
   admin_organizationalUnit_submissionPolicy: AdminOrganizationalUnitSubmissionPolicyStateModel;
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index 6754ec220..8ef724afb 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -489,6 +489,11 @@
           "placeholder": "Click here to add an institution",
           "title": "Institutions"
         },
+        "license": {
+          "navigateLinkPlaceholder": "See License details",
+          "placeholder": "Click here to add a license",
+          "title": "License"
+        },
         "link": {
           "seeArchives": "See archives",
           "seeDeposits": "See deposits"
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 6754ec220..8ef724afb 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -489,6 +489,11 @@
           "placeholder": "Click here to add an institution",
           "title": "Institutions"
         },
+        "license": {
+          "navigateLinkPlaceholder": "See License details",
+          "placeholder": "Click here to add a license",
+          "title": "License"
+        },
         "link": {
           "seeArchives": "See archives",
           "seeDeposits": "See deposits"
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index 1aafc27fa..af5c6615a 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -489,6 +489,11 @@
           "placeholder": "Cliquer ici pour ajouter des institutions",
           "title": "Institutions"
         },
+        "license": {
+          "navigateLinkPlaceholder": "Voir le détail de la licence",
+          "placeholder": "Cliquer ici pour ajouter une licence",
+          "title": "Licence"
+        },
         "link": {
           "seeArchives": "Voir les archives",
           "seeDeposits": "Voir les dépôts"
-- 
GitLab


From 32423ed7c8de106c0005e0c006335876a0a610f9 Mon Sep 17 00:00:00 2001
From: Alicia de Dios Fuente <Alicia.DeDiosFuente@unige.ch>
Date: Fri, 27 Mar 2020 15:23:39 +0100
Subject: [PATCH 2/3] chore: added org unit default licence when creating a new
 deposit

---
 .../presentationals/deposit-form/deposit-form.presentational.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts
index 77f20132f..8f3cf5622 100644
--- a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts
+++ b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts
@@ -176,7 +176,7 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
       [this.formDefinition.collectionEnd]: [""],
       [this.formDefinition.access]: [AccessEnum.PUBLIC],
       [this.formDefinition.hasEmbargo]: [false],
-      [this.formDefinition.licenseId]: ["", [SolidifyValidator]],
+      [this.formDefinition.licenseId]: [(orgUnit.defaultLicense as License).resId, [SolidifyValidator]],
       [this.formDefinition.submissionPolicyId]: ["", [Validators.required, SolidifyValidator]],
       [this.formDefinition.preservationPolicyId]: ["", [Validators.required, SolidifyValidator]],
       [this.formDefinition.authors]: ["", [Validators.required, SolidifyValidator]],
-- 
GitLab


From 398ef325e9280974e07dce9528f2f6007554e4b7 Mon Sep 17 00:00:00 2001
From: Florent POITTEVIN <poittevin.florent@gmail.com>
Date: Tue, 31 Mar 2020 17:01:03 +0200
Subject: [PATCH 3/3] refacto: org unit default license ajustment

---
 .../admin-orgunit-form.presentational.ts             | 12 ++++++------
 .../stores/admin-organizational-unit.state.ts        |  1 -
 .../deposit-form/deposit-form.presentational.ts      |  2 +-
 src/app/models/index.ts                              |  1 +
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
index dc27ff9e2..cc572a997 100644
--- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
+++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts
@@ -15,12 +15,12 @@ import {
   DisseminationPolicy,
   FundingAgency,
   Institution,
+  License,
   OrganizationalUnit,
   PreservationPolicy,
   ResearchDomain,
   Role,
   SubmissionPolicy,
-  License
 } from "@models";
 import {SharedAbstractFormPresentational} from "@shared/components/presentationals/shared-abstract-form/shared-abstract-form.presentational";
 import {PersonOrgUnitRoleMode} from "@shared/components/presentationals/shared-person-orgunit-role/shared-person-orgunit-role.presentational";
@@ -35,8 +35,9 @@ import {sharedFundingAgencyActionNameSpace} from "@shared/stores/funding-agency/
 import {SharedFundingAgencyState} from "@shared/stores/funding-agency/shared-funding-agency.state";
 import {sharedInstitutionActionNameSpace} from "@shared/stores/institution/shared-institution.action";
 import {SharedInstitutionState} from "@shared/stores/institution/shared-institution.state";
-import {SharedResearchDomainState} from "@shared/stores/research-domain/shared-research-domain.state";
 import {sharedLicenseActionNameSpace} from "@shared/stores/license/shared-license.action";
+import {SharedLicenseState} from "@shared/stores/license/shared-license.state";
+import {SharedResearchDomainState} from "@shared/stores/research-domain/shared-research-domain.state";
 import {RegexpUtil} from "@shared/utils/regexp.util";
 import _ from "lodash";
 import {
@@ -46,7 +47,6 @@ import {
   SolidifyValidator,
   urlSeparator,
 } from "solidify-frontend";
-import {SharedLicenseState} from "@shared/stores/license/shared-license.state";
 
 @Component({
   selector: "dlcm-admin-orgunit-form",
@@ -153,7 +153,7 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
       [this.formDefinition.institutions]: [_.map(this.selectedInstitutions, LocalModelAttributeEnum.resId), [SolidifyValidator]],
       [this.formDefinition.researchDomains]: [_.map(organizationalUnit.researchDomains, LocalModelAttributeEnum.resId), [SolidifyValidator]],
       [this.formDefinition.keywords]: [[...organizationalUnit.keywords], [SolidifyValidator]],
-      [this.formDefinition.defaultLicense]: [(organizationalUnit.defaultLicense as License).resId, [SolidifyValidator]],
+      [this.formDefinition.defaultLicense]: [organizationalUnit.defaultLicense.resId, [SolidifyValidator]],
     });
   }
 
@@ -195,8 +195,8 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati
     }
     if (this.form.get(this.formDefinition.defaultLicense).value === "") {
       organizationalUnit.defaultLicense = null;
-    } else if (this.form.get(this.formDefinition.defaultLicense).value !== "") {
-      organizationalUnit.defaultLicense = {resId: organizationalUnit[this.formDefinition.defaultLicense]};
+    } else {
+      organizationalUnit.defaultLicense = {resId: organizationalUnit.defaultLicense};
     }
     return organizationalUnit;
   }
diff --git a/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts b/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts
index 575812b28..f67e3b4c2 100644
--- a/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts
+++ b/src/app/features/admin/orgunit/stores/admin-organizational-unit.state.ts
@@ -72,7 +72,6 @@ import {
   TRANSLATE,
   urlSeparator,
 } from "solidify-frontend";
-import {SharedLicenseAction} from "@shared/stores/license/shared-license.action";
 
 export interface AdminOrganizationalUnitStateModel extends ResourceStateModel<OrganizationalUnit> {
   admin_organizationalUnit_submissionPolicy: AdminOrganizationalUnitSubmissionPolicyStateModel;
diff --git a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts
index 8f3cf5622..f300d9086 100644
--- a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts
+++ b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts
@@ -176,7 +176,7 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
       [this.formDefinition.collectionEnd]: [""],
       [this.formDefinition.access]: [AccessEnum.PUBLIC],
       [this.formDefinition.hasEmbargo]: [false],
-      [this.formDefinition.licenseId]: [(orgUnit.defaultLicense as License).resId, [SolidifyValidator]],
+      [this.formDefinition.licenseId]: [orgUnit.defaultLicense.resId, [SolidifyValidator]],
       [this.formDefinition.submissionPolicyId]: ["", [Validators.required, SolidifyValidator]],
       [this.formDefinition.preservationPolicyId]: ["", [Validators.required, SolidifyValidator]],
       [this.formDefinition.authors]: ["", [Validators.required, SolidifyValidator]],
diff --git a/src/app/models/index.ts b/src/app/models/index.ts
index 0b52eb4ea..0320c3dba 100644
--- a/src/app/models/index.ts
+++ b/src/app/models/index.ts
@@ -193,6 +193,7 @@ export interface OrganizationalUnit extends OrganizationalUnitPartial {
   institutions?: Institution[];
   researchDomains?: ResearchDomain[];
   keywords?: string[];
+  defaultLicense: License;
 }
 
 export interface Page extends PagePartial {
-- 
GitLab