<eg-provider-details #providerDetails (desireSummarize)="onDesireSummarize($event, true)"></eg-provider-details>
</ng-template>
</ngb-tab>
- <ngb-tab title="Addresses" i18n-title id="addresses" [disabled]="!id">
+ <ngb-tab title="Addresses" i18n-title id="addresses" [disabled]="!id || !this.providerRecord.currentProvider.canAdmin">
<ng-template ngbTabContent>
<div class="row mt-3">
<div class="col-lg-12 text-right pb-1">
<eg-provider-addresses></eg-provider-addresses>
</ng-template>
</ngb-tab>
- <ngb-tab title="Contacts" i18n-title id="contacts" [disabled]="!id">
+ <ngb-tab title="Contacts" i18n-title id="contacts" [disabled]="!id || !this.providerRecord.currentProvider.canAdmin">
<ng-template ngbTabContent>
<div class="row mt-3">
<div class="col-lg-12 text-right pb-1">
<eg-provider-contacts (desireSummarize)="onDesireSummarize($event, true)"></eg-provider-contacts>
</ng-template>
</ngb-tab>
- <ngb-tab title="Attribute Definitions" i18n-title id="attributes" [disabled]="!id">
+ <ngb-tab title="Attribute Definitions" i18n-title id="attributes" [disabled]="!id || !this.providerRecord.currentProvider.canAdmin">
<ng-template ngbTabContent>
<div class="row mt-3">
<div class="col-lg-12 text-right pb-1">
<eg-provider-attributes></eg-provider-attributes>
</ng-template>
</ngb-tab>
- <ngb-tab title="Holdings Definitions" i18n-title id="holdings" [disabled]="!id">
+ <ngb-tab title="Holdings Definitions" i18n-title id="holdings" [disabled]="!id || !this.providerRecord.currentProvider.canAdmin">
<ng-template ngbTabContent>
<div class="row mt-3">
<div class="col-lg-12 text-right pb-1">
<eg-provider-holdings></eg-provider-holdings>
</ng-template>
</ngb-tab>
- <ngb-tab title="EDI" i18n-title id="edi_accounts" [disabled]="!id">
+ <ngb-tab title="EDI" i18n-title id="edi_accounts" [disabled]="!id || !this.providerRecord.currentProvider.canAdmin">
<ng-template ngbTabContent>
<div class="row mt-3">
<div class="col-lg-12 text-right pb-1">
<eg-fm-record-editor #editDialog
idlClass="acqpro"
- mode="update"
+ [mode]="permittedMode()"
[hideBanner]="true" displayMode="inline"
[record]="provider"
(recordSaved)="updateProvider($event)"
this._deflesh();
}
+ permittedMode(): string {
+ // TODO - looks like fm-editor may have (via its modePerms) incompletely-implemented
+ // work to vary the mode depending on whether the user has permission
+ // to update a record, which would make this moot.
+ if (!this.providerRecord.currentProviderRecord()) {
+ return 'view';
+ }
+ return this.providerRecord.currentProviderRecord().canAdmin ? 'update' : 'view';
+ }
+
}
import {PcrudService} from '@eg/core/pcrud.service';
import {IdlService, IdlObject} from '@eg/core/idl.service';
import {NetService} from '@eg/core/net.service';
+import {PermService} from '@eg/core/perm.service';
export class ProviderSummary {
}
id: number;
record: IdlObject;
canDelete: boolean;
+ canAdmin: boolean;
constructor(record: IdlObject) {
this.id = Number(record.id());
this.record = record;
this.canDelete = false;
+ this.canAdmin = false;
}
}
private providerUpdatedSource = new Subject<number>();
providerUpdated$ = this.providerUpdatedSource.asObservable();
+ private permissions: any;
+
constructor(
private idl: IdlService,
private net: NetService,
- private pcrud: PcrudService
+ private pcrud: PcrudService,
+ private perm: PermService
) {
this.currentProvider = null;
+ this.loadPerms();
+ }
+
+ loadPerms() {
+ this.perm.hasWorkPermAt(['ADMIN_PROVIDER','MANAGE_PROVIDER'], true).then(permMap => {
+ this.permissions = permMap;
+ });
}
getProviderRecord(id: number): Observable<ProviderRecord> {
});
this.currentProvider = provider;
this.checkIfCanDelete(provider);
+ this.checkIfCanManage(provider);
return provider;
}));
}
});
}
+ checkIfCanManage(prov: ProviderRecord) {
+ if (Object.keys(this.permissions).length > 0 &&
+ this.permissions['ADMIN_PROVIDER'].includes(prov.record.owner())) {
+ prov.canAdmin = true;
+ }
+ }
+
current(): IdlObject {
return this.currentProvider ? this.currentProvider.record : null;
}
this.provider_holding_tag = provider.holding_tag();
this.provider_addresses = provider.addresses();
this.provider_san = provider.san();
- this.provider_edi_default = provider.edi_default() ? provider.edi_default().label() : '';
+ if (typeof provider.edi_default() === 'object') {
+ this.provider_edi_default = provider.edi_default() ? provider.edi_default().label() : '';
+ } else {
+ // not fleshed, presumably because user doesn't have
+ // permission to retrieve EDI accounts
+ this.provider_edi_default = '';
+ }
this.provider_active = provider.active();
this.provider_prepayment_required = provider.prepayment_required();
this.provider_url = provider.url();