refactor plan + public plan models, re-commit

This commit is contained in:
mchouliara 2024-08-13 14:10:27 +03:00
parent 71243d7fde
commit af930d9c73
6 changed files with 78 additions and 98 deletions

View File

@ -1,4 +1,4 @@
import { PublicReferenceType } from "../plan/plan";
import { ReferenceType } from "../reference-type/reference-type";
export interface DashboardStatistics {
planCount: number;
@ -8,5 +8,5 @@ export interface DashboardStatistics {
export interface DashboardReferenceTypeStatistics {
count: number;
referenceType: PublicReferenceType
referenceType: ReferenceType
}

View File

@ -1,12 +1,12 @@
import { BaseEntity } from "@common/base/base-entity.model";
import { Reference } from "../reference/reference";
import { Plan } from "./plan";
import { BaseReference, Reference } from "../reference/reference";
import { Plan, PublicPlan } from "./plan";
import { Guid } from "@common/types/guid";
export interface PlanReference extends BaseEntity {
plan?: Plan;
reference?: Reference;
data: PlanReferenceData;
plan: Plan;
reference: Reference;
data?: PlanReferenceData;
}
export interface PlanReferenceData {

View File

@ -15,29 +15,41 @@ import { IsActive } from '@app/core/common/enum/is-active.enum';
import { AppPermission } from '@app/core/common/enum/permission.enum';
import { EntityType } from '@app/core/common/enum/entity-type';
export interface Plan extends BasePlan {
label?: string;
export interface BasePlan extends BaseEntity {
label?: string;
version?: number;
versionStatus?: PlanVersionStatus;
properties?: PlanProperties;
groupId?: String;
description?: String;
finalizedAt?: Date;
publishedAt?: Date;
creator?: User;
finalizedAt?: Date;
accessType?: PlanAccessType;
planReferences?: PlanReference[];
entityDois?: EntityDoi[];
tenantId?: Guid;
status?: PlanStatus;
descriptions?: BaseDescription[];
}
export interface Plan extends BasePlan {
versionStatus?: PlanVersionStatus;
properties?: PlanProperties;
creator?: User;
blueprint?: PlanBlueprint;
language?: String;
publicAfter?: Date;
planReferences?: PlanReference[];
planUsers?: PlanUser[];
descriptions?: Description[];
planDescriptionTemplates?: PlanDescriptionTemplate[];
entityDois?: EntityDoi[];
otherPlanVersions?: Plan[];
authorizationFlags?: AppPermission[];
}
export interface PublicPlan extends BasePlan {
planUsers: PublicPlanUser[];
descriptions: PublicDescription[];
otherPlanVersions?: PublicPlan[];
}
export interface PlanProperties {
planBlueprintValues: PlanBlueprintValue[];
contacts: PlanContact[];
@ -56,14 +68,21 @@ export interface PlanContact {
email: string;
}
export interface BasePlanUser extends BaseEntity {
user: User;
role: PlanUserRole;
}
export interface PlanUser extends BaseEntity {
export interface PlanUser extends BasePlanUser {
plan: Plan;
user: User;
role: PlanUserRole;
sectionId: Guid;
}
export interface PublicPlanUser extends BasePlanUser{
plan: PublicPlan;
}
export interface PlanDescriptionTemplate extends BaseEntity {
plan?: Plan;
currentDescriptionTemplate?: DescriptionTemplate;
@ -161,66 +180,4 @@ export interface PlanUserInvitePersist {
//
// Public
//
export interface PublicPlan extends BasePlan {
label?: string;
version?: number;
description?: string;
finalizedAt?: Date;
publishedAt?: Date;
groupId?: String;
accessType: PlanAccessType;
planReferences: PublicPlanReference[];
planUsers: PublicPlanUser[];
descriptions: PublicDescription[];
entityDois: PublicEntityDoi[];
otherPlanVersions?: PublicPlan[];
}
export interface PublicPlanReference {
id: Guid;
plan: PublicPlan;
reference: PublicReference;
isActive?: IsActive;
}
export interface PublicReference {
id: Guid;
label: string;
type: PublicReferenceType;
description?: string;
reference?: string;
}
export interface PublicReferenceType {
id: Guid;
name: string;
code: string;
}
export interface PublicPlanUser {
id: Guid;
plan: PublicPlan;
user: PublicUser;
role: PlanUserRole;
}
export interface PublicUser {
id: Guid;
name: string;
}
export interface PublicEntityDoi {
id: Guid;
entityType: EntityType;
entityId: Guid;
repositoryId: string;
doi: string;
}
export interface BasePlan extends BaseEntity {
tenantId?: Guid;
status?: PlanStatus;
descriptions?: BaseDescription[];
}
//

View File

@ -15,6 +15,14 @@ export interface Reference extends BaseEntity {
sourceType: ReferenceSourceType;
}
export interface BaseReference extends BaseEntity{
label: string;
type: ReferenceType;
description?: string;
reference?: string;
}
export interface Definition {
fields: Field[];
}

View File

@ -58,7 +58,7 @@ import { RouterUtilsService } from '@app/core/services/router/router-utils.servi
})
export class PlanOverviewComponent extends BaseComponent implements OnInit {
plan: any | Plan | PublicPlan;
plan: Plan | PublicPlan;
selectedBlueprint: PlanBlueprint;
researchers: PlanReference[] = [];
isNew = true;
@ -214,14 +214,14 @@ export class PlanOverviewComponent extends BaseComponent implements OnInit {
}
get isActive(): boolean {
return this.plan && this.plan.isActive === IsActive.Active;
return this.plan?.isActive != IsActive.Inactive;
}
get selectedPlanVersion(): number {
return this.plan?.version;
}
get otherPlanVersions(): Plan | PublicPlan{
get otherPlanVersions(): Plan[] | PublicPlan[]{
return this.plan?.otherPlanVersions;
}
@ -257,53 +257,68 @@ export class PlanOverviewComponent extends BaseComponent implements OnInit {
}
canEditPlan(): boolean {
return (this.isDraftPlan()) && (this.plan.authorizationFlags?.some(x => x === AppPermission.EditPlan) || this.authentication.hasPermission(AppPermission.EditPlan)) && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (this.isDraftPlan()) && (authorizationFlags?.some(x => x === AppPermission.EditPlan) || this.authentication.hasPermission(AppPermission.EditPlan)) && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
}
canCreateNewVersion(): boolean {
return (this.plan.authorizationFlags?.some(x => x === AppPermission.CreateNewVersionPlan) || this.authentication.hasPermission(AppPermission.CreateNewVersionPlan)) && this.plan.versionStatus === PlanVersionStatus.Current && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
const versionStatus = !this.isPublicView ? (this.plan as Plan)?.versionStatus : null;
return (authorizationFlags?.some(x => x === AppPermission.CreateNewVersionPlan) || this.authentication.hasPermission(AppPermission.CreateNewVersionPlan)) && versionStatus === PlanVersionStatus.Current && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
}
canDeletePlan(): boolean {
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (
this.isActive &&
(this.plan.authorizationFlags?.some(x => x === AppPermission.DeletePlan) || this.authentication.hasPermission(AppPermission.DeletePlan))) &&
this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
(authorizationFlags?.some(x => x === AppPermission.DeletePlan) || this.authentication.hasPermission(AppPermission.DeletePlan)) &&
this.isPublicView == false && this.plan.belongsToCurrentTenant != false
)
}
canClonePlan(): boolean {
return (this.plan.authorizationFlags?.some(x => x === AppPermission.ClonePlan) || this.authentication.hasPermission(AppPermission.ClonePlan) || (this.authentication.hasPermission(AppPermission.PublicClonePlan) && this.isPublicView));
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (
authorizationFlags?.some(x => x === AppPermission.ClonePlan) ||
this.authentication.hasPermission(AppPermission.ClonePlan) ||
(this.authentication.hasPermission(AppPermission.PublicClonePlan) && this.isPublicView)
);
}
canFinalizePlan(): boolean {
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (
this.isActive &&
(this.plan.authorizationFlags?.some(x => x === AppPermission.FinalizePlan) || this.authentication.hasPermission(AppPermission.FinalizePlan))) &&
(authorizationFlags?.some(x => x === AppPermission.FinalizePlan) || this.authentication.hasPermission(AppPermission.FinalizePlan))) &&
this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
}
canExportPlan(): boolean {
return (this.plan.authorizationFlags?.some(x => x === AppPermission.ExportPlan) || this.authentication.hasPermission(AppPermission.ExportPlan));
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (authorizationFlags?.some(x => x === AppPermission.ExportPlan) || this.authentication.hasPermission(AppPermission.ExportPlan));
}
canInvitePlanUsers(): boolean {
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (
this.isActive &&
(this.plan.authorizationFlags?.some(x => x === AppPermission.InvitePlanUsers) || this.authentication.hasPermission(AppPermission.InvitePlanUsers))) &&
(authorizationFlags?.some(x => x === AppPermission.InvitePlanUsers) || this.authentication.hasPermission(AppPermission.InvitePlanUsers))) &&
this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
}
canAssignPlanUsers(): boolean {
return (this.plan.authorizationFlags?.some(x => x === AppPermission.AssignPlanUsers) || this.authentication.hasPermission(AppPermission.AssignPlanUsers)) && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (authorizationFlags?.some(x => x === AppPermission.AssignPlanUsers) || this.authentication.hasPermission(AppPermission.AssignPlanUsers)) && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
}
canDepositPlan(): boolean {
return (this.plan.authorizationFlags?.some(x => x === AppPermission.DepositPlan) || this.authentication.hasPermission(AppPermission.DepositPlan)) && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
const authorizationFlags = !this.isPublicView ? (this.plan as Plan).authorizationFlags : [];
return (authorizationFlags?.some(x => x === AppPermission.DepositPlan) || this.authentication.hasPermission(AppPermission.DepositPlan)) && this.isPublicView == false && this.plan.belongsToCurrentTenant != false;
}
editClicked() {
this.router.navigate([this.routerUtils.generateUrl(['/plans/edit', this.plan.id], '/')]);
this.router.navigate([this.routerUtils.generateUrl(['/plans/edit', this.plan.id.toString()], '/')]);
}
cloneClicked() {
@ -588,8 +603,8 @@ export class PlanOverviewComponent extends BaseComponent implements OnInit {
getSectionNameById(sectionId: Guid): string {
if (sectionId == null) return '';
let sections: PlanBlueprintDefinitionSection[] = this.plan?.blueprint?.definition?.sections?.filter((section: PlanBlueprintDefinitionSection) => sectionId === section.id);
const blueprint = this.isPublicView ? null : (this.plan as Plan)?.blueprint;
let sections: PlanBlueprintDefinitionSection[] = blueprint?.definition?.sections?.filter((section: PlanBlueprintDefinitionSection) => sectionId === section.id);
return sections == null ? '' : sections[0].label;
}

View File

@ -332,7 +332,7 @@ export class PlanBlueprintValueEditorModel implements PlanBlueprintValuePersist
this.fieldValue = item.fieldValue;
this.dateValue = item.dateValue;
this.numberValue = item.numberValue;
const references = planReferences?.filter(x => x.data.blueprintFieldId == this.fieldId && x.isActive == IsActive.Active).map(x => {
const references = planReferences?.filter(x => x.data?.blueprintFieldId == this.fieldId && x.isActive == IsActive.Active).map(x => {
return {
data: x.data,
reference: {